Sync with NDK master.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f2f2355..a7f09fb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,12 +1,18 @@
 cmake_minimum_required(VERSION 2.8.12)
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
+option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" OFF)
+
 enable_testing()
 
 set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "prefix")
 
 project(glslang)
 
+if(ENABLE_AMD_EXTENSIONS)
+    add_definitions(-DAMD_EXTENSIONS)
+endif(ENABLE_AMD_EXTENSIONS)
+
 if(WIN32)
     set(CMAKE_DEBUG_POSTFIX "d")
     include(ChooseMSVCCRT.cmake)
@@ -19,8 +25,14 @@
 endif(WIN32)
 
 if(CMAKE_COMPILER_IS_GNUCXX)
+    add_definitions(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
+      -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable)
+    add_definitions(-Wno-reorder)  # disable this from -Wall, since it happens all over.
     add_definitions(-std=c++11)
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
+    add_definitions(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
+      -Wunused-parameter -Wunused-value  -Wunused-variable)
+    add_definitions(-Wno-reorder)  # disable this from -Wall, since it happens all over.
     add_definitions(-std=c++11)
 endif()
 
diff --git a/README.md b/README.md
index 3bdbae5..63ffdee 100644
--- a/README.md
+++ b/README.md
@@ -13,12 +13,15 @@
 
 An OpenGL and OpenGL ES shader front end and validator.
 
-There are two components:
+There are several components:
 
-1. A front-end library for programmatic parsing of GLSL/ESSL into an AST.
+1. A GLSL/ESSL front-end for reference validation and translation of GLSL/ESSL into an AST.
 
-2. A standalone wrapper, `glslangValidator`, that can be used as a shader
-   validation tool.
+2. An HLSL front-end for translation of a broad generic HLL into the AST.
+
+3. A SPIR-V back end for translating the AST to SPIR-V.
+
+4. A standalone wrapper, `glslangValidator`, that can be used as a command-line tool for the above.
 
 How to add a feature protected by a version/extension/stage/profile:  See the
 comment in `glslang/MachineIndependent/Versions.cpp`.
@@ -54,14 +57,21 @@
 
 ### Build steps
 
-#### 1) Check-Out External Projects
+#### 1) Check-Out this project 
 
 ```bash
-cd <the directory glslang was cloned to, External will be a subdirectory>
+cd <parent of where you want glslang to be>
+git clone git@github.com:KhronosGroup/glslang.git
+```
+
+#### 2) Check-Out External Projects
+
+```bash
+cd <the directory glslang was cloned to, "External" will be a subdirectory>
 git clone https://github.com/google/googletest.git External/googletest
 ```
 
-#### 2) Configure
+#### 3) Configure
 
 Assume the source directory is `$SOURCE_DIR` and
 the build directory is `$BUILD_DIR`:
@@ -84,7 +94,7 @@
 
 The CMake GUI also works for Windows (version 3.4.1 tested).
 
-#### 3) Build and Install
+#### 4) Build and Install
 
 ```bash
 # for Linux:
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 5c169b1..9628a82 100755
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -18,6 +18,11 @@
     doc.h
     disassemble.h)
 
+if(ENABLE_AMD_EXTENSIONS)
+    set(HEADERS
+        GLSL.ext.AMD.h)
+endif(ENABLE_AMD_EXTENSIONS)
+
 add_library(SPIRV STATIC ${SOURCES} ${HEADERS})
 set_property(TARGET SPIRV PROPERTY FOLDER glslang)
 
diff --git a/SPIRV/GLSL.ext.AMD.h b/SPIRV/GLSL.ext.AMD.h
new file mode 100644
index 0000000..633cea0
--- /dev/null
+++ b/SPIRV/GLSL.ext.AMD.h
@@ -0,0 +1,113 @@
+/*
+** 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 GLSLextAMD_H
+#define GLSLextAMD_H
+
+enum BuiltIn;
+enum Decoration;
+enum Op;
+
+static const int GLSLextAMDVersion = 100;
+static const int GLSLextAMDRevision = 1;
+
+// SPV_AMD_shader_ballot
+static const char* const E_SPV_AMD_shader_ballot = "SPV_AMD_shader_ballot";
+
+static const Op OpGroupIAddNonUniformAMD = static_cast<Op>(5000);
+static const Op OpGroupFAddNonUniformAMD = static_cast<Op>(5001);
+static const Op OpGroupFMinNonUniformAMD = static_cast<Op>(5002);
+static const Op OpGroupUMinNonUniformAMD = static_cast<Op>(5003);
+static const Op OpGroupSMinNonUniformAMD = static_cast<Op>(5004);
+static const Op OpGroupFMaxNonUniformAMD = static_cast<Op>(5005);
+static const Op OpGroupUMaxNonUniformAMD = static_cast<Op>(5006);
+static const Op OpGroupSMaxNonUniformAMD = static_cast<Op>(5007);
+
+enum ShaderBallotAMD {
+    ShaderBallotBadAMD = 0, // Don't use
+
+    SwizzleInvocationsAMD = 1,
+    SwizzleInvocationsMaskedAMD = 2,
+    WriteInvocationAMD = 3,
+    MbcntAMD = 4,
+
+    ShaderBallotCountAMD
+};
+
+// SPV_AMD_shader_trinary_minmax
+static const char* const E_SPV_AMD_shader_trinary_minmax = "SPV_AMD_shader_trinary_minmax";
+
+enum ShaderTrinaryMinMaxAMD {
+    ShaderTrinaryMinMaxBadAMD = 0, // Don't use
+
+    FMin3AMD = 1,
+    UMin3AMD = 2,
+    SMin3AMD = 3,
+    FMax3AMD = 4,
+    UMax3AMD = 5,
+    SMax3AMD = 6,
+    FMid3AMD = 7,
+    UMid3AMD = 8,
+    SMid3AMD = 9,
+
+    ShaderTrinaryMinMaxCountAMD
+};
+
+// SPV_AMD_shader_explicit_vertex_parameter
+static const char* const E_SPV_AMD_shader_explicit_vertex_parameter = "SPV_AMD_shader_explicit_vertex_parameter";
+
+static const BuiltIn BuiltInBaryCoordNoPerspAMD           = static_cast<BuiltIn>(4992);
+static const BuiltIn BuiltInBaryCoordNoPerspCentroidAMD   = static_cast<BuiltIn>(4993);
+static const BuiltIn BuiltInBaryCoordNoPerspSampleAMD     = static_cast<BuiltIn>(4994);
+static const BuiltIn BuiltInBaryCoordSmoothAMD            = static_cast<BuiltIn>(4995);
+static const BuiltIn BuiltInBaryCoordSmoothCentroidAMD    = static_cast<BuiltIn>(4996);
+static const BuiltIn BuiltInBaryCoordSmoothSampleAMD      = static_cast<BuiltIn>(4997);
+static const BuiltIn BuiltInBaryCoordPullModelAMD         = static_cast<BuiltIn>(4998);
+
+static const Decoration DecorationExplicitInterpAMD       = static_cast<Decoration>(4999);
+
+enum ShaderExplicitVertexParameterAMD {
+    ShaderExplicitVertexParameterBadAMD = 0, // Don't use
+
+    InterpolateAtVertexAMD = 1,
+
+    ShaderExplicitVertexParameterCountAMD
+};
+
+// SPV_AMD_gcn_shader
+static const char* const E_SPV_AMD_gcn_shader = "SPV_AMD_gcn_shader";
+
+enum GcnShaderAMD {
+    GcnShaderBadAMD = 0, // Don't use
+
+    CubeFaceIndexAMD = 1,
+    CubeFaceCoordAMD = 2,
+    TimeAMD = 3,
+
+    GcnShaderCountAMD
+};
+
+#endif  // #ifndef GLSLextAMD_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index dd11304..6aec9e6 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -43,6 +43,9 @@
 #include "SpvBuilder.h"
 namespace spv {
    #include "GLSL.std.450.h"
+#ifdef AMD_EXTENSIONS
+   #include "GLSL.ext.AMD.h"
+#endif
 }
 
 // Glslang includes
@@ -115,6 +118,9 @@
     spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
     spv::Id createSpvVariable(const glslang::TIntermSymbol*);
     spv::Id getSampledType(const glslang::TSampler&);
+    spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&);
+    spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult);
+    void convertSwizzle(const glslang::TIntermAggregate&, std::vector<unsigned>& swizzle);
     spv::Id convertGlslangToSpvType(const glslang::TType& type);
     spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&);
     spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct,
@@ -147,9 +153,9 @@
     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, spv::Id typeId, spv::Id operand);
+    spv::Id createInvocationsOperation(glslang::TOperator, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy);
     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::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
     void addDecoration(spv::Id id, spv::Decoration dec);
     void addDecoration(spv::Id id, spv::Decoration dec, unsigned value);
@@ -160,6 +166,7 @@
     bool isTrivialLeaf(const glslang::TIntermTyped* node);
     bool isTrivial(const glslang::TIntermTyped* node);
     spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right);
+    spv::Id getExtBuiltins(const char* name);
 
     spv::Function* shaderEntry;
     spv::Instruction* entryPoint;
@@ -175,6 +182,7 @@
     std::set<spv::Id> iOSet;           // all input/output variables from either static use or declaration of interface
     const glslang::TIntermediate* glslangIntermediate;
     spv::Id stdBuiltins;
+    std::unordered_map<const char*, spv::Id> extBuiltinMap;
 
     std::unordered_map<int, spv::Id> symbolValues;
     std::unordered_set<int> constReadOnlyParameters;  // set of formal function parameters that have glslang qualifier constReadOnly, so we know they are not local function "const" that are write-once
@@ -275,10 +283,10 @@
     }
 }
 
-// Translate glslang type to SPIR-V precision decorations.
-spv::Decoration TranslatePrecisionDecoration(const glslang::TType& type)
+// Translate glslang precision to SPIR-V precision decorations.
+spv::Decoration TranslatePrecisionDecoration(glslang::TPrecisionQualifier glslangPrecision)
 {
-    switch (type.getQualifier().precision) {
+    switch (glslangPrecision) {
     case glslang::EpqLow:    return spv::DecorationRelaxedPrecision;
     case glslang::EpqMedium: return spv::DecorationRelaxedPrecision;
     default:
@@ -286,6 +294,12 @@
     }
 }
 
+// Translate glslang type to SPIR-V precision decorations.
+spv::Decoration TranslatePrecisionDecoration(const glslang::TType& type)
+{
+    return TranslatePrecisionDecoration(type.getQualifier().precision);
+}
+
 // Translate glslang type to SPIR-V block decorations.
 spv::Decoration TranslateBlockDecoration(const glslang::TType& type)
 {
@@ -371,6 +385,10 @@
         return spv::DecorationNoPerspective;
     else if (qualifier.flat)
         return spv::DecorationFlat;
+#ifdef AMD_EXTENSIONS
+    else if (qualifier.explicitInterp)
+        return spv::DecorationExplicitInterpAMD;
+#endif
     else
         return spv::DecorationMax;
 }
@@ -508,6 +526,15 @@
         // TODO: Add SPIR-V builtin ID.
         logger->missingFunctionality("shader ballot");
         return spv::BuiltInMax;
+#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;
+#endif
     default:                               return spv::BuiltInMax;
     }
 }
@@ -628,6 +655,10 @@
         child.invariant = true;
     if (parent.nopersp)
         child.nopersp = true;
+#ifdef AMD_EXTENSIONS
+    if (parent.explicitInterp)
+        child.explicitInterp = true;
+#endif
     if (parent.flat)
         child.flat = true;
     if (parent.centroid)
@@ -915,7 +946,7 @@
                 spv::Id leftRValue = accessChainLoad(node->getLeft()->getType());
 
                 // do the operation
-                rValue = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getType()),
+                rValue = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getOperationPrecision()),
                                                TranslateNoContractionDecoration(node->getType().getQualifier()),
                                                convertGlslangToSpvType(node->getType()), leftRValue, rValue,
                                                node->getType().getBasicType());
@@ -1003,10 +1034,8 @@
     case glslang::EOpVectorSwizzle:
         {
             node->getLeft()->traverse(this);
-            glslang::TIntermSequence& swizzleSequence = node->getRight()->getAsAggregate()->getSequence();
             std::vector<unsigned> swizzle;
-            for (int i = 0; i < (int)swizzleSequence.size(); ++i)
-                swizzle.push_back(swizzleSequence[i]->getAsConstantUnion()->getConstArray()[0].getIConst());
+            convertSwizzle(*node->getRight()->getAsAggregate(), swizzle);
             builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()));
         }
         return false;
@@ -1042,7 +1071,7 @@
     spv::Id right = accessChainLoad(node->getRight()->getType());
 
     // get result
-    spv::Id result = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getType()),
+    spv::Id result = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getOperationPrecision()),
                                            TranslateNoContractionDecoration(node->getType().getQualifier()),
                                            convertGlslangToSpvType(node->getType()), left, right,
                                            node->getLeft()->getType().getBasicType());
@@ -1096,8 +1125,18 @@
 
     // Start by evaluating the operand
 
+    // Does it need a swizzle inversion?  If so, evaluation is inverted;
+    // operate first on the swizzle base, then apply the swizzle.
+    spv::Id invertedType = spv::NoType;
+    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? invertedType : convertGlslangToSpvType(node->getType()); };
+    if (node->getOp() == glslang::EOpInterpolateAtCentroid)
+        invertedType = getInvertedSwizzleType(*node->getOperand());
+
     builder.clearAccessChain();
-    node->getOperand()->traverse(this);
+    if (invertedType != spv::NoType)
+        node->getOperand()->getAsBinaryNode()->getLeft()->traverse(this);
+    else
+        node->getOperand()->traverse(this);
 
     spv::Id operand = spv::NoResult;
 
@@ -1109,18 +1148,21 @@
     else
         operand = accessChainLoad(node->getOperand()->getType());
 
-    spv::Decoration precision = TranslatePrecisionDecoration(node->getType());
+    spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
     spv::Decoration noContraction = TranslateNoContractionDecoration(node->getType().getQualifier());
 
     // it could be a conversion
     if (! result)
-        result = createConversion(node->getOp(), precision, noContraction, convertGlslangToSpvType(node->getType()), operand, node->getOperand()->getBasicType());
+        result = createConversion(node->getOp(), precision, noContraction, resultType(), operand, node->getOperand()->getBasicType());
 
     // if not, then possibly an operation
     if (! result)
-        result = createUnaryOperation(node->getOp(), precision, noContraction, convertGlslangToSpvType(node->getType()), operand, node->getOperand()->getBasicType());
+        result = createUnaryOperation(node->getOp(), precision, noContraction, resultType(), operand, node->getOperand()->getBasicType());
 
     if (result) {
+        if (invertedType)
+            result = createInvertedSwizzle(precision, *node->getOperand(), result);
+
         builder.clearAccessChain();
         builder.setAccessChainRValue(result);
 
@@ -1138,6 +1180,8 @@
             spv::Id one = 0;
             if (node->getBasicType() == glslang::EbtFloat)
                 one = builder.makeFloatConstant(1.0F);
+            else if (node->getBasicType() == glslang::EbtDouble)
+                one = builder.makeDoubleConstant(1.0);
             else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
                 one = builder.makeInt64Constant(1);
             else
@@ -1149,7 +1193,7 @@
             else
                 op = glslang::EOpSub;
 
-            spv::Id result = createBinaryOperation(op, TranslatePrecisionDecoration(node->getType()),
+            spv::Id result = createBinaryOperation(op, precision,
                                                    TranslateNoContractionDecoration(node->getType().getQualifier()),
                                                    convertGlslangToSpvType(node->getType()), operand, one,
                                                    node->getType().getBasicType());
@@ -1188,6 +1232,8 @@
         spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
 
     spv::Id result = spv::NoResult;
+    spv::Id invertedType = spv::NoType;  // to use to override the natural type of the node
+    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? invertedType : convertGlslangToSpvType(node->getType()); };
 
     // try texturing
     result = createImageTextureFunctionCall(node);
@@ -1209,7 +1255,7 @@
 
     assert(node->getOp());
 
-    spv::Decoration precision = TranslatePrecisionDecoration(node->getType());
+    spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
 
     switch (node->getOp()) {
     case glslang::EOpSequence:
@@ -1344,19 +1390,18 @@
     {
         std::vector<spv::Id> arguments;
         translateArguments(*node, arguments);
-        spv::Id resultTypeId = convertGlslangToSpvType(node->getType());
         spv::Id constructed;
         if (node->getOp() == glslang::EOpConstructTextureSampler)
-            constructed = builder.createOp(spv::OpSampledImage, resultTypeId, arguments);
+            constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments);
         else if (node->getOp() == glslang::EOpConstructStruct || node->getType().isArray()) {
             std::vector<spv::Id> constituents;
             for (int c = 0; c < (int)arguments.size(); ++c)
                 constituents.push_back(arguments[c]);
-            constructed = builder.createCompositeConstruct(resultTypeId, constituents);
+            constructed = builder.createCompositeConstruct(resultType(), constituents);
         } else if (isMatrix)
-            constructed = builder.createMatrixConstructor(precision, arguments, resultTypeId);
+            constructed = builder.createMatrixConstructor(precision, arguments, resultType());
         else
-            constructed = builder.createConstructor(precision, arguments, resultTypeId);
+            constructed = builder.createConstructor(precision, arguments, resultType());
 
         builder.clearAccessChain();
         builder.setAccessChainRValue(constructed);
@@ -1385,7 +1430,7 @@
         break;
     }
     case glslang::EOpMul:
-        // compontent-wise matrix multiply
+        // component-wise matrix multiply
         binOp = glslang::EOpMul;
         break;
     case glslang::EOpOuterProduct:
@@ -1454,7 +1499,7 @@
         spv::Id rightId = accessChainLoad(right->getType());
 
         result = createBinaryOperation(binOp, precision, TranslateNoContractionDecoration(node->getType().getQualifier()),
-                                       convertGlslangToSpvType(node->getType()), leftId, rightId,
+                                       resultType(), leftId, rightId,
                                        left->getType().getBasicType(), reduceComparison);
 
         // code above should only make binOp that exists in createBinaryOperation
@@ -1471,9 +1516,6 @@
     glslang::TIntermSequence& glslangOperands = node->getSequence();
     std::vector<spv::Id> operands;
     for (int arg = 0; arg < (int)glslangOperands.size(); ++arg) {
-        builder.clearAccessChain();
-        glslangOperands[arg]->traverse(this);
-
         // special case l-value operands; there are just a few
         bool lvalue = false;
         switch (node->getOp()) {
@@ -1484,8 +1526,18 @@
             break;
         case glslang::EOpInterpolateAtSample:
         case glslang::EOpInterpolateAtOffset:
-            if (arg == 0)
+#ifdef AMD_EXTENSIONS
+        case glslang::EOpInterpolateAtVertex:
+#endif
+            if (arg == 0) {
                 lvalue = true;
+
+                // Does it need a swizzle inversion?  If so, evaluation is inverted;
+                // operate first on the swizzle base, then apply the swizzle.
+                if (glslangOperands[0]->getAsOperator() && 
+                    glslangOperands[0]->getAsOperator()->getOp() == glslang::EOpVectorSwizzle)
+                    invertedType = convertGlslangToSpvType(glslangOperands[0]->getAsBinaryNode()->getLeft()->getType());
+            }
             break;
         case glslang::EOpAtomicAdd:
         case glslang::EOpAtomicMin:
@@ -1511,6 +1563,11 @@
         default:
             break;
         }
+        builder.clearAccessChain();
+        if (invertedType != spv::NoType && arg == 0)
+            glslangOperands[0]->getAsBinaryNode()->getLeft()->traverse(this);
+        else
+            glslangOperands[arg]->traverse(this);
         if (lvalue)
             operands.push_back(builder.accessChainGetLValue());
         else
@@ -1519,24 +1576,26 @@
 
     if (atomic) {
         // Handle all atomics
-        result = createAtomicOperation(node->getOp(), precision, convertGlslangToSpvType(node->getType()), operands, node->getBasicType());
+        result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
     } else {
         // Pass through to generic operations.
         switch (glslangOperands.size()) {
         case 0:
-            result = createNoArgOperation(node->getOp());
+            result = createNoArgOperation(node->getOp(), precision, resultType());
             break;
         case 1:
             result = createUnaryOperation(
                 node->getOp(), precision,
                 TranslateNoContractionDecoration(node->getType().getQualifier()),
-                convertGlslangToSpvType(node->getType()), operands.front(),
+                resultType(), operands.front(),
                 glslangOperands[0]->getAsTyped()->getBasicType());
             break;
         default:
-            result = createMiscOperation(node->getOp(), precision, convertGlslangToSpvType(node->getType()), operands, node->getBasicType());
+            result = createMiscOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
             break;
         }
+        if (invertedType)
+            result = createInvertedSwizzle(precision, *glslangOperands[0]->getAsBinaryNode(), result);
     }
 
     if (noReturnValue)
@@ -1788,6 +1847,36 @@
     }
 }
 
+// If node is a swizzle operation, return the type that should be used if
+// the swizzle base is first consumed by another operation, before the swizzle
+// is applied.
+spv::Id TGlslangToSpvTraverser::getInvertedSwizzleType(const glslang::TIntermTyped& node)
+{
+    if (node.getAsOperator() && 
+        node.getAsOperator()->getOp() == glslang::EOpVectorSwizzle)
+        return convertGlslangToSpvType(node.getAsBinaryNode()->getLeft()->getType());
+    else
+        return spv::NoType;
+}
+
+// When inverting a swizzle with a parent op, this function
+// will apply the swizzle operation to a completed parent operation.
+spv::Id TGlslangToSpvTraverser::createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped& node, spv::Id parentResult)
+{
+    std::vector<unsigned> swizzle;
+    convertSwizzle(*node.getAsBinaryNode()->getRight()->getAsAggregate(), swizzle);
+    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)
+{
+    const glslang::TIntermSequence& swizzleSequence = node.getSequence();
+    for (int i = 0; i < (int)swizzleSequence.size(); ++i)
+        swizzle.push_back(swizzleSequence[i]->getAsConstantUnion()->getConstArray()[0].getIConst());
+}
+
 // Convert from a glslang type to an SPV type, by calling into a
 // recursive version of this function. This establishes the inherited
 // layout state rooted from the top-level type.
@@ -2480,6 +2569,7 @@
     if (! node->isImage() && ! node->isTexture()) {
         return spv::NoResult;
     }
+    auto resultType = [&node,this]{ return convertGlslangToSpvType(node->getType()); };
 
     // Process a GLSL texturing op (will be SPV image)
     const glslang::TSampler sampler = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler()
@@ -2489,7 +2579,7 @@
         translateArguments(*node->getAsAggregate(), arguments);
     else
         translateArguments(*node->getAsUnaryNode(), arguments);
-    spv::Decoration precision = TranslatePrecisionDecoration(node->getType());
+    spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
 
     spv::Builder::TextureParameters params = { };
     params.sampler = arguments[0];
@@ -2546,7 +2636,7 @@
                 operands.push_back(spv::ImageOperandsSampleMask);
                 operands.push_back(*(opIt++));
             }
-            return builder.createOp(spv::OpImageRead, convertGlslangToSpvType(node->getType()), operands);
+            return builder.createOp(spv::OpImageRead, resultType(), operands);
         }
 
         operands.push_back(*(opIt++));
@@ -2557,7 +2647,7 @@
             }
             if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
                 builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
-            return builder.createOp(spv::OpImageRead, convertGlslangToSpvType(node->getType()), operands);
+            return builder.createOp(spv::OpImageRead, resultType(), operands);
         } else if (node->getOp() == glslang::EOpImageStore) {
             if (sampler.ms) {
                 operands.push_back(*(opIt + 1));
@@ -2581,7 +2671,7 @@
 
             // Create the return type that was a special structure
             spv::Id texelOut = *opIt;
-            spv::Id typeId0 = convertGlslangToSpvType(node->getType());
+            spv::Id typeId0 = resultType();
             spv::Id typeId1 = builder.getDerefTypeId(texelOut);
             spv::Id resultTypeId = builder.makeStructResultType(typeId0, typeId1);
 
@@ -2597,7 +2687,7 @@
             // as the first source operand, is required by SPIR-V atomic operations.
             operands.push_back(sampler.ms ? *(opIt++) : builder.makeUintConstant(0)); // For non-MS, the value should be 0
 
-            spv::Id resultTypeId = builder.makePointer(spv::StorageClassImage, convertGlslangToSpvType(node->getType()));
+            spv::Id resultTypeId = builder.makePointer(spv::StorageClassImage, resultType());
             spv::Id pointer = builder.createOp(spv::OpImageTexelPointer, resultTypeId, operands);
 
             std::vector<spv::Id> operands;
@@ -2605,7 +2695,7 @@
             for (; opIt != arguments.end(); ++opIt)
                 operands.push_back(*opIt);
 
-            return createAtomicOperation(node->getOp(), precision, convertGlslangToSpvType(node->getType()), operands, node->getBasicType());
+            return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
         }
     }
 
@@ -2745,7 +2835,7 @@
         }
     }
 
-    return builder.createTextureCall(precision, convertGlslangToSpvType(node->getType()), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params);
+    return builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params);
 }
 
 spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAggregate* node)
@@ -2776,7 +2866,7 @@
         builder.clearAccessChain();
         glslangArgs[a]->traverse(this);
         argTypes.push_back(&paramType);
-        // keep outputs as and opaque objects l-values, evaluate input-only as r-values
+        // keep outputs and opaque objects as l-values, evaluate input-only as r-values
         if (qualifiers[a] != glslang::EvqConstReadOnly || paramType.isOpaque()) {
             // save l-value
             lValues.push_back(builder.getAccessChain());
@@ -3169,6 +3259,7 @@
 spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy)
 {
     spv::Op unaryOp = spv::OpNop;
+    int extBuiltins = -1;
     int libCall = -1;
     bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
     bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
@@ -3448,7 +3539,32 @@
     case glslang::EOpAnyInvocation:
     case glslang::EOpAllInvocations:
     case glslang::EOpAllInvocationsEqual:
-        return createInvocationsOperation(op, typeId, operand);
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpMinInvocations:
+    case glslang::EOpMaxInvocations:
+    case glslang::EOpAddInvocations:
+    case glslang::EOpMinInvocationsNonUniform:
+    case glslang::EOpMaxInvocationsNonUniform:
+    case glslang::EOpAddInvocationsNonUniform:
+#endif
+        return createInvocationsOperation(op, typeId, operand, typeProxy);
+
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpMbcnt:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
+        libCall = spv::MbcntAMD;
+        break;
+
+    case glslang::EOpCubeFaceIndex:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_gcn_shader);
+        libCall = spv::CubeFaceIndexAMD;
+        break;
+
+    case glslang::EOpCubeFaceCoord:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_gcn_shader);
+        libCall = spv::CubeFaceCoordAMD;
+        break;
+#endif
 
     default:
         return 0;
@@ -3458,7 +3574,7 @@
     if (libCall >= 0) {
         std::vector<spv::Id> args;
         args.push_back(operand);
-        id = builder.createBuiltinCall(typeId, stdBuiltins, libCall, args);
+        id = builder.createBuiltinCall(typeId, extBuiltins >= 0 ? extBuiltins : stdBuiltins, libCall, args);
     } else {
         id = builder.createUnaryOp(unaryOp, typeId, operand);
     }
@@ -3765,12 +3881,20 @@
 }
 
 // Create group invocation operations.
-spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, spv::Id operand)
+spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy)
 {
+    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
+    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+
     builder.addCapability(spv::CapabilityGroups);
 
     std::vector<spv::Id> operands;
     operands.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)
+        operands.push_back(spv::GroupOperationReduce);
+#endif
     operands.push_back(operand);
 
     switch (op) {
@@ -3786,6 +3910,74 @@
         return builder.createBinOp(spv::OpLogicalOr, typeId, groupAll,
                                    builder.createUnaryOp(spv::OpLogicalNot, typeId, groupAny));
     }
+#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;
+            else {
+                if (isUnsigned)
+                    spvOp = spv::OpGroupUMin;
+                else
+                    spvOp = spv::OpGroupSMin;
+            }
+        } else if (op == glslang::EOpMaxInvocations) {
+            if (isFloat)
+                spvOp = spv::OpGroupFMax;
+            else {
+                if (isUnsigned)
+                    spvOp = spv::OpGroupUMax;
+                else
+                    spvOp = spv::OpGroupSMax;
+            }
+        } else {
+            if (isFloat)
+                spvOp = spv::OpGroupFAdd;
+            else
+                spvOp = spv::OpGroupIAdd;
+        }
+
+        return builder.createOp(spvOp, typeId, operands);
+    }
+    case glslang::EOpMinInvocationsNonUniform:
+    case glslang::EOpMaxInvocationsNonUniform:
+    case glslang::EOpAddInvocationsNonUniform:
+    {
+        spv::Op spvOp = spv::OpNop;
+        if (op == glslang::EOpMinInvocationsNonUniform) {
+            if (isFloat)
+                spvOp = spv::OpGroupFMinNonUniformAMD;
+            else {
+                if (isUnsigned)
+                    spvOp = spv::OpGroupUMinNonUniformAMD;
+                else
+                    spvOp = spv::OpGroupSMinNonUniformAMD;
+            }
+        }
+        else if (op == glslang::EOpMaxInvocationsNonUniform) {
+            if (isFloat)
+                spvOp = spv::OpGroupFMaxNonUniformAMD;
+            else {
+                if (isUnsigned)
+                    spvOp = spv::OpGroupUMaxNonUniformAMD;
+                else
+                    spvOp = spv::OpGroupSMaxNonUniformAMD;
+            }
+        }
+        else {
+            if (isFloat)
+                spvOp = spv::OpGroupFAddNonUniformAMD;
+            else
+                spvOp = spv::OpGroupIAddNonUniformAMD;
+        }
+
+        return builder.createOp(spvOp, typeId, operands);
+    }
+#endif
     default:
         logger->missingFunctionality("invocation operation");
         return spv::NoResult;
@@ -3798,6 +3990,7 @@
     bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
 
     spv::Op opCode = spv::OpNop;
+    int extBuiltins = -1;
     int libCall = -1;
     size_t consumedOperands = operands.size();
     spv::Id typeId0 = 0;
@@ -3941,6 +4134,60 @@
         libCall = spv::GLSLstd450Bad;
         break;
 
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpSwizzleInvocations:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
+        libCall = spv::SwizzleInvocationsAMD;
+        break;
+    case glslang::EOpSwizzleInvocationsMasked:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
+        libCall = spv::SwizzleInvocationsMaskedAMD;
+        break;
+    case glslang::EOpWriteInvocation:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
+        libCall = spv::WriteInvocationAMD;
+        break;
+
+    case glslang::EOpMin3:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_trinary_minmax);
+        if (isFloat)
+            libCall = spv::FMin3AMD;
+        else {
+            if (isUnsigned)
+                libCall = spv::UMin3AMD;
+            else
+                libCall = spv::SMin3AMD;
+        }
+        break;
+    case glslang::EOpMax3:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_trinary_minmax);
+        if (isFloat)
+            libCall = spv::FMax3AMD;
+        else {
+            if (isUnsigned)
+                libCall = spv::UMax3AMD;
+            else
+                libCall = spv::SMax3AMD;
+        }
+        break;
+    case glslang::EOpMid3:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_trinary_minmax);
+        if (isFloat)
+            libCall = spv::FMid3AMD;
+        else {
+            if (isUnsigned)
+                libCall = spv::UMid3AMD;
+            else
+                libCall = spv::SMid3AMD;
+        }
+        break;
+
+    case glslang::EOpInterpolateAtVertex:
+        extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
+        libCall = spv::InterpolateAtVertexAMD;
+        break;
+#endif
+
     default:
         return 0;
     }
@@ -3951,7 +4198,7 @@
         // Construct the call arguments, without modifying the original operands vector.
         // We might need the remaining arguments, e.g. in the EOpFrexp case.
         std::vector<spv::Id> callArguments(operands.begin(), operands.begin() + consumedOperands);
-        id = builder.createBuiltinCall(typeId, stdBuiltins, libCall, callArguments);
+        id = builder.createBuiltinCall(typeId, extBuiltins >= 0 ? extBuiltins : stdBuiltins, libCall, callArguments);
     } else {
         switch (consumedOperands) {
         case 0:
@@ -3997,8 +4244,8 @@
     return builder.setPrecision(id, precision);
 }
 
-// Intrinsics with no arguments, no return value, and no precision.
-spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op)
+// Intrinsics with no arguments (or no return value, and no precision).
+spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId)
 {
     // TODO: get the barrier operands correct
 
@@ -4045,6 +4292,14 @@
         // Control barrier with non-"None" semantic is also a memory barrier.
         builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask);
         return 0;
+#ifdef AMD_EXTENSIONS
+    case glslang::EOpTime:
+    {
+        std::vector<spv::Id> args; // Dummy arguments
+        spv::Id id = builder.createBuiltinCall(typeId, getExtBuiltins(spv::E_SPV_AMD_gcn_shader), spv::TimeAMD, args);
+        return builder.setPrecision(id, precision);
+    }
+#endif
     default:
         logger->missingFunctionality("unknown operation with no arguments");
         return 0;
@@ -4437,6 +4692,20 @@
     return builder.createOp(spv::OpPhi, boolTypeId, phiOperands);
 }
 
+// Return type Id of the imported set of extended instructions corresponds to the name.
+// Import this set if it has not been imported yet.
+spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name)
+{
+    if (extBuiltinMap.find(name) != extBuiltinMap.end())
+        return extBuiltinMap[name];
+    else {
+        builder.addExtensions(name);
+        spv::Id extBuiltins = builder.import(name);
+        extBuiltinMap[name] = extBuiltins;
+        return extBuiltins;
+    }
+}
+
 };  // end anonymous namespace
 
 namespace glslang {
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index 1bbd589..05f220a 100755
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -440,6 +440,8 @@
         for (int op = 0; numOperands > 0; ++op, --numOperands) {
             switch (spv::InstructionDesc[opCode].operands.getClass(op)) {
             case spv::OperandId:
+            case spv::OperandScope:
+            case spv::OperandMemorySemantics:
                 idFn(asId(word++));
                 break;
 
@@ -500,9 +502,7 @@
             case spv::OperandSelect:
             case spv::OperandLoop:
             case spv::OperandFunction:
-            case spv::OperandMemorySemantics:
             case spv::OperandMemoryAccess:
-            case spv::OperandScope:
             case spv::OperandGroupOperation:
             case spv::OperandKernelEnqueueFlags:
             case spv::OperandKernelProfilingInfo:
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index e5317ab..1411d16 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -2312,7 +2312,11 @@
         capInst.dump(out);
     }
 
-    // TBD: OpExtension ...
+    for (int e = 0; e < (int)extensions.size(); ++e) {
+        Instruction extInst(0, 0, OpExtension);
+        extInst.addStringOperand(extensions[e]);
+        extInst.dump(out);
+    }
 
     dumpInstructions(out, imports);
     Instruction memInst(0, 0, OpMemoryModel);
@@ -2331,10 +2335,10 @@
         sourceInst.addImmediateOperand(sourceVersion);
         sourceInst.dump(out);
     }
-    for (int e = 0; e < (int)extensions.size(); ++e) {
-        Instruction extInst(0, 0, OpSourceExtension);
-        extInst.addStringOperand(extensions[e]);
-        extInst.dump(out);
+    for (int e = 0; e < (int)sourceExtensions.size(); ++e) {
+        Instruction sourceExtInst(0, 0, OpSourceExtension);
+        sourceExtInst.addStringOperand(sourceExtensions[e]);
+        sourceExtInst.dump(out);
     }
     dumpInstructions(out, names);
     dumpInstructions(out, lines);
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index c7e3bcd..00e85b8 100755
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -70,7 +70,8 @@
         source = lang;
         sourceVersion = version;
     }
-    void addSourceExtension(const char* ext) { extensions.push_back(ext); }
+    void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }
+    void addExtensions(const char* ext) { extensions.push_back(ext); }
     Id import(const char*);
     void setMemoryModel(spv::AddressingModel addr, spv::MemoryModel mem)
     {
@@ -552,6 +553,7 @@
     SourceLanguage source;
     int sourceVersion;
     std::vector<const char*> extensions;
+    std::vector<const char*> sourceExtensions;
     AddressingModel addressModel;
     MemoryModel memoryModel;
     std::set<spv::Capability> capabilities;
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index 75688cb..b60b3ba 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -44,16 +44,25 @@
 #include <sstream>
 #include <cstring>
 
-namespace spv {
-    // Include C-based headers that don't have a namespace
-    #include "GLSL.std.450.h"
-}
-const char* GlslStd450DebugNames[spv::GLSLstd450Count];
-
 #include "disassemble.h"
 #include "doc.h"
 
 namespace spv {
+    extern "C" {
+        // Include C-based headers that don't have a namespace
+        #include "GLSL.std.450.h"
+#ifdef AMD_EXTENSIONS
+        #include "GLSL.ext.AMD.h"
+#endif
+    }
+}
+const char* GlslStd450DebugNames[spv::GLSLstd450Count];
+
+namespace spv {
+
+#ifdef AMD_EXTENSIONS
+static const char* GLSLextAMDGetDebugNames(const char*, unsigned);
+#endif
 
 static void Kill(std::ostream& out, const char* message)
 {
@@ -64,6 +73,9 @@
 // used to identify the extended instruction library imported when printing
 enum ExtInstSet {
     GLSL450Inst,
+#ifdef AMD_EXTENSIONS
+    GLSLextAMDInst,
+#endif
     OpenCLExtInst,
 };
 
@@ -446,14 +458,26 @@
             --numOperands;
             if (opCode == OpExtInst) {
                 ExtInstSet extInstSet = GLSL450Inst;
-                if (0 == memcmp("OpenCL", (const char*)(idDescriptor[stream[word-2]].c_str()), 6)) {
+                const char* name = idDescriptor[stream[word - 2]].c_str();
+                if (0 == memcmp("OpenCL", name, 6)) {
                     extInstSet = OpenCLExtInst;
+#ifdef AMD_EXTENSIONS
+                } else if (strcmp(spv::E_SPV_AMD_shader_ballot, name) == 0 ||
+                           strcmp(spv::E_SPV_AMD_shader_trinary_minmax, name) == 0 ||
+                           strcmp(spv::E_SPV_AMD_shader_explicit_vertex_parameter, name) == 0 ||
+                           strcmp(spv::E_SPV_AMD_gcn_shader, name) == 0) {
+                    extInstSet = GLSLextAMDInst;
+#endif
                 }
                 unsigned entrypoint = stream[word - 1];
                 if (extInstSet == GLSL450Inst) {
                     if (entrypoint < GLSLstd450Count) {
                         out << "(" << GlslStd450DebugNames[entrypoint] << ")";
                     }
+#ifdef AMD_EXTENSIONS
+                } else if (extInstSet == GLSLextAMDInst) {
+                    out << "(" << GLSLextAMDGetDebugNames(name, entrypoint) << ")";
+#endif
                 }
             }
             break;
@@ -561,6 +585,50 @@
     names[GLSLstd450InterpolateAtOffset]     = "InterpolateAtOffset";
 }
 
+#ifdef AMD_EXTENSIONS
+static const char* GLSLextAMDGetDebugNames(const char* name, unsigned entrypoint)
+{
+    if (strcmp(name, spv::E_SPV_AMD_shader_ballot) == 0) {
+        switch (entrypoint) {
+        case SwizzleInvocationsAMD:         return "SwizzleInvocationsAMD";
+        case SwizzleInvocationsMaskedAMD:   return "SwizzleInvocationsMaskedAMD";
+        case WriteInvocationAMD:            return "WriteInvocationAMD";
+        case MbcntAMD:                      return "MbcntAMD";
+        default:                            return "Bad";
+        }
+    } else if (strcmp(name, spv::E_SPV_AMD_shader_trinary_minmax) == 0) {
+        switch (entrypoint) {
+        case FMin3AMD:      return "FMin3AMD";
+        case UMin3AMD:      return "UMin3AMD";
+        case SMin3AMD:      return "SMin3AMD";
+        case FMax3AMD:      return "FMax3AMD";
+        case UMax3AMD:      return "UMax3AMD";
+        case SMax3AMD:      return "SMax3AMD";
+        case FMid3AMD:      return "FMid3AMD";
+        case UMid3AMD:      return "UMid3AMD";
+        case SMid3AMD:      return "SMid3AMD";
+        default:            return "Bad";
+        }
+    } else if (strcmp(name, spv::E_SPV_AMD_shader_explicit_vertex_parameter) == 0) {
+        switch (entrypoint) {
+        case InterpolateAtVertexAMD:    return "InterpolateAtVertexAMD";
+        default:                        return "Bad";
+        }
+    }
+    else if (strcmp(name, spv::E_SPV_AMD_gcn_shader) == 0) {
+        switch (entrypoint) {
+        case CubeFaceIndexAMD:      return "CubeFaceIndexAMD";
+        case CubeFaceCoordAMD:      return "CubeFaceCoordAMD";
+        case TimeAMD:               return "TimeAMD";
+        default:
+            break;
+        }
+    }
+
+    return "Bad";
+}
+#endif
+
 void Disassemble(std::ostream& out, const std::vector<unsigned int>& stream)
 {
     SpirvStream SpirvStream(out, stream);
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index fed3ec4..9b58b59 100755
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -45,6 +45,15 @@
 #include <string.h>
 #include <algorithm>
 
+#ifdef AMD_EXTENSIONS
+namespace spv {
+    extern "C" {
+        // Include C-based headers that don't have a namespace
+        #include "GLSL.ext.AMD.h"
+    }
+}
+#endif
+
 namespace spv {
 
 //
@@ -243,6 +252,10 @@
 
     case DecorationCeiling:
     default:  return "Bad";
+
+#ifdef AMD_EXTENSIONS
+    case 4999: return "ExplicitInterpAMD";
+#endif
     }
 }
 
@@ -298,6 +311,16 @@
 
     case BuiltInCeiling:
     default: return "Bad";
+
+#ifdef AMD_EXTENSIONS
+    case 4992: return "BaryCoordNoPerspAMD";
+    case 4993: return "BaryCoordNoPerspCentroidAMD";
+    case 4994: return "BaryCoordNoPerspSampleAMD";
+    case 4995: return "BaryCoordSmoothAMD";
+    case 4996: return "BaryCoordSmoothCentroidAMD";
+    case 4997: return "BaryCoordSmoothSampleAMD";
+    case 4998: return "BaryCoordPullModelAMD";
+#endif
     }
 }
 
@@ -1107,12 +1130,27 @@
     case OpcodeCeiling:
     default:
         return "Bad";
+
+#ifdef AMD_EXTENSIONS
+    case 5000: return "OpGroupIAddNonUniformAMD";
+    case 5001: return "OpGroupFAddNonUniformAMD";
+    case 5002: return "OpGroupFMinNonUniformAMD";
+    case 5003: return "OpGroupUMinNonUniformAMD";
+    case 5004: return "OpGroupSMinNonUniformAMD";
+    case 5005: return "OpGroupFMaxNonUniformAMD";
+    case 5006: return "OpGroupUMaxNonUniformAMD";
+    case 5007: return "OpGroupSMaxNonUniformAMD";
+#endif
     }
 }
 
 // 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];
 
@@ -2703,6 +2741,48 @@
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
+
+#ifdef AMD_EXTENSIONS
+    InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
+    InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
+
+    InstructionDesc[OpGroupFAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
+    InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
+
+    InstructionDesc[OpGroupUMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
+    InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
+
+    InstructionDesc[OpGroupSMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
+    InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupFMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
+    InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupUMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
+    InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupSMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
+    InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupFMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
+    InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
+#endif
 }
 
 }; // end spv namespace
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 63e9878..c014be2 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -596,6 +596,8 @@
         printf("SPIR-V Version %s\n", spirvVersion.c_str());
         printf("GLSL.std.450 Version %d, Revision %d\n", GLSLstd450Version, GLSLstd450Revision);
         printf("Khronos Tool ID %d\n", glslang::GetKhronosToolId());
+        printf("GL_KHR_vulkan_glsl version %d\n", 100);
+        printf("ARB_GL_gl_spirv version %d\n", 100);
         if (Worklist.empty())
             return ESuccess;
     }
diff --git a/Test/420.tese b/Test/420.tese
index 988a26d..4c3693a 100644
--- a/Test/420.tese
+++ b/Test/420.tese
@@ -51,6 +51,18 @@
     S3 s[2];

 };

 

+struct Single1 { int f; };

+Single1 single1 = { 10 };

+

+struct Single2 { uvec2 v; };

+Single2 single2 = { { 1, 2 } };

+

+struct Single3 { Single1 s1; };

+Single3 single3 = { { 3 } };

+

+struct Single4 { Single2 s1; };

+Single4 single4 = { { { 4u, 5u } } };

+

 const S4 constructed = S4(uvec2(1, 2), 

                           S3[2](S3(3.0, mat2x3(4.0)), 

                                 S3(5.0, mat2x3(6.0))));

diff --git a/Test/420.vert b/Test/420.vert
index 49035ea..ab28140 100644
--- a/Test/420.vert
+++ b/Test/420.vert
@@ -156,4 +156,6 @@
 

     levels = textureQueryLevels(samp1D);   // ERROR, not until 430

     levels = textureQueryLevels(samp1Ds);  // ERROR, not until 430

-}
\ No newline at end of file
+}

+

+layout(binding=0) writeonly uniform image1D badArray[];

diff --git a/Test/440.vert b/Test/440.vert
index ac946be..bfcdfd2 100644
--- a/Test/440.vert
+++ b/Test/440.vert
@@ -63,6 +63,17 @@
 layout(location = 50, component = 3) out int be;

 layout(location = 50, component = 0) out vec3 bf;

 

+layout(location = 51, component = 1) out double dfo;     // ERROR, odd component

+layout(location = 52, component = 2) out dvec2 dvo;      // ERROR, overflow

+layout(location = 53) out double dfo2;

+layout(location = 53, component = 2) out vec2 ffv2;      // okay, fits

+layout(location = 54) out dvec4 dvec4out;                // uses up location 55 too

+layout(location = 55) out float overf;                   // ERROR, collides with previous dvec4

+layout(location = 56, component = 1) out vec2 df2o;

+layout(location = 56, component = 3) out float sf2o;

+layout(location = 57, component = 2) out vec2 dv3o;

+layout(location = 57, component = 3) out float sf4o;     // ERROR, overlapping component

+

 out bblck1 {

     vec4 bbv;

 } bbinst1;

diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index 70b8934..edd65ab 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -241,7 +241,7 @@
 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)
+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)
@@ -278,7 +278,7 @@
 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)
+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)
@@ -299,17 +299,17 @@
 0:158  Function Definition: foo323433( (global void)
 0:158    Function Parameters: 
 0:160    Sequence
-0:160      textureLod (global lowp 4-component vector of float)
+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)
+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)
+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)
@@ -579,7 +579,7 @@
 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)
+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)
@@ -616,7 +616,7 @@
 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)
+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)
@@ -637,17 +637,17 @@
 0:158  Function Definition: foo323433( (global void)
 0:158    Function Parameters: 
 0:160    Sequence
-0:160      textureLod (global lowp 4-component vector of float)
+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)
+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)
+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)
diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out
index 78020e1..1736bf0 100644
--- a/Test/baseResults/150.tesc.out
+++ b/Test/baseResults/150.tesc.out
@@ -732,7 +732,7 @@
 ERROR: 0:29: '=' :  cannot convert from 'const float' to 'global 2-element array of 4-component vector of float'
 ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float
 ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from 'temp float' to 'temp structure{global float s, global float t}'
-ERROR: 0:58: 'initializer list' : wrong number of structure members 
+ERROR: 0:70: 'initializer list' : wrong number of structure members 
 ERROR: 13 compilation errors.  No code generated.
 
 
@@ -770,51 +770,73 @@
 0:42        5.000000
 0:42        5.200000
 0:42        1.100000
-0:67  Sequence
-0:67    move second child to first child (temp 3-component vector of float)
-0:67      'av3' (global 3-component vector of float)
-0:67      Construct vec3 (global 3-component vector of float)
-0:67        'vc1' (global float)
-0:67        'vc2' (global float)
-0:67        'vc3' (global float)
-0:68  Sequence
-0:68    move second child to first child (temp 3-component vector of float)
-0:68      'bv3' (global 3-component vector of float)
-0:68      Construct vec3 (temp 3-component vector of float)
-0:68        'vc1' (global float)
-0:68        'vc2' (global float)
-0:68        'vc3' (global float)
-0:70  Function Definition: main( (global void)
-0:70    Function Parameters: 
-0:72    Sequence
-0:72      MemoryBarrier (global void)
-0:74      Test condition and select (temp void)
-0:74        Condition
-0:74        Compare Equal (temp bool)
-0:74          Constant:
-0:74            1 (const uint)
-0:74            2 (const uint)
-0:74            3.000000
-0:74            4.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            4.000000
-0:74            0.000000
-0:74            5.000000
-0:74            6.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            6.000000
-0:74            0.000000
-0:74          'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
-0:74        true case is null
-0:76      Test condition and select (temp void)
-0:76        Condition
-0:76        Constant:
-0:76          true (const bool)
-0:76        true case is null
+0:55  Sequence
+0:55    move second child to first child (temp structure{global int f})
+0:55      'single1' (global structure{global int f})
+0:55      Constant:
+0:55        10 (const int)
+0:58  Sequence
+0:58    move second child to first child (temp structure{global 2-component vector of uint v})
+0:58      'single2' (global structure{global 2-component vector of uint v})
+0:58      Constant:
+0:58        1 (const uint)
+0:58        2 (const uint)
+0:61  Sequence
+0:61    move second child to first child (temp structure{global structure{global int f} s1})
+0:61      'single3' (global structure{global structure{global int f} s1})
+0:61      Constant:
+0:61        3 (const int)
+0:64  Sequence
+0:64    move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
+0:64      'single4' (global structure{global structure{global 2-component vector of uint v} s1})
+0:64      Constant:
+0:64        4 (const uint)
+0:64        5 (const uint)
+0:79  Sequence
+0:79    move second child to first child (temp 3-component vector of float)
+0:79      'av3' (global 3-component vector of float)
+0:79      Construct vec3 (global 3-component vector of float)
+0:79        'vc1' (global float)
+0:79        'vc2' (global float)
+0:79        'vc3' (global float)
+0:80  Sequence
+0:80    move second child to first child (temp 3-component vector of float)
+0:80      'bv3' (global 3-component vector of float)
+0:80      Construct vec3 (temp 3-component vector of float)
+0:80        'vc1' (global float)
+0:80        'vc2' (global float)
+0:80        'vc3' (global float)
+0:82  Function Definition: main( (global void)
+0:82    Function Parameters: 
+0:84    Sequence
+0:84      MemoryBarrier (global void)
+0:86      Test condition and select (temp void)
+0:86        Condition
+0:86        Compare Equal (temp bool)
+0:86          Constant:
+0:86            1 (const uint)
+0:86            2 (const uint)
+0:86            3.000000
+0:86            4.000000
+0:86            0.000000
+0:86            0.000000
+0:86            0.000000
+0:86            4.000000
+0:86            0.000000
+0:86            5.000000
+0:86            6.000000
+0:86            0.000000
+0:86            0.000000
+0:86            0.000000
+0:86            6.000000
+0:86            0.000000
+0:86          'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
+0:86        true case is null
+0:88      Test condition and select (temp void)
+0:88        Condition
+0:88        Constant:
+0:88          true (const bool)
+0:88        true case is null
 0:?   Linker Objects
 0:?     'a' (const 2X2 matrix of float)
 0:?       1.000000
@@ -840,6 +862,10 @@
 0:?     'c3' (global 4X2 matrix of float)
 0:?     'd2' (global implicitly-sized array of structure{global float s, global float t})
 0:?     'b5' (global 5-element array of float)
+0:?     'single1' (global structure{global int f})
+0:?     'single2' (global structure{global 2-component vector of uint v})
+0:?     'single3' (global structure{global structure{global int f} s1})
+0:?     'single4' (global structure{global structure{global 2-component vector of uint v} s1})
 0:?     'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
 0:?       1 (const uint)
 0:?       2 (const uint)
@@ -1524,51 +1550,73 @@
 0:42        5.000000
 0:42        5.200000
 0:42        1.100000
-0:67  Sequence
-0:67    move second child to first child (temp 3-component vector of float)
-0:67      'av3' (global 3-component vector of float)
-0:67      Construct vec3 (global 3-component vector of float)
-0:67        'vc1' (global float)
-0:67        'vc2' (global float)
-0:67        'vc3' (global float)
-0:68  Sequence
-0:68    move second child to first child (temp 3-component vector of float)
-0:68      'bv3' (global 3-component vector of float)
-0:68      Construct vec3 (temp 3-component vector of float)
-0:68        'vc1' (global float)
-0:68        'vc2' (global float)
-0:68        'vc3' (global float)
-0:70  Function Definition: main( (global void)
-0:70    Function Parameters: 
-0:72    Sequence
-0:72      MemoryBarrier (global void)
-0:74      Test condition and select (temp void)
-0:74        Condition
-0:74        Compare Equal (temp bool)
-0:74          Constant:
-0:74            1 (const uint)
-0:74            2 (const uint)
-0:74            3.000000
-0:74            4.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            4.000000
-0:74            0.000000
-0:74            5.000000
-0:74            6.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            6.000000
-0:74            0.000000
-0:74          'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
-0:74        true case is null
-0:76      Test condition and select (temp void)
-0:76        Condition
-0:76        Constant:
-0:76          true (const bool)
-0:76        true case is null
+0:55  Sequence
+0:55    move second child to first child (temp structure{global int f})
+0:55      'single1' (global structure{global int f})
+0:55      Constant:
+0:55        10 (const int)
+0:58  Sequence
+0:58    move second child to first child (temp structure{global 2-component vector of uint v})
+0:58      'single2' (global structure{global 2-component vector of uint v})
+0:58      Constant:
+0:58        1 (const uint)
+0:58        2 (const uint)
+0:61  Sequence
+0:61    move second child to first child (temp structure{global structure{global int f} s1})
+0:61      'single3' (global structure{global structure{global int f} s1})
+0:61      Constant:
+0:61        3 (const int)
+0:64  Sequence
+0:64    move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
+0:64      'single4' (global structure{global structure{global 2-component vector of uint v} s1})
+0:64      Constant:
+0:64        4 (const uint)
+0:64        5 (const uint)
+0:79  Sequence
+0:79    move second child to first child (temp 3-component vector of float)
+0:79      'av3' (global 3-component vector of float)
+0:79      Construct vec3 (global 3-component vector of float)
+0:79        'vc1' (global float)
+0:79        'vc2' (global float)
+0:79        'vc3' (global float)
+0:80  Sequence
+0:80    move second child to first child (temp 3-component vector of float)
+0:80      'bv3' (global 3-component vector of float)
+0:80      Construct vec3 (temp 3-component vector of float)
+0:80        'vc1' (global float)
+0:80        'vc2' (global float)
+0:80        'vc3' (global float)
+0:82  Function Definition: main( (global void)
+0:82    Function Parameters: 
+0:84    Sequence
+0:84      MemoryBarrier (global void)
+0:86      Test condition and select (temp void)
+0:86        Condition
+0:86        Compare Equal (temp bool)
+0:86          Constant:
+0:86            1 (const uint)
+0:86            2 (const uint)
+0:86            3.000000
+0:86            4.000000
+0:86            0.000000
+0:86            0.000000
+0:86            0.000000
+0:86            4.000000
+0:86            0.000000
+0:86            5.000000
+0:86            6.000000
+0:86            0.000000
+0:86            0.000000
+0:86            0.000000
+0:86            6.000000
+0:86            0.000000
+0:86          'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
+0:86        true case is null
+0:88      Test condition and select (temp void)
+0:88        Condition
+0:88        Constant:
+0:88          true (const bool)
+0:88        true case is null
 0:?   Linker Objects
 0:?     'patchIn' (patch in 4-component vector of float)
 0:?     'anon@0' (out block{gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 3-element array of float ClipDistance gl_ClipDistance})
@@ -1616,6 +1664,10 @@
 0:?     'c3' (global 4X2 matrix of float)
 0:?     'd2' (global 1-element array of structure{global float s, global float t})
 0:?     'b5' (global 5-element array of float)
+0:?     'single1' (global structure{global int f})
+0:?     'single2' (global structure{global 2-component vector of uint v})
+0:?     'single3' (global structure{global structure{global int f} s1})
+0:?     'single4' (global structure{global structure{global 2-component vector of uint v} s1})
 0:?     'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
 0:?       1 (const uint)
 0:?       2 (const uint)
diff --git a/Test/baseResults/300.frag.out b/Test/baseResults/300.frag.out
index a0c2615..2a3341a 100644
--- a/Test/baseResults/300.frag.out
+++ b/Test/baseResults/300.frag.out
@@ -72,20 +72,20 @@
 0:59            1.200000
 0:60      move second child to first child (temp lowp float)
 0:60        'f' (temp lowp float)
-0:60        textureOffset (global lowp float)
+0:60        textureOffset (global lowp float, operation at mediump)
 0:60          's2DShadow' (uniform lowp sampler2DShadow)
 0:60          'c3D' (smooth in lowp 3-component vector of float)
 0:60          'ic2D' (flat in mediump 2-component vector of int)
 0:60          'c1D' (smooth in lowp float)
 0:61      move second child to first child (temp lowp 4-component vector of float)
 0:61        'v' (temp lowp 4-component vector of float)
-0:61        textureFetch (global lowp 4-component vector of float)
+0:61        textureFetch (global lowp 4-component vector of float, operation at mediump)
 0:61          's3D' (uniform lowp sampler3D)
 0:61          'ic3D' (flat in mediump 3-component vector of int)
 0:61          'ic1D' (flat in mediump int)
 0:62      move second child to first child (temp lowp 4-component vector of float)
 0:62        'v' (temp lowp 4-component vector of float)
-0:62        textureFetchOffset (global lowp 4-component vector of float)
+0:62        textureFetchOffset (global lowp 4-component vector of float, operation at mediump)
 0:62          direct index (temp lowp sampler2D)
 0:62            'arrayedSampler' (uniform 5-element array of lowp sampler2D)
 0:62            Constant:
@@ -96,14 +96,14 @@
 0:62          'ic2D' (flat in mediump 2-component vector of int)
 0:63      move second child to first child (temp lowp float)
 0:63        'f' (temp lowp float)
-0:63        textureLodOffset (global lowp float)
+0:63        textureLodOffset (global lowp float, operation at mediump)
 0:63          's2DShadow' (uniform lowp sampler2DShadow)
 0:63          'c3D' (smooth in lowp 3-component vector of float)
 0:63          'c1D' (smooth in lowp float)
 0:63          'ic2D' (flat in mediump 2-component vector of int)
 0:64      move second child to first child (temp lowp 4-component vector of float)
 0:64        'v' (temp lowp 4-component vector of float)
-0:64        textureProjLodOffset (global lowp 4-component vector of float)
+0:64        textureProjLodOffset (global lowp 4-component vector of float, operation at mediump)
 0:64          's2D' (uniform lowp sampler2D)
 0:64          'c3D' (smooth in lowp 3-component vector of float)
 0:64          'c1D' (smooth in lowp float)
@@ -117,7 +117,7 @@
 0:65          'c3D' (smooth in lowp 3-component vector of float)
 0:66      move second child to first child (temp lowp float)
 0:66        'f' (temp lowp float)
-0:66        textureGradOffset (global lowp float)
+0:66        textureGradOffset (global lowp float, operation at mediump)
 0:66          's2DArrayShadow' (uniform lowp sampler2DArrayShadow)
 0:66          'c4D' (smooth temp lowp 4-component vector of float)
 0:66          'c2D' (smooth in lowp 2-component vector of float)
@@ -132,7 +132,7 @@
 0:67          'c3D' (smooth in lowp 3-component vector of float)
 0:68      move second child to first child (temp lowp 4-component vector of float)
 0:68        'v' (temp lowp 4-component vector of float)
-0:68        textureProjGradOffset (global lowp 4-component vector of float)
+0:68        textureProjGradOffset (global lowp 4-component vector of float, operation at mediump)
 0:68          's2D' (uniform lowp sampler2D)
 0:68          'c3D' (smooth in lowp 3-component vector of float)
 0:68          'c2D' (smooth in lowp 2-component vector of float)
@@ -152,7 +152,7 @@
 0:72          'c2D' (smooth in lowp 2-component vector of float)
 0:73      move second child to first child (temp mediump 4-component vector of int)
 0:73        'iv' (temp mediump 4-component vector of int)
-0:73        textureProjOffset (global lowp 4-component vector of int)
+0:73        textureProjOffset (global lowp 4-component vector of int, operation at mediump)
 0:73          'is2D' (uniform lowp isampler2D)
 0:73          'c4D' (smooth temp lowp 4-component vector of float)
 0:73          'ic2D' (flat in mediump 2-component vector of int)
@@ -184,7 +184,7 @@
 0:77          'c1D' (smooth in lowp float)
 0:78      move second child to first child (temp mediump 4-component vector of int)
 0:78        'iv' (temp mediump 4-component vector of int)
-0:78        textureFetch (global lowp 4-component vector of int)
+0:78        textureFetch (global lowp 4-component vector of int, operation at mediump)
 0:78          'is2DArray' (uniform lowp isampler2DArray)
 0:78          'ic3D' (flat in mediump 3-component vector of int)
 0:78          'ic1D' (flat in mediump int)
@@ -196,7 +196,7 @@
 0:80              0 (const int)
 0:80            Constant:
 0:80              1 (const int)
-0:80        textureSize (global highp 2-component vector of int)
+0:80        textureSize (global highp 2-component vector of int, operation at lowp)
 0:80          'sCubeShadow' (uniform lowp samplerCubeShadow)
 0:80          Constant:
 0:80            2 (const int)
@@ -428,20 +428,20 @@
 0:59            1.200000
 0:60      move second child to first child (temp lowp float)
 0:60        'f' (temp lowp float)
-0:60        textureOffset (global lowp float)
+0:60        textureOffset (global lowp float, operation at mediump)
 0:60          's2DShadow' (uniform lowp sampler2DShadow)
 0:60          'c3D' (smooth in lowp 3-component vector of float)
 0:60          'ic2D' (flat in mediump 2-component vector of int)
 0:60          'c1D' (smooth in lowp float)
 0:61      move second child to first child (temp lowp 4-component vector of float)
 0:61        'v' (temp lowp 4-component vector of float)
-0:61        textureFetch (global lowp 4-component vector of float)
+0:61        textureFetch (global lowp 4-component vector of float, operation at mediump)
 0:61          's3D' (uniform lowp sampler3D)
 0:61          'ic3D' (flat in mediump 3-component vector of int)
 0:61          'ic1D' (flat in mediump int)
 0:62      move second child to first child (temp lowp 4-component vector of float)
 0:62        'v' (temp lowp 4-component vector of float)
-0:62        textureFetchOffset (global lowp 4-component vector of float)
+0:62        textureFetchOffset (global lowp 4-component vector of float, operation at mediump)
 0:62          direct index (temp lowp sampler2D)
 0:62            'arrayedSampler' (uniform 5-element array of lowp sampler2D)
 0:62            Constant:
@@ -452,14 +452,14 @@
 0:62          'ic2D' (flat in mediump 2-component vector of int)
 0:63      move second child to first child (temp lowp float)
 0:63        'f' (temp lowp float)
-0:63        textureLodOffset (global lowp float)
+0:63        textureLodOffset (global lowp float, operation at mediump)
 0:63          's2DShadow' (uniform lowp sampler2DShadow)
 0:63          'c3D' (smooth in lowp 3-component vector of float)
 0:63          'c1D' (smooth in lowp float)
 0:63          'ic2D' (flat in mediump 2-component vector of int)
 0:64      move second child to first child (temp lowp 4-component vector of float)
 0:64        'v' (temp lowp 4-component vector of float)
-0:64        textureProjLodOffset (global lowp 4-component vector of float)
+0:64        textureProjLodOffset (global lowp 4-component vector of float, operation at mediump)
 0:64          's2D' (uniform lowp sampler2D)
 0:64          'c3D' (smooth in lowp 3-component vector of float)
 0:64          'c1D' (smooth in lowp float)
@@ -473,7 +473,7 @@
 0:65          'c3D' (smooth in lowp 3-component vector of float)
 0:66      move second child to first child (temp lowp float)
 0:66        'f' (temp lowp float)
-0:66        textureGradOffset (global lowp float)
+0:66        textureGradOffset (global lowp float, operation at mediump)
 0:66          's2DArrayShadow' (uniform lowp sampler2DArrayShadow)
 0:66          'c4D' (smooth temp lowp 4-component vector of float)
 0:66          'c2D' (smooth in lowp 2-component vector of float)
@@ -488,7 +488,7 @@
 0:67          'c3D' (smooth in lowp 3-component vector of float)
 0:68      move second child to first child (temp lowp 4-component vector of float)
 0:68        'v' (temp lowp 4-component vector of float)
-0:68        textureProjGradOffset (global lowp 4-component vector of float)
+0:68        textureProjGradOffset (global lowp 4-component vector of float, operation at mediump)
 0:68          's2D' (uniform lowp sampler2D)
 0:68          'c3D' (smooth in lowp 3-component vector of float)
 0:68          'c2D' (smooth in lowp 2-component vector of float)
@@ -508,7 +508,7 @@
 0:72          'c2D' (smooth in lowp 2-component vector of float)
 0:73      move second child to first child (temp mediump 4-component vector of int)
 0:73        'iv' (temp mediump 4-component vector of int)
-0:73        textureProjOffset (global lowp 4-component vector of int)
+0:73        textureProjOffset (global lowp 4-component vector of int, operation at mediump)
 0:73          'is2D' (uniform lowp isampler2D)
 0:73          'c4D' (smooth temp lowp 4-component vector of float)
 0:73          'ic2D' (flat in mediump 2-component vector of int)
@@ -540,7 +540,7 @@
 0:77          'c1D' (smooth in lowp float)
 0:78      move second child to first child (temp mediump 4-component vector of int)
 0:78        'iv' (temp mediump 4-component vector of int)
-0:78        textureFetch (global lowp 4-component vector of int)
+0:78        textureFetch (global lowp 4-component vector of int, operation at mediump)
 0:78          'is2DArray' (uniform lowp isampler2DArray)
 0:78          'ic3D' (flat in mediump 3-component vector of int)
 0:78          'ic1D' (flat in mediump int)
@@ -552,7 +552,7 @@
 0:80              0 (const int)
 0:80            Constant:
 0:80              1 (const int)
-0:80        textureSize (global highp 2-component vector of int)
+0:80        textureSize (global highp 2-component vector of int, operation at lowp)
 0:80          'sCubeShadow' (uniform lowp samplerCubeShadow)
 0:80          Constant:
 0:80            2 (const int)
diff --git a/Test/baseResults/300.vert.out b/Test/baseResults/300.vert.out
index 80745ab..66a0651 100644
--- a/Test/baseResults/300.vert.out
+++ b/Test/baseResults/300.vert.out
@@ -175,7 +175,7 @@
 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)
+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)
@@ -184,7 +184,7 @@
 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)
+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)
@@ -193,7 +193,7 @@
 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)
+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:
@@ -217,7 +217,7 @@
 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)
+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:
@@ -459,7 +459,7 @@
 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)
+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)
@@ -468,7 +468,7 @@
 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)
+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)
@@ -477,7 +477,7 @@
 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)
+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:
@@ -501,7 +501,7 @@
 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)
+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:
diff --git a/Test/baseResults/300BuiltIns.frag.out b/Test/baseResults/300BuiltIns.frag.out
index c2f12c9..a3bab69 100644
--- a/Test/baseResults/300BuiltIns.frag.out
+++ b/Test/baseResults/300BuiltIns.frag.out
@@ -128,12 +128,12 @@
 0:52      Sequence
 0:52        move second child to first child (temp 2-component vector of bool)
 0:52          'b10' (temp 2-component vector of bool)
-0:52          isnan (global 2-component vector of bool)
+0:52          isnan (global 2-component vector of bool, operation at mediump)
 0:52            'v2a' (global mediump 2-component vector of float)
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of bool)
 0:53          'b11' (temp 4-component vector of bool)
-0:53          isinf (global 4-component vector of bool)
+0:53          isinf (global 4-component vector of bool, operation at mediump)
 0:53            'v4' (global mediump 4-component vector of float)
 0:56      Sequence
 0:56        move second child to first child (temp highp int)
@@ -158,17 +158,17 @@
 0:62      Sequence
 0:62        move second child to first child (temp highp uint)
 0:62          'u19' (temp mediump uint)
-0:62          packSnorm2x16 (global highp uint)
+0:62          packSnorm2x16 (global highp uint, operation at mediump)
 0:62            'v2a' (global mediump 2-component vector of float)
 0:63      Sequence
-0:63        move second child to first child (temp mediump 2-component vector of float)
+0:63        move second child to first child (temp highp 2-component vector of float)
 0:63          'v20' (temp mediump 2-component vector of float)
-0:63          unpackSnorm2x16 (global mediump 2-component vector of float)
+0:63          unpackSnorm2x16 (global highp 2-component vector of float)
 0:63            'uy' (global mediump uint)
 0:64      Sequence
 0:64        move second child to first child (temp highp uint)
 0:64          'u15' (temp mediump uint)
-0:64          packUnorm2x16 (global highp uint)
+0:64          packUnorm2x16 (global highp uint, operation at mediump)
 0:64            'v2a' (global mediump 2-component vector of float)
 0:65      Sequence
 0:65        move second child to first child (temp highp 2-component vector of float)
@@ -178,12 +178,12 @@
 0:66      Sequence
 0:66        move second child to first child (temp highp uint)
 0:66          'u17' (temp mediump uint)
-0:66          packHalf2x16 (global highp uint)
+0:66          packHalf2x16 (global highp uint, operation at mediump)
 0:66            'v2b' (global mediump 2-component vector of float)
 0:67      Sequence
 0:67        move second child to first child (temp mediump 2-component vector of float)
 0:67          'v18' (temp mediump 2-component vector of float)
-0:67          unpackHalf2x16 (global mediump 2-component vector of float)
+0:67          unpackHalf2x16 (global mediump 2-component vector of float, operation at highp)
 0:67            'uy' (global mediump uint)
 0:70      Constant:
 0:70        0.000000
@@ -335,12 +335,12 @@
 0:52      Sequence
 0:52        move second child to first child (temp 2-component vector of bool)
 0:52          'b10' (temp 2-component vector of bool)
-0:52          isnan (global 2-component vector of bool)
+0:52          isnan (global 2-component vector of bool, operation at mediump)
 0:52            'v2a' (global mediump 2-component vector of float)
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of bool)
 0:53          'b11' (temp 4-component vector of bool)
-0:53          isinf (global 4-component vector of bool)
+0:53          isinf (global 4-component vector of bool, operation at mediump)
 0:53            'v4' (global mediump 4-component vector of float)
 0:56      Sequence
 0:56        move second child to first child (temp highp int)
@@ -365,17 +365,17 @@
 0:62      Sequence
 0:62        move second child to first child (temp highp uint)
 0:62          'u19' (temp mediump uint)
-0:62          packSnorm2x16 (global highp uint)
+0:62          packSnorm2x16 (global highp uint, operation at mediump)
 0:62            'v2a' (global mediump 2-component vector of float)
 0:63      Sequence
-0:63        move second child to first child (temp mediump 2-component vector of float)
+0:63        move second child to first child (temp highp 2-component vector of float)
 0:63          'v20' (temp mediump 2-component vector of float)
-0:63          unpackSnorm2x16 (global mediump 2-component vector of float)
+0:63          unpackSnorm2x16 (global highp 2-component vector of float)
 0:63            'uy' (global mediump uint)
 0:64      Sequence
 0:64        move second child to first child (temp highp uint)
 0:64          'u15' (temp mediump uint)
-0:64          packUnorm2x16 (global highp uint)
+0:64          packUnorm2x16 (global highp uint, operation at mediump)
 0:64            'v2a' (global mediump 2-component vector of float)
 0:65      Sequence
 0:65        move second child to first child (temp highp 2-component vector of float)
@@ -385,12 +385,12 @@
 0:66      Sequence
 0:66        move second child to first child (temp highp uint)
 0:66          'u17' (temp mediump uint)
-0:66          packHalf2x16 (global highp uint)
+0:66          packHalf2x16 (global highp uint, operation at mediump)
 0:66            'v2b' (global mediump 2-component vector of float)
 0:67      Sequence
 0:67        move second child to first child (temp mediump 2-component vector of float)
 0:67          'v18' (temp mediump 2-component vector of float)
-0:67          unpackHalf2x16 (global mediump 2-component vector of float)
+0:67          unpackHalf2x16 (global mediump 2-component vector of float, operation at highp)
 0:67            'uy' (global mediump uint)
 0:70      Constant:
 0:70        0.000000
diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out
index b56f070..9a5e4e8 100644
--- a/Test/baseResults/310.comp.out
+++ b/Test/baseResults/310.comp.out
@@ -122,7 +122,7 @@
 0:61            2 (const int)
 0:61        Constant:
 0:61          4.700000
-0:62      array length (temp highp int)
+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:
@@ -178,9 +178,9 @@
 0:92          0 (const int)
 0:92          0 (const int)
 0:92          0 (const int)
-0:93      imageLoad (global highp 4-component vector of float)
+0:93      imageLoad (global mediump 4-component vector of float)
 0:93        'img2Drgba' (layout(rgba32f ) readonly uniform mediump image2D)
-0:93        Construct ivec2 (temp highp 2-component vector of int)
+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)
@@ -549,7 +549,7 @@
 0:61            2 (const int)
 0:61        Constant:
 0:61          4.700000
-0:62      array length (temp highp int)
+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:
@@ -605,9 +605,9 @@
 0:92          0 (const int)
 0:92          0 (const int)
 0:92          0 (const int)
-0:93      imageLoad (global highp 4-component vector of float)
+0:93      imageLoad (global mediump 4-component vector of float)
 0:93        'img2Drgba' (layout(rgba32f ) readonly uniform mediump image2D)
-0:93        Construct ivec2 (temp highp 2-component vector of int)
+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)
diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out
index 905a9ca..6cfd3f4 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -353,7 +353,7 @@
 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)
+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)
@@ -361,19 +361,19 @@
 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)
+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)
+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)
+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)
+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: 
@@ -1234,7 +1234,7 @@
 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)
+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)
@@ -1242,19 +1242,19 @@
 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)
+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)
+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)
+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)
+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: 
diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out
index 678c3e1..84a50e8 100644
--- a/Test/baseResults/310.vert.out
+++ b/Test/baseResults/310.vert.out
@@ -125,12 +125,12 @@
 0:17          'u1' (temp highp uint)
 0:17          'u1' (temp highp uint)
 0:17          'u1' (temp highp uint)
-0:19      uMulExtended (global void)
+0:19      uMulExtended (global highp void)
 0:19        'u4' (temp highp 4-component vector of uint)
 0:19        'u4' (temp highp 4-component vector of uint)
 0:19        'u4' (temp highp 4-component vector of uint)
 0:19        'u4' (temp highp 4-component vector of uint)
-0:21      iMulExtended (global void)
+0:21      iMulExtended (global highp void)
 0:21        'i4' (temp highp 4-component vector of int)
 0:21        'i4' (temp highp 4-component vector of int)
 0:21        'i4' (temp highp 4-component vector of int)
@@ -179,27 +179,27 @@
 0:31          'u4' (temp highp 4-component vector of uint)
 0:32      move second child to first child (temp highp int)
 0:32        'i1' (temp highp int)
-0:32        bitCount (global highp int)
+0:32        bitCount (global lowp int, operation at highp)
 0:32          'i1' (temp highp int)
 0:33      move second child to first child (temp highp 3-component vector of int)
 0:33        'i3' (temp highp 3-component vector of int)
-0:33        bitCount (global highp 3-component vector of int)
+0:33        bitCount (global lowp 3-component vector of int, operation at highp)
 0:33          'u3' (temp highp 3-component vector of uint)
 0:34      move second child to first child (temp highp 2-component vector of int)
 0:34        'i2' (temp highp 2-component vector of int)
-0:34        findLSB (global highp 2-component vector of int)
+0:34        findLSB (global lowp 2-component vector of int, operation at highp)
 0:34          'i2' (temp highp 2-component vector of int)
 0:35      move second child to first child (temp highp 4-component vector of int)
 0:35        'i4' (temp highp 4-component vector of int)
-0:35        findLSB (global highp 4-component vector of int)
+0:35        findLSB (global lowp 4-component vector of int, operation at highp)
 0:35          'u4' (temp highp 4-component vector of uint)
 0:36      move second child to first child (temp highp int)
 0:36        'i1' (temp highp int)
-0:36        findMSB (global highp int)
+0:36        findMSB (global lowp int, operation at highp)
 0:36          'i1' (temp highp int)
 0:37      move second child to first child (temp highp 2-component vector of int)
 0:37        'i2' (temp highp 2-component vector of int)
-0:37        findMSB (global highp 2-component vector of int)
+0:37        findMSB (global lowp 2-component vector of int, operation at highp)
 0:37          'u2' (temp highp 2-component vector of uint)
 0:40      move second child to first child (temp highp 3-component vector of float)
 0:40        'v3' (temp highp 3-component vector of float)
@@ -213,19 +213,19 @@
 0:42          'i2' (temp highp 2-component vector of int)
 0:45      move second child to first child (temp highp uint)
 0:45        'u1' (temp highp uint)
-0:45        PackUnorm4x8 (global highp uint)
+0:45        PackUnorm4x8 (global highp uint, operation at mediump)
 0:45          'v4' (temp mediump 4-component vector of float)
 0:46      move second child to first child (temp highp uint)
 0:46        'u1' (temp highp uint)
-0:46        PackSnorm4x8 (global highp uint)
+0:46        PackSnorm4x8 (global highp uint, operation at mediump)
 0:46          'v4' (temp mediump 4-component vector of float)
-0:47      move second child to first child (temp highp 4-component vector of float)
+0:47      move second child to first child (temp mediump 4-component vector of float)
 0:47        'v4' (temp mediump 4-component vector of float)
-0:47        UnpackUnorm4x8 (global highp 4-component vector of float)
+0:47        UnpackUnorm4x8 (global mediump 4-component vector of float, operation at highp)
 0:47          'u1' (temp highp uint)
-0:48      move second child to first child (temp highp 4-component vector of float)
+0:48      move second child to first child (temp mediump 4-component vector of float)
 0:48        'v4' (temp mediump 4-component vector of float)
-0:48        UnpackSnorm4x8 (global highp 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: 
@@ -340,7 +340,7 @@
 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)
+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:
@@ -404,7 +404,7 @@
 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)
+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:
@@ -421,7 +421,7 @@
 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)
+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:
@@ -1056,12 +1056,12 @@
 0:17          'u1' (temp highp uint)
 0:17          'u1' (temp highp uint)
 0:17          'u1' (temp highp uint)
-0:19      uMulExtended (global void)
+0:19      uMulExtended (global highp void)
 0:19        'u4' (temp highp 4-component vector of uint)
 0:19        'u4' (temp highp 4-component vector of uint)
 0:19        'u4' (temp highp 4-component vector of uint)
 0:19        'u4' (temp highp 4-component vector of uint)
-0:21      iMulExtended (global void)
+0:21      iMulExtended (global highp void)
 0:21        'i4' (temp highp 4-component vector of int)
 0:21        'i4' (temp highp 4-component vector of int)
 0:21        'i4' (temp highp 4-component vector of int)
@@ -1110,27 +1110,27 @@
 0:31          'u4' (temp highp 4-component vector of uint)
 0:32      move second child to first child (temp highp int)
 0:32        'i1' (temp highp int)
-0:32        bitCount (global highp int)
+0:32        bitCount (global lowp int, operation at highp)
 0:32          'i1' (temp highp int)
 0:33      move second child to first child (temp highp 3-component vector of int)
 0:33        'i3' (temp highp 3-component vector of int)
-0:33        bitCount (global highp 3-component vector of int)
+0:33        bitCount (global lowp 3-component vector of int, operation at highp)
 0:33          'u3' (temp highp 3-component vector of uint)
 0:34      move second child to first child (temp highp 2-component vector of int)
 0:34        'i2' (temp highp 2-component vector of int)
-0:34        findLSB (global highp 2-component vector of int)
+0:34        findLSB (global lowp 2-component vector of int, operation at highp)
 0:34          'i2' (temp highp 2-component vector of int)
 0:35      move second child to first child (temp highp 4-component vector of int)
 0:35        'i4' (temp highp 4-component vector of int)
-0:35        findLSB (global highp 4-component vector of int)
+0:35        findLSB (global lowp 4-component vector of int, operation at highp)
 0:35          'u4' (temp highp 4-component vector of uint)
 0:36      move second child to first child (temp highp int)
 0:36        'i1' (temp highp int)
-0:36        findMSB (global highp int)
+0:36        findMSB (global lowp int, operation at highp)
 0:36          'i1' (temp highp int)
 0:37      move second child to first child (temp highp 2-component vector of int)
 0:37        'i2' (temp highp 2-component vector of int)
-0:37        findMSB (global highp 2-component vector of int)
+0:37        findMSB (global lowp 2-component vector of int, operation at highp)
 0:37          'u2' (temp highp 2-component vector of uint)
 0:40      move second child to first child (temp highp 3-component vector of float)
 0:40        'v3' (temp highp 3-component vector of float)
@@ -1144,19 +1144,19 @@
 0:42          'i2' (temp highp 2-component vector of int)
 0:45      move second child to first child (temp highp uint)
 0:45        'u1' (temp highp uint)
-0:45        PackUnorm4x8 (global highp uint)
+0:45        PackUnorm4x8 (global highp uint, operation at mediump)
 0:45          'v4' (temp mediump 4-component vector of float)
 0:46      move second child to first child (temp highp uint)
 0:46        'u1' (temp highp uint)
-0:46        PackSnorm4x8 (global highp uint)
+0:46        PackSnorm4x8 (global highp uint, operation at mediump)
 0:46          'v4' (temp mediump 4-component vector of float)
-0:47      move second child to first child (temp highp 4-component vector of float)
+0:47      move second child to first child (temp mediump 4-component vector of float)
 0:47        'v4' (temp mediump 4-component vector of float)
-0:47        UnpackUnorm4x8 (global highp 4-component vector of float)
+0:47        UnpackUnorm4x8 (global mediump 4-component vector of float, operation at highp)
 0:47          'u1' (temp highp uint)
-0:48      move second child to first child (temp highp 4-component vector of float)
+0:48      move second child to first child (temp mediump 4-component vector of float)
 0:48        'v4' (temp mediump 4-component vector of float)
-0:48        UnpackSnorm4x8 (global highp 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: 
@@ -1271,7 +1271,7 @@
 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)
+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:
@@ -1335,7 +1335,7 @@
 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)
+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:
@@ -1352,7 +1352,7 @@
 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)
+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:
diff --git a/Test/baseResults/310AofA.vert.out b/Test/baseResults/310AofA.vert.out
index 40c4321..83f105c 100644
--- a/Test/baseResults/310AofA.vert.out
+++ b/Test/baseResults/310AofA.vert.out
@@ -310,7 +310,7 @@
 0:96          1 (const int)
 0:98      Constant:
 0:98        7 (const int)
-0:99      array length (temp highp 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})
@@ -622,7 +622,7 @@
 0:96          1 (const int)
 0:98      Constant:
 0:98        7 (const int)
-0:99      array length (temp highp 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})
diff --git a/Test/baseResults/420.tese.out b/Test/baseResults/420.tese.out
index fb9bc20..b8379d1 100644
--- a/Test/baseResults/420.tese.out
+++ b/Test/baseResults/420.tese.out
@@ -12,7 +12,7 @@
 ERROR: 0:29: '=' :  cannot convert from 'const float' to 'global 2-element array of 4-component vector of float'
 ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float
 ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from 'temp float' to 'temp structure{global float s, global float t}'
-ERROR: 0:58: 'initializer list' : wrong number of structure members 
+ERROR: 0:70: 'initializer list' : wrong number of structure members 
 ERROR: 13 compilation errors.  No code generated.
 
 
@@ -50,51 +50,73 @@
 0:42        5.000000
 0:42        5.200000
 0:42        1.100000
-0:67  Sequence
-0:67    move second child to first child (temp 3-component vector of float)
-0:67      'av3' (global 3-component vector of float)
-0:67      Construct vec3 (global 3-component vector of float)
-0:67        'vc1' (global float)
-0:67        'vc2' (global float)
-0:67        'vc3' (global float)
-0:68  Sequence
-0:68    move second child to first child (temp 3-component vector of float)
-0:68      'bv3' (global 3-component vector of float)
-0:68      Construct vec3 (temp 3-component vector of float)
-0:68        'vc1' (global float)
-0:68        'vc2' (global float)
-0:68        'vc3' (global float)
-0:70  Function Definition: main( (global void)
-0:70    Function Parameters: 
-0:72    Sequence
-0:72      MemoryBarrier (global void)
-0:74      Test condition and select (temp void)
-0:74        Condition
-0:74        Compare Equal (temp bool)
-0:74          Constant:
-0:74            1 (const uint)
-0:74            2 (const uint)
-0:74            3.000000
-0:74            4.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            4.000000
-0:74            0.000000
-0:74            5.000000
-0:74            6.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            6.000000
-0:74            0.000000
-0:74          'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
-0:74        true case is null
-0:76      Test condition and select (temp void)
-0:76        Condition
-0:76        Constant:
-0:76          true (const bool)
-0:76        true case is null
+0:55  Sequence
+0:55    move second child to first child (temp structure{global int f})
+0:55      'single1' (global structure{global int f})
+0:55      Constant:
+0:55        10 (const int)
+0:58  Sequence
+0:58    move second child to first child (temp structure{global 2-component vector of uint v})
+0:58      'single2' (global structure{global 2-component vector of uint v})
+0:58      Constant:
+0:58        1 (const uint)
+0:58        2 (const uint)
+0:61  Sequence
+0:61    move second child to first child (temp structure{global structure{global int f} s1})
+0:61      'single3' (global structure{global structure{global int f} s1})
+0:61      Constant:
+0:61        3 (const int)
+0:64  Sequence
+0:64    move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
+0:64      'single4' (global structure{global structure{global 2-component vector of uint v} s1})
+0:64      Constant:
+0:64        4 (const uint)
+0:64        5 (const uint)
+0:79  Sequence
+0:79    move second child to first child (temp 3-component vector of float)
+0:79      'av3' (global 3-component vector of float)
+0:79      Construct vec3 (global 3-component vector of float)
+0:79        'vc1' (global float)
+0:79        'vc2' (global float)
+0:79        'vc3' (global float)
+0:80  Sequence
+0:80    move second child to first child (temp 3-component vector of float)
+0:80      'bv3' (global 3-component vector of float)
+0:80      Construct vec3 (temp 3-component vector of float)
+0:80        'vc1' (global float)
+0:80        'vc2' (global float)
+0:80        'vc3' (global float)
+0:82  Function Definition: main( (global void)
+0:82    Function Parameters: 
+0:84    Sequence
+0:84      MemoryBarrier (global void)
+0:86      Test condition and select (temp void)
+0:86        Condition
+0:86        Compare Equal (temp bool)
+0:86          Constant:
+0:86            1 (const uint)
+0:86            2 (const uint)
+0:86            3.000000
+0:86            4.000000
+0:86            0.000000
+0:86            0.000000
+0:86            0.000000
+0:86            4.000000
+0:86            0.000000
+0:86            5.000000
+0:86            6.000000
+0:86            0.000000
+0:86            0.000000
+0:86            0.000000
+0:86            6.000000
+0:86            0.000000
+0:86          'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
+0:86        true case is null
+0:88      Test condition and select (temp void)
+0:88        Condition
+0:88        Constant:
+0:88          true (const bool)
+0:88        true case is null
 0:?   Linker Objects
 0:?     'a' (const 2X2 matrix of float)
 0:?       1.000000
@@ -120,6 +142,10 @@
 0:?     'c3' (global 4X2 matrix of float)
 0:?     'd2' (global implicitly-sized array of structure{global float s, global float t})
 0:?     'b5' (global 5-element array of float)
+0:?     'single1' (global structure{global int f})
+0:?     'single2' (global structure{global 2-component vector of uint v})
+0:?     'single3' (global structure{global structure{global int f} s1})
+0:?     'single4' (global structure{global structure{global 2-component vector of uint v} s1})
 0:?     'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
 0:?       1 (const uint)
 0:?       2 (const uint)
@@ -200,51 +226,73 @@
 0:42        5.000000
 0:42        5.200000
 0:42        1.100000
-0:67  Sequence
-0:67    move second child to first child (temp 3-component vector of float)
-0:67      'av3' (global 3-component vector of float)
-0:67      Construct vec3 (global 3-component vector of float)
-0:67        'vc1' (global float)
-0:67        'vc2' (global float)
-0:67        'vc3' (global float)
-0:68  Sequence
-0:68    move second child to first child (temp 3-component vector of float)
-0:68      'bv3' (global 3-component vector of float)
-0:68      Construct vec3 (temp 3-component vector of float)
-0:68        'vc1' (global float)
-0:68        'vc2' (global float)
-0:68        'vc3' (global float)
-0:70  Function Definition: main( (global void)
-0:70    Function Parameters: 
-0:72    Sequence
-0:72      MemoryBarrier (global void)
-0:74      Test condition and select (temp void)
-0:74        Condition
-0:74        Compare Equal (temp bool)
-0:74          Constant:
-0:74            1 (const uint)
-0:74            2 (const uint)
-0:74            3.000000
-0:74            4.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            4.000000
-0:74            0.000000
-0:74            5.000000
-0:74            6.000000
-0:74            0.000000
-0:74            0.000000
-0:74            0.000000
-0:74            6.000000
-0:74            0.000000
-0:74          'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
-0:74        true case is null
-0:76      Test condition and select (temp void)
-0:76        Condition
-0:76        Constant:
-0:76          true (const bool)
-0:76        true case is null
+0:55  Sequence
+0:55    move second child to first child (temp structure{global int f})
+0:55      'single1' (global structure{global int f})
+0:55      Constant:
+0:55        10 (const int)
+0:58  Sequence
+0:58    move second child to first child (temp structure{global 2-component vector of uint v})
+0:58      'single2' (global structure{global 2-component vector of uint v})
+0:58      Constant:
+0:58        1 (const uint)
+0:58        2 (const uint)
+0:61  Sequence
+0:61    move second child to first child (temp structure{global structure{global int f} s1})
+0:61      'single3' (global structure{global structure{global int f} s1})
+0:61      Constant:
+0:61        3 (const int)
+0:64  Sequence
+0:64    move second child to first child (temp structure{global structure{global 2-component vector of uint v} s1})
+0:64      'single4' (global structure{global structure{global 2-component vector of uint v} s1})
+0:64      Constant:
+0:64        4 (const uint)
+0:64        5 (const uint)
+0:79  Sequence
+0:79    move second child to first child (temp 3-component vector of float)
+0:79      'av3' (global 3-component vector of float)
+0:79      Construct vec3 (global 3-component vector of float)
+0:79        'vc1' (global float)
+0:79        'vc2' (global float)
+0:79        'vc3' (global float)
+0:80  Sequence
+0:80    move second child to first child (temp 3-component vector of float)
+0:80      'bv3' (global 3-component vector of float)
+0:80      Construct vec3 (temp 3-component vector of float)
+0:80        'vc1' (global float)
+0:80        'vc2' (global float)
+0:80        'vc3' (global float)
+0:82  Function Definition: main( (global void)
+0:82    Function Parameters: 
+0:84    Sequence
+0:84      MemoryBarrier (global void)
+0:86      Test condition and select (temp void)
+0:86        Condition
+0:86        Compare Equal (temp bool)
+0:86          Constant:
+0:86            1 (const uint)
+0:86            2 (const uint)
+0:86            3.000000
+0:86            4.000000
+0:86            0.000000
+0:86            0.000000
+0:86            0.000000
+0:86            4.000000
+0:86            0.000000
+0:86            5.000000
+0:86            6.000000
+0:86            0.000000
+0:86            0.000000
+0:86            0.000000
+0:86            6.000000
+0:86            0.000000
+0:86          'curlybad1' (temp structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
+0:86        true case is null
+0:88      Test condition and select (temp void)
+0:88        Condition
+0:88        Constant:
+0:88          true (const bool)
+0:88        true case is null
 0:?   Linker Objects
 0:?     'a' (const 2X2 matrix of float)
 0:?       1.000000
@@ -270,6 +318,10 @@
 0:?     'c3' (global 4X2 matrix of float)
 0:?     'd2' (global 1-element array of structure{global float s, global float t})
 0:?     'b5' (global 5-element array of float)
+0:?     'single1' (global structure{global int f})
+0:?     'single2' (global structure{global 2-component vector of uint v})
+0:?     'single3' (global structure{global structure{global int f} s1})
+0:?     'single4' (global structure{global structure{global 2-component vector of uint v} s1})
 0:?     'constructed' (const structure{global 2-component vector of uint uv2, global 2-element array of structure{global float f, global 2X3 matrix of float m23} s})
 0:?       1 (const uint)
 0:?       2 (const uint)
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index 0f5110c..a234970 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -51,6 +51,7 @@
 ERROR: 0:157: 'assign' :  cannot convert from 'const float' to 'temp int'
 ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:158: 'assign' :  cannot convert from 'const float' to 'temp int'
+WARNING: 0:161: '[]' : assuming array size of one for compile-time checking of binding numbers for implicitly-sized array 
 ERROR: 50 compilation errors.  No code generated.
 
 
@@ -299,6 +300,7 @@
 0:?     'offcheckI' (layout(column_major shared ) uniform block{layout(column_major shared offset=16 ) uniform int foo})
 0:?     'samp1D' (uniform sampler1D)
 0:?     'samp1Ds' (uniform sampler1DShadow)
+0:?     'badArray' (layout(binding=0 ) writeonly uniform implicitly-sized array of image1D)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
 
@@ -551,6 +553,7 @@
 0:?     'offcheckI' (layout(column_major shared ) uniform block{layout(column_major shared offset=16 ) uniform int foo})
 0:?     'samp1D' (uniform sampler1D)
 0:?     'samp1Ds' (uniform sampler1DShadow)
+0:?     'badArray' (layout(binding=0 ) writeonly uniform 1-element array of image1D)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/440.vert.out b/Test/baseResults/440.vert.out
index 9ad3c1b..d4cbb0b 100644
--- a/Test/baseResults/440.vert.out
+++ b/Test/baseResults/440.vert.out
@@ -19,74 +19,78 @@
 ERROR: 0:57: 'component' : cannot apply to a matrix, structure, or block 
 ERROR: 0:58: 'component' : cannot apply to a matrix, structure, or block 
 ERROR: 0:61: 'location/component/index' : cannot declare a default, use a full declaration 
-ERROR: 0:81: 'xfb layout qualifier' : can only be used on an output 
-ERROR: 0:87: 'xfb_offset' : cannot declare a default, use a full declaration 
-ERROR: 0:97: 'xfb_buffer' : member cannot contradict block (or what block inherited from global) 
-ERROR: 0:102: 'xfb_buffer' : member cannot contradict block (or what block inherited from global) 
-ERROR: 0:102: 'xfb_offset' : overlapping offsets at offset 32 in buffer 3
-ERROR: 0:103: 'xfb_offset' : overlapping offsets at offset 0 in buffer 2
-ERROR: 0:105: 'xfb_offset' : overlapping offsets at offset 24 in buffer 2
-ERROR: 0:108: 'xfb_stride' : all stride settings must match for xfb buffer 15
-ERROR: 0:112: 'xfb_offset' : overlapping offsets at offset 4 in buffer 1
-ERROR: 0:114: 'xfb_stride' : all stride settings must match for xfb buffer 3
-ERROR: 0:115: 'xfb_stride' : all stride settings must match for xfb buffer 3
-ERROR: 0:119: 'xfb_stride' : all stride settings must match for xfb buffer 3
-ERROR: 0:117: 'xfb_stride' : all stride settings must match for xfb buffer 3
-ERROR: 0:138: 'xfb_offset' : overlapping offsets at offset 64 in buffer 0
-ERROR: 0:143: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
-ERROR: 0:144: 'xfb_offset' : must be a multiple of size of first component 
-ERROR: 0:145: 'xfb_offset' : type contains double; xfb_offset must be a multiple of 8 
-ERROR: 0:147: 'xfb_offset' : must be a multiple of size of first component 
-ERROR: 0:148: 'xfb_offset' : type contains double; xfb_offset must be a multiple of 8 
-ERROR: 0:152: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
-ERROR: 0:155: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
-ERROR: 0:155: 'xfb_stride' : 1/4 stride is too large: gl_MaxTransformFeedbackInterleavedComponents is 64
-ERROR: 0:157: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
-ERROR: 0:165: 'gl_BaseVertexARB' : required extension not requested: GL_ARB_shader_draw_parameters
-ERROR: 0:165: 'gl_BaseInstanceARB' : required extension not requested: GL_ARB_shader_draw_parameters
-ERROR: 0:165: 'gl_DrawIDARB' : required extension not requested: GL_ARB_shader_draw_parameters
-ERROR: 0:173: 'assign' :  l-value required "gl_BaseVertexARB" (can't modify shader input)
-ERROR: 0:174: 'assign' :  l-value required "gl_BaseInstanceARB" (can't modify shader input)
-ERROR: 0:175: 'assign' :  l-value required "gl_DrawIDARB" (can't modify shader input)
-ERROR: 0:176: 'glBaseInstanceARB' : undeclared identifier 
-ERROR: 49 compilation errors.  No code generated.
+ERROR: 0:66: 'component' : doubles cannot start on an odd-numbered component 
+ERROR: 0:67: 'component' : type overflows the available 4 components 
+ERROR: 0:71: 'location' : overlapping use of location 55
+ERROR: 0:75: 'location' : overlapping use of location 57
+ERROR: 0:92: 'xfb layout qualifier' : can only be used on an output 
+ERROR: 0:98: 'xfb_offset' : cannot declare a default, use a full declaration 
+ERROR: 0:108: 'xfb_buffer' : member cannot contradict block (or what block inherited from global) 
+ERROR: 0:113: 'xfb_buffer' : member cannot contradict block (or what block inherited from global) 
+ERROR: 0:113: 'xfb_offset' : overlapping offsets at offset 32 in buffer 3
+ERROR: 0:114: 'xfb_offset' : overlapping offsets at offset 0 in buffer 2
+ERROR: 0:116: 'xfb_offset' : overlapping offsets at offset 24 in buffer 2
+ERROR: 0:119: 'xfb_stride' : all stride settings must match for xfb buffer 15
+ERROR: 0:123: 'xfb_offset' : overlapping offsets at offset 4 in buffer 1
+ERROR: 0:125: 'xfb_stride' : all stride settings must match for xfb buffer 3
+ERROR: 0:126: 'xfb_stride' : all stride settings must match for xfb buffer 3
+ERROR: 0:130: 'xfb_stride' : all stride settings must match for xfb buffer 3
+ERROR: 0:128: 'xfb_stride' : all stride settings must match for xfb buffer 3
+ERROR: 0:149: 'xfb_offset' : overlapping offsets at offset 64 in buffer 0
+ERROR: 0:154: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
+ERROR: 0:155: 'xfb_offset' : must be a multiple of size of first component 
+ERROR: 0:156: 'xfb_offset' : type contains double; xfb_offset must be a multiple of 8 
+ERROR: 0:158: 'xfb_offset' : must be a multiple of size of first component 
+ERROR: 0:159: 'xfb_offset' : type contains double; xfb_offset must be a multiple of 8 
+ERROR: 0:163: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
+ERROR: 0:166: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
+ERROR: 0:166: 'xfb_stride' : 1/4 stride is too large: gl_MaxTransformFeedbackInterleavedComponents is 64
+ERROR: 0:168: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
+ERROR: 0:176: 'gl_BaseVertexARB' : required extension not requested: GL_ARB_shader_draw_parameters
+ERROR: 0:176: 'gl_BaseInstanceARB' : required extension not requested: GL_ARB_shader_draw_parameters
+ERROR: 0:176: 'gl_DrawIDARB' : required extension not requested: GL_ARB_shader_draw_parameters
+ERROR: 0:184: 'assign' :  l-value required "gl_BaseVertexARB" (can't modify shader input)
+ERROR: 0:185: 'assign' :  l-value required "gl_BaseInstanceARB" (can't modify shader input)
+ERROR: 0:186: 'assign' :  l-value required "gl_DrawIDARB" (can't modify shader input)
+ERROR: 0:187: 'glBaseInstanceARB' : undeclared identifier 
+ERROR: 53 compilation errors.  No code generated.
 
 
 Shader version: 440
 Requested GL_ARB_shader_draw_parameters
 in xfb mode
 ERROR: node is still EOpNull!
-0:163  Function Definition: drawParamsBad( (global int)
-0:163    Function Parameters: 
-0:165    Sequence
-0:165      Branch: Return with expression
-0:165        add (temp int)
-0:165          add (temp int)
-0:165            'gl_BaseVertexARB' (in int BaseVertex)
-0:165            'gl_BaseInstanceARB' (in int BaseInstance)
-0:165          'gl_DrawIDARB' (in int DrawId)
-0:170  Function Definition: drawParams( (global int)
-0:170    Function Parameters: 
-0:172    Sequence
-0:172      Branch: Return with expression
-0:172        add (temp int)
-0:172          add (temp int)
-0:172            'gl_BaseVertexARB' (in int BaseVertex)
-0:172            'gl_BaseInstanceARB' (in int BaseInstance)
-0:172          'gl_DrawIDARB' (in int DrawId)
-0:173      move second child to first child (temp int)
-0:173        'gl_BaseVertexARB' (in int BaseVertex)
-0:173        Constant:
-0:173          3 (const int)
-0:174      move second child to first child (temp int)
-0:174        'gl_BaseInstanceARB' (in int BaseInstance)
-0:174        Constant:
-0:174          3 (const int)
-0:175      move second child to first child (temp int)
-0:175        'gl_DrawIDARB' (in int DrawId)
-0:175        Constant:
-0:175          3 (const int)
-0:176      'glBaseInstanceARB' (temp float)
+0:174  Function Definition: drawParamsBad( (global int)
+0:174    Function Parameters: 
+0:176    Sequence
+0:176      Branch: Return with expression
+0:176        add (temp int)
+0:176          add (temp int)
+0:176            'gl_BaseVertexARB' (in int BaseVertex)
+0:176            'gl_BaseInstanceARB' (in int BaseInstance)
+0:176          'gl_DrawIDARB' (in int DrawId)
+0:181  Function Definition: drawParams( (global int)
+0:181    Function Parameters: 
+0:183    Sequence
+0:183      Branch: Return with expression
+0:183        add (temp int)
+0:183          add (temp int)
+0:183            'gl_BaseVertexARB' (in int BaseVertex)
+0:183            'gl_BaseInstanceARB' (in int BaseInstance)
+0:183          'gl_DrawIDARB' (in int DrawId)
+0:184      move second child to first child (temp int)
+0:184        'gl_BaseVertexARB' (in int BaseVertex)
+0:184        Constant:
+0:184          3 (const int)
+0:185      move second child to first child (temp int)
+0:185        'gl_BaseInstanceARB' (in int BaseInstance)
+0:185        Constant:
+0:185          3 (const int)
+0:186      move second child to first child (temp int)
+0:186        'gl_DrawIDARB' (in int DrawId)
+0:186        Constant:
+0:186          3 (const int)
+0:187      '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)
@@ -119,6 +123,16 @@
 0:?     'bd' (out block{layout(location=40 component=2 ) out float u, layout(location=40 component=0 ) out float v, layout(location=40 component=3 ) out float w, layout(location=40 component=1 ) out 2-component vector of float x, layout(location=41 component=3 ) out 2-component vector of float y, layout(location=42 component=1 ) out 4-component vector of float z, layout(location=42 component=1 ) out 4X4 matrix of float ba, layout(location=43 component=1 ) out structure{global int a} Ss})
 0:?     'be' (layout(location=50 component=3 ) smooth out int)
 0:?     'bf' (layout(location=50 component=0 ) smooth out 3-component vector of float)
+0:?     'dfo' (layout(location=51 component=1 ) smooth out double)
+0:?     'dvo' (layout(location=52 component=2 ) smooth out 2-component vector of double)
+0:?     'dfo2' (layout(location=53 ) smooth out double)
+0:?     'ffv2' (layout(location=53 component=2 ) smooth out 2-component vector of float)
+0:?     'dvec4out' (layout(location=54 ) smooth out 4-component vector of double)
+0:?     'overf' (layout(location=55 ) smooth out float)
+0:?     'df2o' (layout(location=56 component=1 ) smooth out 2-component vector of float)
+0:?     'sf2o' (layout(location=56 component=3 ) smooth out float)
+0:?     'dv3o' (layout(location=57 component=2 ) smooth out 2-component vector of float)
+0:?     'sf4o' (layout(location=57 component=3 ) smooth out float)
 0:?     'bbinst1' (out block{out 4-component vector of float bbv})
 0:?     'bbinst2' (out block{layout(xfb_buffer=0 xfb_offset=64 ) out 4-component vector of float bbv})
 0:?     'bbinst3' (out block{layout(xfb_buffer=3 xfb_offset=16 ) out 4-component vector of float bbv})
@@ -156,37 +170,37 @@
 Requested GL_ARB_shader_draw_parameters
 in xfb mode
 ERROR: node is still EOpNull!
-0:163  Function Definition: drawParamsBad( (global int)
-0:163    Function Parameters: 
-0:165    Sequence
-0:165      Branch: Return with expression
-0:165        add (temp int)
-0:165          add (temp int)
-0:165            'gl_BaseVertexARB' (in int BaseVertex)
-0:165            'gl_BaseInstanceARB' (in int BaseInstance)
-0:165          'gl_DrawIDARB' (in int DrawId)
-0:170  Function Definition: drawParams( (global int)
-0:170    Function Parameters: 
-0:172    Sequence
-0:172      Branch: Return with expression
-0:172        add (temp int)
-0:172          add (temp int)
-0:172            'gl_BaseVertexARB' (in int BaseVertex)
-0:172            'gl_BaseInstanceARB' (in int BaseInstance)
-0:172          'gl_DrawIDARB' (in int DrawId)
-0:173      move second child to first child (temp int)
-0:173        'gl_BaseVertexARB' (in int BaseVertex)
-0:173        Constant:
-0:173          3 (const int)
-0:174      move second child to first child (temp int)
-0:174        'gl_BaseInstanceARB' (in int BaseInstance)
-0:174        Constant:
-0:174          3 (const int)
-0:175      move second child to first child (temp int)
-0:175        'gl_DrawIDARB' (in int DrawId)
-0:175        Constant:
-0:175          3 (const int)
-0:176      'glBaseInstanceARB' (temp float)
+0:174  Function Definition: drawParamsBad( (global int)
+0:174    Function Parameters: 
+0:176    Sequence
+0:176      Branch: Return with expression
+0:176        add (temp int)
+0:176          add (temp int)
+0:176            'gl_BaseVertexARB' (in int BaseVertex)
+0:176            'gl_BaseInstanceARB' (in int BaseInstance)
+0:176          'gl_DrawIDARB' (in int DrawId)
+0:181  Function Definition: drawParams( (global int)
+0:181    Function Parameters: 
+0:183    Sequence
+0:183      Branch: Return with expression
+0:183        add (temp int)
+0:183          add (temp int)
+0:183            'gl_BaseVertexARB' (in int BaseVertex)
+0:183            'gl_BaseInstanceARB' (in int BaseInstance)
+0:183          'gl_DrawIDARB' (in int DrawId)
+0:184      move second child to first child (temp int)
+0:184        'gl_BaseVertexARB' (in int BaseVertex)
+0:184        Constant:
+0:184          3 (const int)
+0:185      move second child to first child (temp int)
+0:185        'gl_BaseInstanceARB' (in int BaseInstance)
+0:185        Constant:
+0:185          3 (const int)
+0:186      move second child to first child (temp int)
+0:186        'gl_DrawIDARB' (in int DrawId)
+0:186        Constant:
+0:186          3 (const int)
+0:187      '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)
@@ -219,6 +233,16 @@
 0:?     'bd' (out block{layout(location=40 component=2 ) out float u, layout(location=40 component=0 ) out float v, layout(location=40 component=3 ) out float w, layout(location=40 component=1 ) out 2-component vector of float x, layout(location=41 component=3 ) out 2-component vector of float y, layout(location=42 component=1 ) out 4-component vector of float z, layout(location=42 component=1 ) out 4X4 matrix of float ba, layout(location=43 component=1 ) out structure{global int a} Ss})
 0:?     'be' (layout(location=50 component=3 ) smooth out int)
 0:?     'bf' (layout(location=50 component=0 ) smooth out 3-component vector of float)
+0:?     'dfo' (layout(location=51 component=1 ) smooth out double)
+0:?     'dvo' (layout(location=52 component=2 ) smooth out 2-component vector of double)
+0:?     'dfo2' (layout(location=53 ) smooth out double)
+0:?     'ffv2' (layout(location=53 component=2 ) smooth out 2-component vector of float)
+0:?     'dvec4out' (layout(location=54 ) smooth out 4-component vector of double)
+0:?     'overf' (layout(location=55 ) smooth out float)
+0:?     'df2o' (layout(location=56 component=1 ) smooth out 2-component vector of float)
+0:?     'sf2o' (layout(location=56 component=3 ) smooth out float)
+0:?     'dv3o' (layout(location=57 component=2 ) smooth out 2-component vector of float)
+0:?     'sf4o' (layout(location=57 component=3 ) smooth out float)
 0:?     'bbinst1' (out block{out 4-component vector of float bbv})
 0:?     'bbinst2' (out block{layout(xfb_buffer=0 xfb_offset=64 ) out 4-component vector of float bbv})
 0:?     'bbinst3' (out block{layout(xfb_buffer=3 xfb_offset=16 ) out 4-component vector of float bbv})
diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out
new file mode 100755
index 0000000..6938af6
--- /dev/null
+++ b/Test/baseResults/cppBad.vert.out
@@ -0,0 +1,22 @@
+cppBad.vert
+ERROR: 0:2: 'preprocessor evaluation' : bad expression 
+ERROR: 0:2: '#if' : unexpected tokens following directive 
+ERROR: 0:5: 'string' : End of line in string 
+ERROR: 0:5: 'macro expansion' : expected '(' following n
+ERROR: 0:5: '' :  syntax error
+ERROR: 5 compilation errors.  No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one "void main()" entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 6f29aa2..abc7ebb 100755
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -11,38 +11,38 @@
 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                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                'i' (in int)
-0:10            add (temp 4-component vector of float)
-0:10              direct index (temp 4-component vector of float)
-0:10                'input' (in 3-element array of 4-component vector of float)
-0:10                Constant:
-0:10                  2 (const int)
-0:10              indirect index (temp 4-component vector of float)
-0:10                'input' (in 3-element array of 4-component vector of float)
-0:10                'i' (in int)
-0:10          add (temp 4-component vector of float)
-0:10            add (temp 4-component vector of float)
+0:10              add (temp 4-component vector of float)
+0:10                add (temp 4-component vector of float)
+0:10                  add (temp 4-component vector of float)
+0:10                    direct index (temp 4-component vector of float)
+0:10                      'a' (global 4-element array of 4-component vector of float)
+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                      'i' (in int)
+0:10                  direct index (temp 4-component vector of float)
+0:10                    'input' (in 3-element array of 4-component vector of float)
+0:10                    Constant:
+0:10                      2 (const int)
+0:10                indirect index (temp 4-component vector of float)
+0:10                  'input' (in 3-element array of 4-component vector of float)
+0:10                  'i' (in int)
 0:10              direct index (temp 4-component vector of float)
 0:10                'b' (temp 10-element array of 4-component vector of float)
 0:10                Constant:
 0:10                  5 (const int)
-0:10              indirect index (temp 4-component vector of float)
-0:10                'b' (temp 10-element array of 4-component vector of float)
-0:10                'i' (in int)
 0:10            indirect index (temp 4-component vector of float)
-0:10              m: direct index for structure (temp 7-element array of 4-component vector of float)
-0:10                indirect index (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                  'i' (in int)
-0:10                Constant:
-0:10                  0 (const int)
+0:10              'b' (temp 10-element array of 4-component vector of float)
 0:10              'i' (in int)
+0:10          indirect index (temp 4-component vector of float)
+0:10            m: direct index for structure (temp 7-element array of 4-component vector of float)
+0:10              indirect index (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                'i' (in int)
+0:10              Constant:
+0:10                0 (const int)
+0:10            'i' (in int)
 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})
@@ -63,38 +63,38 @@
 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                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                'i' (in int)
-0:10            add (temp 4-component vector of float)
-0:10              direct index (temp 4-component vector of float)
-0:10                'input' (in 3-element array of 4-component vector of float)
-0:10                Constant:
-0:10                  2 (const int)
-0:10              indirect index (temp 4-component vector of float)
-0:10                'input' (in 3-element array of 4-component vector of float)
-0:10                'i' (in int)
-0:10          add (temp 4-component vector of float)
-0:10            add (temp 4-component vector of float)
+0:10              add (temp 4-component vector of float)
+0:10                add (temp 4-component vector of float)
+0:10                  add (temp 4-component vector of float)
+0:10                    direct index (temp 4-component vector of float)
+0:10                      'a' (global 4-element array of 4-component vector of float)
+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                      'i' (in int)
+0:10                  direct index (temp 4-component vector of float)
+0:10                    'input' (in 3-element array of 4-component vector of float)
+0:10                    Constant:
+0:10                      2 (const int)
+0:10                indirect index (temp 4-component vector of float)
+0:10                  'input' (in 3-element array of 4-component vector of float)
+0:10                  'i' (in int)
 0:10              direct index (temp 4-component vector of float)
 0:10                'b' (temp 10-element array of 4-component vector of float)
 0:10                Constant:
 0:10                  5 (const int)
-0:10              indirect index (temp 4-component vector of float)
-0:10                'b' (temp 10-element array of 4-component vector of float)
-0:10                'i' (in int)
 0:10            indirect index (temp 4-component vector of float)
-0:10              m: direct index for structure (temp 7-element array of 4-component vector of float)
-0:10                indirect index (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                  'i' (in int)
-0:10                Constant:
-0:10                  0 (const int)
+0:10              'b' (temp 10-element array of 4-component vector of float)
 0:10              'i' (in int)
+0:10          indirect index (temp 4-component vector of float)
+0:10            m: direct index for structure (temp 7-element array of 4-component vector of float)
+0:10              indirect index (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                'i' (in int)
+0:10              Constant:
+0:10                0 (const int)
+0:10            'i' (in int)
 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})
@@ -114,9 +114,9 @@
                               Name 19  "i"
                               Name 27  "input"
                               Name 40  "b"
-                              Name 51  ""
-                              MemberName 51 0  "m"
-                              Name 55  "s"
+                              Name 52  ""
+                              MemberName 52 0  "m"
+                              Name 56  "s"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -142,14 +142,14 @@
               39:             TypePointer Function 38
               41:     13(int) Constant 5
               42:             TypePointer Function 7(fvec4)
-              49:      8(int) Constant 7
-              50:             TypeArray 7(fvec4) 49
-              51:             TypeStruct 50
-              52:      8(int) Constant 11
-              53:             TypeArray 51(struct) 52
-              54:             TypePointer Private 53
-           55(s):     54(ptr) Variable Private
-              57:     13(int) Constant 0
+              50:      8(int) Constant 7
+              51:             TypeArray 7(fvec4) 50
+              52:             TypeStruct 51
+              53:      8(int) Constant 11
+              54:             TypeArray 52(struct) 53
+              55:             TypePointer Private 54
+           56(s):     55(ptr) Variable Private
+              58:     13(int) Constant 0
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
            40(b):     39(ptr) Variable Function
@@ -161,22 +161,22 @@
               23:    7(fvec4) FAdd 17 22
               30:     29(ptr) AccessChain 27(input) 28
               31:    7(fvec4) Load 30
-              32:     13(int) Load 19(i)
-              33:     29(ptr) AccessChain 27(input) 32
-              34:    7(fvec4) Load 33
-              35:    7(fvec4) FAdd 31 34
-              36:    7(fvec4) FAdd 23 35
+              32:    7(fvec4) FAdd 23 31
+              33:     13(int) Load 19(i)
+              34:     29(ptr) AccessChain 27(input) 33
+              35:    7(fvec4) Load 34
+              36:    7(fvec4) FAdd 32 35
               43:     42(ptr) AccessChain 40(b) 41
               44:    7(fvec4) Load 43
-              45:     13(int) Load 19(i)
-              46:     42(ptr) AccessChain 40(b) 45
-              47:    7(fvec4) Load 46
-              48:    7(fvec4) FAdd 44 47
-              56:     13(int) Load 19(i)
-              58:     13(int) Load 19(i)
-              59:     15(ptr) AccessChain 55(s) 56 57 58
-              60:    7(fvec4) Load 59
-              61:    7(fvec4) FAdd 48 60
-              62:    7(fvec4) FAdd 36 61
+              45:    7(fvec4) FAdd 36 44
+              46:     13(int) Load 19(i)
+              47:     42(ptr) AccessChain 40(b) 46
+              48:    7(fvec4) Load 47
+              49:    7(fvec4) FAdd 45 48
+              57:     13(int) Load 19(i)
+              59:     13(int) Load 19(i)
+              60:     15(ptr) AccessChain 56(s) 57 58 59
+              61:    7(fvec4) Load 60
+              62:    7(fvec4) FAdd 49 61
                               ReturnValue 62
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out
index 251c7be..89eea72 100755
--- a/Test/baseResults/hlsl.assoc.frag.out
+++ b/Test/baseResults/hlsl.assoc.frag.out
@@ -23,11 +23,11 @@
 0:10        add (temp 4-component vector of float)
 0:10          add (temp 4-component vector of float)
 0:10            add (temp 4-component vector of float)
-0:10              'a1' (in 4-component vector of float)
-0:10              'a2' (in 4-component vector of float)
-0:10            add (temp 4-component vector of float)
+0:10              add (temp 4-component vector of float)
+0:10                'a1' (in 4-component vector of float)
+0:10                'a2' (in 4-component vector of float)
 0:10              'a3' (in 4-component vector of float)
-0:10              'a4' (in 4-component vector of float)
+0:10            'a4' (in 4-component vector of float)
 0:10          'a5' (in 4-component vector of float)
 0:?   Linker Objects
 
@@ -59,11 +59,11 @@
 0:10        add (temp 4-component vector of float)
 0:10          add (temp 4-component vector of float)
 0:10            add (temp 4-component vector of float)
-0:10              'a1' (in 4-component vector of float)
-0:10              'a2' (in 4-component vector of float)
-0:10            add (temp 4-component vector of float)
+0:10              add (temp 4-component vector of float)
+0:10                'a1' (in 4-component vector of float)
+0:10                'a2' (in 4-component vector of float)
 0:10              'a3' (in 4-component vector of float)
-0:10              'a4' (in 4-component vector of float)
+0:10            'a4' (in 4-component vector of float)
 0:10          'a5' (in 4-component vector of float)
 0:?   Linker Objects
 
@@ -104,9 +104,9 @@
               16:    7(fvec4) Load 10(a2)
               17:    7(fvec4) FAdd 15 16
               18:    7(fvec4) Load 11(a3)
-              19:    7(fvec4) Load 12(a4)
-              20:    7(fvec4) FAdd 18 19
-              21:    7(fvec4) FAdd 17 20
+              19:    7(fvec4) FAdd 17 18
+              20:    7(fvec4) Load 12(a4)
+              21:    7(fvec4) FAdd 19 20
               22:    7(fvec4) Load 13(a5)
               23:    7(fvec4) FAdd 21 22
                               ReturnValue 23
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
new file mode 100755
index 0000000..a51be51
--- /dev/null
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -0,0 +1,165 @@
+hlsl.buffer.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:29  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:26    Function Parameters: 
+0:26      'input' (in 4-component vector of float)
+0:?     Sequence
+0:27      Branch: Return with expression
+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' (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(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(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:?   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(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(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})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:29  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:26    Function Parameters: 
+0:26      'input' (in 4-component vector of float)
+0:?     Sequence
+0:27      Branch: Return with expression
+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' (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(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(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:?   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(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(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})
+
+// 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  "PixelShaderFunction" 9
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "input"
+                              Name 11  ""
+                              MemberName 11 0  "v1"
+                              Name 13  ""
+                              Name 20  ""
+                              MemberName 20 0  "v2"
+                              Name 22  ""
+                              Name 26  ""
+                              MemberName 26 0  "v3"
+                              MemberName 26 1  "i3"
+                              Name 28  ""
+                              Name 32  ""
+                              MemberName 32 0  "v4"
+                              MemberName 32 1  "i4"
+                              MemberName 32 2  "f1"
+                              MemberName 32 3  "f3"
+                              MemberName 32 4  "f4"
+                              MemberName 32 5  "f5"
+                              MemberName 32 6  "f6"
+                              MemberName 32 7  "f7"
+                              Name 34  ""
+                              MemberDecorate 11 0 Offset 0
+                              Decorate 11 Block
+                              Decorate 13 DescriptorSet 0
+                              MemberDecorate 20 0 Offset 0
+                              Decorate 20 BufferBlock
+                              Decorate 22 DescriptorSet 0
+                              MemberDecorate 26 0 Offset 0
+                              MemberDecorate 26 1 Offset 20
+                              Decorate 26 Block
+                              Decorate 28 DescriptorSet 0
+                              MemberDecorate 32 0 Offset 16
+                              MemberDecorate 32 1 Offset 48
+                              MemberDecorate 32 2 Offset 60
+                              MemberDecorate 32 3 Offset 64
+                              MemberDecorate 32 4 Offset 68
+                              MemberDecorate 32 5 Offset 72
+                              MemberDecorate 32 6 Offset 76
+                              MemberDecorate 32 7 Offset 80
+                              Decorate 32 BufferBlock
+                              Decorate 34 DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Input 7(fvec4)
+        9(input):      8(ptr) Variable Input
+              11:             TypeStruct 7(fvec4)
+              12:             TypePointer Uniform 11(struct)
+              13:     12(ptr) Variable Uniform
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:             TypePointer Uniform 7(fvec4)
+              20:             TypeStruct 7(fvec4)
+              21:             TypePointer Uniform 20(struct)
+              22:     21(ptr) Variable Uniform
+              26:             TypeStruct 7(fvec4) 14(int)
+              27:             TypePointer Uniform 26(struct)
+              28:     27(ptr) Variable Uniform
+              32:             TypeStruct 7(fvec4) 14(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float)
+              33:             TypePointer Uniform 32(struct)
+              34:     33(ptr) Variable Uniform
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+              10:    7(fvec4) Load 9(input)
+              17:     16(ptr) AccessChain 13 15
+              18:    7(fvec4) Load 17
+              19:    7(fvec4) FAdd 10 18
+              23:     16(ptr) AccessChain 22 15
+              24:    7(fvec4) Load 23
+              25:    7(fvec4) FAdd 19 24
+              29:     16(ptr) AccessChain 28 15
+              30:    7(fvec4) Load 29
+              31:    7(fvec4) FAdd 25 30
+              35:     16(ptr) AccessChain 34 15
+              36:    7(fvec4) Load 35
+              37:    7(fvec4) FAdd 31 36
+                              ReturnValue 37
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
new file mode 100644
index 0000000..43232fb
--- /dev/null
+++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -0,0 +1,521 @@
+hlsl.calculatelod.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'txval10' (temp float)
+0:28          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:28              Construct combined texture-sampler (temp sampler1DArray)
+0:28                'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:28                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:28              Constant:
+0:28                0.100000
+0:28            Constant:
+0:28              0 (const int)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'txval11' (temp float)
+0:29          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:29              Construct combined texture-sampler (temp isampler1DArray)
+0:29                'g_tTex1di4a' (uniform itexture1DArray)
+0:29                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:29              Constant:
+0:29                0.200000
+0:29            Constant:
+0:29              0 (const int)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'txval12' (temp float)
+0:30          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:30              Construct combined texture-sampler (temp usampler1DArray)
+0:30                'g_tTex1du4a' (uniform utexture1DArray)
+0:30                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:30              Constant:
+0:30                0.300000
+0:30            Constant:
+0:30              0 (const int)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'txval20' (temp float)
+0:32          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:32              Construct combined texture-sampler (temp sampler2DArray)
+0:32                'g_tTex2df4a' (uniform texture2DArray)
+0:32                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:32            Constant:
+0:32              0 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'txval21' (temp float)
+0:33          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:33              Construct combined texture-sampler (temp isampler2DArray)
+0:33                'g_tTex2di4a' (uniform itexture2DArray)
+0:33                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.300000
+0:?                 0.400000
+0:33            Constant:
+0:33              0 (const int)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'txval22' (temp float)
+0:34          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:34              Construct combined texture-sampler (temp usampler2DArray)
+0:34                'g_tTex2du4a' (uniform utexture2DArray)
+0:34                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.500000
+0:?                 0.600000
+0:34            Constant:
+0:34              0 (const int)
+0:36      Sequence
+0:36        move second child to first child (temp float)
+0:36          'txval40' (temp float)
+0:36          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:36              Construct combined texture-sampler (temp samplerCubeArray)
+0:36                'g_tTexcdf4a' (uniform textureCubeArray)
+0:36                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:36            Constant:
+0:36              0 (const int)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'txval41' (temp float)
+0:37          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:37              Construct combined texture-sampler (temp isamplerCubeArray)
+0:37                'g_tTexcdi4a' (uniform itextureCubeArray)
+0:37                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.400000
+0:?                 0.500000
+0:?                 0.600000
+0:37            Constant:
+0:37              0 (const int)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'txval42' (temp float)
+0:38          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:38              Construct combined texture-sampler (temp usamplerCubeArray)
+0:38                'g_tTexcdu4a' (uniform utextureCubeArray)
+0:38                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.700000
+0:?                 0.800000
+0:?                 0.900000
+0:38            Constant:
+0:38              0 (const int)
+0:40      move second child to first child (temp 4-component vector of float)
+0:40        Color: direct index for structure (temp 4-component vector of float)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            0 (const int)
+0:40        Constant:
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:41      move second child to first child (temp float)
+0:41        Depth: direct index for structure (temp float FragDepth)
+0:41          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:41          Constant:
+0:41            1 (const int)
+0:41        Constant:
+0:41          1.000000
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) 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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'txval10' (temp float)
+0:28          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:28              Construct combined texture-sampler (temp sampler1DArray)
+0:28                'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:28                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:28              Constant:
+0:28                0.100000
+0:28            Constant:
+0:28              0 (const int)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'txval11' (temp float)
+0:29          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:29              Construct combined texture-sampler (temp isampler1DArray)
+0:29                'g_tTex1di4a' (uniform itexture1DArray)
+0:29                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:29              Constant:
+0:29                0.200000
+0:29            Constant:
+0:29              0 (const int)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'txval12' (temp float)
+0:30          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:30              Construct combined texture-sampler (temp usampler1DArray)
+0:30                'g_tTex1du4a' (uniform utexture1DArray)
+0:30                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:30              Constant:
+0:30                0.300000
+0:30            Constant:
+0:30              0 (const int)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'txval20' (temp float)
+0:32          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:32              Construct combined texture-sampler (temp sampler2DArray)
+0:32                'g_tTex2df4a' (uniform texture2DArray)
+0:32                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:32            Constant:
+0:32              0 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'txval21' (temp float)
+0:33          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:33              Construct combined texture-sampler (temp isampler2DArray)
+0:33                'g_tTex2di4a' (uniform itexture2DArray)
+0:33                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.300000
+0:?                 0.400000
+0:33            Constant:
+0:33              0 (const int)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'txval22' (temp float)
+0:34          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:34              Construct combined texture-sampler (temp usampler2DArray)
+0:34                'g_tTex2du4a' (uniform utexture2DArray)
+0:34                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.500000
+0:?                 0.600000
+0:34            Constant:
+0:34              0 (const int)
+0:36      Sequence
+0:36        move second child to first child (temp float)
+0:36          'txval40' (temp float)
+0:36          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:36              Construct combined texture-sampler (temp samplerCubeArray)
+0:36                'g_tTexcdf4a' (uniform textureCubeArray)
+0:36                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:36            Constant:
+0:36              0 (const int)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'txval41' (temp float)
+0:37          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:37              Construct combined texture-sampler (temp isamplerCubeArray)
+0:37                'g_tTexcdi4a' (uniform itextureCubeArray)
+0:37                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.400000
+0:?                 0.500000
+0:?                 0.600000
+0:37            Constant:
+0:37              0 (const int)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'txval42' (temp float)
+0:38          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:38              Construct combined texture-sampler (temp usamplerCubeArray)
+0:38                'g_tTexcdu4a' (uniform utextureCubeArray)
+0:38                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.700000
+0:?                 0.800000
+0:?                 0.900000
+0:38            Constant:
+0:38              0 (const int)
+0:40      move second child to first child (temp 4-component vector of float)
+0:40        Color: direct index for structure (temp 4-component vector of float)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            0 (const int)
+0:40        Constant:
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:41      move second child to first child (temp float)
+0:41        Depth: direct index for structure (temp float FragDepth)
+0:41          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:41          Constant:
+0:41            1 (const int)
+0:41        Constant:
+0:41          1.000000
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) 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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 143
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 142  "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
+                              MemberDecorate 131(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 142(g_tTex1df4) DescriptorSet 0
+                              Decorate 142(g_tTex1df4) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D array sampled format:Unknown
+              10:             TypePointer UniformConstant 9
+ 11(g_tTex1df4a):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeSampledImage 9
+              19:    6(float) Constant 1036831949
+              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
+ 142(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
+              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
+             140:131(PS_OUTPUT) Load 133(psout)
+                              ReturnValue 140
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
new file mode 100644
index 0000000..e2dc1db
--- /dev/null
+++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -0,0 +1,328 @@
+hlsl.calculatelodunclamped.dx10.frag
+ERROR: 0:28: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:29: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:30: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:32: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:33: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:34: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:36: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:37: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:38: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 9 compilation errors.  No code generated.
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'txval10' (temp float)
+0:28          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:28              Construct combined texture-sampler (temp sampler1DArray)
+0:28                'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:28                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:28              Constant:
+0:28                0.100000
+0:28            Constant:
+0:28              0 (const int)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'txval11' (temp float)
+0:29          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:29              Construct combined texture-sampler (temp isampler1DArray)
+0:29                'g_tTex1di4a' (uniform itexture1DArray)
+0:29                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:29              Constant:
+0:29                0.200000
+0:29            Constant:
+0:29              0 (const int)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'txval12' (temp float)
+0:30          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:30              Construct combined texture-sampler (temp usampler1DArray)
+0:30                'g_tTex1du4a' (uniform utexture1DArray)
+0:30                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:30              Constant:
+0:30                0.300000
+0:30            Constant:
+0:30              0 (const int)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'txval20' (temp float)
+0:32          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:32              Construct combined texture-sampler (temp sampler2DArray)
+0:32                'g_tTex2df4a' (uniform texture2DArray)
+0:32                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:32            Constant:
+0:32              0 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'txval21' (temp float)
+0:33          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:33              Construct combined texture-sampler (temp isampler2DArray)
+0:33                'g_tTex2di4a' (uniform itexture2DArray)
+0:33                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.300000
+0:?                 0.400000
+0:33            Constant:
+0:33              0 (const int)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'txval22' (temp float)
+0:34          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:34              Construct combined texture-sampler (temp usampler2DArray)
+0:34                'g_tTex2du4a' (uniform utexture2DArray)
+0:34                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.500000
+0:?                 0.600000
+0:34            Constant:
+0:34              0 (const int)
+0:36      Sequence
+0:36        move second child to first child (temp float)
+0:36          'txval40' (temp float)
+0:36          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:36              Construct combined texture-sampler (temp samplerCubeArray)
+0:36                'g_tTexcdf4a' (uniform textureCubeArray)
+0:36                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:36            Constant:
+0:36              0 (const int)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'txval41' (temp float)
+0:37          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:37              Construct combined texture-sampler (temp isamplerCubeArray)
+0:37                'g_tTexcdi4a' (uniform itextureCubeArray)
+0:37                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.400000
+0:?                 0.500000
+0:?                 0.600000
+0:37            Constant:
+0:37              0 (const int)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'txval42' (temp float)
+0:38          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:38              Construct combined texture-sampler (temp usamplerCubeArray)
+0:38                'g_tTexcdu4a' (uniform utextureCubeArray)
+0:38                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.700000
+0:?                 0.800000
+0:?                 0.900000
+0:38            Constant:
+0:38              0 (const int)
+0:40      move second child to first child (temp 4-component vector of float)
+0:40        Color: direct index for structure (temp 4-component vector of float)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            0 (const int)
+0:40        Constant:
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:41      move second child to first child (temp float)
+0:41        Depth: direct index for structure (temp float FragDepth)
+0:41          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:41          Constant:
+0:41            1 (const int)
+0:41        Constant:
+0:41          1.000000
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) 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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'txval10' (temp float)
+0:28          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:28              Construct combined texture-sampler (temp sampler1DArray)
+0:28                'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:28                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:28              Constant:
+0:28                0.100000
+0:28            Constant:
+0:28              0 (const int)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'txval11' (temp float)
+0:29          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:29              Construct combined texture-sampler (temp isampler1DArray)
+0:29                'g_tTex1di4a' (uniform itexture1DArray)
+0:29                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:29              Constant:
+0:29                0.200000
+0:29            Constant:
+0:29              0 (const int)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'txval12' (temp float)
+0:30          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:30              Construct combined texture-sampler (temp usampler1DArray)
+0:30                'g_tTex1du4a' (uniform utexture1DArray)
+0:30                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:30              Constant:
+0:30                0.300000
+0:30            Constant:
+0:30              0 (const int)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'txval20' (temp float)
+0:32          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:32              Construct combined texture-sampler (temp sampler2DArray)
+0:32                'g_tTex2df4a' (uniform texture2DArray)
+0:32                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:32            Constant:
+0:32              0 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'txval21' (temp float)
+0:33          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:33              Construct combined texture-sampler (temp isampler2DArray)
+0:33                'g_tTex2di4a' (uniform itexture2DArray)
+0:33                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.300000
+0:?                 0.400000
+0:33            Constant:
+0:33              0 (const int)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'txval22' (temp float)
+0:34          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:34              Construct combined texture-sampler (temp usampler2DArray)
+0:34                'g_tTex2du4a' (uniform utexture2DArray)
+0:34                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.500000
+0:?                 0.600000
+0:34            Constant:
+0:34              0 (const int)
+0:36      Sequence
+0:36        move second child to first child (temp float)
+0:36          'txval40' (temp float)
+0:36          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:36              Construct combined texture-sampler (temp samplerCubeArray)
+0:36                'g_tTexcdf4a' (uniform textureCubeArray)
+0:36                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:36            Constant:
+0:36              0 (const int)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'txval41' (temp float)
+0:37          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:37              Construct combined texture-sampler (temp isamplerCubeArray)
+0:37                'g_tTexcdi4a' (uniform itextureCubeArray)
+0:37                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.400000
+0:?                 0.500000
+0:?                 0.600000
+0:37            Constant:
+0:37              0 (const int)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'txval42' (temp float)
+0:38          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:38              Construct combined texture-sampler (temp usamplerCubeArray)
+0:38                'g_tTexcdu4a' (uniform utextureCubeArray)
+0:38                'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?               Constant:
+0:?                 0.700000
+0:?                 0.800000
+0:?                 0.900000
+0:38            Constant:
+0:38              0 (const int)
+0:40      move second child to first child (temp 4-component vector of float)
+0:40        Color: direct index for structure (temp 4-component vector of float)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            0 (const int)
+0:40        Constant:
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:41      move second child to first child (temp float)
+0:41        Depth: direct index for structure (temp float FragDepth)
+0:41          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:41          Constant:
+0:41            1 (const int)
+0:41        Constant:
+0:41          1.000000
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) 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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
new file mode 100755
index 0000000..1e62e9c
--- /dev/null
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -0,0 +1,357 @@
+hlsl.conditional.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:17  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input' (in 4-component vector of float)
+0:?     Sequence
+0:3      Sequence
+0:3        move second child to first child (temp int)
+0:3          'a' (temp int)
+0:3          Constant:
+0:3            5 (const int)
+0:4      Sequence
+0:4        move second child to first child (temp int)
+0:4          'b' (temp int)
+0:4          Constant:
+0:4            6 (const int)
+0:5      Sequence
+0:5        move second child to first child (temp int)
+0:5          'c' (temp int)
+0:5          Constant:
+0:5            7 (const int)
+0:6      Sequence
+0:6        move second child to first child (temp int)
+0:6          'd' (temp int)
+0:6          Constant:
+0:6            7 (const int)
+0:7      Sequence
+0:7        move second child to first child (temp 4-component vector of float)
+0:7          'ret' (temp 4-component vector of float)
+0:9          add (temp 4-component vector of float)
+0:8            add (temp 4-component vector of float)
+0:7              add (temp 4-component vector of float)
+0:7                vector-scale (temp 4-component vector of float)
+0:7                  Convert int to float (temp float)
+0:7                    'a' (temp int)
+0:7                  'input' (in 4-component vector of float)
+0:8                vector-scale (temp 4-component vector of float)
+0:8                  Convert int to float (temp float)
+0:8                    'b' (temp int)
+0:8                  'input' (in 4-component vector of float)
+0:9              vector-scale (temp 4-component vector of float)
+0:9                Convert int to float (temp float)
+0:9                  'c' (temp int)
+0:9                'input' (in 4-component vector of float)
+0:10            vector-scale (temp 4-component vector of float)
+0:10              Convert int to float (temp float)
+0:10                'd' (temp int)
+0:10              'input' (in 4-component vector of float)
+0:12      Comma (temp int)
+0:12        move second child to first child (temp int)
+0:12          'e' (temp int)
+0:12          move second child to first child (temp int)
+0:12            'a' (temp int)
+0:12            Test condition and select (temp int)
+0:12              Condition
+0:12              'b' (temp int)
+0:12              true case
+0:12              move second child to first child (temp int)
+0:12                'c' (temp int)
+0:12                'd' (temp int)
+0:12              false case
+0:12              Constant:
+0:12                10 (const int)
+0:12        move second child to first child (temp int)
+0:12          'b' (temp int)
+0:12          Test condition and select (temp int)
+0:12            Condition
+0:12            'a' (temp int)
+0:12            true case
+0:12            move second child to first child (temp int)
+0:12              'd' (temp int)
+0:12              'c' (temp int)
+0:12            false case
+0:12            Constant:
+0:12              11 (const int)
+0:14      move second child to first child (temp 4-component vector of float)
+0:14        'f' (temp 4-component vector of float)
+0:14        Test condition and select (temp 4-component vector of float)
+0:14          Condition
+0:14          Compare Less Than (temp bool)
+0:14            direct index (temp float)
+0:14              'ret' (temp 4-component vector of float)
+0:14              Constant:
+0:14                0 (const int)
+0:14            direct index (temp float)
+0:14              'input' (in 4-component vector of float)
+0:14              Constant:
+0:14                1 (const int)
+0:14          true case
+0:14          vector-scale (temp 4-component vector of float)
+0:14            Convert int to float (temp float)
+0:14              'c' (temp int)
+0:14            'input' (in 4-component vector of float)
+0:14          false case
+0:14          vector-scale (temp 4-component vector of float)
+0:14            Convert int to float (temp float)
+0:14              'd' (temp int)
+0:14            'input' (in 4-component vector of float)
+0:15      Branch: Return with expression
+0:15        add (temp 4-component vector of float)
+0:15          vector-scale (temp 4-component vector of float)
+0:15            Convert int to float (temp float)
+0:15              'e' (temp int)
+0:15            'ret' (temp 4-component vector of float)
+0:15          'f' (temp 4-component vector of float)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:17  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input' (in 4-component vector of float)
+0:?     Sequence
+0:3      Sequence
+0:3        move second child to first child (temp int)
+0:3          'a' (temp int)
+0:3          Constant:
+0:3            5 (const int)
+0:4      Sequence
+0:4        move second child to first child (temp int)
+0:4          'b' (temp int)
+0:4          Constant:
+0:4            6 (const int)
+0:5      Sequence
+0:5        move second child to first child (temp int)
+0:5          'c' (temp int)
+0:5          Constant:
+0:5            7 (const int)
+0:6      Sequence
+0:6        move second child to first child (temp int)
+0:6          'd' (temp int)
+0:6          Constant:
+0:6            7 (const int)
+0:7      Sequence
+0:7        move second child to first child (temp 4-component vector of float)
+0:7          'ret' (temp 4-component vector of float)
+0:9          add (temp 4-component vector of float)
+0:8            add (temp 4-component vector of float)
+0:7              add (temp 4-component vector of float)
+0:7                vector-scale (temp 4-component vector of float)
+0:7                  Convert int to float (temp float)
+0:7                    'a' (temp int)
+0:7                  'input' (in 4-component vector of float)
+0:8                vector-scale (temp 4-component vector of float)
+0:8                  Convert int to float (temp float)
+0:8                    'b' (temp int)
+0:8                  'input' (in 4-component vector of float)
+0:9              vector-scale (temp 4-component vector of float)
+0:9                Convert int to float (temp float)
+0:9                  'c' (temp int)
+0:9                'input' (in 4-component vector of float)
+0:10            vector-scale (temp 4-component vector of float)
+0:10              Convert int to float (temp float)
+0:10                'd' (temp int)
+0:10              'input' (in 4-component vector of float)
+0:12      Comma (temp int)
+0:12        move second child to first child (temp int)
+0:12          'e' (temp int)
+0:12          move second child to first child (temp int)
+0:12            'a' (temp int)
+0:12            Test condition and select (temp int)
+0:12              Condition
+0:12              'b' (temp int)
+0:12              true case
+0:12              move second child to first child (temp int)
+0:12                'c' (temp int)
+0:12                'd' (temp int)
+0:12              false case
+0:12              Constant:
+0:12                10 (const int)
+0:12        move second child to first child (temp int)
+0:12          'b' (temp int)
+0:12          Test condition and select (temp int)
+0:12            Condition
+0:12            'a' (temp int)
+0:12            true case
+0:12            move second child to first child (temp int)
+0:12              'd' (temp int)
+0:12              'c' (temp int)
+0:12            false case
+0:12            Constant:
+0:12              11 (const int)
+0:14      move second child to first child (temp 4-component vector of float)
+0:14        'f' (temp 4-component vector of float)
+0:14        Test condition and select (temp 4-component vector of float)
+0:14          Condition
+0:14          Compare Less Than (temp bool)
+0:14            direct index (temp float)
+0:14              'ret' (temp 4-component vector of float)
+0:14              Constant:
+0:14                0 (const int)
+0:14            direct index (temp float)
+0:14              'input' (in 4-component vector of float)
+0:14              Constant:
+0:14                1 (const int)
+0:14          true case
+0:14          vector-scale (temp 4-component vector of float)
+0:14            Convert int to float (temp float)
+0:14              'c' (temp int)
+0:14            'input' (in 4-component vector of float)
+0:14          false case
+0:14          vector-scale (temp 4-component vector of float)
+0:14            Convert int to float (temp float)
+0:14              'd' (temp int)
+0:14            'input' (in 4-component vector of float)
+0:15      Branch: Return with expression
+0:15        add (temp 4-component vector of float)
+0:15          vector-scale (temp 4-component vector of float)
+0:15            Convert int to float (temp float)
+0:15              'e' (temp int)
+0:15            'ret' (temp 4-component vector of float)
+0:15          'f' (temp 4-component vector of float)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 89
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 22
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "PixelShaderFunction"
+                              Name 8  "a"
+                              Name 10  "b"
+                              Name 12  "c"
+                              Name 14  "d"
+                              Name 18  "ret"
+                              Name 22  "input"
+                              Name 40  "e"
+                              Name 57  "f"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 5
+              11:      6(int) Constant 6
+              13:      6(int) Constant 7
+              15:             TypeFloat 32
+              16:             TypeVector 15(float) 4
+              17:             TypePointer Function 16(fvec4)
+              21:             TypePointer Input 16(fvec4)
+       22(input):     21(ptr) Variable Input
+              47:      6(int) Constant 10
+              55:      6(int) Constant 11
+              59:             TypeInt 32 0
+              60:     59(int) Constant 0
+              61:             TypePointer Function 15(float)
+              64:     59(int) Constant 1
+              65:             TypePointer Input 15(float)
+              68:             TypeBool
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+            8(a):      7(ptr) Variable Function
+           10(b):      7(ptr) Variable Function
+           12(c):      7(ptr) Variable Function
+           14(d):      7(ptr) Variable Function
+         18(ret):     17(ptr) Variable Function
+           40(e):      7(ptr) Variable Function
+              41:      7(ptr) Variable Function
+              49:      7(ptr) Variable Function
+           57(f):     17(ptr) Variable Function
+              58:     17(ptr) Variable Function
+                              Store 8(a) 9
+                              Store 10(b) 11
+                              Store 12(c) 13
+                              Store 14(d) 13
+              19:      6(int) Load 8(a)
+              20:   15(float) ConvertSToF 19
+              23:   16(fvec4) Load 22(input)
+              24:   16(fvec4) VectorTimesScalar 23 20
+              25:      6(int) Load 10(b)
+              26:   15(float) ConvertSToF 25
+              27:   16(fvec4) Load 22(input)
+              28:   16(fvec4) VectorTimesScalar 27 26
+              29:   16(fvec4) FAdd 24 28
+              30:      6(int) Load 12(c)
+              31:   15(float) ConvertSToF 30
+              32:   16(fvec4) Load 22(input)
+              33:   16(fvec4) VectorTimesScalar 32 31
+              34:   16(fvec4) FAdd 29 33
+              35:      6(int) Load 14(d)
+              36:   15(float) ConvertSToF 35
+              37:   16(fvec4) Load 22(input)
+              38:   16(fvec4) VectorTimesScalar 37 36
+              39:   16(fvec4) FAdd 34 38
+                              Store 18(ret) 39
+              42:      6(int) Load 10(b)
+                              SelectionMerge 44 None
+                              BranchConditional 42 43 46
+              43:               Label
+              45:      6(int)   Load 14(d)
+                                Store 12(c) 45
+                                Store 41 45
+                                Branch 44
+              46:               Label
+                                Store 41 47
+                                Branch 44
+              44:             Label
+              48:      6(int) Load 41
+                              Store 8(a) 48
+                              Store 40(e) 48
+              50:      6(int) Load 8(a)
+                              SelectionMerge 52 None
+                              BranchConditional 50 51 54
+              51:               Label
+              53:      6(int)   Load 12(c)
+                                Store 14(d) 53
+                                Store 49 53
+                                Branch 52
+              54:               Label
+                                Store 49 55
+                                Branch 52
+              52:             Label
+              56:      6(int) Load 49
+                              Store 10(b) 56
+              62:     61(ptr) AccessChain 18(ret) 60
+              63:   15(float) Load 62
+              66:     65(ptr) AccessChain 22(input) 64
+              67:   15(float) Load 66
+              69:    68(bool) FOrdLessThan 63 67
+                              SelectionMerge 71 None
+                              BranchConditional 69 70 76
+              70:               Label
+              72:      6(int)   Load 12(c)
+              73:   15(float)   ConvertSToF 72
+              74:   16(fvec4)   Load 22(input)
+              75:   16(fvec4)   VectorTimesScalar 74 73
+                                Store 58 75
+                                Branch 71
+              76:               Label
+              77:      6(int)   Load 14(d)
+              78:   15(float)   ConvertSToF 77
+              79:   16(fvec4)   Load 22(input)
+              80:   16(fvec4)   VectorTimesScalar 79 78
+                                Store 58 80
+                                Branch 71
+              71:             Label
+              81:   16(fvec4) Load 58
+                              Store 57(f) 81
+              82:      6(int) Load 40(e)
+              83:   15(float) ConvertSToF 82
+              84:   16(fvec4) Load 18(ret)
+              85:   16(fvec4) VectorTimesScalar 84 83
+              86:   16(fvec4) Load 57(f)
+              87:   16(fvec4) FAdd 85 86
+                              ReturnValue 87
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.constructexpr.frag.out b/Test/baseResults/hlsl.constructexpr.frag.out
new file mode 100644
index 0000000..2eef7c0
--- /dev/null
+++ b/Test/baseResults/hlsl.constructexpr.frag.out
@@ -0,0 +1,129 @@
+hlsl.constructexpr.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:18  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:4    Function Parameters: 
+0:?     Sequence
+0:6      Constant:
+0:6        3 (const int)
+0:7      Constant:
+0:7        4 (const int)
+0:8      Constant:
+0:8        5 (const int)
+0:9      Constant:
+0:9        6 (const int)
+0:10      Constant:
+0:10        7 (const int)
+0:11      Constant:
+0:11        8 (const int)
+0:12      Comma (temp 2-component vector of float)
+0:?         Constant:
+0:?           9.000000
+0:?           10.000000
+0:?         Constant:
+0:?           11.000000
+0:?           12.000000
+0:15      move second child to first child (temp 4-component vector of float)
+0:15        color: direct index for structure (temp 4-component vector of float)
+0:15          'ps_output' (temp structure{temp 4-component vector of float color})
+0:15          Constant:
+0:15            0 (const int)
+0:15        Constant:
+0:15          1.000000
+0:15          1.000000
+0:15          1.000000
+0:15          1.000000
+0:16      Branch: Return with expression
+0:16        'ps_output' (temp structure{temp 4-component vector of float color})
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:18  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:4    Function Parameters: 
+0:?     Sequence
+0:6      Constant:
+0:6        3 (const int)
+0:7      Constant:
+0:7        4 (const int)
+0:8      Constant:
+0:8        5 (const int)
+0:9      Constant:
+0:9        6 (const int)
+0:10      Constant:
+0:10        7 (const int)
+0:11      Constant:
+0:11        8 (const int)
+0:12      Comma (temp 2-component vector of float)
+0:?         Constant:
+0:?           9.000000
+0:?           10.000000
+0:?         Constant:
+0:?           11.000000
+0:?           12.000000
+0:15      move second child to first child (temp 4-component vector of float)
+0:15        color: direct index for structure (temp 4-component vector of float)
+0:15          'ps_output' (temp structure{temp 4-component vector of float color})
+0:15          Constant:
+0:15            0 (const int)
+0:15        Constant:
+0:15          1.000000
+0:15          1.000000
+0:15          1.000000
+0:15          1.000000
+0:16      Branch: Return with expression
+0:16        'ps_output' (temp structure{temp 4-component vector of float color})
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 32
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 22  "PS_OUTPUT"
+                              MemberName 22(PS_OUTPUT) 0  "color"
+                              Name 24  "ps_output"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:      6(int) Constant 3
+               8:      6(int) Constant 4
+               9:      6(int) Constant 5
+              10:      6(int) Constant 6
+              11:      6(int) Constant 7
+              12:      6(int) Constant 8
+              13:             TypeFloat 32
+              14:             TypeVector 13(float) 2
+              15:   13(float) Constant 1091567616
+              16:   13(float) Constant 1092616192
+              17:   14(fvec2) ConstantComposite 15 16
+              18:   13(float) Constant 1093664768
+              19:   13(float) Constant 1094713344
+              20:   14(fvec2) ConstantComposite 18 19
+              21:             TypeVector 13(float) 4
+   22(PS_OUTPUT):             TypeStruct 21(fvec4)
+              23:             TypePointer Function 22(PS_OUTPUT)
+              25:      6(int) Constant 0
+              26:   13(float) Constant 1065353216
+              27:   21(fvec4) ConstantComposite 26 26 26 26
+              28:             TypePointer Function 21(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+   24(ps_output):     23(ptr) Variable Function
+              29:     28(ptr) AccessChain 24(ps_output) 25
+                              Store 29 27
+              30:22(PS_OUTPUT) Load 24(ps_output)
+                              ReturnValue 30
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
index a086d95..370a506 100755
--- a/Test/baseResults/hlsl.float4.frag.out
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -1,4 +1,7 @@
 hlsl.float4.frag
+WARNING: 0:5: 'register' : ignoring shader_profile 
+WARNING: 0:6: 'register' : ignoring shader_profile 
+
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
@@ -21,9 +24,9 @@
 0:?   Linker Objects
 0:?     'AmbientColor' (global 4-component vector of float)
 0:?     'ff1' (global bool Face)
-0:?     'ff2' (global 4-component vector of float)
-0:?     'ff3' (global 4-component vector of float)
-0:?     'ff4' (global 4-component vector of float FragCoord)
+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 FragCoord)
 
 
 Linked fragment stage:
@@ -51,9 +54,9 @@
 0:?   Linker Objects
 0:?     'AmbientColor' (global 4-component vector of float)
 0:?     'ff1' (global bool Face)
-0:?     'ff2' (global 4-component vector of float)
-0:?     'ff3' (global 4-component vector of float)
-0:?     'ff4' (global 4-component vector of float FragCoord)
+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 FragCoord)
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -74,6 +77,11 @@
                               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
                               Decorate 29(ff4) BuiltIn FragCoord
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
new file mode 100644
index 0000000..70d1bf1
--- /dev/null
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -0,0 +1,385 @@
+hlsl.gather.array.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:44  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler2DArray)
+0:29              'g_tTex2df4a' (uniform texture2DArray)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+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            Construct combined texture-sampler (temp isampler2DArray)
+0:30              'g_tTex2di4a' (uniform itexture2DArray)
+0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?               0.500000
+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            Construct combined texture-sampler (temp usampler2DArray)
+0:31              'g_tTex2du4a' (uniform utexture2DArray)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+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            Construct combined texture-sampler (temp samplerCubeArray)
+0:35              'g_tTexcdf4a' (uniform textureCubeArray)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:?               0.400000
+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            Construct combined texture-sampler (temp isamplerCubeArray)
+0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+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            Construct combined texture-sampler (temp usamplerCubeArray)
+0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:?               1.000000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:40      move second child to first child (temp float)
+0:40        Depth: direct index for structure (temp float FragDepth)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            1 (const int)
+0:40        Constant:
+0:40          1.000000
+0:42      Branch: Return with expression
+0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) 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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:44  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler2DArray)
+0:29              'g_tTex2df4a' (uniform texture2DArray)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+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            Construct combined texture-sampler (temp isampler2DArray)
+0:30              'g_tTex2di4a' (uniform itexture2DArray)
+0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?               0.500000
+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            Construct combined texture-sampler (temp usampler2DArray)
+0:31              'g_tTex2du4a' (uniform utexture2DArray)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+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            Construct combined texture-sampler (temp samplerCubeArray)
+0:35              'g_tTexcdf4a' (uniform textureCubeArray)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:?               0.400000
+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            Construct combined texture-sampler (temp isamplerCubeArray)
+0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+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            Construct combined texture-sampler (temp usamplerCubeArray)
+0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:?               1.000000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:40      move second child to first child (temp float)
+0:40        Depth: direct index for structure (temp float FragDepth)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            1 (const int)
+0:40        Constant:
+0:40          1.000000
+0:42      Branch: Return with expression
+0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) 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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 110
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval20"
+                              Name 12  "g_tTex2df4a"
+                              Name 16  "g_sSamp"
+                              Name 30  "txval21"
+                              Name 33  "g_tTex2di4a"
+                              Name 45  "txval22"
+                              Name 48  "g_tTex2du4a"
+                              Name 57  "txval40"
+                              Name 60  "g_tTexcdf4a"
+                              Name 67  "txval41"
+                              Name 70  "g_tTexcdi4a"
+                              Name 77  "txval42"
+                              Name 80  "g_tTexcdu4a"
+                              Name 90  "PS_OUTPUT"
+                              MemberName 90(PS_OUTPUT) 0  "Color"
+                              MemberName 90(PS_OUTPUT) 1  "Depth"
+                              Name 92  "psout"
+                              Name 102  "g_tTex1df4a"
+                              Name 103  "g_tTex1df4"
+                              Name 106  "g_tTex1di4a"
+                              Name 109  "g_tTex1du4a"
+                              Decorate 12(g_tTex2df4a) DescriptorSet 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 33(g_tTex2di4a) DescriptorSet 0
+                              Decorate 48(g_tTex2du4a) DescriptorSet 0
+                              Decorate 60(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 70(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 80(g_tTexcdu4a) DescriptorSet 0
+                              MemberDecorate 90(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 102(g_tTex1df4a) DescriptorSet 0
+                              Decorate 102(g_tTex1df4a) Binding 1
+                              Decorate 103(g_tTex1df4) DescriptorSet 0
+                              Decorate 103(g_tTex1df4) Binding 0
+                              Decorate 106(g_tTex1di4a) DescriptorSet 0
+                              Decorate 109(g_tTex1du4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D array sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+ 12(g_tTex2df4a):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeVector 6(float) 3
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:    6(float) Constant 1050253722
+              24:   20(fvec3) ConstantComposite 21 22 23
+              25:             TypeInt 32 1
+              26:     25(int) Constant 0
+              28:             TypeVector 25(int) 4
+              29:             TypePointer Function 28(ivec4)
+              31:             TypeImage 25(int) 2D array sampled format:Unknown
+              32:             TypePointer UniformConstant 31
+ 33(g_tTex2di4a):     32(ptr) Variable UniformConstant
+              36:             TypeSampledImage 31
+              38:    6(float) Constant 1053609165
+              39:    6(float) Constant 1056964608
+              40:   20(fvec3) ConstantComposite 23 38 39
+              42:             TypeInt 32 0
+              43:             TypeVector 42(int) 4
+              44:             TypePointer Function 43(ivec4)
+              46:             TypeImage 42(int) 2D array sampled format:Unknown
+              47:             TypePointer UniformConstant 46
+ 48(g_tTex2du4a):     47(ptr) Variable UniformConstant
+              51:             TypeSampledImage 46
+              53:    6(float) Constant 1058642330
+              54:    6(float) Constant 1060320051
+              55:   20(fvec3) ConstantComposite 39 53 54
+              58:             TypeImage 6(float) Cube array sampled format:Unknown
+              59:             TypePointer UniformConstant 58
+ 60(g_tTexcdf4a):     59(ptr) Variable UniformConstant
+              63:             TypeSampledImage 58
+              65:    7(fvec4) ConstantComposite 21 22 23 38
+              68:             TypeImage 25(int) Cube array sampled format:Unknown
+              69:             TypePointer UniformConstant 68
+ 70(g_tTexcdi4a):     69(ptr) Variable UniformConstant
+              73:             TypeSampledImage 68
+              75:    7(fvec4) ConstantComposite 38 39 53 54
+              78:             TypeImage 42(int) Cube array sampled format:Unknown
+              79:             TypePointer UniformConstant 78
+ 80(g_tTexcdu4a):     79(ptr) Variable UniformConstant
+              83:             TypeSampledImage 78
+              85:    6(float) Constant 1061997773
+              86:    6(float) Constant 1063675494
+              87:    6(float) Constant 1065353216
+              88:    7(fvec4) ConstantComposite 54 85 86 87
+   90(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+              91:             TypePointer Function 90(PS_OUTPUT)
+              93:    7(fvec4) ConstantComposite 87 87 87 87
+              95:     25(int) Constant 1
+              96:             TypePointer Function 6(float)
+             100:             TypeImage 6(float) 1D array sampled format:Unknown
+             101:             TypePointer UniformConstant 100
+102(g_tTex1df4a):    101(ptr) Variable UniformConstant
+ 103(g_tTex1df4):    101(ptr) Variable UniformConstant
+             104:             TypeImage 25(int) 1D array sampled format:Unknown
+             105:             TypePointer UniformConstant 104
+106(g_tTex1di4a):    105(ptr) Variable UniformConstant
+             107:             TypeImage 42(int) 1D array sampled format:Unknown
+             108:             TypePointer UniformConstant 107
+109(g_tTex1du4a):    108(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval20):      8(ptr) Variable Function
+     30(txval21):     29(ptr) Variable Function
+     45(txval22):     44(ptr) Variable Function
+     57(txval40):      8(ptr) Variable Function
+     67(txval41):     29(ptr) Variable Function
+     77(txval42):     44(ptr) Variable Function
+       92(psout):     91(ptr) Variable Function
+              13:          10 Load 12(g_tTex2df4a)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              27:    7(fvec4) ImageGather 19 24 26
+                              Store 9(txval20) 27
+              34:          31 Load 33(g_tTex2di4a)
+              35:          14 Load 16(g_sSamp)
+              37:          36 SampledImage 34 35
+              41:   28(ivec4) ImageGather 37 40 26
+                              Store 30(txval21) 41
+              49:          46 Load 48(g_tTex2du4a)
+              50:          14 Load 16(g_sSamp)
+              52:          51 SampledImage 49 50
+              56:   43(ivec4) ImageGather 52 55 26
+                              Store 45(txval22) 56
+              61:          58 Load 60(g_tTexcdf4a)
+              62:          14 Load 16(g_sSamp)
+              64:          63 SampledImage 61 62
+              66:    7(fvec4) ImageGather 64 65 26
+                              Store 57(txval40) 66
+              71:          68 Load 70(g_tTexcdi4a)
+              72:          14 Load 16(g_sSamp)
+              74:          73 SampledImage 71 72
+              76:   28(ivec4) ImageGather 74 75 26
+                              Store 67(txval41) 76
+              81:          78 Load 80(g_tTexcdu4a)
+              82:          14 Load 16(g_sSamp)
+              84:          83 SampledImage 81 82
+              89:   43(ivec4) ImageGather 84 88 26
+                              Store 77(txval42) 89
+              94:      8(ptr) AccessChain 92(psout) 26
+                              Store 94 93
+              97:     96(ptr) AccessChain 92(psout) 95
+                              Store 97 87
+              98:90(PS_OUTPUT) Load 92(psout)
+                              ReturnValue 98
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
new file mode 100644
index 0000000..c52d7cd
--- /dev/null
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -0,0 +1,399 @@
+hlsl.gather.basic.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:49  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler2D)
+0:34              'g_tTex2df4' (uniform texture2D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+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            Construct combined texture-sampler (temp isampler2D)
+0:35              'g_tTex2di4' (uniform itexture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+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            Construct combined texture-sampler (temp usampler2D)
+0:36              'g_tTex2du4' (uniform utexture2D)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+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            Construct combined texture-sampler (temp samplerCube)
+0:40              'g_tTexcdf4' (uniform textureCube)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+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            Construct combined texture-sampler (temp isamplerCube)
+0:41              'g_tTexcdi4' (uniform itextureCube)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+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            Construct combined texture-sampler (temp usamplerCube)
+0:42              'g_tTexcdu4' (uniform utextureCube)
+0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:44      move second child to first child (temp 4-component vector of float)
+0:44        Color: direct index for structure (temp 4-component vector of float)
+0:44          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:44          Constant:
+0:44            0 (const int)
+0:44        Constant:
+0:44          1.000000
+0:44          1.000000
+0:44          1.000000
+0:44          1.000000
+0:45      move second child to first child (temp float)
+0:45        Depth: direct index for structure (temp float FragDepth)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            1 (const int)
+0:45        Constant:
+0:45          1.000000
+0:47      Branch: Return with expression
+0:47        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:49  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler2D)
+0:34              'g_tTex2df4' (uniform texture2D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+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            Construct combined texture-sampler (temp isampler2D)
+0:35              'g_tTex2di4' (uniform itexture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+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            Construct combined texture-sampler (temp usampler2D)
+0:36              'g_tTex2du4' (uniform utexture2D)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+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            Construct combined texture-sampler (temp samplerCube)
+0:40              'g_tTexcdf4' (uniform textureCube)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+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            Construct combined texture-sampler (temp isamplerCube)
+0:41              'g_tTexcdi4' (uniform itextureCube)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+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            Construct combined texture-sampler (temp usamplerCube)
+0:42              'g_tTexcdu4' (uniform utextureCube)
+0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:44      move second child to first child (temp 4-component vector of float)
+0:44        Color: direct index for structure (temp 4-component vector of float)
+0:44          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:44          Constant:
+0:44            0 (const int)
+0:44        Constant:
+0:44          1.000000
+0:44          1.000000
+0:44          1.000000
+0:44          1.000000
+0:45      move second child to first child (temp float)
+0:45        Depth: direct index for structure (temp float FragDepth)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            1 (const int)
+0:45        Constant:
+0:45          1.000000
+0:47      Branch: Return with expression
+0:47        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 121
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval20"
+                              Name 12  "g_tTex2df4"
+                              Name 16  "g_sSamp"
+                              Name 29  "txval21"
+                              Name 32  "g_tTex2di4"
+                              Name 44  "txval22"
+                              Name 47  "g_tTex2du4"
+                              Name 56  "txval40"
+                              Name 59  "g_tTexcdf4"
+                              Name 67  "txval41"
+                              Name 70  "g_tTexcdi4"
+                              Name 77  "txval42"
+                              Name 80  "g_tTexcdu4"
+                              Name 90  "PS_OUTPUT"
+                              MemberName 90(PS_OUTPUT) 0  "Color"
+                              MemberName 90(PS_OUTPUT) 1  "Depth"
+                              Name 92  "psout"
+                              Name 101  "g_sSamp2d"
+                              Name 104  "g_tTex1df4a"
+                              Name 105  "g_tTex1df4"
+                              Name 108  "g_tTex1di4"
+                              Name 111  "g_tTex1du4"
+                              Name 114  "g_tTex3df4"
+                              Name 117  "g_tTex3di4"
+                              Name 120  "g_tTex3du4"
+                              Decorate 12(g_tTex2df4) DescriptorSet 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 32(g_tTex2di4) DescriptorSet 0
+                              Decorate 47(g_tTex2du4) DescriptorSet 0
+                              Decorate 59(g_tTexcdf4) DescriptorSet 0
+                              Decorate 70(g_tTexcdi4) DescriptorSet 0
+                              Decorate 80(g_tTexcdu4) DescriptorSet 0
+                              MemberDecorate 90(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 101(g_sSamp2d) DescriptorSet 0
+                              Decorate 104(g_tTex1df4a) DescriptorSet 0
+                              Decorate 104(g_tTex1df4a) Binding 1
+                              Decorate 105(g_tTex1df4) DescriptorSet 0
+                              Decorate 105(g_tTex1df4) Binding 0
+                              Decorate 108(g_tTex1di4) DescriptorSet 0
+                              Decorate 111(g_tTex1du4) DescriptorSet 0
+                              Decorate 114(g_tTex3df4) DescriptorSet 0
+                              Decorate 117(g_tTex3di4) DescriptorSet 0
+                              Decorate 120(g_tTex3du4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex2df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:   20(fvec2) ConstantComposite 21 22
+              24:             TypeInt 32 1
+              25:     24(int) Constant 0
+              27:             TypeVector 24(int) 4
+              28:             TypePointer Function 27(ivec4)
+              30:             TypeImage 24(int) 2D sampled format:Unknown
+              31:             TypePointer UniformConstant 30
+  32(g_tTex2di4):     31(ptr) Variable UniformConstant
+              35:             TypeSampledImage 30
+              37:    6(float) Constant 1050253722
+              38:    6(float) Constant 1053609165
+              39:   20(fvec2) ConstantComposite 37 38
+              41:             TypeInt 32 0
+              42:             TypeVector 41(int) 4
+              43:             TypePointer Function 42(ivec4)
+              45:             TypeImage 41(int) 2D sampled format:Unknown
+              46:             TypePointer UniformConstant 45
+  47(g_tTex2du4):     46(ptr) Variable UniformConstant
+              50:             TypeSampledImage 45
+              52:    6(float) Constant 1056964608
+              53:    6(float) Constant 1058642330
+              54:   20(fvec2) ConstantComposite 52 53
+              57:             TypeImage 6(float) Cube sampled format:Unknown
+              58:             TypePointer UniformConstant 57
+  59(g_tTexcdf4):     58(ptr) Variable UniformConstant
+              62:             TypeSampledImage 57
+              64:             TypeVector 6(float) 3
+              65:   64(fvec3) ConstantComposite 21 22 37
+              68:             TypeImage 24(int) Cube sampled format:Unknown
+              69:             TypePointer UniformConstant 68
+  70(g_tTexcdi4):     69(ptr) Variable UniformConstant
+              73:             TypeSampledImage 68
+              75:   64(fvec3) ConstantComposite 38 52 53
+              78:             TypeImage 41(int) Cube sampled format:Unknown
+              79:             TypePointer UniformConstant 78
+  80(g_tTexcdu4):     79(ptr) Variable UniformConstant
+              83:             TypeSampledImage 78
+              85:    6(float) Constant 1060320051
+              86:    6(float) Constant 1061997773
+              87:    6(float) Constant 1063675494
+              88:   64(fvec3) ConstantComposite 85 86 87
+   90(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+              91:             TypePointer Function 90(PS_OUTPUT)
+              93:    6(float) Constant 1065353216
+              94:    7(fvec4) ConstantComposite 93 93 93 93
+              96:     24(int) Constant 1
+              97:             TypePointer Function 6(float)
+  101(g_sSamp2d):     15(ptr) Variable UniformConstant
+             102:             TypeImage 6(float) 1D sampled format:Unknown
+             103:             TypePointer UniformConstant 102
+104(g_tTex1df4a):    103(ptr) Variable UniformConstant
+ 105(g_tTex1df4):    103(ptr) Variable UniformConstant
+             106:             TypeImage 24(int) 1D sampled format:Unknown
+             107:             TypePointer UniformConstant 106
+ 108(g_tTex1di4):    107(ptr) Variable UniformConstant
+             109:             TypeImage 41(int) 1D sampled format:Unknown
+             110:             TypePointer UniformConstant 109
+ 111(g_tTex1du4):    110(ptr) Variable UniformConstant
+             112:             TypeImage 6(float) 3D sampled format:Unknown
+             113:             TypePointer UniformConstant 112
+ 114(g_tTex3df4):    113(ptr) Variable UniformConstant
+             115:             TypeImage 24(int) 3D sampled format:Unknown
+             116:             TypePointer UniformConstant 115
+ 117(g_tTex3di4):    116(ptr) Variable UniformConstant
+             118:             TypeImage 41(int) 3D sampled format:Unknown
+             119:             TypePointer UniformConstant 118
+ 120(g_tTex3du4):    119(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval20):      8(ptr) Variable Function
+     29(txval21):     28(ptr) Variable Function
+     44(txval22):     43(ptr) Variable Function
+     56(txval40):      8(ptr) Variable Function
+     67(txval41):     28(ptr) Variable Function
+     77(txval42):     43(ptr) Variable Function
+       92(psout):     91(ptr) Variable Function
+              13:          10 Load 12(g_tTex2df4)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              26:    7(fvec4) ImageGather 19 23 25
+                              Store 9(txval20) 26
+              33:          30 Load 32(g_tTex2di4)
+              34:          14 Load 16(g_sSamp)
+              36:          35 SampledImage 33 34
+              40:   27(ivec4) ImageGather 36 39 25
+                              Store 29(txval21) 40
+              48:          45 Load 47(g_tTex2du4)
+              49:          14 Load 16(g_sSamp)
+              51:          50 SampledImage 48 49
+              55:   42(ivec4) ImageGather 51 54 25
+                              Store 44(txval22) 55
+              60:          57 Load 59(g_tTexcdf4)
+              61:          14 Load 16(g_sSamp)
+              63:          62 SampledImage 60 61
+              66:    7(fvec4) ImageGather 63 65 25
+                              Store 56(txval40) 66
+              71:          68 Load 70(g_tTexcdi4)
+              72:          14 Load 16(g_sSamp)
+              74:          73 SampledImage 71 72
+              76:   27(ivec4) ImageGather 74 75 25
+                              Store 67(txval41) 76
+              81:          78 Load 80(g_tTexcdu4)
+              82:          14 Load 16(g_sSamp)
+              84:          83 SampledImage 81 82
+              89:   42(ivec4) ImageGather 84 88 25
+                              Store 77(txval42) 89
+              95:      8(ptr) AccessChain 92(psout) 25
+                              Store 95 94
+              98:     97(ptr) AccessChain 92(psout) 96
+                              Store 98 93
+              99:90(PS_OUTPUT) Load 92(psout)
+                              ReturnValue 99
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
new file mode 100644
index 0000000..667c39f
--- /dev/null
+++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -0,0 +1,377 @@
+hlsl.gather.basic.dx10.vert
+Shader version: 450
+0:? Sequence
+0:47  Function Definition: main( (global structure{temp 4-component vector of float FragCoord 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            Construct combined texture-sampler (temp sampler2D)
+0:33              'g_tTex2df4' (uniform texture2D)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+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            Construct combined texture-sampler (temp isampler2D)
+0:34              'g_tTex2di4' (uniform itexture2D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+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            Construct combined texture-sampler (temp usampler2D)
+0:35              'g_tTex2du4' (uniform utexture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+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            Construct combined texture-sampler (temp samplerCube)
+0:39              'g_tTexcdf4' (uniform textureCube)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+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            Construct combined texture-sampler (temp isamplerCube)
+0:40              'g_tTexcdi4' (uniform itextureCube)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+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            Construct combined texture-sampler (temp usamplerCube)
+0:41              'g_tTexcdu4' (uniform utextureCube)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:43      move second child to first child (temp 4-component vector of float)
+0:43        Pos: direct index for structure (temp 4-component vector of float FragCoord)
+0:43          'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:43          Constant:
+0:43            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:45      Branch: Return with expression
+0:45        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+0:? Sequence
+0:47  Function Definition: main( (global structure{temp 4-component vector of float FragCoord 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            Construct combined texture-sampler (temp sampler2D)
+0:33              'g_tTex2df4' (uniform texture2D)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+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            Construct combined texture-sampler (temp isampler2D)
+0:34              'g_tTex2di4' (uniform itexture2D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+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            Construct combined texture-sampler (temp usampler2D)
+0:35              'g_tTex2du4' (uniform utexture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+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            Construct combined texture-sampler (temp samplerCube)
+0:39              'g_tTexcdf4' (uniform textureCube)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+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            Construct combined texture-sampler (temp isamplerCube)
+0:40              'g_tTexcdi4' (uniform itextureCube)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+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            Construct combined texture-sampler (temp usamplerCube)
+0:41              'g_tTexcdu4' (uniform utextureCube)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:43      move second child to first child (temp 4-component vector of float)
+0:43        Pos: direct index for structure (temp 4-component vector of float FragCoord)
+0:43          'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:43          Constant:
+0:43            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:45      Branch: Return with expression
+0:45        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 118
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main"
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval20"
+                              Name 12  "g_tTex2df4"
+                              Name 16  "g_sSamp"
+                              Name 29  "txval21"
+                              Name 32  "g_tTex2di4"
+                              Name 44  "txval22"
+                              Name 47  "g_tTex2du4"
+                              Name 56  "txval40"
+                              Name 59  "g_tTexcdf4"
+                              Name 67  "txval41"
+                              Name 70  "g_tTexcdi4"
+                              Name 77  "txval42"
+                              Name 80  "g_tTexcdu4"
+                              Name 90  "VS_OUTPUT"
+                              MemberName 90(VS_OUTPUT) 0  "Pos"
+                              Name 92  "vsout"
+                              Name 98  "g_sSamp2d"
+                              Name 101  "g_tTex1df4a"
+                              Name 102  "g_tTex1df4"
+                              Name 105  "g_tTex1di4"
+                              Name 108  "g_tTex1du4"
+                              Name 111  "g_tTex3df4"
+                              Name 114  "g_tTex3di4"
+                              Name 117  "g_tTex3du4"
+                              Decorate 12(g_tTex2df4) DescriptorSet 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 32(g_tTex2di4) DescriptorSet 0
+                              Decorate 47(g_tTex2du4) DescriptorSet 0
+                              Decorate 59(g_tTexcdf4) DescriptorSet 0
+                              Decorate 70(g_tTexcdi4) DescriptorSet 0
+                              Decorate 80(g_tTexcdu4) DescriptorSet 0
+                              MemberDecorate 90(VS_OUTPUT) 0 BuiltIn FragCoord
+                              Decorate 98(g_sSamp2d) DescriptorSet 0
+                              Decorate 101(g_tTex1df4a) DescriptorSet 0
+                              Decorate 101(g_tTex1df4a) Binding 1
+                              Decorate 102(g_tTex1df4) DescriptorSet 0
+                              Decorate 102(g_tTex1df4) Binding 0
+                              Decorate 105(g_tTex1di4) DescriptorSet 0
+                              Decorate 108(g_tTex1du4) DescriptorSet 0
+                              Decorate 111(g_tTex3df4) DescriptorSet 0
+                              Decorate 114(g_tTex3di4) DescriptorSet 0
+                              Decorate 117(g_tTex3du4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex2df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:   20(fvec2) ConstantComposite 21 22
+              24:             TypeInt 32 1
+              25:     24(int) Constant 0
+              27:             TypeVector 24(int) 4
+              28:             TypePointer Function 27(ivec4)
+              30:             TypeImage 24(int) 2D sampled format:Unknown
+              31:             TypePointer UniformConstant 30
+  32(g_tTex2di4):     31(ptr) Variable UniformConstant
+              35:             TypeSampledImage 30
+              37:    6(float) Constant 1050253722
+              38:    6(float) Constant 1053609165
+              39:   20(fvec2) ConstantComposite 37 38
+              41:             TypeInt 32 0
+              42:             TypeVector 41(int) 4
+              43:             TypePointer Function 42(ivec4)
+              45:             TypeImage 41(int) 2D sampled format:Unknown
+              46:             TypePointer UniformConstant 45
+  47(g_tTex2du4):     46(ptr) Variable UniformConstant
+              50:             TypeSampledImage 45
+              52:    6(float) Constant 1056964608
+              53:    6(float) Constant 1058642330
+              54:   20(fvec2) ConstantComposite 52 53
+              57:             TypeImage 6(float) Cube sampled format:Unknown
+              58:             TypePointer UniformConstant 57
+  59(g_tTexcdf4):     58(ptr) Variable UniformConstant
+              62:             TypeSampledImage 57
+              64:             TypeVector 6(float) 3
+              65:   64(fvec3) ConstantComposite 21 22 37
+              68:             TypeImage 24(int) Cube sampled format:Unknown
+              69:             TypePointer UniformConstant 68
+  70(g_tTexcdi4):     69(ptr) Variable UniformConstant
+              73:             TypeSampledImage 68
+              75:   64(fvec3) ConstantComposite 38 52 53
+              78:             TypeImage 41(int) Cube sampled format:Unknown
+              79:             TypePointer UniformConstant 78
+  80(g_tTexcdu4):     79(ptr) Variable UniformConstant
+              83:             TypeSampledImage 78
+              85:    6(float) Constant 1060320051
+              86:    6(float) Constant 1061997773
+              87:    6(float) Constant 1063675494
+              88:   64(fvec3) ConstantComposite 85 86 87
+   90(VS_OUTPUT):             TypeStruct 7(fvec4)
+              91:             TypePointer Function 90(VS_OUTPUT)
+              93:    6(float) Constant 0
+              94:    7(fvec4) ConstantComposite 93 93 93 93
+   98(g_sSamp2d):     15(ptr) Variable UniformConstant
+              99:             TypeImage 6(float) 1D sampled format:Unknown
+             100:             TypePointer UniformConstant 99
+101(g_tTex1df4a):    100(ptr) Variable UniformConstant
+ 102(g_tTex1df4):    100(ptr) Variable UniformConstant
+             103:             TypeImage 24(int) 1D sampled format:Unknown
+             104:             TypePointer UniformConstant 103
+ 105(g_tTex1di4):    104(ptr) Variable UniformConstant
+             106:             TypeImage 41(int) 1D sampled format:Unknown
+             107:             TypePointer UniformConstant 106
+ 108(g_tTex1du4):    107(ptr) Variable UniformConstant
+             109:             TypeImage 6(float) 3D sampled format:Unknown
+             110:             TypePointer UniformConstant 109
+ 111(g_tTex3df4):    110(ptr) Variable UniformConstant
+             112:             TypeImage 24(int) 3D sampled format:Unknown
+             113:             TypePointer UniformConstant 112
+ 114(g_tTex3di4):    113(ptr) Variable UniformConstant
+             115:             TypeImage 41(int) 3D sampled format:Unknown
+             116:             TypePointer UniformConstant 115
+ 117(g_tTex3du4):    116(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval20):      8(ptr) Variable Function
+     29(txval21):     28(ptr) Variable Function
+     44(txval22):     43(ptr) Variable Function
+     56(txval40):      8(ptr) Variable Function
+     67(txval41):     28(ptr) Variable Function
+     77(txval42):     43(ptr) Variable Function
+       92(vsout):     91(ptr) Variable Function
+              13:          10 Load 12(g_tTex2df4)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              26:    7(fvec4) ImageGather 19 23 25
+                              Store 9(txval20) 26
+              33:          30 Load 32(g_tTex2di4)
+              34:          14 Load 16(g_sSamp)
+              36:          35 SampledImage 33 34
+              40:   27(ivec4) ImageGather 36 39 25
+                              Store 29(txval21) 40
+              48:          45 Load 47(g_tTex2du4)
+              49:          14 Load 16(g_sSamp)
+              51:          50 SampledImage 48 49
+              55:   42(ivec4) ImageGather 51 54 25
+                              Store 44(txval22) 55
+              60:          57 Load 59(g_tTexcdf4)
+              61:          14 Load 16(g_sSamp)
+              63:          62 SampledImage 60 61
+              66:    7(fvec4) ImageGather 63 65 25
+                              Store 56(txval40) 66
+              71:          68 Load 70(g_tTexcdi4)
+              72:          14 Load 16(g_sSamp)
+              74:          73 SampledImage 71 72
+              76:   27(ivec4) ImageGather 74 75 25
+                              Store 67(txval41) 76
+              81:          78 Load 80(g_tTexcdu4)
+              82:          14 Load 16(g_sSamp)
+              84:          83 SampledImage 81 82
+              89:   42(ivec4) ImageGather 84 88 25
+                              Store 77(txval42) 89
+              95:      8(ptr) AccessChain 92(vsout) 25
+                              Store 95 94
+              96:90(VS_OUTPUT) Load 92(vsout)
+                              ReturnValue 96
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
new file mode 100644
index 0000000..d5a3921
--- /dev/null
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -0,0 +1,320 @@
+hlsl.gather.offset.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler2D)
+0:33              'g_tTex2df4' (uniform texture2D)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp isampler2D)
+0:34              'g_tTex2di4' (uniform itexture2D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?             Constant:
+0:?               1 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp usampler2D)
+0:35              'g_tTex2du4' (uniform utexture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?             Constant:
+0:?               1 (const int)
+0:?               -1 (const int)
+0:40      move second child to first child (temp 4-component vector of float)
+0:40        Color: direct index for structure (temp 4-component vector of float)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            0 (const int)
+0:40        Constant:
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:41      move second child to first child (temp float)
+0:41        Depth: direct index for structure (temp float FragDepth)
+0:41          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:41          Constant:
+0:41            1 (const int)
+0:41        Constant:
+0:41          1.000000
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler2D)
+0:33              'g_tTex2df4' (uniform texture2D)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp isampler2D)
+0:34              'g_tTex2di4' (uniform itexture2D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?             Constant:
+0:?               1 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp usampler2D)
+0:35              'g_tTex2du4' (uniform utexture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?             Constant:
+0:?               1 (const int)
+0:?               -1 (const int)
+0:40      move second child to first child (temp 4-component vector of float)
+0:40        Color: direct index for structure (temp 4-component vector of float)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            0 (const int)
+0:40        Constant:
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:40          1.000000
+0:41      move second child to first child (temp float)
+0:41        Depth: direct index for structure (temp float FragDepth)
+0:41          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:41          Constant:
+0:41            1 (const int)
+0:41        Constant:
+0:41          1.000000
+0:43      Branch: Return with expression
+0:43        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 100
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval20"
+                              Name 12  "g_tTex2df4"
+                              Name 16  "g_sSamp"
+                              Name 32  "txval21"
+                              Name 35  "g_tTex2di4"
+                              Name 48  "txval22"
+                              Name 51  "g_tTex2du4"
+                              Name 62  "PS_OUTPUT"
+                              MemberName 62(PS_OUTPUT) 0  "Color"
+                              MemberName 62(PS_OUTPUT) 1  "Depth"
+                              Name 64  "psout"
+                              Name 74  "g_tTex1df4a"
+                              Name 75  "g_tTex1df4"
+                              Name 78  "g_tTex1di4"
+                              Name 81  "g_tTex1du4"
+                              Name 84  "g_tTex3df4"
+                              Name 87  "g_tTex3di4"
+                              Name 90  "g_tTex3du4"
+                              Name 93  "g_tTexcdf4"
+                              Name 96  "g_tTexcdi4"
+                              Name 99  "g_tTexcdu4"
+                              Decorate 12(g_tTex2df4) DescriptorSet 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 35(g_tTex2di4) DescriptorSet 0
+                              Decorate 51(g_tTex2du4) DescriptorSet 0
+                              MemberDecorate 62(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 74(g_tTex1df4a) DescriptorSet 0
+                              Decorate 74(g_tTex1df4a) Binding 1
+                              Decorate 75(g_tTex1df4) DescriptorSet 0
+                              Decorate 75(g_tTex1df4) Binding 0
+                              Decorate 78(g_tTex1di4) DescriptorSet 0
+                              Decorate 81(g_tTex1du4) DescriptorSet 0
+                              Decorate 84(g_tTex3df4) DescriptorSet 0
+                              Decorate 87(g_tTex3di4) DescriptorSet 0
+                              Decorate 90(g_tTex3du4) DescriptorSet 0
+                              Decorate 93(g_tTexcdf4) DescriptorSet 0
+                              Decorate 96(g_tTexcdi4) DescriptorSet 0
+                              Decorate 99(g_tTexcdu4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex2df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:   20(fvec2) ConstantComposite 21 22
+              24:             TypeInt 32 1
+              25:             TypeVector 24(int) 2
+              26:     24(int) Constant 1
+              27:     24(int) Constant 0
+              28:   25(ivec2) ConstantComposite 26 27
+              30:             TypeVector 24(int) 4
+              31:             TypePointer Function 30(ivec4)
+              33:             TypeImage 24(int) 2D sampled format:Unknown
+              34:             TypePointer UniformConstant 33
+  35(g_tTex2di4):     34(ptr) Variable UniformConstant
+              38:             TypeSampledImage 33
+              40:    6(float) Constant 1050253722
+              41:    6(float) Constant 1053609165
+              42:   20(fvec2) ConstantComposite 40 41
+              43:   25(ivec2) ConstantComposite 26 26
+              45:             TypeInt 32 0
+              46:             TypeVector 45(int) 4
+              47:             TypePointer Function 46(ivec4)
+              49:             TypeImage 45(int) 2D sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+  51(g_tTex2du4):     50(ptr) Variable UniformConstant
+              54:             TypeSampledImage 49
+              56:    6(float) Constant 1056964608
+              57:    6(float) Constant 1058642330
+              58:   20(fvec2) ConstantComposite 56 57
+              59:     24(int) Constant 4294967295
+              60:   25(ivec2) ConstantComposite 26 59
+   62(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+              63:             TypePointer Function 62(PS_OUTPUT)
+              65:    6(float) Constant 1065353216
+              66:    7(fvec4) ConstantComposite 65 65 65 65
+              68:             TypePointer Function 6(float)
+              72:             TypeImage 6(float) 1D sampled format:Unknown
+              73:             TypePointer UniformConstant 72
+ 74(g_tTex1df4a):     73(ptr) Variable UniformConstant
+  75(g_tTex1df4):     73(ptr) Variable UniformConstant
+              76:             TypeImage 24(int) 1D sampled format:Unknown
+              77:             TypePointer UniformConstant 76
+  78(g_tTex1di4):     77(ptr) Variable UniformConstant
+              79:             TypeImage 45(int) 1D sampled format:Unknown
+              80:             TypePointer UniformConstant 79
+  81(g_tTex1du4):     80(ptr) Variable UniformConstant
+              82:             TypeImage 6(float) 3D sampled format:Unknown
+              83:             TypePointer UniformConstant 82
+  84(g_tTex3df4):     83(ptr) Variable UniformConstant
+              85:             TypeImage 24(int) 3D sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+  87(g_tTex3di4):     86(ptr) Variable UniformConstant
+              88:             TypeImage 45(int) 3D sampled format:Unknown
+              89:             TypePointer UniformConstant 88
+  90(g_tTex3du4):     89(ptr) Variable UniformConstant
+              91:             TypeImage 6(float) Cube sampled format:Unknown
+              92:             TypePointer UniformConstant 91
+  93(g_tTexcdf4):     92(ptr) Variable UniformConstant
+              94:             TypeImage 24(int) Cube sampled format:Unknown
+              95:             TypePointer UniformConstant 94
+  96(g_tTexcdi4):     95(ptr) Variable UniformConstant
+              97:             TypeImage 45(int) Cube sampled format:Unknown
+              98:             TypePointer UniformConstant 97
+  99(g_tTexcdu4):     98(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval20):      8(ptr) Variable Function
+     32(txval21):     31(ptr) Variable Function
+     48(txval22):     47(ptr) Variable Function
+       64(psout):     63(ptr) Variable Function
+              13:          10 Load 12(g_tTex2df4)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              29:    7(fvec4) ImageGather 19 23 27 ConstOffset 28
+                              Store 9(txval20) 29
+              36:          33 Load 35(g_tTex2di4)
+              37:          14 Load 16(g_sSamp)
+              39:          38 SampledImage 36 37
+              44:   30(ivec4) ImageGather 39 42 27 ConstOffset 43
+                              Store 32(txval21) 44
+              52:          49 Load 51(g_tTex2du4)
+              53:          14 Load 16(g_sSamp)
+              55:          54 SampledImage 52 53
+              61:   46(ivec4) ImageGather 55 58 27 ConstOffset 60
+                              Store 48(txval22) 61
+              67:      8(ptr) AccessChain 64(psout) 27
+                              Store 67 66
+              69:     68(ptr) AccessChain 64(psout) 26
+                              Store 69 65
+              70:62(PS_OUTPUT) Load 64(psout)
+                              ReturnValue 70
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
new file mode 100644
index 0000000..a1f628a
--- /dev/null
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -0,0 +1,285 @@
+hlsl.gather.offsetarray.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:37  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler2DArray)
+0:25              'g_tTex2df4' (uniform texture2DArray)
+0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp isampler2DArray)
+0:26              'g_tTex2di4' (uniform itexture2DArray)
+0:26              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?               0.400000
+0:?             Constant:
+0:?               1 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp usampler2DArray)
+0:27              'g_tTex2du4' (uniform utexture2DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+0:?             Constant:
+0:?               1 (const int)
+0:?               -1 (const int)
+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, temp float FragDepth Depth})
+0:32          Constant:
+0:32            0 (const int)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:33      move second child to first child (temp float)
+0:33        Depth: direct index for structure (temp float FragDepth)
+0:33          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:33          Constant:
+0:33            1 (const int)
+0:33        Constant:
+0:33          1.000000
+0:35      Branch: Return with expression
+0:35        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:?     'g_tTex1di4' (uniform itexture1DArray)
+0:?     'g_tTex1du4' (uniform utexture1DArray)
+0:?     'g_tTex2df4' (uniform texture2DArray)
+0:?     'g_tTex2di4' (uniform itexture2DArray)
+0:?     'g_tTex2du4' (uniform utexture2DArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:37  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler2DArray)
+0:25              'g_tTex2df4' (uniform texture2DArray)
+0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp isampler2DArray)
+0:26              'g_tTex2di4' (uniform itexture2DArray)
+0:26              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?               0.400000
+0:?             Constant:
+0:?               1 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp usampler2DArray)
+0:27              'g_tTex2du4' (uniform utexture2DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+0:?             Constant:
+0:?               1 (const int)
+0:?               -1 (const int)
+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, temp float FragDepth Depth})
+0:32          Constant:
+0:32            0 (const int)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:33      move second child to first child (temp float)
+0:33        Depth: direct index for structure (temp float FragDepth)
+0:33          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:33          Constant:
+0:33            1 (const int)
+0:33        Constant:
+0:33          1.000000
+0:35      Branch: Return with expression
+0:35        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:?     'g_tTex1di4' (uniform itexture1DArray)
+0:?     'g_tTex1du4' (uniform utexture1DArray)
+0:?     'g_tTex2df4' (uniform texture2DArray)
+0:?     'g_tTex2di4' (uniform itexture2DArray)
+0:?     'g_tTex2du4' (uniform utexture2DArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 83
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval20"
+                              Name 12  "g_tTex2df4"
+                              Name 16  "g_sSamp"
+                              Name 33  "txval21"
+                              Name 36  "g_tTex2di4"
+                              Name 48  "txval22"
+                              Name 51  "g_tTex2du4"
+                              Name 63  "PS_OUTPUT"
+                              MemberName 63(PS_OUTPUT) 0  "Color"
+                              MemberName 63(PS_OUTPUT) 1  "Depth"
+                              Name 65  "psout"
+                              Name 75  "g_tTex1df4a"
+                              Name 76  "g_tTex1df4"
+                              Name 79  "g_tTex1di4"
+                              Name 82  "g_tTex1du4"
+                              Decorate 12(g_tTex2df4) DescriptorSet 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 36(g_tTex2di4) DescriptorSet 0
+                              Decorate 51(g_tTex2du4) DescriptorSet 0
+                              MemberDecorate 63(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 75(g_tTex1df4a) DescriptorSet 0
+                              Decorate 75(g_tTex1df4a) Binding 1
+                              Decorate 76(g_tTex1df4) DescriptorSet 0
+                              Decorate 76(g_tTex1df4) Binding 0
+                              Decorate 79(g_tTex1di4) DescriptorSet 0
+                              Decorate 82(g_tTex1du4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D array sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex2df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeVector 6(float) 3
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:    6(float) Constant 1050253722
+              24:   20(fvec3) ConstantComposite 21 22 23
+              25:             TypeInt 32 1
+              26:             TypeVector 25(int) 2
+              27:     25(int) Constant 1
+              28:     25(int) Constant 0
+              29:   26(ivec2) ConstantComposite 27 28
+              31:             TypeVector 25(int) 4
+              32:             TypePointer Function 31(ivec4)
+              34:             TypeImage 25(int) 2D array sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+  36(g_tTex2di4):     35(ptr) Variable UniformConstant
+              39:             TypeSampledImage 34
+              41:    6(float) Constant 1053609165
+              42:   20(fvec3) ConstantComposite 23 41 41
+              43:   26(ivec2) ConstantComposite 27 27
+              45:             TypeInt 32 0
+              46:             TypeVector 45(int) 4
+              47:             TypePointer Function 46(ivec4)
+              49:             TypeImage 45(int) 2D array sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+  51(g_tTex2du4):     50(ptr) Variable UniformConstant
+              54:             TypeSampledImage 49
+              56:    6(float) Constant 1056964608
+              57:    6(float) Constant 1058642330
+              58:    6(float) Constant 1060320051
+              59:   20(fvec3) ConstantComposite 56 57 58
+              60:     25(int) Constant 4294967295
+              61:   26(ivec2) ConstantComposite 27 60
+   63(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+              64:             TypePointer Function 63(PS_OUTPUT)
+              66:    6(float) Constant 1065353216
+              67:    7(fvec4) ConstantComposite 66 66 66 66
+              69:             TypePointer Function 6(float)
+              73:             TypeImage 6(float) 1D array sampled format:Unknown
+              74:             TypePointer UniformConstant 73
+ 75(g_tTex1df4a):     74(ptr) Variable UniformConstant
+  76(g_tTex1df4):     74(ptr) Variable UniformConstant
+              77:             TypeImage 25(int) 1D array sampled format:Unknown
+              78:             TypePointer UniformConstant 77
+  79(g_tTex1di4):     78(ptr) Variable UniformConstant
+              80:             TypeImage 45(int) 1D array sampled format:Unknown
+              81:             TypePointer UniformConstant 80
+  82(g_tTex1du4):     81(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval20):      8(ptr) Variable Function
+     33(txval21):     32(ptr) Variable Function
+     48(txval22):     47(ptr) Variable Function
+       65(psout):     64(ptr) Variable Function
+              13:          10 Load 12(g_tTex2df4)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              30:    7(fvec4) ImageGather 19 24 28 ConstOffset 29
+                              Store 9(txval20) 30
+              37:          34 Load 36(g_tTex2di4)
+              38:          14 Load 16(g_sSamp)
+              40:          39 SampledImage 37 38
+              44:   31(ivec4) ImageGather 40 42 28 ConstOffset 43
+                              Store 33(txval21) 44
+              52:          49 Load 51(g_tTex2du4)
+              53:          14 Load 16(g_sSamp)
+              55:          54 SampledImage 52 53
+              62:   46(ivec4) ImageGather 55 59 28 ConstOffset 61
+                              Store 48(txval22) 62
+              68:      8(ptr) AccessChain 65(psout) 28
+                              Store 68 67
+              70:     69(ptr) AccessChain 65(psout) 27
+                              Store 70 66
+              71:63(PS_OUTPUT) Load 65(psout)
+                              ReturnValue 71
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
new file mode 100644
index 0000000..cad56b6
--- /dev/null
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -0,0 +1,884 @@
+hlsl.gatherRGBA.array.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:72  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            Constant:
+0:65              3 (const int)
+0:67      move second child to first child (temp 4-component vector of float)
+0:67        Color: direct index for structure (temp 4-component vector of float)
+0:67          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:67          Constant:
+0:67            0 (const int)
+0:67        Constant:
+0:67          1.000000
+0:67          1.000000
+0:67          1.000000
+0:67          1.000000
+0:68      move second child to first child (temp float)
+0:68        Depth: direct index for structure (temp float FragDepth)
+0:68          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:68          Constant:
+0:68            1 (const int)
+0:68        Constant:
+0:68          1.000000
+0:70      Branch: Return with expression
+0:70        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=0 ) 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:?     '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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:72  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            Constant:
+0:65              3 (const int)
+0:67      move second child to first child (temp 4-component vector of float)
+0:67        Color: direct index for structure (temp 4-component vector of float)
+0:67          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:67          Constant:
+0:67            0 (const int)
+0:67        Constant:
+0:67          1.000000
+0:67          1.000000
+0:67          1.000000
+0:67          1.000000
+0:68      move second child to first child (temp float)
+0:68        Depth: direct index for structure (temp float FragDepth)
+0:68          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:68          Constant:
+0:68            1 (const int)
+0:68        Constant:
+0:68          1.000000
+0:70      Branch: Return with expression
+0:70        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=0 ) 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:?     '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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 220
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 205  "g_sSamp2d"
+                              Name 208  "g_tTex1df4a"
+                              Name 211  "g_tTex1di4a"
+                              Name 214  "g_tTex1du4a"
+                              Name 216  "c1"
+                              Name 219  "c2"
+                              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
+                              MemberDecorate 195(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 205(g_sSamp2d) DescriptorSet 0
+                              Decorate 208(g_tTex1df4a) DescriptorSet 0
+                              Decorate 208(g_tTex1df4a) Binding 0
+                              Decorate 211(g_tTex1di4a) DescriptorSet 0
+                              Decorate 214(g_tTex1du4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D array sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+ 12(g_tTex2df4a):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              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)
+  205(g_sSamp2d):     15(ptr) Variable UniformConstant
+             206:             TypeImage 6(float) 1D array sampled format:Unknown
+             207:             TypePointer UniformConstant 206
+208(g_tTex1df4a):    207(ptr) Variable UniformConstant
+             209:             TypeImage 24(int) 1D array sampled format:Unknown
+             210:             TypePointer UniformConstant 209
+211(g_tTex1di4a):    210(ptr) Variable UniformConstant
+             212:             TypeImage 39(int) 1D array sampled format:Unknown
+             213:             TypePointer UniformConstant 212
+214(g_tTex1du4a):    213(ptr) Variable UniformConstant
+             215:             TypePointer UniformConstant 6(float)
+         216(c1):    215(ptr) Variable UniformConstant
+             217:             TypeVector 6(float) 2
+             218:             TypePointer UniformConstant 217(fvec2)
+         219(c2):    218(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
+              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)
+              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)
+             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
+             203:195(PS_OUTPUT) Load 197(psout)
+                              ReturnValue 203
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
new file mode 100644
index 0000000..8fd9691
--- /dev/null
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -0,0 +1,910 @@
+hlsl.gatherRGBA.basic.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:78  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            Constant:
+0:71              3 (const int)
+0:73      move second child to first child (temp 4-component vector of float)
+0:73        Color: direct index for structure (temp 4-component vector of float)
+0:73          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:73          Constant:
+0:73            0 (const int)
+0:73        Constant:
+0:73          1.000000
+0:73          1.000000
+0:73          1.000000
+0:73          1.000000
+0:74      move second child to first child (temp float)
+0:74        Depth: direct index for structure (temp float FragDepth)
+0:74          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:74          Constant:
+0:74            1 (const int)
+0:74        Constant:
+0:74          1.000000
+0:76      Branch: Return with expression
+0:76        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:78  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            Constant:
+0:71              3 (const int)
+0:73      move second child to first child (temp 4-component vector of float)
+0:73        Color: direct index for structure (temp 4-component vector of float)
+0:73          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:73          Constant:
+0:73            0 (const int)
+0:73        Constant:
+0:73          1.000000
+0:73          1.000000
+0:73          1.000000
+0:73          1.000000
+0:74      move second child to first child (temp float)
+0:74        Depth: direct index for structure (temp float FragDepth)
+0:74          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:74          Constant:
+0:74            1 (const int)
+0:74        Constant:
+0:74          1.000000
+0:76      Branch: Return with expression
+0:76        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 230
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 206  "g_sSamp2d"
+                              Name 209  "g_tTex1df4a"
+                              Name 210  "g_tTex1df4"
+                              Name 213  "g_tTex1di4"
+                              Name 216  "g_tTex1du4"
+                              Name 219  "g_tTex3df4"
+                              Name 222  "g_tTex3di4"
+                              Name 225  "g_tTex3du4"
+                              Name 227  "c1"
+                              Name 229  "c4"
+                              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
+                              MemberDecorate 196(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 206(g_sSamp2d) DescriptorSet 0
+                              Decorate 209(g_tTex1df4a) DescriptorSet 0
+                              Decorate 209(g_tTex1df4a) Binding 1
+                              Decorate 210(g_tTex1df4) DescriptorSet 0
+                              Decorate 210(g_tTex1df4) Binding 0
+                              Decorate 213(g_tTex1di4) DescriptorSet 0
+                              Decorate 216(g_tTex1du4) DescriptorSet 0
+                              Decorate 219(g_tTex3df4) DescriptorSet 0
+                              Decorate 222(g_tTex3di4) DescriptorSet 0
+                              Decorate 225(g_tTex3du4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex2df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     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)
+  206(g_sSamp2d):     15(ptr) Variable UniformConstant
+             207:             TypeImage 6(float) 1D sampled format:Unknown
+             208:             TypePointer UniformConstant 207
+209(g_tTex1df4a):    208(ptr) Variable UniformConstant
+ 210(g_tTex1df4):    208(ptr) Variable UniformConstant
+             211:             TypeImage 24(int) 1D sampled format:Unknown
+             212:             TypePointer UniformConstant 211
+ 213(g_tTex1di4):    212(ptr) Variable UniformConstant
+             214:             TypeImage 39(int) 1D sampled format:Unknown
+             215:             TypePointer UniformConstant 214
+ 216(g_tTex1du4):    215(ptr) Variable UniformConstant
+             217:             TypeImage 6(float) 3D sampled format:Unknown
+             218:             TypePointer UniformConstant 217
+ 219(g_tTex3df4):    218(ptr) Variable UniformConstant
+             220:             TypeImage 24(int) 3D sampled format:Unknown
+             221:             TypePointer UniformConstant 220
+ 222(g_tTex3di4):    221(ptr) Variable UniformConstant
+             223:             TypeImage 39(int) 3D sampled format:Unknown
+             224:             TypePointer UniformConstant 223
+ 225(g_tTex3du4):    224(ptr) Variable UniformConstant
+             226:             TypePointer UniformConstant 6(float)
+         227(c1):    226(ptr) Variable UniformConstant
+             228:             TypePointer UniformConstant 7(fvec4)
+         229(c4):    228(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
+              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)
+              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)
+             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
+             204:196(PS_OUTPUT) Load 198(psout)
+                              ReturnValue 204
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
new file mode 100644
index 0000000..ea0d94a
--- /dev/null
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -0,0 +1,1148 @@
+hlsl.gatherRGBA.offset.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:117  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            Constant:
+0:100              3 (const int)
+0:112      move second child to first child (temp 4-component vector of float)
+0:112        Color: direct index for structure (temp 4-component vector of float)
+0:112          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:112          Constant:
+0:112            0 (const int)
+0:112        Constant:
+0:112          1.000000
+0:112          1.000000
+0:112          1.000000
+0:112          1.000000
+0:113      move second child to first child (temp float)
+0:113        Depth: direct index for structure (temp float FragDepth)
+0:113          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:113          Constant:
+0:113            1 (const int)
+0:113        Constant:
+0:113          1.000000
+0:115      Branch: Return with expression
+0:115        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:117  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            Constant:
+0:100              3 (const int)
+0:112      move second child to first child (temp 4-component vector of float)
+0:112        Color: direct index for structure (temp 4-component vector of float)
+0:112          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:112          Constant:
+0:112            0 (const int)
+0:112        Constant:
+0:112          1.000000
+0:112          1.000000
+0:112          1.000000
+0:112          1.000000
+0:113      move second child to first child (temp float)
+0:113        Depth: direct index for structure (temp float FragDepth)
+0:113          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:113          Constant:
+0:113            1 (const int)
+0:113        Constant:
+0:113          1.000000
+0:115      Branch: Return with expression
+0:115        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 311
+
+                              Capability Shader
+                              Capability ImageGatherExtended
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 268  "g_sSamp2d"
+                              Name 271  "g_tTex1df4a"
+                              Name 272  "g_tTex1df4"
+                              Name 275  "g_tTex1di4"
+                              Name 278  "g_tTex1du4"
+                              Name 281  "g_tTex3df4"
+                              Name 284  "g_tTex3di4"
+                              Name 287  "g_tTex3du4"
+                              Name 290  "g_tTexcdf4"
+                              Name 293  "g_tTexcdi4"
+                              Name 296  "g_tTexcdu4"
+                              Name 298  "c1"
+                              Name 301  "c3"
+                              Name 303  "c4"
+                              Name 305  "o1"
+                              Name 308  "o3"
+                              Name 310  "o4"
+                              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
+                              MemberDecorate 258(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 268(g_sSamp2d) DescriptorSet 0
+                              Decorate 271(g_tTex1df4a) DescriptorSet 0
+                              Decorate 271(g_tTex1df4a) Binding 1
+                              Decorate 272(g_tTex1df4) DescriptorSet 0
+                              Decorate 272(g_tTex1df4) Binding 0
+                              Decorate 275(g_tTex1di4) DescriptorSet 0
+                              Decorate 278(g_tTex1du4) DescriptorSet 0
+                              Decorate 281(g_tTex3df4) DescriptorSet 0
+                              Decorate 284(g_tTex3di4) DescriptorSet 0
+                              Decorate 287(g_tTex3du4) DescriptorSet 0
+                              Decorate 290(g_tTexcdf4) DescriptorSet 0
+                              Decorate 293(g_tTexcdi4) DescriptorSet 0
+                              Decorate 296(g_tTexcdu4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex2df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     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)
+  268(g_sSamp2d):     15(ptr) Variable UniformConstant
+             269:             TypeImage 6(float) 1D sampled format:Unknown
+             270:             TypePointer UniformConstant 269
+271(g_tTex1df4a):    270(ptr) Variable UniformConstant
+ 272(g_tTex1df4):    270(ptr) Variable UniformConstant
+             273:             TypeImage 24(int) 1D sampled format:Unknown
+             274:             TypePointer UniformConstant 273
+ 275(g_tTex1di4):    274(ptr) Variable UniformConstant
+             276:             TypeImage 44(int) 1D sampled format:Unknown
+             277:             TypePointer UniformConstant 276
+ 278(g_tTex1du4):    277(ptr) Variable UniformConstant
+             279:             TypeImage 6(float) 3D sampled format:Unknown
+             280:             TypePointer UniformConstant 279
+ 281(g_tTex3df4):    280(ptr) Variable UniformConstant
+             282:             TypeImage 24(int) 3D sampled format:Unknown
+             283:             TypePointer UniformConstant 282
+ 284(g_tTex3di4):    283(ptr) Variable UniformConstant
+             285:             TypeImage 44(int) 3D sampled format:Unknown
+             286:             TypePointer UniformConstant 285
+ 287(g_tTex3du4):    286(ptr) Variable UniformConstant
+             288:             TypeImage 6(float) Cube sampled format:Unknown
+             289:             TypePointer UniformConstant 288
+ 290(g_tTexcdf4):    289(ptr) Variable UniformConstant
+             291:             TypeImage 24(int) Cube sampled format:Unknown
+             292:             TypePointer UniformConstant 291
+ 293(g_tTexcdi4):    292(ptr) Variable UniformConstant
+             294:             TypeImage 44(int) Cube sampled format:Unknown
+             295:             TypePointer UniformConstant 294
+ 296(g_tTexcdu4):    295(ptr) Variable UniformConstant
+             297:             TypePointer UniformConstant 6(float)
+         298(c1):    297(ptr) Variable UniformConstant
+             299:             TypeVector 6(float) 3
+             300:             TypePointer UniformConstant 299(fvec3)
+         301(c3):    300(ptr) Variable UniformConstant
+             302:             TypePointer UniformConstant 7(fvec4)
+         303(c4):    302(ptr) Variable UniformConstant
+             304:             TypePointer UniformConstant 24(int)
+         305(o1):    304(ptr) Variable UniformConstant
+             306:             TypeVector 24(int) 3
+             307:             TypePointer UniformConstant 306(ivec3)
+         308(o3):    307(ptr) Variable UniformConstant
+             309:             TypePointer UniformConstant 31(ivec4)
+         310(o4):    309(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
+              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)
+             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
+             266:258(PS_OUTPUT) Load 260(psout)
+                              ReturnValue 266
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
new file mode 100644
index 0000000..f9c28d0
--- /dev/null
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -0,0 +1,1122 @@
+hlsl.gatherRGBA.offsetarray.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:111  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            Constant:
+0:94              3 (const int)
+0:106      move second child to first child (temp 4-component vector of float)
+0:106        Color: direct index for structure (temp 4-component vector of float)
+0:106          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:106          Constant:
+0:106            0 (const int)
+0:106        Constant:
+0:106          1.000000
+0:106          1.000000
+0:106          1.000000
+0:106          1.000000
+0:107      move second child to first child (temp float)
+0:107        Depth: direct index for structure (temp float FragDepth)
+0:107          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:107          Constant:
+0:107            1 (const int)
+0:107        Constant:
+0:107          1.000000
+0:109      Branch: Return with expression
+0:109        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=0 ) 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:?     '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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:111  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            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            Constant:
+0:94              3 (const int)
+0:106      move second child to first child (temp 4-component vector of float)
+0:106        Color: direct index for structure (temp 4-component vector of float)
+0:106          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:106          Constant:
+0:106            0 (const int)
+0:106        Constant:
+0:106          1.000000
+0:106          1.000000
+0:106          1.000000
+0:106          1.000000
+0:107      move second child to first child (temp float)
+0:107        Depth: direct index for structure (temp float FragDepth)
+0:107          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:107          Constant:
+0:107            1 (const int)
+0:107        Constant:
+0:107          1.000000
+0:109      Branch: Return with expression
+0:109        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=0 ) 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:?     '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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 301
+
+                              Capability Shader
+                              Capability ImageGatherExtended
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 268  "g_sSamp2d"
+                              Name 271  "g_tTex1df4a"
+                              Name 274  "g_tTex1di4a"
+                              Name 277  "g_tTex1du4a"
+                              Name 280  "g_tTexcdf4a"
+                              Name 283  "g_tTexcdi4a"
+                              Name 286  "g_tTexcdu4a"
+                              Name 288  "c1"
+                              Name 291  "c2"
+                              Name 293  "c4"
+                              Name 295  "o1"
+                              Name 298  "o3"
+                              Name 300  "o4"
+                              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
+                              MemberDecorate 258(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 268(g_sSamp2d) DescriptorSet 0
+                              Decorate 271(g_tTex1df4a) DescriptorSet 0
+                              Decorate 271(g_tTex1df4a) Binding 0
+                              Decorate 274(g_tTex1di4a) DescriptorSet 0
+                              Decorate 277(g_tTex1du4a) DescriptorSet 0
+                              Decorate 280(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 283(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 286(g_tTexcdu4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D array sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+ 12(g_tTex2df4a):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              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)
+  268(g_sSamp2d):     15(ptr) Variable UniformConstant
+             269:             TypeImage 6(float) 1D array sampled format:Unknown
+             270:             TypePointer UniformConstant 269
+271(g_tTex1df4a):    270(ptr) Variable UniformConstant
+             272:             TypeImage 24(int) 1D array sampled format:Unknown
+             273:             TypePointer UniformConstant 272
+274(g_tTex1di4a):    273(ptr) Variable UniformConstant
+             275:             TypeImage 44(int) 1D array sampled format:Unknown
+             276:             TypePointer UniformConstant 275
+277(g_tTex1du4a):    276(ptr) Variable UniformConstant
+             278:             TypeImage 6(float) Cube array sampled format:Unknown
+             279:             TypePointer UniformConstant 278
+280(g_tTexcdf4a):    279(ptr) Variable UniformConstant
+             281:             TypeImage 24(int) Cube array sampled format:Unknown
+             282:             TypePointer UniformConstant 281
+283(g_tTexcdi4a):    282(ptr) Variable UniformConstant
+             284:             TypeImage 44(int) Cube array sampled format:Unknown
+             285:             TypePointer UniformConstant 284
+286(g_tTexcdu4a):    285(ptr) Variable UniformConstant
+             287:             TypePointer UniformConstant 6(float)
+         288(c1):    287(ptr) Variable UniformConstant
+             289:             TypeVector 6(float) 2
+             290:             TypePointer UniformConstant 289(fvec2)
+         291(c2):    290(ptr) Variable UniformConstant
+             292:             TypePointer UniformConstant 7(fvec4)
+         293(c4):    292(ptr) Variable UniformConstant
+             294:             TypePointer UniformConstant 24(int)
+         295(o1):    294(ptr) Variable UniformConstant
+             296:             TypeVector 24(int) 3
+             297:             TypePointer UniformConstant 296(ivec3)
+         298(o3):    297(ptr) Variable UniformConstant
+             299:             TypePointer UniformConstant 31(ivec4)
+         300(o4):    299(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
+              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)
+             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
+             266:258(PS_OUTPUT) Load 260(psout)
+                              ReturnValue 266
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index c1556b4..dd47567 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -2,58 +2,14 @@
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:238  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
-0:38    Function Parameters: 
+0:281  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:46    Function Parameters: 
 0:?     Sequence
-0:57      Sequence
-0:57        move second child to first child (temp uint)
-0:57          'sizeQueryTemp' (temp uint)
-0:57          textureSize (temp uint)
-0:57            'g_tTex1df4' (uniform texture1D)
-0:57        move second child to first child (temp uint)
-0:57          'WidthU' (temp uint)
-0:57          'sizeQueryTemp' (temp uint)
-0:58      Sequence
-0:58        move second child to first child (temp uint)
-0:58          'sizeQueryTemp' (temp uint)
-0:58          textureSize (temp uint)
-0:58            'g_tTex1df4' (uniform texture1D)
-0:58            Constant:
-0:58              6 (const uint)
-0:58        move second child to first child (temp uint)
-0:58          'WidthU' (temp uint)
-0:58          'sizeQueryTemp' (temp uint)
-0:58        move second child to first child (temp uint)
-0:58          'NumberOfLevelsU' (temp uint)
-0:58          textureQueryLevels (temp uint)
-0:58            'g_tTex1df4' (uniform texture1D)
-0:61      Sequence
-0:61        move second child to first child (temp uint)
-0:61          'sizeQueryTemp' (temp uint)
-0:61          textureSize (temp uint)
-0:61            'g_tTex1di4' (uniform itexture1D)
-0:61        move second child to first child (temp uint)
-0:61          'WidthU' (temp uint)
-0:61          'sizeQueryTemp' (temp uint)
-0:62      Sequence
-0:62        move second child to first child (temp uint)
-0:62          'sizeQueryTemp' (temp uint)
-0:62          textureSize (temp uint)
-0:62            'g_tTex1di4' (uniform itexture1D)
-0:62            Constant:
-0:62              6 (const uint)
-0:62        move second child to first child (temp uint)
-0:62          'WidthU' (temp uint)
-0:62          'sizeQueryTemp' (temp uint)
-0:62        move second child to first child (temp uint)
-0:62          'NumberOfLevelsU' (temp uint)
-0:62          textureQueryLevels (temp uint)
-0:62            'g_tTex1di4' (uniform itexture1D)
 0:65      Sequence
 0:65        move second child to first child (temp uint)
 0:65          'sizeQueryTemp' (temp uint)
 0:65          textureSize (temp uint)
-0:65            'g_tTex1du4' (uniform utexture1D)
+0:65            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:65        move second child to first child (temp uint)
 0:65          'WidthU' (temp uint)
 0:65          'sizeQueryTemp' (temp uint)
@@ -61,7 +17,7 @@
 0:66        move second child to first child (temp uint)
 0:66          'sizeQueryTemp' (temp uint)
 0:66          textureSize (temp uint)
-0:66            'g_tTex1du4' (uniform utexture1D)
+0:66            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:66            Constant:
 0:66              6 (const uint)
 0:66        move second child to first child (temp uint)
@@ -70,92 +26,56 @@
 0:66        move second child to first child (temp uint)
 0:66          'NumberOfLevelsU' (temp uint)
 0:66          textureQueryLevels (temp uint)
-0:66            'g_tTex1du4' (uniform utexture1D)
+0:66            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:69      Sequence
-0:69        move second child to first child (temp 2-component vector of uint)
-0:69          'sizeQueryTemp' (temp 2-component vector of uint)
-0:69          textureSize (temp 2-component vector of uint)
-0:69            'g_tTex1df4a' (uniform texture1DArray)
+0:69        move second child to first child (temp uint)
+0:69          'sizeQueryTemp' (temp uint)
+0:69          textureSize (temp uint)
+0:69            'g_tTex1di4' (uniform itexture1D)
 0:69        move second child to first child (temp uint)
 0:69          'WidthU' (temp uint)
-0:69          direct index (temp uint)
-0:69            'sizeQueryTemp' (temp 2-component vector of uint)
-0:69            Constant:
-0:69              0 (const int)
-0:69        move second child to first child (temp uint)
-0:69          'ElementsU' (temp uint)
-0:69          direct index (temp uint)
-0:69            'sizeQueryTemp' (temp 2-component vector of uint)
-0:69            Constant:
-0:69              1 (const int)
+0:69          'sizeQueryTemp' (temp uint)
 0:70      Sequence
-0:70        move second child to first child (temp 2-component vector of uint)
-0:70          'sizeQueryTemp' (temp 2-component vector of uint)
-0:70          textureSize (temp 2-component vector of uint)
-0:70            'g_tTex1df4a' (uniform texture1DArray)
+0:70        move second child to first child (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:70          textureSize (temp uint)
+0:70            'g_tTex1di4' (uniform itexture1D)
 0:70            Constant:
 0:70              6 (const uint)
 0:70        move second child to first child (temp uint)
 0:70          'WidthU' (temp uint)
-0:70          direct index (temp uint)
-0:70            'sizeQueryTemp' (temp 2-component vector of uint)
-0:70            Constant:
-0:70              0 (const int)
-0:70        move second child to first child (temp uint)
-0:70          'ElementsU' (temp uint)
-0:70          direct index (temp uint)
-0:70            'sizeQueryTemp' (temp 2-component vector of uint)
-0:70            Constant:
-0:70              1 (const int)
+0:70          'sizeQueryTemp' (temp uint)
 0:70        move second child to first child (temp uint)
 0:70          'NumberOfLevelsU' (temp uint)
 0:70          textureQueryLevels (temp uint)
-0:70            'g_tTex1df4a' (uniform texture1DArray)
+0:70            'g_tTex1di4' (uniform itexture1D)
 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          textureSize (temp 2-component vector of uint)
-0:73            'g_tTex1di4a' (uniform itexture1DArray)
+0:73        move second child to first child (temp uint)
+0:73          'sizeQueryTemp' (temp uint)
+0:73          textureSize (temp uint)
+0:73            'g_tTex1du4' (uniform utexture1D)
 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:73          'sizeQueryTemp' (temp uint)
 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          textureSize (temp 2-component vector of uint)
-0:74            'g_tTex1di4a' (uniform itexture1DArray)
+0:74        move second child to first child (temp uint)
+0:74          'sizeQueryTemp' (temp uint)
+0:74          textureSize (temp uint)
+0:74            'g_tTex1du4' (uniform utexture1D)
 0:74            Constant:
 0:74              6 (const uint)
 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:74          'sizeQueryTemp' (temp uint)
 0:74        move second child to first child (temp uint)
 0:74          'NumberOfLevelsU' (temp uint)
 0:74          textureQueryLevels (temp uint)
-0:74            'g_tTex1di4a' (uniform itexture1DArray)
+0:74            'g_tTex1du4' (uniform utexture1D)
 0:77      Sequence
 0:77        move second child to first child (temp 2-component vector of uint)
 0:77          'sizeQueryTemp' (temp 2-component vector of uint)
 0:77          textureSize (temp 2-component vector of uint)
-0:77            'g_tTex1du4a' (uniform utexture1DArray)
+0:77            'g_tTex1df4a' (uniform texture1DArray)
 0:77        move second child to first child (temp uint)
 0:77          'WidthU' (temp uint)
 0:77          direct index (temp uint)
@@ -172,7 +92,7 @@
 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          textureSize (temp 2-component vector of uint)
-0:78            'g_tTex1du4a' (uniform utexture1DArray)
+0:78            'g_tTex1df4a' (uniform texture1DArray)
 0:78            Constant:
 0:78              6 (const uint)
 0:78        move second child to first child (temp uint)
@@ -190,12 +110,12 @@
 0:78        move second child to first child (temp uint)
 0:78          'NumberOfLevelsU' (temp uint)
 0:78          textureQueryLevels (temp uint)
-0:78            'g_tTex1du4a' (uniform utexture1DArray)
+0:78            'g_tTex1df4a' (uniform texture1DArray)
 0:81      Sequence
 0:81        move second child to first child (temp 2-component vector of uint)
 0:81          'sizeQueryTemp' (temp 2-component vector of uint)
 0:81          textureSize (temp 2-component vector of uint)
-0:81            'g_tTex2df4' (uniform texture2D)
+0:81            'g_tTex1di4a' (uniform itexture1DArray)
 0:81        move second child to first child (temp uint)
 0:81          'WidthU' (temp uint)
 0:81          direct index (temp uint)
@@ -203,7 +123,7 @@
 0:81            Constant:
 0:81              0 (const int)
 0:81        move second child to first child (temp uint)
-0:81          'HeightU' (temp uint)
+0:81          'ElementsU' (temp uint)
 0:81          direct index (temp uint)
 0:81            'sizeQueryTemp' (temp 2-component vector of uint)
 0:81            Constant:
@@ -212,7 +132,7 @@
 0:82        move second child to first child (temp 2-component vector of uint)
 0:82          'sizeQueryTemp' (temp 2-component vector of uint)
 0:82          textureSize (temp 2-component vector of uint)
-0:82            'g_tTex2df4' (uniform texture2D)
+0:82            'g_tTex1di4a' (uniform itexture1DArray)
 0:82            Constant:
 0:82              6 (const uint)
 0:82        move second child to first child (temp uint)
@@ -222,7 +142,7 @@
 0:82            Constant:
 0:82              0 (const int)
 0:82        move second child to first child (temp uint)
-0:82          'HeightU' (temp uint)
+0:82          'ElementsU' (temp uint)
 0:82          direct index (temp uint)
 0:82            'sizeQueryTemp' (temp 2-component vector of uint)
 0:82            Constant:
@@ -230,12 +150,12 @@
 0:82        move second child to first child (temp uint)
 0:82          'NumberOfLevelsU' (temp uint)
 0:82          textureQueryLevels (temp uint)
-0:82            'g_tTex2df4' (uniform texture2D)
+0:82            'g_tTex1di4a' (uniform itexture1DArray)
 0:85      Sequence
 0:85        move second child to first child (temp 2-component vector of uint)
 0:85          'sizeQueryTemp' (temp 2-component vector of uint)
 0:85          textureSize (temp 2-component vector of uint)
-0:85            'g_tTex2di4' (uniform itexture2D)
+0:85            'g_tTex1du4a' (uniform utexture1DArray)
 0:85        move second child to first child (temp uint)
 0:85          'WidthU' (temp uint)
 0:85          direct index (temp uint)
@@ -243,7 +163,7 @@
 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          'ElementsU' (temp uint)
 0:85          direct index (temp uint)
 0:85            'sizeQueryTemp' (temp 2-component vector of uint)
 0:85            Constant:
@@ -252,7 +172,7 @@
 0:86        move second child to first child (temp 2-component vector of uint)
 0:86          'sizeQueryTemp' (temp 2-component vector of uint)
 0:86          textureSize (temp 2-component vector of uint)
-0:86            'g_tTex2di4' (uniform itexture2D)
+0:86            'g_tTex1du4a' (uniform utexture1DArray)
 0:86            Constant:
 0:86              6 (const uint)
 0:86        move second child to first child (temp uint)
@@ -262,7 +182,7 @@
 0:86            Constant:
 0:86              0 (const int)
 0:86        move second child to first child (temp uint)
-0:86          'HeightU' (temp uint)
+0:86          'ElementsU' (temp uint)
 0:86          direct index (temp uint)
 0:86            'sizeQueryTemp' (temp 2-component vector of uint)
 0:86            Constant:
@@ -270,12 +190,12 @@
 0:86        move second child to first child (temp uint)
 0:86          'NumberOfLevelsU' (temp uint)
 0:86          textureQueryLevels (temp uint)
-0:86            'g_tTex2di4' (uniform itexture2D)
+0:86            'g_tTex1du4a' (uniform utexture1DArray)
 0:89      Sequence
 0:89        move second child to first child (temp 2-component vector of uint)
 0:89          'sizeQueryTemp' (temp 2-component vector of uint)
 0:89          textureSize (temp 2-component vector of uint)
-0:89            'g_tTex2du4' (uniform utexture2D)
+0:89            'g_tTex2df4' (uniform texture2D)
 0:89        move second child to first child (temp uint)
 0:89          'WidthU' (temp uint)
 0:89          direct index (temp uint)
@@ -292,7 +212,7 @@
 0:90        move second child to first child (temp 2-component vector of uint)
 0:90          'sizeQueryTemp' (temp 2-component vector of uint)
 0:90          textureSize (temp 2-component vector of uint)
-0:90            'g_tTex2du4' (uniform utexture2D)
+0:90            'g_tTex2df4' (uniform texture2D)
 0:90            Constant:
 0:90              6 (const uint)
 0:90        move second child to first child (temp uint)
@@ -310,116 +230,92 @@
 0:90        move second child to first child (temp uint)
 0:90          'NumberOfLevelsU' (temp uint)
 0:90          textureQueryLevels (temp uint)
-0:90            'g_tTex2du4' (uniform utexture2D)
+0:90            'g_tTex2df4' (uniform texture2D)
 0:93      Sequence
-0:93        move second child to first child (temp 3-component vector of uint)
-0:93          'sizeQueryTemp' (temp 3-component vector of uint)
-0:93          textureSize (temp 3-component vector of uint)
-0:93            'g_tTex2df4a' (uniform texture2DArray)
+0:93        move second child to first child (temp 2-component vector of uint)
+0:93          'sizeQueryTemp' (temp 2-component vector of uint)
+0:93          textureSize (temp 2-component vector of uint)
+0:93            'g_tTex2di4' (uniform itexture2D)
 0:93        move second child to first child (temp uint)
 0:93          'WidthU' (temp uint)
 0:93          direct index (temp uint)
-0:93            'sizeQueryTemp' (temp 3-component vector of uint)
+0:93            'sizeQueryTemp' (temp 2-component vector of uint)
 0:93            Constant:
 0:93              0 (const int)
 0:93        move second child to first child (temp uint)
 0:93          'HeightU' (temp uint)
 0:93          direct index (temp uint)
-0:93            'sizeQueryTemp' (temp 3-component vector of uint)
+0:93            'sizeQueryTemp' (temp 2-component vector of uint)
 0:93            Constant:
 0:93              1 (const int)
-0:93        move second child to first child (temp uint)
-0:93          'ElementsU' (temp uint)
-0:93          direct index (temp uint)
-0:93            'sizeQueryTemp' (temp 3-component vector of uint)
-0:93            Constant:
-0:93              2 (const int)
 0:94      Sequence
-0:94        move second child to first child (temp 3-component vector of uint)
-0:94          'sizeQueryTemp' (temp 3-component vector of uint)
-0:94          textureSize (temp 3-component vector of uint)
-0:94            'g_tTex2df4a' (uniform texture2DArray)
+0:94        move second child to first child (temp 2-component vector of uint)
+0:94          'sizeQueryTemp' (temp 2-component vector of uint)
+0:94          textureSize (temp 2-component vector of uint)
+0:94            'g_tTex2di4' (uniform itexture2D)
 0:94            Constant:
 0:94              6 (const uint)
 0:94        move second child to first child (temp uint)
 0:94          'WidthU' (temp uint)
 0:94          direct index (temp uint)
-0:94            'sizeQueryTemp' (temp 3-component vector of uint)
+0:94            'sizeQueryTemp' (temp 2-component vector of uint)
 0:94            Constant:
 0:94              0 (const int)
 0:94        move second child to first child (temp uint)
 0:94          'HeightU' (temp uint)
 0:94          direct index (temp uint)
-0:94            'sizeQueryTemp' (temp 3-component vector of uint)
+0:94            'sizeQueryTemp' (temp 2-component vector of uint)
 0:94            Constant:
 0:94              1 (const int)
 0:94        move second child to first child (temp uint)
-0:94          'ElementsU' (temp uint)
-0:94          direct index (temp uint)
-0:94            'sizeQueryTemp' (temp 3-component vector of uint)
-0:94            Constant:
-0:94              2 (const int)
-0:94        move second child to first child (temp uint)
 0:94          'NumberOfLevelsU' (temp uint)
 0:94          textureQueryLevels (temp uint)
-0:94            'g_tTex2df4a' (uniform texture2DArray)
+0:94            'g_tTex2di4' (uniform itexture2D)
 0:97      Sequence
-0:97        move second child to first child (temp 3-component vector of uint)
-0:97          'sizeQueryTemp' (temp 3-component vector of uint)
-0:97          textureSize (temp 3-component vector of uint)
-0:97            'g_tTex2di4a' (uniform itexture2DArray)
+0:97        move second child to first child (temp 2-component vector of uint)
+0:97          'sizeQueryTemp' (temp 2-component vector of uint)
+0:97          textureSize (temp 2-component vector of uint)
+0:97            'g_tTex2du4' (uniform utexture2D)
 0:97        move second child to first child (temp uint)
 0:97          'WidthU' (temp uint)
 0:97          direct index (temp uint)
-0:97            'sizeQueryTemp' (temp 3-component vector of uint)
+0:97            'sizeQueryTemp' (temp 2-component vector of uint)
 0:97            Constant:
 0:97              0 (const int)
 0:97        move second child to first child (temp uint)
 0:97          'HeightU' (temp uint)
 0:97          direct index (temp uint)
-0:97            'sizeQueryTemp' (temp 3-component vector of uint)
+0:97            'sizeQueryTemp' (temp 2-component vector of uint)
 0:97            Constant:
 0:97              1 (const int)
-0:97        move second child to first child (temp uint)
-0:97          'ElementsU' (temp uint)
-0:97          direct index (temp uint)
-0:97            'sizeQueryTemp' (temp 3-component vector of uint)
-0:97            Constant:
-0:97              2 (const int)
 0:98      Sequence
-0:98        move second child to first child (temp 3-component vector of uint)
-0:98          'sizeQueryTemp' (temp 3-component vector of uint)
-0:98          textureSize (temp 3-component vector of uint)
-0:98            'g_tTex2di4a' (uniform itexture2DArray)
+0:98        move second child to first child (temp 2-component vector of uint)
+0:98          'sizeQueryTemp' (temp 2-component vector of uint)
+0:98          textureSize (temp 2-component vector of uint)
+0:98            'g_tTex2du4' (uniform utexture2D)
 0:98            Constant:
 0:98              6 (const uint)
 0:98        move second child to first child (temp uint)
 0:98          'WidthU' (temp uint)
 0:98          direct index (temp uint)
-0:98            'sizeQueryTemp' (temp 3-component vector of uint)
+0:98            'sizeQueryTemp' (temp 2-component vector of uint)
 0:98            Constant:
 0:98              0 (const int)
 0:98        move second child to first child (temp uint)
 0:98          'HeightU' (temp uint)
 0:98          direct index (temp uint)
-0:98            'sizeQueryTemp' (temp 3-component vector of uint)
+0:98            'sizeQueryTemp' (temp 2-component vector of uint)
 0:98            Constant:
 0:98              1 (const int)
 0:98        move second child to first child (temp uint)
-0:98          'ElementsU' (temp uint)
-0:98          direct index (temp uint)
-0:98            'sizeQueryTemp' (temp 3-component vector of uint)
-0:98            Constant:
-0:98              2 (const int)
-0:98        move second child to first child (temp uint)
 0:98          'NumberOfLevelsU' (temp uint)
 0:98          textureQueryLevels (temp uint)
-0:98            'g_tTex2di4a' (uniform itexture2DArray)
+0:98            'g_tTex2du4' (uniform utexture2D)
 0:101      Sequence
 0:101        move second child to first child (temp 3-component vector of uint)
 0:101          'sizeQueryTemp' (temp 3-component vector of uint)
 0:101          textureSize (temp 3-component vector of uint)
-0:101            'g_tTex2du4a' (uniform utexture2DArray)
+0:101            'g_tTex2df4a' (uniform texture2DArray)
 0:101        move second child to first child (temp uint)
 0:101          'WidthU' (temp uint)
 0:101          direct index (temp uint)
@@ -442,7 +338,7 @@
 0:102        move second child to first child (temp 3-component vector of uint)
 0:102          'sizeQueryTemp' (temp 3-component vector of uint)
 0:102          textureSize (temp 3-component vector of uint)
-0:102            'g_tTex2du4a' (uniform utexture2DArray)
+0:102            'g_tTex2df4a' (uniform texture2DArray)
 0:102            Constant:
 0:102              6 (const uint)
 0:102        move second child to first child (temp uint)
@@ -466,12 +362,12 @@
 0:102        move second child to first child (temp uint)
 0:102          'NumberOfLevelsU' (temp uint)
 0:102          textureQueryLevels (temp uint)
-0:102            'g_tTex2du4a' (uniform utexture2DArray)
+0:102            'g_tTex2df4a' (uniform texture2DArray)
 0:105      Sequence
 0:105        move second child to first child (temp 3-component vector of uint)
 0:105          'sizeQueryTemp' (temp 3-component vector of uint)
 0:105          textureSize (temp 3-component vector of uint)
-0:105            'g_tTex3df4' (uniform texture3D)
+0:105            'g_tTex2di4a' (uniform itexture2DArray)
 0:105        move second child to first child (temp uint)
 0:105          'WidthU' (temp uint)
 0:105          direct index (temp uint)
@@ -485,7 +381,7 @@
 0:105            Constant:
 0:105              1 (const int)
 0:105        move second child to first child (temp uint)
-0:105          'DepthU' (temp uint)
+0:105          'ElementsU' (temp uint)
 0:105          direct index (temp uint)
 0:105            'sizeQueryTemp' (temp 3-component vector of uint)
 0:105            Constant:
@@ -494,7 +390,7 @@
 0:106        move second child to first child (temp 3-component vector of uint)
 0:106          'sizeQueryTemp' (temp 3-component vector of uint)
 0:106          textureSize (temp 3-component vector of uint)
-0:106            'g_tTex3df4' (uniform texture3D)
+0:106            'g_tTex2di4a' (uniform itexture2DArray)
 0:106            Constant:
 0:106              6 (const uint)
 0:106        move second child to first child (temp uint)
@@ -510,7 +406,7 @@
 0:106            Constant:
 0:106              1 (const int)
 0:106        move second child to first child (temp uint)
-0:106          'DepthU' (temp uint)
+0:106          'ElementsU' (temp uint)
 0:106          direct index (temp uint)
 0:106            'sizeQueryTemp' (temp 3-component vector of uint)
 0:106            Constant:
@@ -518,12 +414,12 @@
 0:106        move second child to first child (temp uint)
 0:106          'NumberOfLevelsU' (temp uint)
 0:106          textureQueryLevels (temp uint)
-0:106            'g_tTex3df4' (uniform texture3D)
+0:106            'g_tTex2di4a' (uniform itexture2DArray)
 0:109      Sequence
 0:109        move second child to first child (temp 3-component vector of uint)
 0:109          'sizeQueryTemp' (temp 3-component vector of uint)
 0:109          textureSize (temp 3-component vector of uint)
-0:109            'g_tTex3di4' (uniform itexture3D)
+0:109            'g_tTex2du4a' (uniform utexture2DArray)
 0:109        move second child to first child (temp uint)
 0:109          'WidthU' (temp uint)
 0:109          direct index (temp uint)
@@ -537,7 +433,7 @@
 0:109            Constant:
 0:109              1 (const int)
 0:109        move second child to first child (temp uint)
-0:109          'DepthU' (temp uint)
+0:109          'ElementsU' (temp uint)
 0:109          direct index (temp uint)
 0:109            'sizeQueryTemp' (temp 3-component vector of uint)
 0:109            Constant:
@@ -546,7 +442,7 @@
 0:110        move second child to first child (temp 3-component vector of uint)
 0:110          'sizeQueryTemp' (temp 3-component vector of uint)
 0:110          textureSize (temp 3-component vector of uint)
-0:110            'g_tTex3di4' (uniform itexture3D)
+0:110            'g_tTex2du4a' (uniform utexture2DArray)
 0:110            Constant:
 0:110              6 (const uint)
 0:110        move second child to first child (temp uint)
@@ -562,7 +458,7 @@
 0:110            Constant:
 0:110              1 (const int)
 0:110        move second child to first child (temp uint)
-0:110          'DepthU' (temp uint)
+0:110          'ElementsU' (temp uint)
 0:110          direct index (temp uint)
 0:110            'sizeQueryTemp' (temp 3-component vector of uint)
 0:110            Constant:
@@ -570,12 +466,12 @@
 0:110        move second child to first child (temp uint)
 0:110          'NumberOfLevelsU' (temp uint)
 0:110          textureQueryLevels (temp uint)
-0:110            'g_tTex3di4' (uniform itexture3D)
+0:110            'g_tTex2du4a' (uniform utexture2DArray)
 0:113      Sequence
 0:113        move second child to first child (temp 3-component vector of uint)
 0:113          'sizeQueryTemp' (temp 3-component vector of uint)
 0:113          textureSize (temp 3-component vector of uint)
-0:113            'g_tTex3du4' (uniform utexture3D)
+0:113            'g_tTex3df4' (uniform texture3D)
 0:113        move second child to first child (temp uint)
 0:113          'WidthU' (temp uint)
 0:113          direct index (temp uint)
@@ -598,7 +494,7 @@
 0:114        move second child to first child (temp 3-component vector of uint)
 0:114          'sizeQueryTemp' (temp 3-component vector of uint)
 0:114          textureSize (temp 3-component vector of uint)
-0:114            'g_tTex3du4' (uniform utexture3D)
+0:114            'g_tTex3df4' (uniform texture3D)
 0:114            Constant:
 0:114              6 (const uint)
 0:114        move second child to first child (temp uint)
@@ -622,92 +518,116 @@
 0:114        move second child to first child (temp uint)
 0:114          'NumberOfLevelsU' (temp uint)
 0:114          textureQueryLevels (temp uint)
-0:114            'g_tTex3du4' (uniform utexture3D)
+0:114            'g_tTex3df4' (uniform texture3D)
 0:117      Sequence
-0:117        move second child to first child (temp 2-component vector of uint)
-0:117          'sizeQueryTemp' (temp 2-component vector of uint)
-0:117          textureSize (temp 2-component vector of uint)
-0:117            'g_tTexcdf4' (uniform textureCube)
+0:117        move second child to first child (temp 3-component vector of uint)
+0:117          'sizeQueryTemp' (temp 3-component vector of uint)
+0:117          textureSize (temp 3-component vector of uint)
+0:117            'g_tTex3di4' (uniform itexture3D)
 0:117        move second child to first child (temp uint)
 0:117          'WidthU' (temp uint)
 0:117          direct index (temp uint)
-0:117            'sizeQueryTemp' (temp 2-component vector of uint)
+0:117            'sizeQueryTemp' (temp 3-component vector of uint)
 0:117            Constant:
 0:117              0 (const int)
 0:117        move second child to first child (temp uint)
 0:117          'HeightU' (temp uint)
 0:117          direct index (temp uint)
-0:117            'sizeQueryTemp' (temp 2-component vector of uint)
+0:117            'sizeQueryTemp' (temp 3-component vector of uint)
 0:117            Constant:
 0:117              1 (const int)
+0:117        move second child to first child (temp uint)
+0:117          'DepthU' (temp uint)
+0:117          direct index (temp uint)
+0:117            'sizeQueryTemp' (temp 3-component vector of uint)
+0:117            Constant:
+0:117              2 (const int)
 0:118      Sequence
-0:118        move second child to first child (temp 2-component vector of uint)
-0:118          'sizeQueryTemp' (temp 2-component vector of uint)
-0:118          textureSize (temp 2-component vector of uint)
-0:118            'g_tTexcdf4' (uniform textureCube)
+0:118        move second child to first child (temp 3-component vector of uint)
+0:118          'sizeQueryTemp' (temp 3-component vector of uint)
+0:118          textureSize (temp 3-component vector of uint)
+0:118            'g_tTex3di4' (uniform itexture3D)
 0:118            Constant:
 0:118              6 (const uint)
 0:118        move second child to first child (temp uint)
 0:118          'WidthU' (temp uint)
 0:118          direct index (temp uint)
-0:118            'sizeQueryTemp' (temp 2-component vector of uint)
+0:118            'sizeQueryTemp' (temp 3-component vector of uint)
 0:118            Constant:
 0:118              0 (const int)
 0:118        move second child to first child (temp uint)
 0:118          'HeightU' (temp uint)
 0:118          direct index (temp uint)
-0:118            'sizeQueryTemp' (temp 2-component vector of uint)
+0:118            'sizeQueryTemp' (temp 3-component vector of uint)
 0:118            Constant:
 0:118              1 (const int)
 0:118        move second child to first child (temp uint)
+0:118          'DepthU' (temp uint)
+0:118          direct index (temp uint)
+0:118            'sizeQueryTemp' (temp 3-component vector of uint)
+0:118            Constant:
+0:118              2 (const int)
+0:118        move second child to first child (temp uint)
 0:118          'NumberOfLevelsU' (temp uint)
 0:118          textureQueryLevels (temp uint)
-0:118            'g_tTexcdf4' (uniform textureCube)
+0:118            'g_tTex3di4' (uniform itexture3D)
 0:121      Sequence
-0:121        move second child to first child (temp 2-component vector of uint)
-0:121          'sizeQueryTemp' (temp 2-component vector of uint)
-0:121          textureSize (temp 2-component vector of uint)
-0:121            'g_tTexcdi4' (uniform itextureCube)
+0:121        move second child to first child (temp 3-component vector of uint)
+0:121          'sizeQueryTemp' (temp 3-component vector of uint)
+0:121          textureSize (temp 3-component vector of uint)
+0:121            'g_tTex3du4' (uniform utexture3D)
 0:121        move second child to first child (temp uint)
 0:121          'WidthU' (temp uint)
 0:121          direct index (temp uint)
-0:121            'sizeQueryTemp' (temp 2-component vector of uint)
+0:121            'sizeQueryTemp' (temp 3-component vector of uint)
 0:121            Constant:
 0:121              0 (const int)
 0:121        move second child to first child (temp uint)
 0:121          'HeightU' (temp uint)
 0:121          direct index (temp uint)
-0:121            'sizeQueryTemp' (temp 2-component vector of uint)
+0:121            'sizeQueryTemp' (temp 3-component vector of uint)
 0:121            Constant:
 0:121              1 (const int)
+0:121        move second child to first child (temp uint)
+0:121          'DepthU' (temp uint)
+0:121          direct index (temp uint)
+0:121            'sizeQueryTemp' (temp 3-component vector of uint)
+0:121            Constant:
+0:121              2 (const int)
 0:122      Sequence
-0:122        move second child to first child (temp 2-component vector of uint)
-0:122          'sizeQueryTemp' (temp 2-component vector of uint)
-0:122          textureSize (temp 2-component vector of uint)
-0:122            'g_tTexcdi4' (uniform itextureCube)
+0:122        move second child to first child (temp 3-component vector of uint)
+0:122          'sizeQueryTemp' (temp 3-component vector of uint)
+0:122          textureSize (temp 3-component vector of uint)
+0:122            'g_tTex3du4' (uniform utexture3D)
 0:122            Constant:
 0:122              6 (const uint)
 0:122        move second child to first child (temp uint)
 0:122          'WidthU' (temp uint)
 0:122          direct index (temp uint)
-0:122            'sizeQueryTemp' (temp 2-component vector of uint)
+0:122            'sizeQueryTemp' (temp 3-component vector of uint)
 0:122            Constant:
 0:122              0 (const int)
 0:122        move second child to first child (temp uint)
 0:122          'HeightU' (temp uint)
 0:122          direct index (temp uint)
-0:122            'sizeQueryTemp' (temp 2-component vector of uint)
+0:122            'sizeQueryTemp' (temp 3-component vector of uint)
 0:122            Constant:
 0:122              1 (const int)
 0:122        move second child to first child (temp uint)
+0:122          'DepthU' (temp uint)
+0:122          direct index (temp uint)
+0:122            'sizeQueryTemp' (temp 3-component vector of uint)
+0:122            Constant:
+0:122              2 (const int)
+0:122        move second child to first child (temp uint)
 0:122          'NumberOfLevelsU' (temp uint)
 0:122          textureQueryLevels (temp uint)
-0:122            'g_tTexcdi4' (uniform itextureCube)
+0:122            'g_tTex3du4' (uniform utexture3D)
 0:125      Sequence
 0:125        move second child to first child (temp 2-component vector of uint)
 0:125          'sizeQueryTemp' (temp 2-component vector of uint)
 0:125          textureSize (temp 2-component vector of uint)
-0:125            'g_tTexcdu4' (uniform utextureCube)
+0:125            'g_tTexcdf4' (uniform textureCube)
 0:125        move second child to first child (temp uint)
 0:125          'WidthU' (temp uint)
 0:125          direct index (temp uint)
@@ -724,7 +644,7 @@
 0:126        move second child to first child (temp 2-component vector of uint)
 0:126          'sizeQueryTemp' (temp 2-component vector of uint)
 0:126          textureSize (temp 2-component vector of uint)
-0:126            'g_tTexcdu4' (uniform utextureCube)
+0:126            'g_tTexcdf4' (uniform textureCube)
 0:126            Constant:
 0:126              6 (const uint)
 0:126        move second child to first child (temp uint)
@@ -742,116 +662,92 @@
 0:126        move second child to first child (temp uint)
 0:126          'NumberOfLevelsU' (temp uint)
 0:126          textureQueryLevels (temp uint)
-0:126            'g_tTexcdu4' (uniform utextureCube)
+0:126            'g_tTexcdf4' (uniform textureCube)
 0:129      Sequence
-0:129        move second child to first child (temp 3-component vector of uint)
-0:129          'sizeQueryTemp' (temp 3-component vector of uint)
-0:129          textureSize (temp 3-component vector of uint)
-0:129            'g_tTexcdf4a' (uniform textureCubeArray)
+0:129        move second child to first child (temp 2-component vector of uint)
+0:129          'sizeQueryTemp' (temp 2-component vector of uint)
+0:129          textureSize (temp 2-component vector of uint)
+0:129            'g_tTexcdi4' (uniform itextureCube)
 0:129        move second child to first child (temp uint)
 0:129          'WidthU' (temp uint)
 0:129          direct index (temp uint)
-0:129            'sizeQueryTemp' (temp 3-component vector of uint)
+0:129            'sizeQueryTemp' (temp 2-component vector of uint)
 0:129            Constant:
 0:129              0 (const int)
 0:129        move second child to first child (temp uint)
 0:129          'HeightU' (temp uint)
 0:129          direct index (temp uint)
-0:129            'sizeQueryTemp' (temp 3-component vector of uint)
+0:129            'sizeQueryTemp' (temp 2-component vector of uint)
 0:129            Constant:
 0:129              1 (const int)
-0:129        move second child to first child (temp uint)
-0:129          'ElementsU' (temp uint)
-0:129          direct index (temp uint)
-0:129            'sizeQueryTemp' (temp 3-component vector of uint)
-0:129            Constant:
-0:129              2 (const int)
 0:130      Sequence
-0:130        move second child to first child (temp 3-component vector of uint)
-0:130          'sizeQueryTemp' (temp 3-component vector of uint)
-0:130          textureSize (temp 3-component vector of uint)
-0:130            'g_tTexcdf4a' (uniform textureCubeArray)
+0:130        move second child to first child (temp 2-component vector of uint)
+0:130          'sizeQueryTemp' (temp 2-component vector of uint)
+0:130          textureSize (temp 2-component vector of uint)
+0:130            'g_tTexcdi4' (uniform itextureCube)
 0:130            Constant:
 0:130              6 (const uint)
 0:130        move second child to first child (temp uint)
 0:130          'WidthU' (temp uint)
 0:130          direct index (temp uint)
-0:130            'sizeQueryTemp' (temp 3-component vector of uint)
+0:130            'sizeQueryTemp' (temp 2-component vector of uint)
 0:130            Constant:
 0:130              0 (const int)
 0:130        move second child to first child (temp uint)
 0:130          'HeightU' (temp uint)
 0:130          direct index (temp uint)
-0:130            'sizeQueryTemp' (temp 3-component vector of uint)
+0:130            'sizeQueryTemp' (temp 2-component vector of uint)
 0:130            Constant:
 0:130              1 (const int)
 0:130        move second child to first child (temp uint)
-0:130          'ElementsU' (temp uint)
-0:130          direct index (temp uint)
-0:130            'sizeQueryTemp' (temp 3-component vector of uint)
-0:130            Constant:
-0:130              2 (const int)
-0:130        move second child to first child (temp uint)
 0:130          'NumberOfLevelsU' (temp uint)
 0:130          textureQueryLevels (temp uint)
-0:130            'g_tTexcdf4a' (uniform textureCubeArray)
+0:130            'g_tTexcdi4' (uniform itextureCube)
 0:133      Sequence
-0:133        move second child to first child (temp 3-component vector of uint)
-0:133          'sizeQueryTemp' (temp 3-component vector of uint)
-0:133          textureSize (temp 3-component vector of uint)
-0:133            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:133        move second child to first child (temp 2-component vector of uint)
+0:133          'sizeQueryTemp' (temp 2-component vector of uint)
+0:133          textureSize (temp 2-component vector of uint)
+0:133            'g_tTexcdu4' (uniform utextureCube)
 0:133        move second child to first child (temp uint)
 0:133          'WidthU' (temp uint)
 0:133          direct index (temp uint)
-0:133            'sizeQueryTemp' (temp 3-component vector of uint)
+0:133            'sizeQueryTemp' (temp 2-component vector of uint)
 0:133            Constant:
 0:133              0 (const int)
 0:133        move second child to first child (temp uint)
 0:133          'HeightU' (temp uint)
 0:133          direct index (temp uint)
-0:133            'sizeQueryTemp' (temp 3-component vector of uint)
+0:133            'sizeQueryTemp' (temp 2-component vector of uint)
 0:133            Constant:
 0:133              1 (const int)
-0:133        move second child to first child (temp uint)
-0:133          'ElementsU' (temp uint)
-0:133          direct index (temp uint)
-0:133            'sizeQueryTemp' (temp 3-component vector of uint)
-0:133            Constant:
-0:133              2 (const int)
 0:134      Sequence
-0:134        move second child to first child (temp 3-component vector of uint)
-0:134          'sizeQueryTemp' (temp 3-component vector of uint)
-0:134          textureSize (temp 3-component vector of uint)
-0:134            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:134        move second child to first child (temp 2-component vector of uint)
+0:134          'sizeQueryTemp' (temp 2-component vector of uint)
+0:134          textureSize (temp 2-component vector of uint)
+0:134            'g_tTexcdu4' (uniform utextureCube)
 0:134            Constant:
 0:134              6 (const uint)
 0:134        move second child to first child (temp uint)
 0:134          'WidthU' (temp uint)
 0:134          direct index (temp uint)
-0:134            'sizeQueryTemp' (temp 3-component vector of uint)
+0:134            'sizeQueryTemp' (temp 2-component vector of uint)
 0:134            Constant:
 0:134              0 (const int)
 0:134        move second child to first child (temp uint)
 0:134          'HeightU' (temp uint)
 0:134          direct index (temp uint)
-0:134            'sizeQueryTemp' (temp 3-component vector of uint)
+0:134            'sizeQueryTemp' (temp 2-component vector of uint)
 0:134            Constant:
 0:134              1 (const int)
 0:134        move second child to first child (temp uint)
-0:134          'ElementsU' (temp uint)
-0:134          direct index (temp uint)
-0:134            'sizeQueryTemp' (temp 3-component vector of uint)
-0:134            Constant:
-0:134              2 (const int)
-0:134        move second child to first child (temp uint)
 0:134          'NumberOfLevelsU' (temp uint)
 0:134          textureQueryLevels (temp uint)
-0:134            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:134            'g_tTexcdu4' (uniform utextureCube)
 0:137      Sequence
 0:137        move second child to first child (temp 3-component vector of uint)
 0:137          'sizeQueryTemp' (temp 3-component vector of uint)
 0:137          textureSize (temp 3-component vector of uint)
-0:137            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:137            'g_tTexcdf4a' (uniform textureCubeArray)
 0:137        move second child to first child (temp uint)
 0:137          'WidthU' (temp uint)
 0:137          direct index (temp uint)
@@ -874,7 +770,7 @@
 0:138        move second child to first child (temp 3-component vector of uint)
 0:138          'sizeQueryTemp' (temp 3-component vector of uint)
 0:138          textureSize (temp 3-component vector of uint)
-0:138            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:138            'g_tTexcdf4a' (uniform textureCubeArray)
 0:138            Constant:
 0:138              6 (const uint)
 0:138        move second child to first child (temp uint)
@@ -898,19 +794,277 @@
 0:138        move second child to first child (temp uint)
 0:138          'NumberOfLevelsU' (temp uint)
 0:138          textureQueryLevels (temp uint)
-0:138            'g_tTexcdu4a' (uniform utextureCubeArray)
-0:234      move second child to first child (temp float)
-0:234        Depth: direct index for structure (temp float FragDepth)
-0:234          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
-0:234          Constant:
-0:234            1 (const int)
-0:234        Constant:
-0:234          1.000000
-0:236      Branch: Return with expression
-0:236        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:138            'g_tTexcdf4a' (uniform textureCubeArray)
+0:141      Sequence
+0:141        move second child to first child (temp 3-component vector of uint)
+0:141          'sizeQueryTemp' (temp 3-component vector of uint)
+0:141          textureSize (temp 3-component vector of uint)
+0:141            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:141        move second child to first child (temp uint)
+0:141          'WidthU' (temp uint)
+0:141          direct index (temp uint)
+0:141            'sizeQueryTemp' (temp 3-component vector of uint)
+0:141            Constant:
+0:141              0 (const int)
+0:141        move second child to first child (temp uint)
+0:141          'HeightU' (temp uint)
+0:141          direct index (temp uint)
+0:141            'sizeQueryTemp' (temp 3-component vector of uint)
+0:141            Constant:
+0:141              1 (const int)
+0:141        move second child to first child (temp uint)
+0:141          'ElementsU' (temp uint)
+0:141          direct index (temp uint)
+0:141            'sizeQueryTemp' (temp 3-component vector of uint)
+0:141            Constant:
+0:141              2 (const int)
+0:142      Sequence
+0:142        move second child to first child (temp 3-component vector of uint)
+0:142          'sizeQueryTemp' (temp 3-component vector of uint)
+0:142          textureSize (temp 3-component vector of uint)
+0:142            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:142            Constant:
+0:142              6 (const uint)
+0:142        move second child to first child (temp uint)
+0:142          'WidthU' (temp uint)
+0:142          direct index (temp uint)
+0:142            'sizeQueryTemp' (temp 3-component vector of uint)
+0:142            Constant:
+0:142              0 (const int)
+0:142        move second child to first child (temp uint)
+0:142          'HeightU' (temp uint)
+0:142          direct index (temp uint)
+0:142            'sizeQueryTemp' (temp 3-component vector of uint)
+0:142            Constant:
+0:142              1 (const int)
+0:142        move second child to first child (temp uint)
+0:142          'ElementsU' (temp uint)
+0:142          direct index (temp uint)
+0:142            'sizeQueryTemp' (temp 3-component vector of uint)
+0:142            Constant:
+0:142              2 (const int)
+0:142        move second child to first child (temp uint)
+0:142          'NumberOfLevelsU' (temp uint)
+0:142          textureQueryLevels (temp uint)
+0:142            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:145      Sequence
+0:145        move second child to first child (temp 3-component vector of uint)
+0:145          'sizeQueryTemp' (temp 3-component vector of uint)
+0:145          textureSize (temp 3-component vector of uint)
+0:145            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:145        move second child to first child (temp uint)
+0:145          'WidthU' (temp uint)
+0:145          direct index (temp uint)
+0:145            'sizeQueryTemp' (temp 3-component vector of uint)
+0:145            Constant:
+0:145              0 (const int)
+0:145        move second child to first child (temp uint)
+0:145          'HeightU' (temp uint)
+0:145          direct index (temp uint)
+0:145            'sizeQueryTemp' (temp 3-component vector of uint)
+0:145            Constant:
+0:145              1 (const int)
+0:145        move second child to first child (temp uint)
+0:145          'ElementsU' (temp uint)
+0:145          direct index (temp uint)
+0:145            'sizeQueryTemp' (temp 3-component vector of uint)
+0:145            Constant:
+0:145              2 (const int)
+0:146      Sequence
+0:146        move second child to first child (temp 3-component vector of uint)
+0:146          'sizeQueryTemp' (temp 3-component vector of uint)
+0:146          textureSize (temp 3-component vector of uint)
+0:146            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:146            Constant:
+0:146              6 (const uint)
+0:146        move second child to first child (temp uint)
+0:146          'WidthU' (temp uint)
+0:146          direct index (temp uint)
+0:146            'sizeQueryTemp' (temp 3-component vector of uint)
+0:146            Constant:
+0:146              0 (const int)
+0:146        move second child to first child (temp uint)
+0:146          'HeightU' (temp uint)
+0:146          direct index (temp uint)
+0:146            'sizeQueryTemp' (temp 3-component vector of uint)
+0:146            Constant:
+0:146              1 (const int)
+0:146        move second child to first child (temp uint)
+0:146          'ElementsU' (temp uint)
+0:146          direct index (temp uint)
+0:146            'sizeQueryTemp' (temp 3-component vector of uint)
+0:146            Constant:
+0:146              2 (const int)
+0:146        move second child to first child (temp uint)
+0:146          'NumberOfLevelsU' (temp uint)
+0:146          textureQueryLevels (temp uint)
+0:146            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:149      Sequence
+0:149        move second child to first child (temp 2-component vector of uint)
+0:149          'sizeQueryTemp' (temp 2-component vector of uint)
+0:149          textureSize (temp 2-component vector of uint)
+0:149            'g_tTex2dmsf4' (uniform texture2DMS)
+0:149        move second child to first child (temp uint)
+0:149          'WidthU' (temp uint)
+0:149          direct index (temp uint)
+0:149            'sizeQueryTemp' (temp 2-component vector of uint)
+0:149            Constant:
+0:149              0 (const int)
+0:149        move second child to first child (temp uint)
+0:149          'HeightU' (temp uint)
+0:149          direct index (temp uint)
+0:149            'sizeQueryTemp' (temp 2-component vector of uint)
+0:149            Constant:
+0:149              1 (const int)
+0:149        move second child to first child (temp uint)
+0:149          'NumberOfSamplesU' (temp uint)
+0:149          imageQuerySamples (temp uint)
+0:149            'g_tTex2dmsf4' (uniform texture2DMS)
+0:152      Sequence
+0:152        move second child to first child (temp 2-component vector of uint)
+0:152          'sizeQueryTemp' (temp 2-component vector of uint)
+0:152          textureSize (temp 2-component vector of uint)
+0:152            'g_tTex2dmsi4' (uniform itexture2DMS)
+0:152        move second child to first child (temp uint)
+0:152          'WidthU' (temp uint)
+0:152          direct index (temp uint)
+0:152            'sizeQueryTemp' (temp 2-component vector of uint)
+0:152            Constant:
+0:152              0 (const int)
+0:152        move second child to first child (temp uint)
+0:152          'HeightU' (temp uint)
+0:152          direct index (temp uint)
+0:152            'sizeQueryTemp' (temp 2-component vector of uint)
+0:152            Constant:
+0:152              1 (const int)
+0:152        move second child to first child (temp uint)
+0:152          'NumberOfSamplesU' (temp uint)
+0:152          imageQuerySamples (temp uint)
+0:152            'g_tTex2dmsi4' (uniform itexture2DMS)
+0:155      Sequence
+0:155        move second child to first child (temp 2-component vector of uint)
+0:155          'sizeQueryTemp' (temp 2-component vector of uint)
+0:155          textureSize (temp 2-component vector of uint)
+0:155            'g_tTex2dmsu4' (uniform utexture2DMS)
+0:155        move second child to first child (temp uint)
+0:155          'WidthU' (temp uint)
+0:155          direct index (temp uint)
+0:155            'sizeQueryTemp' (temp 2-component vector of uint)
+0:155            Constant:
+0:155              0 (const int)
+0:155        move second child to first child (temp uint)
+0:155          'HeightU' (temp uint)
+0:155          direct index (temp uint)
+0:155            'sizeQueryTemp' (temp 2-component vector of uint)
+0:155            Constant:
+0:155              1 (const int)
+0:155        move second child to first child (temp uint)
+0:155          'NumberOfSamplesU' (temp uint)
+0:155          imageQuerySamples (temp uint)
+0:155            'g_tTex2dmsu4' (uniform utexture2DMS)
+0:158      Sequence
+0:158        move second child to first child (temp 3-component vector of uint)
+0:158          'sizeQueryTemp' (temp 3-component vector of uint)
+0:158          textureSize (temp 3-component vector of uint)
+0:158            'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:158        move second child to first child (temp uint)
+0:158          'WidthU' (temp uint)
+0:158          direct index (temp uint)
+0:158            'sizeQueryTemp' (temp 3-component vector of uint)
+0:158            Constant:
+0:158              0 (const int)
+0:158        move second child to first child (temp uint)
+0:158          'HeightU' (temp uint)
+0:158          direct index (temp uint)
+0:158            'sizeQueryTemp' (temp 3-component vector of uint)
+0:158            Constant:
+0:158              1 (const int)
+0:158        move second child to first child (temp uint)
+0:158          'ElementsU' (temp uint)
+0:158          direct index (temp uint)
+0:158            'sizeQueryTemp' (temp 3-component vector of uint)
+0:158            Constant:
+0:158              2 (const int)
+0:158        move second child to first child (temp uint)
+0:158          'NumberOfSamplesU' (temp uint)
+0:158          imageQuerySamples (temp uint)
+0:158            'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:161      Sequence
+0:161        move second child to first child (temp 3-component vector of uint)
+0:161          'sizeQueryTemp' (temp 3-component vector of uint)
+0:161          textureSize (temp 3-component vector of uint)
+0:161            'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:161        move second child to first child (temp uint)
+0:161          'WidthU' (temp uint)
+0:161          direct index (temp uint)
+0:161            'sizeQueryTemp' (temp 3-component vector of uint)
+0:161            Constant:
+0:161              0 (const int)
+0:161        move second child to first child (temp uint)
+0:161          'HeightU' (temp uint)
+0:161          direct index (temp uint)
+0:161            'sizeQueryTemp' (temp 3-component vector of uint)
+0:161            Constant:
+0:161              1 (const int)
+0:161        move second child to first child (temp uint)
+0:161          'ElementsU' (temp uint)
+0:161          direct index (temp uint)
+0:161            'sizeQueryTemp' (temp 3-component vector of uint)
+0:161            Constant:
+0:161              2 (const int)
+0:161        move second child to first child (temp uint)
+0:161          'NumberOfSamplesU' (temp uint)
+0:161          imageQuerySamples (temp uint)
+0:161            'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:164      Sequence
+0:164        move second child to first child (temp 3-component vector of uint)
+0:164          'sizeQueryTemp' (temp 3-component vector of uint)
+0:164          textureSize (temp 3-component vector of uint)
+0:164            'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:164        move second child to first child (temp uint)
+0:164          'WidthU' (temp uint)
+0:164          direct index (temp uint)
+0:164            'sizeQueryTemp' (temp 3-component vector of uint)
+0:164            Constant:
+0:164              0 (const int)
+0:164        move second child to first child (temp uint)
+0:164          'HeightU' (temp uint)
+0:164          direct index (temp uint)
+0:164            'sizeQueryTemp' (temp 3-component vector of uint)
+0:164            Constant:
+0:164              1 (const int)
+0:164        move second child to first child (temp uint)
+0:164          'ElementsU' (temp uint)
+0:164          direct index (temp uint)
+0:164            'sizeQueryTemp' (temp 3-component vector of uint)
+0:164            Constant:
+0:164              2 (const int)
+0:164        move second child to first child (temp uint)
+0:164          'NumberOfSamplesU' (temp uint)
+0:164          imageQuerySamples (temp uint)
+0:164            'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:276      move second child to first child (temp 4-component vector of float)
+0:276        Color: direct index for structure (temp 4-component vector of float)
+0:276          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:276          Constant:
+0:276            0 (const int)
+0:276        Constant:
+0:276          1.000000
+0:276          1.000000
+0:276          1.000000
+0:276          1.000000
+0:277      move second child to first child (temp float)
+0:277        Depth: direct index for structure (temp float FragDepth)
+0:277          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:277          Constant:
+0:277            1 (const int)
+0:277        Constant:
+0:277          1.000000
+0:279      Branch: Return with expression
+0:279        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4' (uniform texture1D)
+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)
@@ -931,6 +1085,12 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'g_tTex2dmsf4' (uniform texture2DMS)
+0:?     'g_tTex2dmsi4' (uniform itexture2DMS)
+0:?     'g_tTex2dmsu4' (uniform utexture2DMS)
+0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
 
 
 Linked fragment stage:
@@ -939,58 +1099,14 @@
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:238  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
-0:38    Function Parameters: 
+0:281  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:46    Function Parameters: 
 0:?     Sequence
-0:57      Sequence
-0:57        move second child to first child (temp uint)
-0:57          'sizeQueryTemp' (temp uint)
-0:57          textureSize (temp uint)
-0:57            'g_tTex1df4' (uniform texture1D)
-0:57        move second child to first child (temp uint)
-0:57          'WidthU' (temp uint)
-0:57          'sizeQueryTemp' (temp uint)
-0:58      Sequence
-0:58        move second child to first child (temp uint)
-0:58          'sizeQueryTemp' (temp uint)
-0:58          textureSize (temp uint)
-0:58            'g_tTex1df4' (uniform texture1D)
-0:58            Constant:
-0:58              6 (const uint)
-0:58        move second child to first child (temp uint)
-0:58          'WidthU' (temp uint)
-0:58          'sizeQueryTemp' (temp uint)
-0:58        move second child to first child (temp uint)
-0:58          'NumberOfLevelsU' (temp uint)
-0:58          textureQueryLevels (temp uint)
-0:58            'g_tTex1df4' (uniform texture1D)
-0:61      Sequence
-0:61        move second child to first child (temp uint)
-0:61          'sizeQueryTemp' (temp uint)
-0:61          textureSize (temp uint)
-0:61            'g_tTex1di4' (uniform itexture1D)
-0:61        move second child to first child (temp uint)
-0:61          'WidthU' (temp uint)
-0:61          'sizeQueryTemp' (temp uint)
-0:62      Sequence
-0:62        move second child to first child (temp uint)
-0:62          'sizeQueryTemp' (temp uint)
-0:62          textureSize (temp uint)
-0:62            'g_tTex1di4' (uniform itexture1D)
-0:62            Constant:
-0:62              6 (const uint)
-0:62        move second child to first child (temp uint)
-0:62          'WidthU' (temp uint)
-0:62          'sizeQueryTemp' (temp uint)
-0:62        move second child to first child (temp uint)
-0:62          'NumberOfLevelsU' (temp uint)
-0:62          textureQueryLevels (temp uint)
-0:62            'g_tTex1di4' (uniform itexture1D)
 0:65      Sequence
 0:65        move second child to first child (temp uint)
 0:65          'sizeQueryTemp' (temp uint)
 0:65          textureSize (temp uint)
-0:65            'g_tTex1du4' (uniform utexture1D)
+0:65            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:65        move second child to first child (temp uint)
 0:65          'WidthU' (temp uint)
 0:65          'sizeQueryTemp' (temp uint)
@@ -998,7 +1114,7 @@
 0:66        move second child to first child (temp uint)
 0:66          'sizeQueryTemp' (temp uint)
 0:66          textureSize (temp uint)
-0:66            'g_tTex1du4' (uniform utexture1D)
+0:66            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:66            Constant:
 0:66              6 (const uint)
 0:66        move second child to first child (temp uint)
@@ -1007,92 +1123,56 @@
 0:66        move second child to first child (temp uint)
 0:66          'NumberOfLevelsU' (temp uint)
 0:66          textureQueryLevels (temp uint)
-0:66            'g_tTex1du4' (uniform utexture1D)
+0:66            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:69      Sequence
-0:69        move second child to first child (temp 2-component vector of uint)
-0:69          'sizeQueryTemp' (temp 2-component vector of uint)
-0:69          textureSize (temp 2-component vector of uint)
-0:69            'g_tTex1df4a' (uniform texture1DArray)
+0:69        move second child to first child (temp uint)
+0:69          'sizeQueryTemp' (temp uint)
+0:69          textureSize (temp uint)
+0:69            'g_tTex1di4' (uniform itexture1D)
 0:69        move second child to first child (temp uint)
 0:69          'WidthU' (temp uint)
-0:69          direct index (temp uint)
-0:69            'sizeQueryTemp' (temp 2-component vector of uint)
-0:69            Constant:
-0:69              0 (const int)
-0:69        move second child to first child (temp uint)
-0:69          'ElementsU' (temp uint)
-0:69          direct index (temp uint)
-0:69            'sizeQueryTemp' (temp 2-component vector of uint)
-0:69            Constant:
-0:69              1 (const int)
+0:69          'sizeQueryTemp' (temp uint)
 0:70      Sequence
-0:70        move second child to first child (temp 2-component vector of uint)
-0:70          'sizeQueryTemp' (temp 2-component vector of uint)
-0:70          textureSize (temp 2-component vector of uint)
-0:70            'g_tTex1df4a' (uniform texture1DArray)
+0:70        move second child to first child (temp uint)
+0:70          'sizeQueryTemp' (temp uint)
+0:70          textureSize (temp uint)
+0:70            'g_tTex1di4' (uniform itexture1D)
 0:70            Constant:
 0:70              6 (const uint)
 0:70        move second child to first child (temp uint)
 0:70          'WidthU' (temp uint)
-0:70          direct index (temp uint)
-0:70            'sizeQueryTemp' (temp 2-component vector of uint)
-0:70            Constant:
-0:70              0 (const int)
-0:70        move second child to first child (temp uint)
-0:70          'ElementsU' (temp uint)
-0:70          direct index (temp uint)
-0:70            'sizeQueryTemp' (temp 2-component vector of uint)
-0:70            Constant:
-0:70              1 (const int)
+0:70          'sizeQueryTemp' (temp uint)
 0:70        move second child to first child (temp uint)
 0:70          'NumberOfLevelsU' (temp uint)
 0:70          textureQueryLevels (temp uint)
-0:70            'g_tTex1df4a' (uniform texture1DArray)
+0:70            'g_tTex1di4' (uniform itexture1D)
 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          textureSize (temp 2-component vector of uint)
-0:73            'g_tTex1di4a' (uniform itexture1DArray)
+0:73        move second child to first child (temp uint)
+0:73          'sizeQueryTemp' (temp uint)
+0:73          textureSize (temp uint)
+0:73            'g_tTex1du4' (uniform utexture1D)
 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:73          'sizeQueryTemp' (temp uint)
 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          textureSize (temp 2-component vector of uint)
-0:74            'g_tTex1di4a' (uniform itexture1DArray)
+0:74        move second child to first child (temp uint)
+0:74          'sizeQueryTemp' (temp uint)
+0:74          textureSize (temp uint)
+0:74            'g_tTex1du4' (uniform utexture1D)
 0:74            Constant:
 0:74              6 (const uint)
 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:74          'sizeQueryTemp' (temp uint)
 0:74        move second child to first child (temp uint)
 0:74          'NumberOfLevelsU' (temp uint)
 0:74          textureQueryLevels (temp uint)
-0:74            'g_tTex1di4a' (uniform itexture1DArray)
+0:74            'g_tTex1du4' (uniform utexture1D)
 0:77      Sequence
 0:77        move second child to first child (temp 2-component vector of uint)
 0:77          'sizeQueryTemp' (temp 2-component vector of uint)
 0:77          textureSize (temp 2-component vector of uint)
-0:77            'g_tTex1du4a' (uniform utexture1DArray)
+0:77            'g_tTex1df4a' (uniform texture1DArray)
 0:77        move second child to first child (temp uint)
 0:77          'WidthU' (temp uint)
 0:77          direct index (temp uint)
@@ -1109,7 +1189,7 @@
 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          textureSize (temp 2-component vector of uint)
-0:78            'g_tTex1du4a' (uniform utexture1DArray)
+0:78            'g_tTex1df4a' (uniform texture1DArray)
 0:78            Constant:
 0:78              6 (const uint)
 0:78        move second child to first child (temp uint)
@@ -1127,12 +1207,12 @@
 0:78        move second child to first child (temp uint)
 0:78          'NumberOfLevelsU' (temp uint)
 0:78          textureQueryLevels (temp uint)
-0:78            'g_tTex1du4a' (uniform utexture1DArray)
+0:78            'g_tTex1df4a' (uniform texture1DArray)
 0:81      Sequence
 0:81        move second child to first child (temp 2-component vector of uint)
 0:81          'sizeQueryTemp' (temp 2-component vector of uint)
 0:81          textureSize (temp 2-component vector of uint)
-0:81            'g_tTex2df4' (uniform texture2D)
+0:81            'g_tTex1di4a' (uniform itexture1DArray)
 0:81        move second child to first child (temp uint)
 0:81          'WidthU' (temp uint)
 0:81          direct index (temp uint)
@@ -1140,7 +1220,7 @@
 0:81            Constant:
 0:81              0 (const int)
 0:81        move second child to first child (temp uint)
-0:81          'HeightU' (temp uint)
+0:81          'ElementsU' (temp uint)
 0:81          direct index (temp uint)
 0:81            'sizeQueryTemp' (temp 2-component vector of uint)
 0:81            Constant:
@@ -1149,7 +1229,7 @@
 0:82        move second child to first child (temp 2-component vector of uint)
 0:82          'sizeQueryTemp' (temp 2-component vector of uint)
 0:82          textureSize (temp 2-component vector of uint)
-0:82            'g_tTex2df4' (uniform texture2D)
+0:82            'g_tTex1di4a' (uniform itexture1DArray)
 0:82            Constant:
 0:82              6 (const uint)
 0:82        move second child to first child (temp uint)
@@ -1159,7 +1239,7 @@
 0:82            Constant:
 0:82              0 (const int)
 0:82        move second child to first child (temp uint)
-0:82          'HeightU' (temp uint)
+0:82          'ElementsU' (temp uint)
 0:82          direct index (temp uint)
 0:82            'sizeQueryTemp' (temp 2-component vector of uint)
 0:82            Constant:
@@ -1167,12 +1247,12 @@
 0:82        move second child to first child (temp uint)
 0:82          'NumberOfLevelsU' (temp uint)
 0:82          textureQueryLevels (temp uint)
-0:82            'g_tTex2df4' (uniform texture2D)
+0:82            'g_tTex1di4a' (uniform itexture1DArray)
 0:85      Sequence
 0:85        move second child to first child (temp 2-component vector of uint)
 0:85          'sizeQueryTemp' (temp 2-component vector of uint)
 0:85          textureSize (temp 2-component vector of uint)
-0:85            'g_tTex2di4' (uniform itexture2D)
+0:85            'g_tTex1du4a' (uniform utexture1DArray)
 0:85        move second child to first child (temp uint)
 0:85          'WidthU' (temp uint)
 0:85          direct index (temp uint)
@@ -1180,7 +1260,7 @@
 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          'ElementsU' (temp uint)
 0:85          direct index (temp uint)
 0:85            'sizeQueryTemp' (temp 2-component vector of uint)
 0:85            Constant:
@@ -1189,7 +1269,7 @@
 0:86        move second child to first child (temp 2-component vector of uint)
 0:86          'sizeQueryTemp' (temp 2-component vector of uint)
 0:86          textureSize (temp 2-component vector of uint)
-0:86            'g_tTex2di4' (uniform itexture2D)
+0:86            'g_tTex1du4a' (uniform utexture1DArray)
 0:86            Constant:
 0:86              6 (const uint)
 0:86        move second child to first child (temp uint)
@@ -1199,7 +1279,7 @@
 0:86            Constant:
 0:86              0 (const int)
 0:86        move second child to first child (temp uint)
-0:86          'HeightU' (temp uint)
+0:86          'ElementsU' (temp uint)
 0:86          direct index (temp uint)
 0:86            'sizeQueryTemp' (temp 2-component vector of uint)
 0:86            Constant:
@@ -1207,12 +1287,12 @@
 0:86        move second child to first child (temp uint)
 0:86          'NumberOfLevelsU' (temp uint)
 0:86          textureQueryLevels (temp uint)
-0:86            'g_tTex2di4' (uniform itexture2D)
+0:86            'g_tTex1du4a' (uniform utexture1DArray)
 0:89      Sequence
 0:89        move second child to first child (temp 2-component vector of uint)
 0:89          'sizeQueryTemp' (temp 2-component vector of uint)
 0:89          textureSize (temp 2-component vector of uint)
-0:89            'g_tTex2du4' (uniform utexture2D)
+0:89            'g_tTex2df4' (uniform texture2D)
 0:89        move second child to first child (temp uint)
 0:89          'WidthU' (temp uint)
 0:89          direct index (temp uint)
@@ -1229,7 +1309,7 @@
 0:90        move second child to first child (temp 2-component vector of uint)
 0:90          'sizeQueryTemp' (temp 2-component vector of uint)
 0:90          textureSize (temp 2-component vector of uint)
-0:90            'g_tTex2du4' (uniform utexture2D)
+0:90            'g_tTex2df4' (uniform texture2D)
 0:90            Constant:
 0:90              6 (const uint)
 0:90        move second child to first child (temp uint)
@@ -1247,116 +1327,92 @@
 0:90        move second child to first child (temp uint)
 0:90          'NumberOfLevelsU' (temp uint)
 0:90          textureQueryLevels (temp uint)
-0:90            'g_tTex2du4' (uniform utexture2D)
+0:90            'g_tTex2df4' (uniform texture2D)
 0:93      Sequence
-0:93        move second child to first child (temp 3-component vector of uint)
-0:93          'sizeQueryTemp' (temp 3-component vector of uint)
-0:93          textureSize (temp 3-component vector of uint)
-0:93            'g_tTex2df4a' (uniform texture2DArray)
+0:93        move second child to first child (temp 2-component vector of uint)
+0:93          'sizeQueryTemp' (temp 2-component vector of uint)
+0:93          textureSize (temp 2-component vector of uint)
+0:93            'g_tTex2di4' (uniform itexture2D)
 0:93        move second child to first child (temp uint)
 0:93          'WidthU' (temp uint)
 0:93          direct index (temp uint)
-0:93            'sizeQueryTemp' (temp 3-component vector of uint)
+0:93            'sizeQueryTemp' (temp 2-component vector of uint)
 0:93            Constant:
 0:93              0 (const int)
 0:93        move second child to first child (temp uint)
 0:93          'HeightU' (temp uint)
 0:93          direct index (temp uint)
-0:93            'sizeQueryTemp' (temp 3-component vector of uint)
+0:93            'sizeQueryTemp' (temp 2-component vector of uint)
 0:93            Constant:
 0:93              1 (const int)
-0:93        move second child to first child (temp uint)
-0:93          'ElementsU' (temp uint)
-0:93          direct index (temp uint)
-0:93            'sizeQueryTemp' (temp 3-component vector of uint)
-0:93            Constant:
-0:93              2 (const int)
 0:94      Sequence
-0:94        move second child to first child (temp 3-component vector of uint)
-0:94          'sizeQueryTemp' (temp 3-component vector of uint)
-0:94          textureSize (temp 3-component vector of uint)
-0:94            'g_tTex2df4a' (uniform texture2DArray)
+0:94        move second child to first child (temp 2-component vector of uint)
+0:94          'sizeQueryTemp' (temp 2-component vector of uint)
+0:94          textureSize (temp 2-component vector of uint)
+0:94            'g_tTex2di4' (uniform itexture2D)
 0:94            Constant:
 0:94              6 (const uint)
 0:94        move second child to first child (temp uint)
 0:94          'WidthU' (temp uint)
 0:94          direct index (temp uint)
-0:94            'sizeQueryTemp' (temp 3-component vector of uint)
+0:94            'sizeQueryTemp' (temp 2-component vector of uint)
 0:94            Constant:
 0:94              0 (const int)
 0:94        move second child to first child (temp uint)
 0:94          'HeightU' (temp uint)
 0:94          direct index (temp uint)
-0:94            'sizeQueryTemp' (temp 3-component vector of uint)
+0:94            'sizeQueryTemp' (temp 2-component vector of uint)
 0:94            Constant:
 0:94              1 (const int)
 0:94        move second child to first child (temp uint)
-0:94          'ElementsU' (temp uint)
-0:94          direct index (temp uint)
-0:94            'sizeQueryTemp' (temp 3-component vector of uint)
-0:94            Constant:
-0:94              2 (const int)
-0:94        move second child to first child (temp uint)
 0:94          'NumberOfLevelsU' (temp uint)
 0:94          textureQueryLevels (temp uint)
-0:94            'g_tTex2df4a' (uniform texture2DArray)
+0:94            'g_tTex2di4' (uniform itexture2D)
 0:97      Sequence
-0:97        move second child to first child (temp 3-component vector of uint)
-0:97          'sizeQueryTemp' (temp 3-component vector of uint)
-0:97          textureSize (temp 3-component vector of uint)
-0:97            'g_tTex2di4a' (uniform itexture2DArray)
+0:97        move second child to first child (temp 2-component vector of uint)
+0:97          'sizeQueryTemp' (temp 2-component vector of uint)
+0:97          textureSize (temp 2-component vector of uint)
+0:97            'g_tTex2du4' (uniform utexture2D)
 0:97        move second child to first child (temp uint)
 0:97          'WidthU' (temp uint)
 0:97          direct index (temp uint)
-0:97            'sizeQueryTemp' (temp 3-component vector of uint)
+0:97            'sizeQueryTemp' (temp 2-component vector of uint)
 0:97            Constant:
 0:97              0 (const int)
 0:97        move second child to first child (temp uint)
 0:97          'HeightU' (temp uint)
 0:97          direct index (temp uint)
-0:97            'sizeQueryTemp' (temp 3-component vector of uint)
+0:97            'sizeQueryTemp' (temp 2-component vector of uint)
 0:97            Constant:
 0:97              1 (const int)
-0:97        move second child to first child (temp uint)
-0:97          'ElementsU' (temp uint)
-0:97          direct index (temp uint)
-0:97            'sizeQueryTemp' (temp 3-component vector of uint)
-0:97            Constant:
-0:97              2 (const int)
 0:98      Sequence
-0:98        move second child to first child (temp 3-component vector of uint)
-0:98          'sizeQueryTemp' (temp 3-component vector of uint)
-0:98          textureSize (temp 3-component vector of uint)
-0:98            'g_tTex2di4a' (uniform itexture2DArray)
+0:98        move second child to first child (temp 2-component vector of uint)
+0:98          'sizeQueryTemp' (temp 2-component vector of uint)
+0:98          textureSize (temp 2-component vector of uint)
+0:98            'g_tTex2du4' (uniform utexture2D)
 0:98            Constant:
 0:98              6 (const uint)
 0:98        move second child to first child (temp uint)
 0:98          'WidthU' (temp uint)
 0:98          direct index (temp uint)
-0:98            'sizeQueryTemp' (temp 3-component vector of uint)
+0:98            'sizeQueryTemp' (temp 2-component vector of uint)
 0:98            Constant:
 0:98              0 (const int)
 0:98        move second child to first child (temp uint)
 0:98          'HeightU' (temp uint)
 0:98          direct index (temp uint)
-0:98            'sizeQueryTemp' (temp 3-component vector of uint)
+0:98            'sizeQueryTemp' (temp 2-component vector of uint)
 0:98            Constant:
 0:98              1 (const int)
 0:98        move second child to first child (temp uint)
-0:98          'ElementsU' (temp uint)
-0:98          direct index (temp uint)
-0:98            'sizeQueryTemp' (temp 3-component vector of uint)
-0:98            Constant:
-0:98              2 (const int)
-0:98        move second child to first child (temp uint)
 0:98          'NumberOfLevelsU' (temp uint)
 0:98          textureQueryLevels (temp uint)
-0:98            'g_tTex2di4a' (uniform itexture2DArray)
+0:98            'g_tTex2du4' (uniform utexture2D)
 0:101      Sequence
 0:101        move second child to first child (temp 3-component vector of uint)
 0:101          'sizeQueryTemp' (temp 3-component vector of uint)
 0:101          textureSize (temp 3-component vector of uint)
-0:101            'g_tTex2du4a' (uniform utexture2DArray)
+0:101            'g_tTex2df4a' (uniform texture2DArray)
 0:101        move second child to first child (temp uint)
 0:101          'WidthU' (temp uint)
 0:101          direct index (temp uint)
@@ -1379,7 +1435,7 @@
 0:102        move second child to first child (temp 3-component vector of uint)
 0:102          'sizeQueryTemp' (temp 3-component vector of uint)
 0:102          textureSize (temp 3-component vector of uint)
-0:102            'g_tTex2du4a' (uniform utexture2DArray)
+0:102            'g_tTex2df4a' (uniform texture2DArray)
 0:102            Constant:
 0:102              6 (const uint)
 0:102        move second child to first child (temp uint)
@@ -1403,12 +1459,12 @@
 0:102        move second child to first child (temp uint)
 0:102          'NumberOfLevelsU' (temp uint)
 0:102          textureQueryLevels (temp uint)
-0:102            'g_tTex2du4a' (uniform utexture2DArray)
+0:102            'g_tTex2df4a' (uniform texture2DArray)
 0:105      Sequence
 0:105        move second child to first child (temp 3-component vector of uint)
 0:105          'sizeQueryTemp' (temp 3-component vector of uint)
 0:105          textureSize (temp 3-component vector of uint)
-0:105            'g_tTex3df4' (uniform texture3D)
+0:105            'g_tTex2di4a' (uniform itexture2DArray)
 0:105        move second child to first child (temp uint)
 0:105          'WidthU' (temp uint)
 0:105          direct index (temp uint)
@@ -1422,7 +1478,7 @@
 0:105            Constant:
 0:105              1 (const int)
 0:105        move second child to first child (temp uint)
-0:105          'DepthU' (temp uint)
+0:105          'ElementsU' (temp uint)
 0:105          direct index (temp uint)
 0:105            'sizeQueryTemp' (temp 3-component vector of uint)
 0:105            Constant:
@@ -1431,7 +1487,7 @@
 0:106        move second child to first child (temp 3-component vector of uint)
 0:106          'sizeQueryTemp' (temp 3-component vector of uint)
 0:106          textureSize (temp 3-component vector of uint)
-0:106            'g_tTex3df4' (uniform texture3D)
+0:106            'g_tTex2di4a' (uniform itexture2DArray)
 0:106            Constant:
 0:106              6 (const uint)
 0:106        move second child to first child (temp uint)
@@ -1447,7 +1503,7 @@
 0:106            Constant:
 0:106              1 (const int)
 0:106        move second child to first child (temp uint)
-0:106          'DepthU' (temp uint)
+0:106          'ElementsU' (temp uint)
 0:106          direct index (temp uint)
 0:106            'sizeQueryTemp' (temp 3-component vector of uint)
 0:106            Constant:
@@ -1455,12 +1511,12 @@
 0:106        move second child to first child (temp uint)
 0:106          'NumberOfLevelsU' (temp uint)
 0:106          textureQueryLevels (temp uint)
-0:106            'g_tTex3df4' (uniform texture3D)
+0:106            'g_tTex2di4a' (uniform itexture2DArray)
 0:109      Sequence
 0:109        move second child to first child (temp 3-component vector of uint)
 0:109          'sizeQueryTemp' (temp 3-component vector of uint)
 0:109          textureSize (temp 3-component vector of uint)
-0:109            'g_tTex3di4' (uniform itexture3D)
+0:109            'g_tTex2du4a' (uniform utexture2DArray)
 0:109        move second child to first child (temp uint)
 0:109          'WidthU' (temp uint)
 0:109          direct index (temp uint)
@@ -1474,7 +1530,7 @@
 0:109            Constant:
 0:109              1 (const int)
 0:109        move second child to first child (temp uint)
-0:109          'DepthU' (temp uint)
+0:109          'ElementsU' (temp uint)
 0:109          direct index (temp uint)
 0:109            'sizeQueryTemp' (temp 3-component vector of uint)
 0:109            Constant:
@@ -1483,7 +1539,7 @@
 0:110        move second child to first child (temp 3-component vector of uint)
 0:110          'sizeQueryTemp' (temp 3-component vector of uint)
 0:110          textureSize (temp 3-component vector of uint)
-0:110            'g_tTex3di4' (uniform itexture3D)
+0:110            'g_tTex2du4a' (uniform utexture2DArray)
 0:110            Constant:
 0:110              6 (const uint)
 0:110        move second child to first child (temp uint)
@@ -1499,7 +1555,7 @@
 0:110            Constant:
 0:110              1 (const int)
 0:110        move second child to first child (temp uint)
-0:110          'DepthU' (temp uint)
+0:110          'ElementsU' (temp uint)
 0:110          direct index (temp uint)
 0:110            'sizeQueryTemp' (temp 3-component vector of uint)
 0:110            Constant:
@@ -1507,12 +1563,12 @@
 0:110        move second child to first child (temp uint)
 0:110          'NumberOfLevelsU' (temp uint)
 0:110          textureQueryLevels (temp uint)
-0:110            'g_tTex3di4' (uniform itexture3D)
+0:110            'g_tTex2du4a' (uniform utexture2DArray)
 0:113      Sequence
 0:113        move second child to first child (temp 3-component vector of uint)
 0:113          'sizeQueryTemp' (temp 3-component vector of uint)
 0:113          textureSize (temp 3-component vector of uint)
-0:113            'g_tTex3du4' (uniform utexture3D)
+0:113            'g_tTex3df4' (uniform texture3D)
 0:113        move second child to first child (temp uint)
 0:113          'WidthU' (temp uint)
 0:113          direct index (temp uint)
@@ -1535,7 +1591,7 @@
 0:114        move second child to first child (temp 3-component vector of uint)
 0:114          'sizeQueryTemp' (temp 3-component vector of uint)
 0:114          textureSize (temp 3-component vector of uint)
-0:114            'g_tTex3du4' (uniform utexture3D)
+0:114            'g_tTex3df4' (uniform texture3D)
 0:114            Constant:
 0:114              6 (const uint)
 0:114        move second child to first child (temp uint)
@@ -1559,92 +1615,116 @@
 0:114        move second child to first child (temp uint)
 0:114          'NumberOfLevelsU' (temp uint)
 0:114          textureQueryLevels (temp uint)
-0:114            'g_tTex3du4' (uniform utexture3D)
+0:114            'g_tTex3df4' (uniform texture3D)
 0:117      Sequence
-0:117        move second child to first child (temp 2-component vector of uint)
-0:117          'sizeQueryTemp' (temp 2-component vector of uint)
-0:117          textureSize (temp 2-component vector of uint)
-0:117            'g_tTexcdf4' (uniform textureCube)
+0:117        move second child to first child (temp 3-component vector of uint)
+0:117          'sizeQueryTemp' (temp 3-component vector of uint)
+0:117          textureSize (temp 3-component vector of uint)
+0:117            'g_tTex3di4' (uniform itexture3D)
 0:117        move second child to first child (temp uint)
 0:117          'WidthU' (temp uint)
 0:117          direct index (temp uint)
-0:117            'sizeQueryTemp' (temp 2-component vector of uint)
+0:117            'sizeQueryTemp' (temp 3-component vector of uint)
 0:117            Constant:
 0:117              0 (const int)
 0:117        move second child to first child (temp uint)
 0:117          'HeightU' (temp uint)
 0:117          direct index (temp uint)
-0:117            'sizeQueryTemp' (temp 2-component vector of uint)
+0:117            'sizeQueryTemp' (temp 3-component vector of uint)
 0:117            Constant:
 0:117              1 (const int)
+0:117        move second child to first child (temp uint)
+0:117          'DepthU' (temp uint)
+0:117          direct index (temp uint)
+0:117            'sizeQueryTemp' (temp 3-component vector of uint)
+0:117            Constant:
+0:117              2 (const int)
 0:118      Sequence
-0:118        move second child to first child (temp 2-component vector of uint)
-0:118          'sizeQueryTemp' (temp 2-component vector of uint)
-0:118          textureSize (temp 2-component vector of uint)
-0:118            'g_tTexcdf4' (uniform textureCube)
+0:118        move second child to first child (temp 3-component vector of uint)
+0:118          'sizeQueryTemp' (temp 3-component vector of uint)
+0:118          textureSize (temp 3-component vector of uint)
+0:118            'g_tTex3di4' (uniform itexture3D)
 0:118            Constant:
 0:118              6 (const uint)
 0:118        move second child to first child (temp uint)
 0:118          'WidthU' (temp uint)
 0:118          direct index (temp uint)
-0:118            'sizeQueryTemp' (temp 2-component vector of uint)
+0:118            'sizeQueryTemp' (temp 3-component vector of uint)
 0:118            Constant:
 0:118              0 (const int)
 0:118        move second child to first child (temp uint)
 0:118          'HeightU' (temp uint)
 0:118          direct index (temp uint)
-0:118            'sizeQueryTemp' (temp 2-component vector of uint)
+0:118            'sizeQueryTemp' (temp 3-component vector of uint)
 0:118            Constant:
 0:118              1 (const int)
 0:118        move second child to first child (temp uint)
+0:118          'DepthU' (temp uint)
+0:118          direct index (temp uint)
+0:118            'sizeQueryTemp' (temp 3-component vector of uint)
+0:118            Constant:
+0:118              2 (const int)
+0:118        move second child to first child (temp uint)
 0:118          'NumberOfLevelsU' (temp uint)
 0:118          textureQueryLevels (temp uint)
-0:118            'g_tTexcdf4' (uniform textureCube)
+0:118            'g_tTex3di4' (uniform itexture3D)
 0:121      Sequence
-0:121        move second child to first child (temp 2-component vector of uint)
-0:121          'sizeQueryTemp' (temp 2-component vector of uint)
-0:121          textureSize (temp 2-component vector of uint)
-0:121            'g_tTexcdi4' (uniform itextureCube)
+0:121        move second child to first child (temp 3-component vector of uint)
+0:121          'sizeQueryTemp' (temp 3-component vector of uint)
+0:121          textureSize (temp 3-component vector of uint)
+0:121            'g_tTex3du4' (uniform utexture3D)
 0:121        move second child to first child (temp uint)
 0:121          'WidthU' (temp uint)
 0:121          direct index (temp uint)
-0:121            'sizeQueryTemp' (temp 2-component vector of uint)
+0:121            'sizeQueryTemp' (temp 3-component vector of uint)
 0:121            Constant:
 0:121              0 (const int)
 0:121        move second child to first child (temp uint)
 0:121          'HeightU' (temp uint)
 0:121          direct index (temp uint)
-0:121            'sizeQueryTemp' (temp 2-component vector of uint)
+0:121            'sizeQueryTemp' (temp 3-component vector of uint)
 0:121            Constant:
 0:121              1 (const int)
+0:121        move second child to first child (temp uint)
+0:121          'DepthU' (temp uint)
+0:121          direct index (temp uint)
+0:121            'sizeQueryTemp' (temp 3-component vector of uint)
+0:121            Constant:
+0:121              2 (const int)
 0:122      Sequence
-0:122        move second child to first child (temp 2-component vector of uint)
-0:122          'sizeQueryTemp' (temp 2-component vector of uint)
-0:122          textureSize (temp 2-component vector of uint)
-0:122            'g_tTexcdi4' (uniform itextureCube)
+0:122        move second child to first child (temp 3-component vector of uint)
+0:122          'sizeQueryTemp' (temp 3-component vector of uint)
+0:122          textureSize (temp 3-component vector of uint)
+0:122            'g_tTex3du4' (uniform utexture3D)
 0:122            Constant:
 0:122              6 (const uint)
 0:122        move second child to first child (temp uint)
 0:122          'WidthU' (temp uint)
 0:122          direct index (temp uint)
-0:122            'sizeQueryTemp' (temp 2-component vector of uint)
+0:122            'sizeQueryTemp' (temp 3-component vector of uint)
 0:122            Constant:
 0:122              0 (const int)
 0:122        move second child to first child (temp uint)
 0:122          'HeightU' (temp uint)
 0:122          direct index (temp uint)
-0:122            'sizeQueryTemp' (temp 2-component vector of uint)
+0:122            'sizeQueryTemp' (temp 3-component vector of uint)
 0:122            Constant:
 0:122              1 (const int)
 0:122        move second child to first child (temp uint)
+0:122          'DepthU' (temp uint)
+0:122          direct index (temp uint)
+0:122            'sizeQueryTemp' (temp 3-component vector of uint)
+0:122            Constant:
+0:122              2 (const int)
+0:122        move second child to first child (temp uint)
 0:122          'NumberOfLevelsU' (temp uint)
 0:122          textureQueryLevels (temp uint)
-0:122            'g_tTexcdi4' (uniform itextureCube)
+0:122            'g_tTex3du4' (uniform utexture3D)
 0:125      Sequence
 0:125        move second child to first child (temp 2-component vector of uint)
 0:125          'sizeQueryTemp' (temp 2-component vector of uint)
 0:125          textureSize (temp 2-component vector of uint)
-0:125            'g_tTexcdu4' (uniform utextureCube)
+0:125            'g_tTexcdf4' (uniform textureCube)
 0:125        move second child to first child (temp uint)
 0:125          'WidthU' (temp uint)
 0:125          direct index (temp uint)
@@ -1661,7 +1741,7 @@
 0:126        move second child to first child (temp 2-component vector of uint)
 0:126          'sizeQueryTemp' (temp 2-component vector of uint)
 0:126          textureSize (temp 2-component vector of uint)
-0:126            'g_tTexcdu4' (uniform utextureCube)
+0:126            'g_tTexcdf4' (uniform textureCube)
 0:126            Constant:
 0:126              6 (const uint)
 0:126        move second child to first child (temp uint)
@@ -1679,116 +1759,92 @@
 0:126        move second child to first child (temp uint)
 0:126          'NumberOfLevelsU' (temp uint)
 0:126          textureQueryLevels (temp uint)
-0:126            'g_tTexcdu4' (uniform utextureCube)
+0:126            'g_tTexcdf4' (uniform textureCube)
 0:129      Sequence
-0:129        move second child to first child (temp 3-component vector of uint)
-0:129          'sizeQueryTemp' (temp 3-component vector of uint)
-0:129          textureSize (temp 3-component vector of uint)
-0:129            'g_tTexcdf4a' (uniform textureCubeArray)
+0:129        move second child to first child (temp 2-component vector of uint)
+0:129          'sizeQueryTemp' (temp 2-component vector of uint)
+0:129          textureSize (temp 2-component vector of uint)
+0:129            'g_tTexcdi4' (uniform itextureCube)
 0:129        move second child to first child (temp uint)
 0:129          'WidthU' (temp uint)
 0:129          direct index (temp uint)
-0:129            'sizeQueryTemp' (temp 3-component vector of uint)
+0:129            'sizeQueryTemp' (temp 2-component vector of uint)
 0:129            Constant:
 0:129              0 (const int)
 0:129        move second child to first child (temp uint)
 0:129          'HeightU' (temp uint)
 0:129          direct index (temp uint)
-0:129            'sizeQueryTemp' (temp 3-component vector of uint)
+0:129            'sizeQueryTemp' (temp 2-component vector of uint)
 0:129            Constant:
 0:129              1 (const int)
-0:129        move second child to first child (temp uint)
-0:129          'ElementsU' (temp uint)
-0:129          direct index (temp uint)
-0:129            'sizeQueryTemp' (temp 3-component vector of uint)
-0:129            Constant:
-0:129              2 (const int)
 0:130      Sequence
-0:130        move second child to first child (temp 3-component vector of uint)
-0:130          'sizeQueryTemp' (temp 3-component vector of uint)
-0:130          textureSize (temp 3-component vector of uint)
-0:130            'g_tTexcdf4a' (uniform textureCubeArray)
+0:130        move second child to first child (temp 2-component vector of uint)
+0:130          'sizeQueryTemp' (temp 2-component vector of uint)
+0:130          textureSize (temp 2-component vector of uint)
+0:130            'g_tTexcdi4' (uniform itextureCube)
 0:130            Constant:
 0:130              6 (const uint)
 0:130        move second child to first child (temp uint)
 0:130          'WidthU' (temp uint)
 0:130          direct index (temp uint)
-0:130            'sizeQueryTemp' (temp 3-component vector of uint)
+0:130            'sizeQueryTemp' (temp 2-component vector of uint)
 0:130            Constant:
 0:130              0 (const int)
 0:130        move second child to first child (temp uint)
 0:130          'HeightU' (temp uint)
 0:130          direct index (temp uint)
-0:130            'sizeQueryTemp' (temp 3-component vector of uint)
+0:130            'sizeQueryTemp' (temp 2-component vector of uint)
 0:130            Constant:
 0:130              1 (const int)
 0:130        move second child to first child (temp uint)
-0:130          'ElementsU' (temp uint)
-0:130          direct index (temp uint)
-0:130            'sizeQueryTemp' (temp 3-component vector of uint)
-0:130            Constant:
-0:130              2 (const int)
-0:130        move second child to first child (temp uint)
 0:130          'NumberOfLevelsU' (temp uint)
 0:130          textureQueryLevels (temp uint)
-0:130            'g_tTexcdf4a' (uniform textureCubeArray)
+0:130            'g_tTexcdi4' (uniform itextureCube)
 0:133      Sequence
-0:133        move second child to first child (temp 3-component vector of uint)
-0:133          'sizeQueryTemp' (temp 3-component vector of uint)
-0:133          textureSize (temp 3-component vector of uint)
-0:133            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:133        move second child to first child (temp 2-component vector of uint)
+0:133          'sizeQueryTemp' (temp 2-component vector of uint)
+0:133          textureSize (temp 2-component vector of uint)
+0:133            'g_tTexcdu4' (uniform utextureCube)
 0:133        move second child to first child (temp uint)
 0:133          'WidthU' (temp uint)
 0:133          direct index (temp uint)
-0:133            'sizeQueryTemp' (temp 3-component vector of uint)
+0:133            'sizeQueryTemp' (temp 2-component vector of uint)
 0:133            Constant:
 0:133              0 (const int)
 0:133        move second child to first child (temp uint)
 0:133          'HeightU' (temp uint)
 0:133          direct index (temp uint)
-0:133            'sizeQueryTemp' (temp 3-component vector of uint)
+0:133            'sizeQueryTemp' (temp 2-component vector of uint)
 0:133            Constant:
 0:133              1 (const int)
-0:133        move second child to first child (temp uint)
-0:133          'ElementsU' (temp uint)
-0:133          direct index (temp uint)
-0:133            'sizeQueryTemp' (temp 3-component vector of uint)
-0:133            Constant:
-0:133              2 (const int)
 0:134      Sequence
-0:134        move second child to first child (temp 3-component vector of uint)
-0:134          'sizeQueryTemp' (temp 3-component vector of uint)
-0:134          textureSize (temp 3-component vector of uint)
-0:134            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:134        move second child to first child (temp 2-component vector of uint)
+0:134          'sizeQueryTemp' (temp 2-component vector of uint)
+0:134          textureSize (temp 2-component vector of uint)
+0:134            'g_tTexcdu4' (uniform utextureCube)
 0:134            Constant:
 0:134              6 (const uint)
 0:134        move second child to first child (temp uint)
 0:134          'WidthU' (temp uint)
 0:134          direct index (temp uint)
-0:134            'sizeQueryTemp' (temp 3-component vector of uint)
+0:134            'sizeQueryTemp' (temp 2-component vector of uint)
 0:134            Constant:
 0:134              0 (const int)
 0:134        move second child to first child (temp uint)
 0:134          'HeightU' (temp uint)
 0:134          direct index (temp uint)
-0:134            'sizeQueryTemp' (temp 3-component vector of uint)
+0:134            'sizeQueryTemp' (temp 2-component vector of uint)
 0:134            Constant:
 0:134              1 (const int)
 0:134        move second child to first child (temp uint)
-0:134          'ElementsU' (temp uint)
-0:134          direct index (temp uint)
-0:134            'sizeQueryTemp' (temp 3-component vector of uint)
-0:134            Constant:
-0:134              2 (const int)
-0:134        move second child to first child (temp uint)
 0:134          'NumberOfLevelsU' (temp uint)
 0:134          textureQueryLevels (temp uint)
-0:134            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:134            'g_tTexcdu4' (uniform utextureCube)
 0:137      Sequence
 0:137        move second child to first child (temp 3-component vector of uint)
 0:137          'sizeQueryTemp' (temp 3-component vector of uint)
 0:137          textureSize (temp 3-component vector of uint)
-0:137            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:137            'g_tTexcdf4a' (uniform textureCubeArray)
 0:137        move second child to first child (temp uint)
 0:137          'WidthU' (temp uint)
 0:137          direct index (temp uint)
@@ -1811,7 +1867,7 @@
 0:138        move second child to first child (temp 3-component vector of uint)
 0:138          'sizeQueryTemp' (temp 3-component vector of uint)
 0:138          textureSize (temp 3-component vector of uint)
-0:138            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:138            'g_tTexcdf4a' (uniform textureCubeArray)
 0:138            Constant:
 0:138              6 (const uint)
 0:138        move second child to first child (temp uint)
@@ -1835,19 +1891,277 @@
 0:138        move second child to first child (temp uint)
 0:138          'NumberOfLevelsU' (temp uint)
 0:138          textureQueryLevels (temp uint)
-0:138            'g_tTexcdu4a' (uniform utextureCubeArray)
-0:234      move second child to first child (temp float)
-0:234        Depth: direct index for structure (temp float FragDepth)
-0:234          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
-0:234          Constant:
-0:234            1 (const int)
-0:234        Constant:
-0:234          1.000000
-0:236      Branch: Return with expression
-0:236        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:138            'g_tTexcdf4a' (uniform textureCubeArray)
+0:141      Sequence
+0:141        move second child to first child (temp 3-component vector of uint)
+0:141          'sizeQueryTemp' (temp 3-component vector of uint)
+0:141          textureSize (temp 3-component vector of uint)
+0:141            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:141        move second child to first child (temp uint)
+0:141          'WidthU' (temp uint)
+0:141          direct index (temp uint)
+0:141            'sizeQueryTemp' (temp 3-component vector of uint)
+0:141            Constant:
+0:141              0 (const int)
+0:141        move second child to first child (temp uint)
+0:141          'HeightU' (temp uint)
+0:141          direct index (temp uint)
+0:141            'sizeQueryTemp' (temp 3-component vector of uint)
+0:141            Constant:
+0:141              1 (const int)
+0:141        move second child to first child (temp uint)
+0:141          'ElementsU' (temp uint)
+0:141          direct index (temp uint)
+0:141            'sizeQueryTemp' (temp 3-component vector of uint)
+0:141            Constant:
+0:141              2 (const int)
+0:142      Sequence
+0:142        move second child to first child (temp 3-component vector of uint)
+0:142          'sizeQueryTemp' (temp 3-component vector of uint)
+0:142          textureSize (temp 3-component vector of uint)
+0:142            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:142            Constant:
+0:142              6 (const uint)
+0:142        move second child to first child (temp uint)
+0:142          'WidthU' (temp uint)
+0:142          direct index (temp uint)
+0:142            'sizeQueryTemp' (temp 3-component vector of uint)
+0:142            Constant:
+0:142              0 (const int)
+0:142        move second child to first child (temp uint)
+0:142          'HeightU' (temp uint)
+0:142          direct index (temp uint)
+0:142            'sizeQueryTemp' (temp 3-component vector of uint)
+0:142            Constant:
+0:142              1 (const int)
+0:142        move second child to first child (temp uint)
+0:142          'ElementsU' (temp uint)
+0:142          direct index (temp uint)
+0:142            'sizeQueryTemp' (temp 3-component vector of uint)
+0:142            Constant:
+0:142              2 (const int)
+0:142        move second child to first child (temp uint)
+0:142          'NumberOfLevelsU' (temp uint)
+0:142          textureQueryLevels (temp uint)
+0:142            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:145      Sequence
+0:145        move second child to first child (temp 3-component vector of uint)
+0:145          'sizeQueryTemp' (temp 3-component vector of uint)
+0:145          textureSize (temp 3-component vector of uint)
+0:145            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:145        move second child to first child (temp uint)
+0:145          'WidthU' (temp uint)
+0:145          direct index (temp uint)
+0:145            'sizeQueryTemp' (temp 3-component vector of uint)
+0:145            Constant:
+0:145              0 (const int)
+0:145        move second child to first child (temp uint)
+0:145          'HeightU' (temp uint)
+0:145          direct index (temp uint)
+0:145            'sizeQueryTemp' (temp 3-component vector of uint)
+0:145            Constant:
+0:145              1 (const int)
+0:145        move second child to first child (temp uint)
+0:145          'ElementsU' (temp uint)
+0:145          direct index (temp uint)
+0:145            'sizeQueryTemp' (temp 3-component vector of uint)
+0:145            Constant:
+0:145              2 (const int)
+0:146      Sequence
+0:146        move second child to first child (temp 3-component vector of uint)
+0:146          'sizeQueryTemp' (temp 3-component vector of uint)
+0:146          textureSize (temp 3-component vector of uint)
+0:146            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:146            Constant:
+0:146              6 (const uint)
+0:146        move second child to first child (temp uint)
+0:146          'WidthU' (temp uint)
+0:146          direct index (temp uint)
+0:146            'sizeQueryTemp' (temp 3-component vector of uint)
+0:146            Constant:
+0:146              0 (const int)
+0:146        move second child to first child (temp uint)
+0:146          'HeightU' (temp uint)
+0:146          direct index (temp uint)
+0:146            'sizeQueryTemp' (temp 3-component vector of uint)
+0:146            Constant:
+0:146              1 (const int)
+0:146        move second child to first child (temp uint)
+0:146          'ElementsU' (temp uint)
+0:146          direct index (temp uint)
+0:146            'sizeQueryTemp' (temp 3-component vector of uint)
+0:146            Constant:
+0:146              2 (const int)
+0:146        move second child to first child (temp uint)
+0:146          'NumberOfLevelsU' (temp uint)
+0:146          textureQueryLevels (temp uint)
+0:146            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:149      Sequence
+0:149        move second child to first child (temp 2-component vector of uint)
+0:149          'sizeQueryTemp' (temp 2-component vector of uint)
+0:149          textureSize (temp 2-component vector of uint)
+0:149            'g_tTex2dmsf4' (uniform texture2DMS)
+0:149        move second child to first child (temp uint)
+0:149          'WidthU' (temp uint)
+0:149          direct index (temp uint)
+0:149            'sizeQueryTemp' (temp 2-component vector of uint)
+0:149            Constant:
+0:149              0 (const int)
+0:149        move second child to first child (temp uint)
+0:149          'HeightU' (temp uint)
+0:149          direct index (temp uint)
+0:149            'sizeQueryTemp' (temp 2-component vector of uint)
+0:149            Constant:
+0:149              1 (const int)
+0:149        move second child to first child (temp uint)
+0:149          'NumberOfSamplesU' (temp uint)
+0:149          imageQuerySamples (temp uint)
+0:149            'g_tTex2dmsf4' (uniform texture2DMS)
+0:152      Sequence
+0:152        move second child to first child (temp 2-component vector of uint)
+0:152          'sizeQueryTemp' (temp 2-component vector of uint)
+0:152          textureSize (temp 2-component vector of uint)
+0:152            'g_tTex2dmsi4' (uniform itexture2DMS)
+0:152        move second child to first child (temp uint)
+0:152          'WidthU' (temp uint)
+0:152          direct index (temp uint)
+0:152            'sizeQueryTemp' (temp 2-component vector of uint)
+0:152            Constant:
+0:152              0 (const int)
+0:152        move second child to first child (temp uint)
+0:152          'HeightU' (temp uint)
+0:152          direct index (temp uint)
+0:152            'sizeQueryTemp' (temp 2-component vector of uint)
+0:152            Constant:
+0:152              1 (const int)
+0:152        move second child to first child (temp uint)
+0:152          'NumberOfSamplesU' (temp uint)
+0:152          imageQuerySamples (temp uint)
+0:152            'g_tTex2dmsi4' (uniform itexture2DMS)
+0:155      Sequence
+0:155        move second child to first child (temp 2-component vector of uint)
+0:155          'sizeQueryTemp' (temp 2-component vector of uint)
+0:155          textureSize (temp 2-component vector of uint)
+0:155            'g_tTex2dmsu4' (uniform utexture2DMS)
+0:155        move second child to first child (temp uint)
+0:155          'WidthU' (temp uint)
+0:155          direct index (temp uint)
+0:155            'sizeQueryTemp' (temp 2-component vector of uint)
+0:155            Constant:
+0:155              0 (const int)
+0:155        move second child to first child (temp uint)
+0:155          'HeightU' (temp uint)
+0:155          direct index (temp uint)
+0:155            'sizeQueryTemp' (temp 2-component vector of uint)
+0:155            Constant:
+0:155              1 (const int)
+0:155        move second child to first child (temp uint)
+0:155          'NumberOfSamplesU' (temp uint)
+0:155          imageQuerySamples (temp uint)
+0:155            'g_tTex2dmsu4' (uniform utexture2DMS)
+0:158      Sequence
+0:158        move second child to first child (temp 3-component vector of uint)
+0:158          'sizeQueryTemp' (temp 3-component vector of uint)
+0:158          textureSize (temp 3-component vector of uint)
+0:158            'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:158        move second child to first child (temp uint)
+0:158          'WidthU' (temp uint)
+0:158          direct index (temp uint)
+0:158            'sizeQueryTemp' (temp 3-component vector of uint)
+0:158            Constant:
+0:158              0 (const int)
+0:158        move second child to first child (temp uint)
+0:158          'HeightU' (temp uint)
+0:158          direct index (temp uint)
+0:158            'sizeQueryTemp' (temp 3-component vector of uint)
+0:158            Constant:
+0:158              1 (const int)
+0:158        move second child to first child (temp uint)
+0:158          'ElementsU' (temp uint)
+0:158          direct index (temp uint)
+0:158            'sizeQueryTemp' (temp 3-component vector of uint)
+0:158            Constant:
+0:158              2 (const int)
+0:158        move second child to first child (temp uint)
+0:158          'NumberOfSamplesU' (temp uint)
+0:158          imageQuerySamples (temp uint)
+0:158            'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:161      Sequence
+0:161        move second child to first child (temp 3-component vector of uint)
+0:161          'sizeQueryTemp' (temp 3-component vector of uint)
+0:161          textureSize (temp 3-component vector of uint)
+0:161            'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:161        move second child to first child (temp uint)
+0:161          'WidthU' (temp uint)
+0:161          direct index (temp uint)
+0:161            'sizeQueryTemp' (temp 3-component vector of uint)
+0:161            Constant:
+0:161              0 (const int)
+0:161        move second child to first child (temp uint)
+0:161          'HeightU' (temp uint)
+0:161          direct index (temp uint)
+0:161            'sizeQueryTemp' (temp 3-component vector of uint)
+0:161            Constant:
+0:161              1 (const int)
+0:161        move second child to first child (temp uint)
+0:161          'ElementsU' (temp uint)
+0:161          direct index (temp uint)
+0:161            'sizeQueryTemp' (temp 3-component vector of uint)
+0:161            Constant:
+0:161              2 (const int)
+0:161        move second child to first child (temp uint)
+0:161          'NumberOfSamplesU' (temp uint)
+0:161          imageQuerySamples (temp uint)
+0:161            'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:164      Sequence
+0:164        move second child to first child (temp 3-component vector of uint)
+0:164          'sizeQueryTemp' (temp 3-component vector of uint)
+0:164          textureSize (temp 3-component vector of uint)
+0:164            'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:164        move second child to first child (temp uint)
+0:164          'WidthU' (temp uint)
+0:164          direct index (temp uint)
+0:164            'sizeQueryTemp' (temp 3-component vector of uint)
+0:164            Constant:
+0:164              0 (const int)
+0:164        move second child to first child (temp uint)
+0:164          'HeightU' (temp uint)
+0:164          direct index (temp uint)
+0:164            'sizeQueryTemp' (temp 3-component vector of uint)
+0:164            Constant:
+0:164              1 (const int)
+0:164        move second child to first child (temp uint)
+0:164          'ElementsU' (temp uint)
+0:164          direct index (temp uint)
+0:164            'sizeQueryTemp' (temp 3-component vector of uint)
+0:164            Constant:
+0:164              2 (const int)
+0:164        move second child to first child (temp uint)
+0:164          'NumberOfSamplesU' (temp uint)
+0:164          imageQuerySamples (temp uint)
+0:164            'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:276      move second child to first child (temp 4-component vector of float)
+0:276        Color: direct index for structure (temp 4-component vector of float)
+0:276          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:276          Constant:
+0:276            0 (const int)
+0:276        Constant:
+0:276          1.000000
+0:276          1.000000
+0:276          1.000000
+0:276          1.000000
+0:277      move second child to first child (temp float)
+0:277        Depth: direct index for structure (temp float FragDepth)
+0:277          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:277          Constant:
+0:277            1 (const int)
+0:277        Constant:
+0:277          1.000000
+0:279      Branch: Return with expression
+0:279        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4' (uniform texture1D)
+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)
@@ -1868,14 +2182,21 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+0:?     'g_tTex2dmsf4' (uniform texture2DMS)
+0:?     'g_tTex2dmsi4' (uniform itexture2DMS)
+0:?     'g_tTex2dmsu4' (uniform utexture2DMS)
+0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 455
+// Id's are bound by 538
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
+                              Capability ImageMSArray
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
@@ -1951,12 +2272,26 @@
                               Name 419  "sizeQueryTemp"
                               Name 422  "g_tTexcdu4a"
                               Name 431  "sizeQueryTemp"
-                              Name 443  "PS_OUTPUT"
-                              MemberName 443(PS_OUTPUT) 0  "Color"
-                              MemberName 443(PS_OUTPUT) 1  "Depth"
-                              Name 445  "psout"
-                              Name 454  "g_sSamp"
+                              Name 442  "sizeQueryTemp"
+                              Name 445  "g_tTex2dmsf4"
+                              Name 452  "NumberOfSamplesU"
+                              Name 455  "sizeQueryTemp"
+                              Name 458  "g_tTex2dmsi4"
+                              Name 467  "sizeQueryTemp"
+                              Name 470  "g_tTex2dmsu4"
+                              Name 479  "sizeQueryTemp"
+                              Name 482  "g_tTex2dmsf4a"
+                              Name 493  "sizeQueryTemp"
+                              Name 496  "g_tTex2dmsi4a"
+                              Name 507  "sizeQueryTemp"
+                              Name 510  "g_tTex2dmsu4a"
+                              Name 522  "PS_OUTPUT"
+                              MemberName 522(PS_OUTPUT) 0  "Color"
+                              MemberName 522(PS_OUTPUT) 1  "Depth"
+                              Name 524  "psout"
+                              Name 537  "g_sSamp"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 29(g_tTex1di4) DescriptorSet 0
                               Decorate 42(g_tTex1du4) DescriptorSet 0
                               Decorate 57(g_tTex1df4a) DescriptorSet 0
@@ -1977,8 +2312,15 @@
                               Decorate 376(g_tTexcdf4a) DescriptorSet 0
                               Decorate 399(g_tTexcdi4a) DescriptorSet 0
                               Decorate 422(g_tTexcdu4a) DescriptorSet 0
-                              MemberDecorate 443(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 454(g_sSamp) DescriptorSet 0
+                              Decorate 445(g_tTex2dmsf4) DescriptorSet 0
+                              Decorate 458(g_tTex2dmsi4) DescriptorSet 0
+                              Decorate 470(g_tTex2dmsu4) DescriptorSet 0
+                              Decorate 482(g_tTex2dmsf4a) DescriptorSet 0
+                              Decorate 496(g_tTex2dmsi4a) DescriptorSet 0
+                              Decorate 510(g_tTex2dmsu4a) DescriptorSet 0
+                              MemberDecorate 522(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 537(g_sSamp) DescriptorSet 0
+                              Decorate 537(g_sSamp) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -2058,15 +2400,36 @@
              420:             TypeImage 6(int) Cube array sampled format:Unknown
              421:             TypePointer UniformConstant 420
 422(g_tTexcdu4a):    421(ptr) Variable UniformConstant
-             442:             TypeVector 9(float) 4
-  443(PS_OUTPUT):             TypeStruct 442(fvec4) 9(float)
-             444:             TypePointer Function 443(PS_OUTPUT)
-             446:     14(int) Constant 1
-             447:    9(float) Constant 1065353216
-             448:             TypePointer Function 9(float)
-             452:             TypeSampler
-             453:             TypePointer UniformConstant 452
-    454(g_sSamp):    453(ptr) Variable UniformConstant
+             443:             TypeImage 9(float) 2D multi-sampled sampled format:Unknown
+             444:             TypePointer UniformConstant 443
+445(g_tTex2dmsf4):    444(ptr) Variable UniformConstant
+             456:             TypeImage 14(int) 2D multi-sampled sampled format:Unknown
+             457:             TypePointer UniformConstant 456
+458(g_tTex2dmsi4):    457(ptr) Variable UniformConstant
+             468:             TypeImage 6(int) 2D multi-sampled sampled format:Unknown
+             469:             TypePointer UniformConstant 468
+470(g_tTex2dmsu4):    469(ptr) Variable UniformConstant
+             480:             TypeImage 9(float) 2D array multi-sampled sampled format:Unknown
+             481:             TypePointer UniformConstant 480
+482(g_tTex2dmsf4a):    481(ptr) Variable UniformConstant
+             494:             TypeImage 14(int) 2D array multi-sampled sampled format:Unknown
+             495:             TypePointer UniformConstant 494
+496(g_tTex2dmsi4a):    495(ptr) Variable UniformConstant
+             508:             TypeImage 6(int) 2D array multi-sampled sampled format:Unknown
+             509:             TypePointer UniformConstant 508
+510(g_tTex2dmsu4a):    509(ptr) Variable UniformConstant
+             521:             TypeVector 9(float) 4
+  522(PS_OUTPUT):             TypeStruct 521(fvec4) 9(float)
+             523:             TypePointer Function 522(PS_OUTPUT)
+             525:     14(int) Constant 0
+             526:    9(float) Constant 1065353216
+             527:  521(fvec4) ConstantComposite 526 526 526 526
+             528:             TypePointer Function 521(fvec4)
+             530:     14(int) Constant 1
+             531:             TypePointer Function 9(float)
+             535:             TypeSampler
+             536:             TypePointer UniformConstant 535
+    537(g_sSamp):    536(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
 8(sizeQueryTemp):      7(ptr) Variable Function
@@ -2116,7 +2479,14 @@
 408(sizeQueryTemp):    174(ptr) Variable Function
 419(sizeQueryTemp):    174(ptr) Variable Function
 431(sizeQueryTemp):    174(ptr) Variable Function
-      445(psout):    444(ptr) Variable Function
+442(sizeQueryTemp):     53(ptr) Variable Function
+452(NumberOfSamplesU):      7(ptr) Variable Function
+455(sizeQueryTemp):     53(ptr) Variable Function
+467(sizeQueryTemp):     53(ptr) Variable Function
+479(sizeQueryTemp):    174(ptr) Variable Function
+493(sizeQueryTemp):    174(ptr) Variable Function
+507(sizeQueryTemp):    174(ptr) Variable Function
+      524(psout):    523(ptr) Variable Function
               13:          10 Load 12(g_tTex1df4)
               15:     14(int) ImageQuerySize 13
                               Store 8(sizeQueryTemp) 15
@@ -2588,8 +2958,91 @@
              440:         420 Load 422(g_tTexcdu4a)
              441:     14(int) ImageQueryLevels 440
                               Store 23(NumberOfLevelsU) 441
-             449:    448(ptr) AccessChain 445(psout) 446
-                              Store 449 447
-             450:443(PS_OUTPUT) Load 445(psout)
-                              ReturnValue 450
+             446:         443 Load 445(g_tTex2dmsf4)
+             447:   59(ivec2) ImageQuerySize 446
+                              Store 442(sizeQueryTemp) 447
+             448:      7(ptr) AccessChain 442(sizeQueryTemp) 61
+             449:      6(int) Load 448
+                              Store 16(WidthU) 449
+             450:      7(ptr) AccessChain 442(sizeQueryTemp) 65
+             451:      6(int) Load 450
+                              Store 123(HeightU) 451
+             453:         443 Load 445(g_tTex2dmsf4)
+             454:     14(int) ImageQuerySamples 453
+                              Store 452(NumberOfSamplesU) 454
+             459:         456 Load 458(g_tTex2dmsi4)
+             460:   59(ivec2) ImageQuerySize 459
+                              Store 455(sizeQueryTemp) 460
+             461:      7(ptr) AccessChain 455(sizeQueryTemp) 61
+             462:      6(int) Load 461
+                              Store 16(WidthU) 462
+             463:      7(ptr) AccessChain 455(sizeQueryTemp) 65
+             464:      6(int) Load 463
+                              Store 123(HeightU) 464
+             465:         456 Load 458(g_tTex2dmsi4)
+             466:     14(int) ImageQuerySamples 465
+                              Store 452(NumberOfSamplesU) 466
+             471:         468 Load 470(g_tTex2dmsu4)
+             472:   59(ivec2) ImageQuerySize 471
+                              Store 467(sizeQueryTemp) 472
+             473:      7(ptr) AccessChain 467(sizeQueryTemp) 61
+             474:      6(int) Load 473
+                              Store 16(WidthU) 474
+             475:      7(ptr) AccessChain 467(sizeQueryTemp) 65
+             476:      6(int) Load 475
+                              Store 123(HeightU) 476
+             477:         468 Load 470(g_tTex2dmsu4)
+             478:     14(int) ImageQuerySamples 477
+                              Store 452(NumberOfSamplesU) 478
+             483:         480 Load 482(g_tTex2dmsf4a)
+             484:  180(ivec3) ImageQuerySize 483
+                              Store 479(sizeQueryTemp) 484
+             485:      7(ptr) AccessChain 479(sizeQueryTemp) 61
+             486:      6(int) Load 485
+                              Store 16(WidthU) 486
+             487:      7(ptr) AccessChain 479(sizeQueryTemp) 65
+             488:      6(int) Load 487
+                              Store 123(HeightU) 488
+             489:      7(ptr) AccessChain 479(sizeQueryTemp) 186
+             490:      6(int) Load 489
+                              Store 64(ElementsU) 490
+             491:         480 Load 482(g_tTex2dmsf4a)
+             492:     14(int) ImageQuerySamples 491
+                              Store 452(NumberOfSamplesU) 492
+             497:         494 Load 496(g_tTex2dmsi4a)
+             498:  180(ivec3) ImageQuerySize 497
+                              Store 493(sizeQueryTemp) 498
+             499:      7(ptr) AccessChain 493(sizeQueryTemp) 61
+             500:      6(int) Load 499
+                              Store 16(WidthU) 500
+             501:      7(ptr) AccessChain 493(sizeQueryTemp) 65
+             502:      6(int) Load 501
+                              Store 123(HeightU) 502
+             503:      7(ptr) AccessChain 493(sizeQueryTemp) 186
+             504:      6(int) Load 503
+                              Store 64(ElementsU) 504
+             505:         494 Load 496(g_tTex2dmsi4a)
+             506:     14(int) ImageQuerySamples 505
+                              Store 452(NumberOfSamplesU) 506
+             511:         508 Load 510(g_tTex2dmsu4a)
+             512:  180(ivec3) ImageQuerySize 511
+                              Store 507(sizeQueryTemp) 512
+             513:      7(ptr) AccessChain 507(sizeQueryTemp) 61
+             514:      6(int) Load 513
+                              Store 16(WidthU) 514
+             515:      7(ptr) AccessChain 507(sizeQueryTemp) 65
+             516:      6(int) Load 515
+                              Store 123(HeightU) 516
+             517:      7(ptr) AccessChain 507(sizeQueryTemp) 186
+             518:      6(int) Load 517
+                              Store 64(ElementsU) 518
+             519:         508 Load 510(g_tTex2dmsu4a)
+             520:     14(int) ImageQuerySamples 519
+                              Store 452(NumberOfSamplesU) 520
+             529:    528(ptr) AccessChain 524(psout) 525
+                              Store 529 527
+             532:    531(ptr) AccessChain 524(psout) 530
+                              Store 532 526
+             533:522(PS_OUTPUT) Load 524(psout)
+                              ReturnValue 533
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index 27d4dbe..9170402 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -8,7 +8,7 @@
 0:21        move second child to first child (temp uint)
 0:21          'sizeQueryTemp' (temp uint)
 0:21          textureSize (temp uint)
-0:21            'g_tTex1df4' (uniform texture1D)
+0:21            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:21        move second child to first child (temp uint)
 0:21          'WidthU' (temp uint)
 0:21          'sizeQueryTemp' (temp uint)
@@ -16,7 +16,7 @@
 0:22        move second child to first child (temp uint)
 0:22          'sizeQueryTemp' (temp uint)
 0:22          textureSize (temp uint)
-0:22            'g_tTex1df4' (uniform texture1D)
+0:22            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:22            Constant:
 0:22              6 (const uint)
 0:22        move second child to first child (temp uint)
@@ -25,7 +25,7 @@
 0:22        move second child to first child (temp uint)
 0:22          'NumberOfLevelsU' (temp uint)
 0:22          textureQueryLevels (temp uint)
-0:22            'g_tTex1df4' (uniform texture1D)
+0:22            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:24      move second child to first child (temp 4-component vector of float)
 0:24        Pos: direct index for structure (temp 4-component vector of float FragCoord)
 0:24          'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
@@ -39,8 +39,8 @@
 0:26      Branch: Return with expression
 0:26        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 
 
 Linked vertex stage:
@@ -55,7 +55,7 @@
 0:21        move second child to first child (temp uint)
 0:21          'sizeQueryTemp' (temp uint)
 0:21          textureSize (temp uint)
-0:21            'g_tTex1df4' (uniform texture1D)
+0:21            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:21        move second child to first child (temp uint)
 0:21          'WidthU' (temp uint)
 0:21          'sizeQueryTemp' (temp uint)
@@ -63,7 +63,7 @@
 0:22        move second child to first child (temp uint)
 0:22          'sizeQueryTemp' (temp uint)
 0:22          textureSize (temp uint)
-0:22            'g_tTex1df4' (uniform texture1D)
+0:22            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:22            Constant:
 0:22              6 (const uint)
 0:22        move second child to first child (temp uint)
@@ -72,7 +72,7 @@
 0:22        move second child to first child (temp uint)
 0:22          'NumberOfLevelsU' (temp uint)
 0:22          textureQueryLevels (temp uint)
-0:22            'g_tTex1df4' (uniform texture1D)
+0:22            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:24      move second child to first child (temp 4-component vector of float)
 0:24        Pos: direct index for structure (temp 4-component vector of float FragCoord)
 0:24          'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
@@ -86,8 +86,8 @@
 0:26      Branch: Return with expression
 0:26        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -111,8 +111,10 @@
                               Name 29  "vsout"
                               Name 39  "g_sSamp"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               MemberDecorate 27(VS_OUTPUT) 0 BuiltIn FragCoord
                               Decorate 39(g_sSamp) DescriptorSet 0
+                              Decorate 39(g_sSamp) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
new file mode 100644
index 0000000..e2cf6fe
--- /dev/null
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -0,0 +1,103 @@
+hlsl.getsampleposition.dx10.frag
+ERROR: 0:16: '' : unimplemented: GetSamplePosition 
+ERROR: 0:17: '' : unimplemented: GetSamplePosition 
+ERROR: 2 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 FragDepth 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)
+0:16            'g_tTex2dmsf4' (uniform texture2DMS)
+0:16            Constant:
+0:16              1 (const int)
+0:17      Sequence
+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)
+0:17            'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:17            Constant:
+0:17              2 (const int)
+0:19      move second child to first child (temp 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, temp float FragDepth Depth})
+0:19          Constant:
+0:19            0 (const int)
+0:19        Constant:
+0:19          1.000000
+0:19          1.000000
+0:19          1.000000
+0:19          1.000000
+0:20      move second child to first child (temp float)
+0:20        Depth: direct index for structure (temp float FragDepth)
+0:20          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:20          Constant:
+0:20            1 (const int)
+0:20        Constant:
+0:20          1.000000
+0:22      Branch: Return with expression
+0:22        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex2dmsf4' (uniform texture2DMS)
+0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
+
+
+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 FragDepth 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)
+0:16            'g_tTex2dmsf4' (uniform texture2DMS)
+0:16            Constant:
+0:16              1 (const int)
+0:17      Sequence
+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)
+0:17            'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:17            Constant:
+0:17              2 (const int)
+0:19      move second child to first child (temp 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, temp float FragDepth Depth})
+0:19          Constant:
+0:19            0 (const int)
+0:19        Constant:
+0:19          1.000000
+0:19          1.000000
+0:19          1.000000
+0:19          1.000000
+0:20      move second child to first child (temp float)
+0:20        Depth: direct index for structure (temp float FragDepth)
+0:20          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:20          Constant:
+0:20            1 (const int)
+0:20        Constant:
+0:20          1.000000
+0:22      Branch: Return with expression
+0:22        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex2dmsf4' (uniform texture2DMS)
+0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
index 1a4c802..bc7c21b 100755
--- a/Test/baseResults/hlsl.init.frag.out
+++ b/Test/baseResults/hlsl.init.frag.out
@@ -56,56 +56,78 @@
 0:6      'c5' (global float)
 0:6      Constant:
 0:6        1.500000
-0:25  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
-0:9    Function Parameters: 
-0:9      'input' (in 4-component vector of float)
+0:9  Sequence
+0:9    move second child to first child (temp structure{temp int f})
+0:9      'single1' (global structure{temp int f})
+0:9      Constant:
+0:9        10 (const int)
+0:12  Sequence
+0:12    move second child to first child (temp structure{temp 2-component vector of uint v})
+0:12      'single2' (global structure{temp 2-component vector of uint v})
+0:12      Constant:
+0:12        1 (const uint)
+0:12        2 (const uint)
+0:15  Sequence
+0:15    move second child to first child (temp structure{temp structure{temp int f} s1})
+0:15      'single3' (global structure{temp structure{temp int f} s1})
+0:15      Constant:
+0:15        3 (const int)
+0:18  Sequence
+0:18    move second child to first child (temp structure{temp structure{temp 2-component vector of uint v} s1})
+0:18      'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
+0:18      Constant:
+0:18        4 (const uint)
+0:18        5 (const uint)
+0:37  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
+0:21    Function Parameters: 
+0:21      'input' (in 4-component vector of float)
 0:?     Sequence
-0:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:10          'a2' (temp 4-component vector of float)
+0:22      Sequence
+0:22        move second child to first child (temp 4-component vector of float)
+0:22          'a2' (temp 4-component vector of float)
 0:?           Constant:
 0:?             0.200000
 0:?             0.300000
 0:?             0.400000
 0:?             0.500000
-0:20      Sequence
-0:20        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20          's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20          Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20            Constant:
-0:20              9 (const int)
-0:20            'a5' (global float)
-0:20            Construct structure (temp structure{temp float f, temp int i})
-0:20              Comma (temp float)
-0:20                'a3' (global float)
-0:20                'a4' (global float)
-0:20              Constant:
-0:20                12 (const int)
-0:20        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20          's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32      Sequence
+0:32        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32          's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32          Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32            Constant:
+0:32              9 (const int)
+0:32            'a5' (global float)
+0:32            Construct structure (temp structure{temp float f, temp int i})
+0:32              Comma (temp float)
+0:32                'a3' (global float)
+0:32                'a4' (global float)
+0:32              Constant:
+0:32                12 (const int)
+0:32        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32          's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
 0:?           Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20            Constant:
-0:20              9 (const int)
-0:20            'a5' (global float)
+0:32            Constant:
+0:32              9 (const int)
+0:32            'a5' (global float)
 0:?             Construct structure (temp structure{temp float f, temp int i})
-0:20              Comma (temp float)
-0:20                'a3' (global float)
-0:20                'a4' (global float)
-0:20              Constant:
-0:20                12 (const int)
-0:21      Sequence
-0:21        move second child to first child (temp float)
-0:21          'a8' (temp float)
-0:21          Comma (temp float)
-0:21            'a2' (temp 4-component vector of float)
-0:21            'b2' (global float)
-0:21        move second child to first child (temp float)
-0:21          'a9' (temp float)
-0:21          'a5' (global float)
-0:23      Branch: Return with expression
-0:23        component-wise multiply (temp 4-component vector of float)
-0:23          'input' (in 4-component vector of float)
-0:23          'a1' (global 4-component vector of float)
+0:32              Comma (temp float)
+0:32                'a3' (global float)
+0:32                'a4' (global float)
+0:32              Constant:
+0:32                12 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'a8' (temp float)
+0:33          Comma (temp float)
+0:33            'a2' (temp 4-component vector of float)
+0:33            'b2' (global float)
+0:33        move second child to first child (temp float)
+0:33          'a9' (temp float)
+0:33          'a5' (global float)
+0:35      Branch: Return with expression
+0:35        component-wise multiply (temp 4-component vector of float)
+0:35          'input' (in 4-component vector of float)
+0:35          'a1' (global 4-component vector of float)
 0:?   Linker Objects
 0:?     'a1' (global 4-component vector of float)
 0:?     'b1' (global 4-component vector of float)
@@ -121,6 +143,10 @@
 0:?     'a5' (global float)
 0:?     'b5' (global float)
 0:?     'c5' (global float)
+0:?     'single1' (global structure{temp int f})
+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})
 
 
 Linked fragment stage:
@@ -183,56 +209,78 @@
 0:6      'c5' (global float)
 0:6      Constant:
 0:6        1.500000
-0:25  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
-0:9    Function Parameters: 
-0:9      'input' (in 4-component vector of float)
+0:9  Sequence
+0:9    move second child to first child (temp structure{temp int f})
+0:9      'single1' (global structure{temp int f})
+0:9      Constant:
+0:9        10 (const int)
+0:12  Sequence
+0:12    move second child to first child (temp structure{temp 2-component vector of uint v})
+0:12      'single2' (global structure{temp 2-component vector of uint v})
+0:12      Constant:
+0:12        1 (const uint)
+0:12        2 (const uint)
+0:15  Sequence
+0:15    move second child to first child (temp structure{temp structure{temp int f} s1})
+0:15      'single3' (global structure{temp structure{temp int f} s1})
+0:15      Constant:
+0:15        3 (const int)
+0:18  Sequence
+0:18    move second child to first child (temp structure{temp structure{temp 2-component vector of uint v} s1})
+0:18      'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
+0:18      Constant:
+0:18        4 (const uint)
+0:18        5 (const uint)
+0:37  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
+0:21    Function Parameters: 
+0:21      'input' (in 4-component vector of float)
 0:?     Sequence
-0:10      Sequence
-0:10        move second child to first child (temp 4-component vector of float)
-0:10          'a2' (temp 4-component vector of float)
+0:22      Sequence
+0:22        move second child to first child (temp 4-component vector of float)
+0:22          'a2' (temp 4-component vector of float)
 0:?           Constant:
 0:?             0.200000
 0:?             0.300000
 0:?             0.400000
 0:?             0.500000
-0:20      Sequence
-0:20        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20          's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20          Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20            Constant:
-0:20              9 (const int)
-0:20            'a5' (global float)
-0:20            Construct structure (temp structure{temp float f, temp int i})
-0:20              Comma (temp float)
-0:20                'a3' (global float)
-0:20                'a4' (global float)
-0:20              Constant:
-0:20                12 (const int)
-0:20        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20          's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32      Sequence
+0:32        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32          's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32          Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32            Constant:
+0:32              9 (const int)
+0:32            'a5' (global float)
+0:32            Construct structure (temp structure{temp float f, temp int i})
+0:32              Comma (temp float)
+0:32                'a3' (global float)
+0:32                'a4' (global float)
+0:32              Constant:
+0:32                12 (const int)
+0:32        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:32          's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
 0:?           Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
-0:20            Constant:
-0:20              9 (const int)
-0:20            'a5' (global float)
+0:32            Constant:
+0:32              9 (const int)
+0:32            'a5' (global float)
 0:?             Construct structure (temp structure{temp float f, temp int i})
-0:20              Comma (temp float)
-0:20                'a3' (global float)
-0:20                'a4' (global float)
-0:20              Constant:
-0:20                12 (const int)
-0:21      Sequence
-0:21        move second child to first child (temp float)
-0:21          'a8' (temp float)
-0:21          Comma (temp float)
-0:21            'a2' (temp 4-component vector of float)
-0:21            'b2' (global float)
-0:21        move second child to first child (temp float)
-0:21          'a9' (temp float)
-0:21          'a5' (global float)
-0:23      Branch: Return with expression
-0:23        component-wise multiply (temp 4-component vector of float)
-0:23          'input' (in 4-component vector of float)
-0:23          'a1' (global 4-component vector of float)
+0:32              Comma (temp float)
+0:32                'a3' (global float)
+0:32                'a4' (global float)
+0:32              Constant:
+0:32                12 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'a8' (temp float)
+0:33          Comma (temp float)
+0:33            'a2' (temp 4-component vector of float)
+0:33            'b2' (global float)
+0:33        move second child to first child (temp float)
+0:33          'a9' (temp float)
+0:33          'a5' (global float)
+0:35      Branch: Return with expression
+0:35        component-wise multiply (temp 4-component vector of float)
+0:35          'input' (in 4-component vector of float)
+0:35          'a1' (global 4-component vector of float)
 0:?   Linker Objects
 0:?     'a1' (global 4-component vector of float)
 0:?     'b1' (global 4-component vector of float)
@@ -248,15 +296,19 @@
 0:?     'a5' (global float)
 0:?     'b5' (global float)
 0:?     'c5' (global float)
+0:?     'single1' (global structure{temp int f})
+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})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 67
+// Id's are bound by 95
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "ShaderFunction" 60
+                              EntryPoint Fragment 4  "ShaderFunction" 88
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 450
                               Name 4  "ShaderFunction"
@@ -269,24 +321,36 @@
                               Name 27  "b4"
                               Name 29  "a5"
                               Name 30  "c5"
-                              Name 33  "a2"
-                              Name 36  "S1"
-                              MemberName 36(S1) 0  "f"
-                              MemberName 36(S1) 1  "i"
-                              Name 37  "S2"
-                              MemberName 37(S2) 0  "j"
-                              MemberName 37(S2) 1  "g"
-                              MemberName 37(S2) 2  "s1"
-                              Name 39  "s2i"
-                              Name 42  "a3"
-                              Name 43  "a4"
-                              Name 48  "s2"
-                              Name 54  "a8"
-                              Name 55  "b2"
-                              Name 57  "a9"
-                              Name 60  "input"
-                              Name 65  "c4"
-                              Name 66  "b5"
+                              Name 33  "Single1"
+                              MemberName 33(Single1) 0  "f"
+                              Name 35  "single1"
+                              Name 40  "Single2"
+                              MemberName 40(Single2) 0  "v"
+                              Name 42  "single2"
+                              Name 47  "Single3"
+                              MemberName 47(Single3) 0  "s1"
+                              Name 49  "single3"
+                              Name 53  "Single4"
+                              MemberName 53(Single4) 0  "s1"
+                              Name 55  "single4"
+                              Name 62  "a2"
+                              Name 64  "S1"
+                              MemberName 64(S1) 0  "f"
+                              MemberName 64(S1) 1  "i"
+                              Name 65  "S2"
+                              MemberName 65(S2) 0  "j"
+                              MemberName 65(S2) 1  "g"
+                              MemberName 65(S2) 2  "s1"
+                              Name 67  "s2i"
+                              Name 70  "a3"
+                              Name 71  "a4"
+                              Name 76  "s2"
+                              Name 82  "a8"
+                              Name 83  "b2"
+                              Name 85  "a9"
+                              Name 88  "input"
+                              Name 93  "c4"
+                              Name 94  "b5"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -315,29 +379,57 @@
           29(a5):     22(ptr) Variable Private
           30(c5):     22(ptr) Variable Private
               31:    6(float) Constant 1069547520
-              32:             TypePointer Function 7(fvec4)
-              34:    7(fvec4) ConstantComposite 24 26 28 11
-              35:             TypeInt 32 1
-          36(S1):             TypeStruct 6(float) 35(int)
-          37(S2):             TypeStruct 35(int) 6(float) 36(S1)
-              38:             TypePointer Function 37(S2)
-              40:     35(int) Constant 9
-          42(a3):     22(ptr) Variable Private
-          43(a4):     22(ptr) Variable Private
-              45:     35(int) Constant 12
-              53:             TypePointer Function 6(float)
-          55(b2):     22(ptr) Variable Private
-              59:             TypePointer Input 7(fvec4)
-       60(input):     59(ptr) Variable Input
-          65(c4):     22(ptr) Variable Private
-          66(b5):     22(ptr) Variable Private
+              32:             TypeInt 32 1
+     33(Single1):             TypeStruct 32(int)
+              34:             TypePointer Private 33(Single1)
+     35(single1):     34(ptr) Variable Private
+              36:     32(int) Constant 10
+              37: 33(Single1) ConstantComposite 36
+              38:             TypeInt 32 0
+              39:             TypeVector 38(int) 2
+     40(Single2):             TypeStruct 39(ivec2)
+              41:             TypePointer Private 40(Single2)
+     42(single2):     41(ptr) Variable Private
+              43:     38(int) Constant 1
+              44:     38(int) Constant 2
+              45:   39(ivec2) ConstantComposite 43 44
+              46: 40(Single2) ConstantComposite 45
+     47(Single3):             TypeStruct 33(Single1)
+              48:             TypePointer Private 47(Single3)
+     49(single3):     48(ptr) Variable Private
+              50:     32(int) Constant 3
+              51: 33(Single1) ConstantComposite 50
+              52: 47(Single3) ConstantComposite 51
+     53(Single4):             TypeStruct 40(Single2)
+              54:             TypePointer Private 53(Single4)
+     55(single4):     54(ptr) Variable Private
+              56:     38(int) Constant 4
+              57:     38(int) Constant 5
+              58:   39(ivec2) ConstantComposite 56 57
+              59: 40(Single2) ConstantComposite 58
+              60: 53(Single4) ConstantComposite 59
+              61:             TypePointer Function 7(fvec4)
+              63:    7(fvec4) ConstantComposite 24 26 28 11
+          64(S1):             TypeStruct 6(float) 32(int)
+          65(S2):             TypeStruct 32(int) 6(float) 64(S1)
+              66:             TypePointer Function 65(S2)
+              68:     32(int) Constant 9
+          70(a3):     22(ptr) Variable Private
+          71(a4):     22(ptr) Variable Private
+              73:     32(int) Constant 12
+              81:             TypePointer Function 6(float)
+          83(b2):     22(ptr) Variable Private
+              87:             TypePointer Input 7(fvec4)
+       88(input):     87(ptr) Variable Input
+          93(c4):     22(ptr) Variable Private
+          94(b5):     22(ptr) Variable Private
 4(ShaderFunction):           2 Function None 3
                5:             Label
-          33(a2):     32(ptr) Variable Function
-         39(s2i):     38(ptr) Variable Function
-          48(s2):     38(ptr) Variable Function
-          54(a8):     53(ptr) Variable Function
-          57(a9):     53(ptr) Variable Function
+          62(a2):     61(ptr) Variable Function
+         67(s2i):     66(ptr) Variable Function
+          76(s2):     66(ptr) Variable Function
+          82(a8):     81(ptr) Variable Function
+          85(a9):     81(ptr) Variable Function
                               Store 9(a1) 13
                               Store 14(b1) 19
                               Store 20(a1i) 13
@@ -347,23 +439,27 @@
                               Store 27(b4) 28
                               Store 29(a5) 11
                               Store 30(c5) 31
-                              Store 33(a2) 34
-              41:    6(float) Load 29(a5)
-              44:    6(float) Load 43(a4)
-              46:      36(S1) CompositeConstruct 44 45
-              47:      37(S2) CompositeConstruct 40 41 46
-                              Store 39(s2i) 47
-              49:    6(float) Load 29(a5)
-              50:    6(float) Load 43(a4)
-              51:      36(S1) CompositeConstruct 50 45
-              52:      37(S2) CompositeConstruct 40 49 51
-                              Store 48(s2) 52
-              56:    6(float) Load 55(b2)
-                              Store 54(a8) 56
-              58:    6(float) Load 29(a5)
-                              Store 57(a9) 58
-              61:    7(fvec4) Load 60(input)
-              62:    7(fvec4) Load 9(a1)
-              63:    7(fvec4) FMul 61 62
-                              ReturnValue 63
+                              Store 35(single1) 37
+                              Store 42(single2) 46
+                              Store 49(single3) 52
+                              Store 55(single4) 60
+                              Store 62(a2) 63
+              69:    6(float) Load 29(a5)
+              72:    6(float) Load 71(a4)
+              74:      64(S1) CompositeConstruct 72 73
+              75:      65(S2) CompositeConstruct 68 69 74
+                              Store 67(s2i) 75
+              77:    6(float) Load 29(a5)
+              78:    6(float) Load 71(a4)
+              79:      64(S1) CompositeConstruct 78 73
+              80:      65(S2) CompositeConstruct 68 77 79
+                              Store 76(s2) 80
+              84:    6(float) Load 83(b2)
+                              Store 82(a8) 84
+              86:    6(float) Load 29(a5)
+                              Store 85(a9) 86
+              89:    7(fvec4) Load 88(input)
+              90:    7(fvec4) Load 9(a1)
+              91:    7(fvec4) FMul 89 90
+                              ReturnValue 91
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out
new file mode 100644
index 0000000..439fd37
--- /dev/null
+++ b/Test/baseResults/hlsl.init2.frag.out
@@ -0,0 +1,176 @@
+hlsl.init2.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:23  Function Definition: Test1( (global void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child (temp structure{temp 2-component vector of float a})
+0:5          'test1' (temp structure{temp 2-component vector of float a})
+0:5          Constant:
+0:5            1.000000
+0:5            2.000000
+0:9      Sequence
+0:9        move second child to first child (temp structure{temp 2-component vector of float a})
+0:9          'test2' (temp structure{temp 2-component vector of float a})
+0:9          Constant:
+0:9            3.000000
+0:9            4.000000
+0:17      Sequence
+0:17        move second child to first child (temp float)
+0:17          'test4' (temp float)
+0:17          Constant:
+0:17            7.000000
+0:20      Sequence
+0:20        move second child to first child (temp structure{temp float a, temp float b, temp float c})
+0:20          'test5' (temp structure{temp float a, temp float b, temp float c})
+0:20          Constant:
+0:20            8.000000
+0:20            9.000000
+0:20            10.000000
+0:33  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:26    Function Parameters: 
+0:?     Sequence
+0:27      Function Call: Test1( (global 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})
+0:30          Constant:
+0:30            0 (const int)
+0:30        Constant:
+0:30          1.000000
+0:30          1.000000
+0:30          1.000000
+0:30          1.000000
+0:31      Branch: Return with expression
+0:31        'ps_output' (temp structure{temp 4-component vector of float color})
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:23  Function Definition: Test1( (global void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child (temp structure{temp 2-component vector of float a})
+0:5          'test1' (temp structure{temp 2-component vector of float a})
+0:5          Constant:
+0:5            1.000000
+0:5            2.000000
+0:9      Sequence
+0:9        move second child to first child (temp structure{temp 2-component vector of float a})
+0:9          'test2' (temp structure{temp 2-component vector of float a})
+0:9          Constant:
+0:9            3.000000
+0:9            4.000000
+0:17      Sequence
+0:17        move second child to first child (temp float)
+0:17          'test4' (temp float)
+0:17          Constant:
+0:17            7.000000
+0:20      Sequence
+0:20        move second child to first child (temp structure{temp float a, temp float b, temp float c})
+0:20          'test5' (temp structure{temp float a, temp float b, temp float c})
+0:20          Constant:
+0:20            8.000000
+0:20            9.000000
+0:20            10.000000
+0:33  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:26    Function Parameters: 
+0:?     Sequence
+0:27      Function Call: Test1( (global 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})
+0:30          Constant:
+0:30            0 (const int)
+0:30        Constant:
+0:30          1.000000
+0:30          1.000000
+0:30          1.000000
+0:30          1.000000
+0:31      Branch: Return with expression
+0:31        'ps_output' (temp structure{temp 4-component vector of float color})
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 44
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 6  "Test1("
+                              Name 10  "mystruct"
+                              MemberName 10(mystruct) 0  "a"
+                              Name 12  "test1"
+                              Name 17  "test2"
+                              Name 23  "test4"
+                              Name 25  "mystruct2"
+                              MemberName 25(mystruct2) 0  "a"
+                              MemberName 25(mystruct2) 1  "b"
+                              MemberName 25(mystruct2) 2  "c"
+                              Name 27  "test5"
+                              Name 34  "PS_OUTPUT"
+                              MemberName 34(PS_OUTPUT) 0  "color"
+                              Name 36  "ps_output"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 2
+    10(mystruct):             TypeStruct 9(fvec2)
+              11:             TypePointer Function 10(mystruct)
+              13:    8(float) Constant 1065353216
+              14:    8(float) Constant 1073741824
+              15:    9(fvec2) ConstantComposite 13 14
+              16:10(mystruct) ConstantComposite 15
+              18:    8(float) Constant 1077936128
+              19:    8(float) Constant 1082130432
+              20:    9(fvec2) ConstantComposite 18 19
+              21:10(mystruct) ConstantComposite 20
+              22:             TypePointer Function 8(float)
+              24:    8(float) Constant 1088421888
+   25(mystruct2):             TypeStruct 8(float) 8(float) 8(float)
+              26:             TypePointer Function 25(mystruct2)
+              28:    8(float) Constant 1090519040
+              29:    8(float) Constant 1091567616
+              30:    8(float) Constant 1092616192
+              31:25(mystruct2) ConstantComposite 28 29 30
+              33:             TypeVector 8(float) 4
+   34(PS_OUTPUT):             TypeStruct 33(fvec4)
+              35:             TypePointer Function 34(PS_OUTPUT)
+              37:             TypeInt 32 1
+              38:     37(int) Constant 0
+              39:   33(fvec4) ConstantComposite 13 13 13 13
+              40:             TypePointer Function 33(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+   36(ps_output):     35(ptr) Variable Function
+              32:           2 FunctionCall 6(Test1()
+              41:     40(ptr) AccessChain 36(ps_output) 38
+                              Store 41 39
+              42:34(PS_OUTPUT) Load 36(ps_output)
+                              ReturnValue 42
+                              FunctionEnd
+       6(Test1():           2 Function None 3
+               7:             Label
+       12(test1):     11(ptr) Variable Function
+       17(test2):     11(ptr) Variable Function
+       23(test4):     22(ptr) Variable Function
+       27(test5):     26(ptr) Variable Function
+                              Store 12(test1) 16
+                              Store 17(test2) 21
+                              Store 23(test4) 24
+                              Store 27(test5) 31
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index f6c4147..f4e2434 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -733,7 +733,7 @@
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:258  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:259  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 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)
@@ -970,1162 +970,1170 @@
 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 float)
-0:226          'r043' (temp float)
-0:226          length (global float)
+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            'inF0' (in 3-component vector of float)
+0:226            'inF1' (in 3-component vector of float)
+0:226            Constant:
+0:226              0.300000
 0:227      Sequence
-0:227        move second child to first child (temp 3-component vector of float)
-0:227          'r044' (temp 3-component vector of float)
-0:227          log (global 3-component vector of float)
+0:227        move second child to first child (temp float)
+0:227          'r043' (temp float)
+0:227          length (global 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          'r045' (temp 3-component vector of float)
-0:228          vector-scale (temp 3-component vector of float)
-0:228            log2 (temp 3-component vector of float)
-0:228              'inF0' (in 3-component vector of float)
-0:228            Constant:
-0:228              0.301030
+0:228          'r044' (temp 3-component vector of float)
+0:228          log (global 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)
-0:229          'r046' (temp 3-component vector of float)
-0:229          log2 (global 3-component vector of float)
-0:229            'inF0' (in 3-component vector of float)
+0:229          'r045' (temp 3-component vector of float)
+0:229          vector-scale (temp 3-component vector of float)
+0:229            log2 (temp 3-component vector of float)
+0:229              'inF0' (in 3-component vector of float)
+0:229            Constant:
+0:229              0.301030
 0:230      Sequence
 0:230        move second child to first child (temp 3-component vector of float)
-0:230          'r047' (temp 3-component vector of float)
-0:230          max (global 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            'inF0' (in 3-component vector of float)
-0:230            'inF1' (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          'r048' (temp 3-component vector of float)
-0:231          min (global 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            '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          'r049' (temp 3-component vector of float)
-0:232          normalize (global 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            '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          'r050' (temp 3-component vector of float)
-0:233          pow (global 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            'inF0' (in 3-component vector of float)
-0:233            'inF1' (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          'r051' (temp 3-component vector of float)
-0:234          radians (global 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            '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          'r052' (temp 3-component vector of float)
-0:235          divide (temp 3-component vector of float)
-0:235            Constant:
-0:235              1.000000
+0:235          'r051' (temp 3-component vector of float)
+0:235          radians (global 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)
-0:236          'r053' (temp 3-component vector of float)
-0:236          reflect (global 3-component vector of float)
+0:236          'r052' (temp 3-component vector of float)
+0:236          divide (temp 3-component vector of float)
+0:236            Constant:
+0:236              1.000000
 0:236            'inF0' (in 3-component vector of float)
-0:236            'inF1' (in 3-component vector of float)
 0:237      Sequence
 0:237        move second child to first child (temp 3-component vector of float)
-0:237          'r054' (temp 3-component vector of float)
-0:237          refract (global 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            'inF0' (in 3-component vector of float)
 0:237            'inF1' (in 3-component vector of float)
-0:237            Constant:
-0:237              2.000000
 0:238      Sequence
-0:238        move second child to first child (temp 3-component vector of uint)
-0:238          'r055' (temp 3-component vector of uint)
+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            'inF0' (in 3-component vector of float)
+0:238            'inF1' (in 3-component vector of float)
+0:238            Constant:
+0:238              2.000000
+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:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:239      Sequence
-0:239        move second child to first child (temp 3-component vector of float)
-0:239          'r056' (temp 3-component vector of float)
-0:239          roundEven (global 3-component vector of float)
-0:239            'inF0' (in 3-component vector of float)
 0:240      Sequence
 0:240        move second child to first child (temp 3-component vector of float)
-0:240          'r057' (temp 3-component vector of float)
-0:240          inverse sqrt (global 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            '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          'r058' (temp 3-component vector of float)
-0:241          clamp (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            'inF0' (in 3-component vector of float)
-0:241            Constant:
-0:241              0.000000
-0:241            Constant:
-0:241              1.000000
 0:242      Sequence
 0:242        move second child to first child (temp 3-component vector of float)
-0:242          'r059' (temp 3-component vector of float)
-0:242          Sign (global 3-component vector of float)
+0:242          'r058' (temp 3-component vector of float)
+0:242          clamp (temp 3-component vector of float)
 0:242            'inF0' (in 3-component vector of float)
+0:242            Constant:
+0:242              0.000000
+0:242            Constant:
+0:242              1.000000
 0:243      Sequence
 0:243        move second child to first child (temp 3-component vector of float)
-0:243          'r060' (temp 3-component vector of float)
-0:243          sine (global 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            '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          'inF1' (in 3-component vector of float)
-0:244          sine (temp 3-component vector of float)
-0:244            'inF0' (in 3-component vector of float)
-0:244        move second child to first child (temp 3-component vector of float)
-0:244          'inF2' (in 3-component vector of float)
-0:244          cosine (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            'inF0' (in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child (temp 3-component vector of float)
-0:245          'r061' (temp 3-component vector of float)
-0:245          hyp. sine (global 3-component vector of float)
+0:245          'inF1' (in 3-component vector of float)
+0:245          sine (temp 3-component vector of float)
+0:245            'inF0' (in 3-component vector of float)
+0:245        move second child to first child (temp 3-component vector of float)
+0:245          'inF2' (in 3-component vector of float)
+0:245          cosine (temp 3-component vector of float)
 0:245            'inF0' (in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child (temp 3-component vector of float)
-0:246          'r062' (temp 3-component vector of float)
-0:246          smoothstep (global 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            'inF0' (in 3-component vector of float)
-0:246            'inF1' (in 3-component vector of float)
-0:246            'inF2' (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          'r063' (temp 3-component vector of float)
-0:247          sqrt (global 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            '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          'r064' (temp 3-component vector of float)
-0:248          step (global 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            'inF0' (in 3-component vector of float)
-0:248            'inF1' (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          'r065' (temp 3-component vector of float)
-0:249          tangent (global 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            '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          'r066' (temp 3-component vector of float)
-0:250          hyp. tangent (global 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            'inF0' (in 3-component vector of float)
-0:252      Sequence
-0:252        move second child to first child (temp 3-component vector of float)
-0:252          'r067' (temp 3-component vector of float)
-0:252          trunc (global 3-component vector of float)
-0:252            'inF0' (in 3-component vector of float)
-0:255      Branch: Return with expression
+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            '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            '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:399  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
-0:259    Function Parameters: 
-0:259      'inF0' (in 4-component vector of float)
-0:259      'inF1' (in 4-component vector of float)
-0:259      'inF2' (in 4-component vector of float)
-0:259      'inU0' (in 4-component vector of uint)
-0:259      'inU1' (in 4-component vector of uint)
+0:400  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 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)
+0:260      'inF2' (in 4-component vector of float)
+0:260      'inU0' (in 4-component vector of uint)
+0:260      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:262      Sequence
-0:262        move second child to first child (temp bool)
-0:262          'r000' (temp bool)
-0:262          all (global bool)
-0:262            'inF0' (in 4-component vector of float)
 0:263      Sequence
-0:263        move second child to first child (temp 4-component vector of float)
-0:263          'r001' (temp 4-component vector of float)
-0:263          Absolute value (global 4-component vector of float)
+0:263        move second child to first child (temp bool)
+0:263          'r000' (temp bool)
+0:263          all (global 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          'r002' (temp 4-component vector of float)
-0:264          arc cosine (global 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            'inF0' (in 4-component vector of float)
 0:265      Sequence
-0:265        move second child to first child (temp bool)
-0:265          'r003' (temp bool)
-0:265          any (global bool)
+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            'inF0' (in 4-component vector of float)
 0:266      Sequence
-0:266        move second child to first child (temp 4-component vector of float)
-0:266          'r004' (temp 4-component vector of float)
-0:266          arc sine (global 4-component vector of float)
+0:266        move second child to first child (temp bool)
+0:266          'r003' (temp bool)
+0:266          any (global 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 int)
-0:267          'r005' (temp 4-component vector of int)
-0:267          floatBitsToInt (global 4-component vector of int)
+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            'inF0' (in 4-component vector of float)
 0:268      Sequence
-0:268        move second child to first child (temp 4-component vector of uint)
-0:268          'r006' (temp 4-component vector of uint)
-0:268          floatBitsToUint (global 4-component vector of uint)
+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            'inF0' (in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child (temp 4-component vector of float)
-0:269          'r007' (temp 4-component vector of float)
-0:269          intBitsToFloat (global 4-component vector of float)
-0:269            'inU0' (in 4-component vector of uint)
-0:271      Sequence
-0:271        move second child to first child (temp 4-component vector of float)
-0:271          'r009' (temp 4-component vector of float)
-0:271          arc tangent (global 4-component vector of float)
-0:271            'inF0' (in 4-component vector of float)
+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            '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            '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          'r010' (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            'inF0' (in 4-component vector of float)
-0:272            'inF1' (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          'r011' (temp 4-component vector of float)
-0:273          Ceiling (global 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            '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          'r012' (temp 4-component vector of float)
-0:274          clamp (global 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            'inF0' (in 4-component vector of float)
-0:274            'inF1' (in 4-component vector of float)
-0:274            'inF2' (in 4-component vector of float)
-0:275      Test condition and select (temp void)
-0:275        Condition
-0:275        any (temp bool)
-0:275          Compare Less Than (temp 4-component vector of bool)
+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            'inF0' (in 4-component vector of float)
-0:275            Constant:
-0:275              0.000000
-0:275              0.000000
-0:275              0.000000
-0:275              0.000000
-0:275        true case
-0:275        Branch: Kill
-0:276      Sequence
-0:276        move second child to first child (temp 4-component vector of float)
-0:276          'r013' (temp 4-component vector of float)
-0:276          cosine (global 4-component vector of float)
+0:275            'inF1' (in 4-component vector of float)
+0:275            'inF2' (in 4-component vector of float)
+0:276      Test condition and select (temp void)
+0:276        Condition
+0:276        any (temp bool)
+0:276          Compare Less Than (temp 4-component vector of bool)
 0:276            'inF0' (in 4-component vector of float)
+0:276            Constant:
+0:276              0.000000
+0:276              0.000000
+0:276              0.000000
+0:276              0.000000
+0:276        true case
+0:276        Branch: Kill
 0:277      Sequence
 0:277        move second child to first child (temp 4-component vector of float)
-0:277          'r014' (temp 4-component vector of float)
-0:277          hyp. cosine (global 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            'inF0' (in 4-component vector of float)
 0:278      Sequence
-0:278        move second child to first child (temp 4-component vector of uint)
-0:278          'r015' (temp 4-component vector of uint)
+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            '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:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:279      Sequence
-0:279        move second child to first child (temp 4-component vector of float)
-0:279          'r016' (temp 4-component vector of float)
-0:279          dPdx (global 4-component vector of float)
-0:279            'inF0' (in 4-component vector of float)
 0:280      Sequence
 0:280        move second child to first child (temp 4-component vector of float)
-0:280          'r017' (temp 4-component vector of float)
-0:280          dPdxCoarse (global 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            '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          'r018' (temp 4-component vector of float)
-0:281          dPdxFine (global 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            '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          'r019' (temp 4-component vector of float)
-0:282          dPdy (global 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            '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          'r020' (temp 4-component vector of float)
-0:283          dPdyCoarse (global 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            '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          'r021' (temp 4-component vector of float)
-0:284          dPdyFine (global 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            '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          'r022' (temp 4-component vector of float)
-0:285          degrees (global 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            'inF0' (in 4-component vector of float)
 0:286      Sequence
-0:286        move second child to first child (temp float)
-0:286          'r023' (temp float)
-0:286          distance (global float)
+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            'inF0' (in 4-component vector of float)
-0:286            'inF1' (in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child (temp float)
-0:287          'r024' (temp float)
-0:287          dot-product (global float)
+0:287          'r023' (temp float)
+0:287          distance (global 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 4-component vector of float)
-0:288          'r025' (temp 4-component vector of float)
-0:288          Construct vec4 (temp 4-component vector of float)
-0:288            Constant:
-0:288              1.000000
-0:288            component-wise multiply (temp float)
-0:288              direct index (temp float)
-0:288                'inF0' (in 4-component vector of float)
-0:288                Constant:
-0:288                  1 (const int)
-0:288              direct index (temp float)
-0:288                'inF1' (in 4-component vector of float)
-0:288                Constant:
-0:288                  1 (const int)
-0:288            direct index (temp float)
-0:288              'inF0' (in 4-component vector of float)
-0:288              Constant:
-0:288                2 (const int)
-0:288            direct index (temp float)
-0:288              'inF1' (in 4-component vector of float)
-0:288              Constant:
-0:288                3 (const int)
-0:292      Sequence
-0:292        move second child to first child (temp 4-component vector of float)
-0:292          'r029' (temp 4-component vector of float)
-0:292          exp (global 4-component vector of float)
-0:292            'inF0' (in 4-component vector of float)
+0:288        move second child to first child (temp float)
+0:288          'r024' (temp float)
+0:288          dot-product (global float)
+0:288            'inF0' (in 4-component vector of float)
+0:288            'inF1' (in 4-component vector of float)
+0:289      Sequence
+0:289        move second child to first child (temp 4-component vector of float)
+0:289          'r025' (temp 4-component vector of float)
+0:289          Construct vec4 (temp 4-component vector of float)
+0:289            Constant:
+0:289              1.000000
+0:289            component-wise multiply (temp float)
+0:289              direct index (temp float)
+0:289                'inF0' (in 4-component vector of float)
+0:289                Constant:
+0:289                  1 (const int)
+0:289              direct index (temp float)
+0:289                'inF1' (in 4-component vector of float)
+0:289                Constant:
+0:289                  1 (const int)
+0:289            direct index (temp float)
+0:289              'inF0' (in 4-component vector of float)
+0:289              Constant:
+0:289                2 (const int)
+0:289            direct index (temp float)
+0:289              'inF1' (in 4-component vector of float)
+0:289              Constant:
+0:289                3 (const int)
 0:293      Sequence
 0:293        move second child to first child (temp 4-component vector of float)
-0:293          'r030' (temp 4-component vector of float)
-0:293          exp2 (global 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            '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          'r031' (temp 4-component vector of float)
-0:294          face-forward (global 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            'inF0' (in 4-component vector of float)
-0:294            'inF1' (in 4-component vector of float)
-0:294            'inF2' (in 4-component vector of float)
 0:295      Sequence
-0:295        move second child to first child (temp 4-component vector of uint)
-0:295          'r032' (temp 4-component vector of uint)
+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            '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:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:296      Sequence
-0:296        move second child to first child (temp 4-component vector of uint)
-0:296          'r033' (temp 4-component vector of uint)
+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:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:297      Sequence
-0:297        move second child to first child (temp 4-component vector of float)
-0:297          'r034' (temp 4-component vector of float)
-0:297          Floor (global 4-component vector of float)
-0:297            'inF0' (in 4-component vector of float)
-0:299      Sequence
-0:299        move second child to first child (temp 4-component vector of float)
-0:299          'r036' (temp 4-component vector of float)
-0:299          mod (global 4-component vector of float)
-0:299            'inF0' (in 4-component vector of float)
-0:299            'inF1' (in 4-component vector of float)
+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            '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          'r037' (temp 4-component vector of float)
-0:300          Fraction (global 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            '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          'r038' (temp 4-component vector of float)
-0:301          frexp (global 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            'inF0' (in 4-component vector of float)
-0:301            'inF1' (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          'r039' (temp 4-component vector of float)
-0:302          fwidth (global 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            '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 bool)
-0:303          'r040' (temp 4-component vector of bool)
-0:303          isinf (global 4-component vector of bool)
+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            '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          'r041' (temp 4-component vector of bool)
-0:304          isnan (global 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            'inF0' (in 4-component vector of float)
 0:305      Sequence
-0:305        move second child to first child (temp 4-component vector of float)
-0:305          'r042' (temp 4-component vector of float)
-0:305          ldexp (global 4-component vector of float)
+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            'inF0' (in 4-component vector of float)
-0:305            'inF1' (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          'r039a' (temp 4-component vector of float)
-0:306          mix (global 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            'inF0' (in 4-component vector of float)
 0:306            'inF1' (in 4-component vector of float)
-0:306            'inF2' (in 4-component vector of float)
 0:307      Sequence
-0:307        move second child to first child (temp float)
-0:307          'r043' (temp float)
-0:307          length (global float)
+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            '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 4-component vector of float)
-0:308          'r044' (temp 4-component vector of float)
-0:308          log (global 4-component vector of float)
+0:308        move second child to first child (temp float)
+0:308          'r043' (temp float)
+0:308          length (global 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          'r045' (temp 4-component vector of float)
-0:309          vector-scale (temp 4-component vector of float)
-0:309            log2 (temp 4-component vector of float)
-0:309              'inF0' (in 4-component vector of float)
-0:309            Constant:
-0:309              0.301030
+0:309          'r044' (temp 4-component vector of float)
+0:309          log (global 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)
-0:310          'r046' (temp 4-component vector of float)
-0:310          log2 (global 4-component vector of float)
-0:310            'inF0' (in 4-component vector of float)
+0:310          'r045' (temp 4-component vector of float)
+0:310          vector-scale (temp 4-component vector of float)
+0:310            log2 (temp 4-component vector of float)
+0:310              'inF0' (in 4-component vector of float)
+0:310            Constant:
+0:310              0.301030
 0:311      Sequence
 0:311        move second child to first child (temp 4-component vector of float)
-0:311          'r047' (temp 4-component vector of float)
-0:311          max (global 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            'inF0' (in 4-component vector of float)
-0:311            'inF1' (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          'r048' (temp 4-component vector of float)
-0:312          min (global 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            '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          'r049' (temp 4-component vector of float)
-0:313          normalize (global 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            '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          'r050' (temp 4-component vector of float)
-0:314          pow (global 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            'inF0' (in 4-component vector of float)
-0:314            'inF1' (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          'r051' (temp 4-component vector of float)
-0:315          radians (global 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            '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          'r052' (temp 4-component vector of float)
-0:316          divide (temp 4-component vector of float)
-0:316            Constant:
-0:316              1.000000
+0:316          'r051' (temp 4-component vector of float)
+0:316          radians (global 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)
-0:317          'r053' (temp 4-component vector of float)
-0:317          reflect (global 4-component vector of float)
+0:317          'r052' (temp 4-component vector of float)
+0:317          divide (temp 4-component vector of float)
+0:317            Constant:
+0:317              1.000000
 0:317            'inF0' (in 4-component vector of float)
-0:317            'inF1' (in 4-component vector of float)
 0:318      Sequence
 0:318        move second child to first child (temp 4-component vector of float)
-0:318          'r054' (temp 4-component vector of float)
-0:318          refract (global 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            'inF0' (in 4-component vector of float)
 0:318            'inF1' (in 4-component vector of float)
-0:318            Constant:
-0:318              2.000000
 0:319      Sequence
-0:319        move second child to first child (temp 4-component vector of uint)
-0:319          'r055' (temp 4-component vector of uint)
+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            'inF0' (in 4-component vector of float)
+0:319            'inF1' (in 4-component vector of float)
+0:319            Constant:
+0:319              2.000000
+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:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:320      Sequence
-0:320        move second child to first child (temp 4-component vector of float)
-0:320          'r056' (temp 4-component vector of float)
-0:320          roundEven (global 4-component vector of float)
-0:320            'inF0' (in 4-component vector of float)
 0:321      Sequence
 0:321        move second child to first child (temp 4-component vector of float)
-0:321          'r057' (temp 4-component vector of float)
-0:321          inverse sqrt (global 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            '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          'r058' (temp 4-component vector of float)
-0:322          clamp (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            'inF0' (in 4-component vector of float)
-0:322            Constant:
-0:322              0.000000
-0:322            Constant:
-0:322              1.000000
 0:323      Sequence
 0:323        move second child to first child (temp 4-component vector of float)
-0:323          'r059' (temp 4-component vector of float)
-0:323          Sign (global 4-component vector of float)
+0:323          'r058' (temp 4-component vector of float)
+0:323          clamp (temp 4-component vector of float)
 0:323            'inF0' (in 4-component vector of float)
+0:323            Constant:
+0:323              0.000000
+0:323            Constant:
+0:323              1.000000
 0:324      Sequence
 0:324        move second child to first child (temp 4-component vector of float)
-0:324          'r060' (temp 4-component vector of float)
-0:324          sine (global 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            '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          'inF1' (in 4-component vector of float)
-0:325          sine (temp 4-component vector of float)
-0:325            'inF0' (in 4-component vector of float)
-0:325        move second child to first child (temp 4-component vector of float)
-0:325          'inF2' (in 4-component vector of float)
-0:325          cosine (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            'inF0' (in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child (temp 4-component vector of float)
-0:326          'r061' (temp 4-component vector of float)
-0:326          hyp. sine (global 4-component vector of float)
+0:326          'inF1' (in 4-component vector of float)
+0:326          sine (temp 4-component vector of float)
+0:326            'inF0' (in 4-component vector of float)
+0:326        move second child to first child (temp 4-component vector of float)
+0:326          'inF2' (in 4-component vector of float)
+0:326          cosine (temp 4-component vector of float)
 0:326            'inF0' (in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child (temp 4-component vector of float)
-0:327          'r062' (temp 4-component vector of float)
-0:327          smoothstep (global 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            'inF0' (in 4-component vector of float)
-0:327            'inF1' (in 4-component vector of float)
-0:327            'inF2' (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          'r063' (temp 4-component vector of float)
-0:328          sqrt (global 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            '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          'r064' (temp 4-component vector of float)
-0:329          step (global 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            'inF0' (in 4-component vector of float)
-0:329            'inF1' (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          'r065' (temp 4-component vector of float)
-0:330          tangent (global 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            '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          'r066' (temp 4-component vector of float)
-0:331          hyp. tangent (global 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            'inF0' (in 4-component vector of float)
-0:333      Sequence
-0:333        move second child to first child (temp 4-component vector of float)
-0:333          'r067' (temp 4-component vector of float)
-0:333          trunc (global 4-component vector of float)
-0:333            'inF0' (in 4-component vector of float)
-0:336      Branch: Return with expression
+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            '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            'inF0' (in 4-component vector of float)
+0:337      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:408  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
-0:400    Function Parameters: 
-0:400      'inF0' (in 2X2 matrix of float)
-0:400      'inF1' (in 2X2 matrix of float)
-0:400      'inF2' (in 2X2 matrix of float)
+0:409  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:401    Function Parameters: 
+0:401      'inF0' (in 2X2 matrix of float)
+0:401      'inF1' (in 2X2 matrix of float)
+0:401      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:402      Sequence
-0:402        move second child to first child (temp bool)
-0:402          'r000' (temp bool)
-0:402          all (global bool)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r001' (temp 2X2 matrix of float)
-0:402          Absolute value (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      arc cosine (global 2X2 matrix of float)
-0:402        'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp bool)
-0:402          'r003' (temp bool)
-0:402          any (global bool)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r004' (temp 2X2 matrix of float)
-0:402          arc sine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r005' (temp 2X2 matrix of float)
-0:402          arc tangent (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r006' (temp 2X2 matrix of float)
-0:402          arc tangent (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r007' (temp 2X2 matrix of float)
-0:402          Ceiling (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Test condition and select (temp void)
-0:402        Condition
-0:402        any (temp bool)
-0:402          Compare Less Than (temp 2X2 matrix of bool)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.000000
-0:402              0.000000
-0:402              0.000000
-0:402              0.000000
-0:402        true case
-0:402        Branch: Kill
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r008' (temp 2X2 matrix of float)
-0:402          clamp (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402            'inF2' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r009' (temp 2X2 matrix of float)
-0:402          cosine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r010' (temp 2X2 matrix of float)
-0:402          hyp. cosine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r011' (temp 2X2 matrix of float)
-0:402          dPdx (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r012' (temp 2X2 matrix of float)
-0:402          dPdxCoarse (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r013' (temp 2X2 matrix of float)
-0:402          dPdxFine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r014' (temp 2X2 matrix of float)
-0:402          dPdy (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r015' (temp 2X2 matrix of float)
-0:402          dPdyCoarse (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r016' (temp 2X2 matrix of float)
-0:402          dPdyFine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r017' (temp 2X2 matrix of float)
-0:402          degrees (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp float)
-0:402          'r018' (temp float)
-0:402          determinant (global float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r019' (temp 2X2 matrix of float)
-0:402          exp (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'R020' (temp 2X2 matrix of float)
-0:402          exp2 (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r021' (temp 2X2 matrix of float)
-0:402          Floor (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r022' (temp 2X2 matrix of float)
-0:402          mod (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r023' (temp 2X2 matrix of float)
-0:402          Fraction (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r024' (temp 2X2 matrix of float)
-0:402          frexp (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r025' (temp 2X2 matrix of float)
-0:402          fwidth (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r026' (temp 2X2 matrix of float)
-0:402          ldexp (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r026a' (temp 2X2 matrix of float)
-0:402          mix (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402            'inF2' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r027' (temp 2X2 matrix of float)
-0:402          log (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r028' (temp 2X2 matrix of float)
-0:402          matrix-scale (temp 2X2 matrix of float)
-0:402            log2 (temp 2X2 matrix of float)
-0:402              'inF0' (in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.301030
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r029' (temp 2X2 matrix of float)
-0:402          log2 (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r030' (temp 2X2 matrix of float)
-0:402          max (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r031' (temp 2X2 matrix of float)
-0:402          min (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r032' (temp 2X2 matrix of float)
-0:402          pow (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r033' (temp 2X2 matrix of float)
-0:402          radians (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r034' (temp 2X2 matrix of float)
-0:402          roundEven (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r035' (temp 2X2 matrix of float)
-0:402          inverse sqrt (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r036' (temp 2X2 matrix of float)
-0:402          clamp (temp 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.000000
-0:402            Constant:
-0:402              1.000000
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r037' (temp 2X2 matrix of float)
-0:402          Sign (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r038' (temp 2X2 matrix of float)
-0:402          sine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'inF1' (in 2X2 matrix of float)
-0:402          sine (temp 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'inF2' (in 2X2 matrix of float)
-0:402          cosine (temp 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r039' (temp 2X2 matrix of float)
-0:402          hyp. sine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r049' (temp 2X2 matrix of float)
-0:402          smoothstep (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402            'inF2' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r041' (temp 2X2 matrix of float)
-0:402          sqrt (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r042' (temp 2X2 matrix of float)
-0:402          step (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r043' (temp 2X2 matrix of float)
-0:402          tangent (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r044' (temp 2X2 matrix of float)
-0:402          hyp. tangent (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      transpose (global 2X2 matrix of float)
-0:402        'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r046' (temp 2X2 matrix of float)
-0:402          trunc (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:405      Branch: Return with expression
+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            '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            'inF0' (in 2X2 matrix of float)
+0:403      arc cosine (global 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            '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            '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            '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            '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            'inF0' (in 2X2 matrix of float)
+0:403      Test condition and select (temp void)
+0:403        Condition
+0:403        any (temp bool)
+0:403          Compare Less Than (temp 2X2 matrix of bool)
+0:403            'inF0' (in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.000000
+0:403              0.000000
+0:403              0.000000
+0:403              0.000000
+0:403        true case
+0:403        Branch: Kill
+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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            'inF0' (in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child (temp 2X2 matrix of float)
+0:403          'r028' (temp 2X2 matrix of float)
+0:403          matrix-scale (temp 2X2 matrix of float)
+0:403            log2 (temp 2X2 matrix of float)
+0:403              'inF0' (in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.301030
+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            '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            '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            '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            '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            '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            '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            'inF0' (in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child (temp 2X2 matrix of float)
+0:403          'r036' (temp 2X2 matrix of float)
+0:403          clamp (temp 2X2 matrix of float)
+0:403            'inF0' (in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.000000
+0:403            Constant:
+0:403              1.000000
+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            '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            'inF0' (in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child (temp 2X2 matrix of float)
+0:403          'inF1' (in 2X2 matrix of float)
+0:403          sine (temp 2X2 matrix of float)
+0:403            'inF0' (in 2X2 matrix of float)
+0:403        move second child to first child (temp 2X2 matrix of float)
+0:403          'inF2' (in 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          'r039' (temp 2X2 matrix of float)
+0:403          hyp. sine (global 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            '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            '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            '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            '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            'inF0' (in 2X2 matrix of float)
+0:403      transpose (global 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            'inF0' (in 2X2 matrix of float)
+0:406      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:417  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
-0:409    Function Parameters: 
-0:409      'inF0' (in 3X3 matrix of float)
-0:409      'inF1' (in 3X3 matrix of float)
-0:409      'inF2' (in 3X3 matrix of float)
+0:418  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:410    Function Parameters: 
+0:410      'inF0' (in 3X3 matrix of float)
+0:410      'inF1' (in 3X3 matrix of float)
+0:410      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:411      Sequence
-0:411        move second child to first child (temp bool)
-0:411          'r000' (temp bool)
-0:411          all (global bool)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r001' (temp 3X3 matrix of float)
-0:411          Absolute value (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      arc cosine (global 3X3 matrix of float)
-0:411        'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp bool)
-0:411          'r003' (temp bool)
-0:411          any (global bool)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r004' (temp 3X3 matrix of float)
-0:411          arc sine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r005' (temp 3X3 matrix of float)
-0:411          arc tangent (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r006' (temp 3X3 matrix of float)
-0:411          arc tangent (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r007' (temp 3X3 matrix of float)
-0:411          Ceiling (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Test condition and select (temp void)
-0:411        Condition
-0:411        any (temp bool)
-0:411          Compare Less Than (temp 3X3 matrix of bool)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411        true case
-0:411        Branch: Kill
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r008' (temp 3X3 matrix of float)
-0:411          clamp (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411            'inF2' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r009' (temp 3X3 matrix of float)
-0:411          cosine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r010' (temp 3X3 matrix of float)
-0:411          hyp. cosine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r011' (temp 3X3 matrix of float)
-0:411          dPdx (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r012' (temp 3X3 matrix of float)
-0:411          dPdxCoarse (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r013' (temp 3X3 matrix of float)
-0:411          dPdxFine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r014' (temp 3X3 matrix of float)
-0:411          dPdy (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r015' (temp 3X3 matrix of float)
-0:411          dPdyCoarse (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r016' (temp 3X3 matrix of float)
-0:411          dPdyFine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r017' (temp 3X3 matrix of float)
-0:411          degrees (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp float)
-0:411          'r018' (temp float)
-0:411          determinant (global float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r019' (temp 3X3 matrix of float)
-0:411          exp (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'R020' (temp 3X3 matrix of float)
-0:411          exp2 (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r021' (temp 3X3 matrix of float)
-0:411          Floor (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r022' (temp 3X3 matrix of float)
-0:411          mod (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r023' (temp 3X3 matrix of float)
-0:411          Fraction (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r024' (temp 3X3 matrix of float)
-0:411          frexp (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r025' (temp 3X3 matrix of float)
-0:411          fwidth (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r026' (temp 3X3 matrix of float)
-0:411          ldexp (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r026a' (temp 3X3 matrix of float)
-0:411          mix (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411            'inF2' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r027' (temp 3X3 matrix of float)
-0:411          log (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r028' (temp 3X3 matrix of float)
-0:411          matrix-scale (temp 3X3 matrix of float)
-0:411            log2 (temp 3X3 matrix of float)
-0:411              'inF0' (in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.301030
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r029' (temp 3X3 matrix of float)
-0:411          log2 (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r030' (temp 3X3 matrix of float)
-0:411          max (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r031' (temp 3X3 matrix of float)
-0:411          min (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r032' (temp 3X3 matrix of float)
-0:411          pow (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r033' (temp 3X3 matrix of float)
-0:411          radians (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r034' (temp 3X3 matrix of float)
-0:411          roundEven (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r035' (temp 3X3 matrix of float)
-0:411          inverse sqrt (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r036' (temp 3X3 matrix of float)
-0:411          clamp (temp 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.000000
-0:411            Constant:
-0:411              1.000000
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r037' (temp 3X3 matrix of float)
-0:411          Sign (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r038' (temp 3X3 matrix of float)
-0:411          sine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'inF1' (in 3X3 matrix of float)
-0:411          sine (temp 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'inF2' (in 3X3 matrix of float)
-0:411          cosine (temp 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r039' (temp 3X3 matrix of float)
-0:411          hyp. sine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r049' (temp 3X3 matrix of float)
-0:411          smoothstep (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411            'inF2' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r041' (temp 3X3 matrix of float)
-0:411          sqrt (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r042' (temp 3X3 matrix of float)
-0:411          step (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r043' (temp 3X3 matrix of float)
-0:411          tangent (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r044' (temp 3X3 matrix of float)
-0:411          hyp. tangent (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      transpose (global 3X3 matrix of float)
-0:411        'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r046' (temp 3X3 matrix of float)
-0:411          trunc (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:414      Branch: Return with expression
+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            '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            'inF0' (in 3X3 matrix of float)
+0:412      arc cosine (global 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            '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            '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            '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            '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            'inF0' (in 3X3 matrix of float)
+0:412      Test condition and select (temp void)
+0:412        Condition
+0:412        any (temp bool)
+0:412          Compare Less Than (temp 3X3 matrix of bool)
+0:412            'inF0' (in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412        true case
+0:412        Branch: Kill
+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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            'inF0' (in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child (temp 3X3 matrix of float)
+0:412          'r028' (temp 3X3 matrix of float)
+0:412          matrix-scale (temp 3X3 matrix of float)
+0:412            log2 (temp 3X3 matrix of float)
+0:412              'inF0' (in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.301030
+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            '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            '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            '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            '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            '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            '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            'inF0' (in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child (temp 3X3 matrix of float)
+0:412          'r036' (temp 3X3 matrix of float)
+0:412          clamp (temp 3X3 matrix of float)
+0:412            'inF0' (in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.000000
+0:412            Constant:
+0:412              1.000000
+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            '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            'inF0' (in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child (temp 3X3 matrix of float)
+0:412          'inF1' (in 3X3 matrix of float)
+0:412          sine (temp 3X3 matrix of float)
+0:412            'inF0' (in 3X3 matrix of float)
+0:412        move second child to first child (temp 3X3 matrix of float)
+0:412          'inF2' (in 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          'r039' (temp 3X3 matrix of float)
+0:412          hyp. sine (global 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            '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            '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            '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            '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            'inF0' (in 3X3 matrix of float)
+0:412      transpose (global 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            'inF0' (in 3X3 matrix of float)
+0:415      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -2136,301 +2144,301 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:438  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
-0:418    Function Parameters: 
-0:418      'inF0' (in 4X4 matrix of float)
-0:418      'inF1' (in 4X4 matrix of float)
-0:418      'inF2' (in 4X4 matrix of float)
+0:439  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:419    Function Parameters: 
+0:419      'inF0' (in 4X4 matrix of float)
+0:419      'inF1' (in 4X4 matrix of float)
+0:419      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:420      Sequence
-0:420        move second child to first child (temp bool)
-0:420          'r000' (temp bool)
-0:420          all (global bool)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r001' (temp 4X4 matrix of float)
-0:420          Absolute value (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      arc cosine (global 4X4 matrix of float)
-0:420        'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp bool)
-0:420          'r003' (temp bool)
-0:420          any (global bool)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r004' (temp 4X4 matrix of float)
-0:420          arc sine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r005' (temp 4X4 matrix of float)
-0:420          arc tangent (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r006' (temp 4X4 matrix of float)
-0:420          arc tangent (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r007' (temp 4X4 matrix of float)
-0:420          Ceiling (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Test condition and select (temp void)
-0:420        Condition
-0:420        any (temp bool)
-0:420          Compare Less Than (temp 4X4 matrix of bool)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420        true case
-0:420        Branch: Kill
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r008' (temp 4X4 matrix of float)
-0:420          clamp (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420            'inF2' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r009' (temp 4X4 matrix of float)
-0:420          cosine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r010' (temp 4X4 matrix of float)
-0:420          hyp. cosine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r011' (temp 4X4 matrix of float)
-0:420          dPdx (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r012' (temp 4X4 matrix of float)
-0:420          dPdxCoarse (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r013' (temp 4X4 matrix of float)
-0:420          dPdxFine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r014' (temp 4X4 matrix of float)
-0:420          dPdy (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r015' (temp 4X4 matrix of float)
-0:420          dPdyCoarse (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r016' (temp 4X4 matrix of float)
-0:420          dPdyFine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r017' (temp 4X4 matrix of float)
-0:420          degrees (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp float)
-0:420          'r018' (temp float)
-0:420          determinant (global float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r019' (temp 4X4 matrix of float)
-0:420          exp (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'R020' (temp 4X4 matrix of float)
-0:420          exp2 (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r021' (temp 4X4 matrix of float)
-0:420          Floor (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r022' (temp 4X4 matrix of float)
-0:420          mod (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r023' (temp 4X4 matrix of float)
-0:420          Fraction (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r024' (temp 4X4 matrix of float)
-0:420          frexp (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r025' (temp 4X4 matrix of float)
-0:420          fwidth (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r026' (temp 4X4 matrix of float)
-0:420          ldexp (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r026a' (temp 4X4 matrix of float)
-0:420          mix (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420            'inF2' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r027' (temp 4X4 matrix of float)
-0:420          log (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r028' (temp 4X4 matrix of float)
-0:420          matrix-scale (temp 4X4 matrix of float)
-0:420            log2 (temp 4X4 matrix of float)
-0:420              'inF0' (in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.301030
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r029' (temp 4X4 matrix of float)
-0:420          log2 (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r030' (temp 4X4 matrix of float)
-0:420          max (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r031' (temp 4X4 matrix of float)
-0:420          min (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r032' (temp 4X4 matrix of float)
-0:420          pow (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r033' (temp 4X4 matrix of float)
-0:420          radians (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r034' (temp 4X4 matrix of float)
-0:420          roundEven (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r035' (temp 4X4 matrix of float)
-0:420          inverse sqrt (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r036' (temp 4X4 matrix of float)
-0:420          clamp (temp 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.000000
-0:420            Constant:
-0:420              1.000000
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r037' (temp 4X4 matrix of float)
-0:420          Sign (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r038' (temp 4X4 matrix of float)
-0:420          sine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'inF1' (in 4X4 matrix of float)
-0:420          sine (temp 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'inF2' (in 4X4 matrix of float)
-0:420          cosine (temp 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r039' (temp 4X4 matrix of float)
-0:420          hyp. sine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r049' (temp 4X4 matrix of float)
-0:420          smoothstep (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420            'inF2' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r041' (temp 4X4 matrix of float)
-0:420          sqrt (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r042' (temp 4X4 matrix of float)
-0:420          step (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r043' (temp 4X4 matrix of float)
-0:420          tangent (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r044' (temp 4X4 matrix of float)
-0:420          hyp. tangent (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      transpose (global 4X4 matrix of float)
-0:420        'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r046' (temp 4X4 matrix of float)
-0:420          trunc (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:423      Branch: Return with expression
+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            '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            'inF0' (in 4X4 matrix of float)
+0:421      arc cosine (global 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            '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            '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            '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            '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            'inF0' (in 4X4 matrix of float)
+0:421      Test condition and select (temp void)
+0:421        Condition
+0:421        any (temp bool)
+0:421          Compare Less Than (temp 4X4 matrix of bool)
+0:421            'inF0' (in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421        true case
+0:421        Branch: Kill
+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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            'inF0' (in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child (temp 4X4 matrix of float)
+0:421          'r028' (temp 4X4 matrix of float)
+0:421          matrix-scale (temp 4X4 matrix of float)
+0:421            log2 (temp 4X4 matrix of float)
+0:421              'inF0' (in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.301030
+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            '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            '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            '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            '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            '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            '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            'inF0' (in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child (temp 4X4 matrix of float)
+0:421          'r036' (temp 4X4 matrix of float)
+0:421          clamp (temp 4X4 matrix of float)
+0:421            'inF0' (in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.000000
+0:421            Constant:
+0:421              1.000000
+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            '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            'inF0' (in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child (temp 4X4 matrix of float)
+0:421          'inF1' (in 4X4 matrix of float)
+0:421          sine (temp 4X4 matrix of float)
+0:421            'inF0' (in 4X4 matrix of float)
+0:421        move second child to first child (temp 4X4 matrix of float)
+0:421          'inF2' (in 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          'r039' (temp 4X4 matrix of float)
+0:421          hyp. sine (global 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            '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            '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            '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            '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            'inF0' (in 4X4 matrix of float)
+0:421      transpose (global 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            'inF0' (in 4X4 matrix of float)
+0:424      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -2448,309 +2456,309 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:445  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
-0:441    Function Parameters: 
-0:441      'inF0' (in float)
-0:441      'inF1' (in float)
-0:441      'inFV0' (in 2-component vector of float)
-0:441      'inFV1' (in 2-component vector of float)
-0:441      'inFM0' (in 2X2 matrix of float)
-0:441      'inFM1' (in 2X2 matrix of float)
+0:446  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
+0:442    Function Parameters: 
+0:442      'inF0' (in float)
+0:442      'inF1' (in float)
+0:442      'inFV0' (in 2-component vector of float)
+0:442      'inFV1' (in 2-component vector of float)
+0:442      'inFM0' (in 2X2 matrix of float)
+0:442      'inFM1' (in 2X2 matrix of float)
 0:?     Sequence
-0:442      Sequence
-0:442        move second child to first child (temp float)
-0:442          'r0' (temp float)
-0:442          component-wise multiply (temp float)
-0:442            'inF0' (in float)
-0:442            'inF1' (in float)
-0:442      Sequence
-0:442        move second child to first child (temp 2-component vector of float)
-0:442          'r1' (temp 2-component vector of float)
-0:442          vector-scale (temp 2-component vector of float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442            'inF0' (in float)
-0:442      Sequence
-0:442        move second child to first child (temp 2-component vector of float)
-0:442          'r2' (temp 2-component vector of float)
-0:442          vector-scale (temp 2-component vector of float)
-0:442            'inF0' (in float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child (temp float)
-0:442          'r3' (temp float)
-0:442          dot-product (global float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442            'inFV1' (in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child (temp 2-component vector of float)
-0:442          'r4' (temp 2-component vector of float)
-0:442          matrix-times-vector (temp 2-component vector of float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child (temp 2-component vector of float)
-0:442          'r5' (temp 2-component vector of float)
-0:442          vector-times-matrix (temp 2-component vector of float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442      Sequence
-0:442        move second child to first child (temp 2X2 matrix of float)
-0:442          'r6' (temp 2X2 matrix of float)
-0:442          matrix-scale (temp 2X2 matrix of float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442            'inF0' (in float)
-0:442      Sequence
-0:442        move second child to first child (temp 2X2 matrix of float)
-0:442          'r7' (temp 2X2 matrix of float)
-0:442          matrix-scale (temp 2X2 matrix of float)
-0:442            'inF0' (in float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442      Sequence
-0:442        move second child to first child (temp 2X2 matrix of float)
-0:442          'r8' (temp 2X2 matrix of float)
-0:442          matrix-multiply (temp 2X2 matrix of float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442            'inFM1' (in 2X2 matrix of float)
-0:452  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
-0:448    Function Parameters: 
-0:448      'inF0' (in float)
-0:448      'inF1' (in float)
-0:448      'inFV0' (in 3-component vector of float)
-0:448      'inFV1' (in 3-component vector of float)
-0:448      'inFM0' (in 3X3 matrix of float)
-0:448      'inFM1' (in 3X3 matrix of float)
+0:443      Sequence
+0:443        move second child to first child (temp float)
+0:443          'r0' (temp float)
+0:443          component-wise multiply (temp float)
+0:443            'inF0' (in float)
+0:443            'inF1' (in float)
+0:443      Sequence
+0:443        move second child to first child (temp 2-component vector of float)
+0:443          'r1' (temp 2-component vector of float)
+0:443          vector-scale (temp 2-component vector of float)
+0:443            'inFV0' (in 2-component vector of float)
+0:443            'inF0' (in float)
+0:443      Sequence
+0:443        move second child to first child (temp 2-component vector of float)
+0:443          'r2' (temp 2-component vector of float)
+0:443          vector-scale (temp 2-component vector of float)
+0:443            'inF0' (in float)
+0:443            'inFV0' (in 2-component vector of float)
+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            'inFV0' (in 2-component vector of float)
+0:443            'inFV1' (in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child (temp 2-component vector of float)
+0:443          'r4' (temp 2-component vector of float)
+0:443          matrix-times-vector (temp 2-component vector of float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443            'inFV0' (in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child (temp 2-component vector of float)
+0:443          'r5' (temp 2-component vector of float)
+0:443          vector-times-matrix (temp 2-component vector of float)
+0:443            'inFV0' (in 2-component vector of float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443      Sequence
+0:443        move second child to first child (temp 2X2 matrix of float)
+0:443          'r6' (temp 2X2 matrix of float)
+0:443          matrix-scale (temp 2X2 matrix of float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443            'inF0' (in float)
+0:443      Sequence
+0:443        move second child to first child (temp 2X2 matrix of float)
+0:443          'r7' (temp 2X2 matrix of float)
+0:443          matrix-scale (temp 2X2 matrix of float)
+0:443            'inF0' (in float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443      Sequence
+0:443        move second child to first child (temp 2X2 matrix of float)
+0:443          'r8' (temp 2X2 matrix of float)
+0:443          matrix-multiply (temp 2X2 matrix of float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443            'inFM1' (in 2X2 matrix of float)
+0:453  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
+0:449    Function Parameters: 
+0:449      'inF0' (in float)
+0:449      'inF1' (in float)
+0:449      'inFV0' (in 3-component vector of float)
+0:449      'inFV1' (in 3-component vector of float)
+0:449      'inFM0' (in 3X3 matrix of float)
+0:449      'inFM1' (in 3X3 matrix of float)
 0:?     Sequence
-0:449      Sequence
-0:449        move second child to first child (temp float)
-0:449          'r0' (temp float)
-0:449          component-wise multiply (temp float)
-0:449            'inF0' (in float)
-0:449            'inF1' (in float)
-0:449      Sequence
-0:449        move second child to first child (temp 3-component vector of float)
-0:449          'r1' (temp 3-component vector of float)
-0:449          vector-scale (temp 3-component vector of float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449            'inF0' (in float)
-0:449      Sequence
-0:449        move second child to first child (temp 3-component vector of float)
-0:449          'r2' (temp 3-component vector of float)
-0:449          vector-scale (temp 3-component vector of float)
-0:449            'inF0' (in float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child (temp float)
-0:449          'r3' (temp float)
-0:449          dot-product (global float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449            'inFV1' (in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child (temp 3-component vector of float)
-0:449          'r4' (temp 3-component vector of float)
-0:449          matrix-times-vector (temp 3-component vector of float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child (temp 3-component vector of float)
-0:449          'r5' (temp 3-component vector of float)
-0:449          vector-times-matrix (temp 3-component vector of float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449      Sequence
-0:449        move second child to first child (temp 3X3 matrix of float)
-0:449          'r6' (temp 3X3 matrix of float)
-0:449          matrix-scale (temp 3X3 matrix of float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449            'inF0' (in float)
-0:449      Sequence
-0:449        move second child to first child (temp 3X3 matrix of float)
-0:449          'r7' (temp 3X3 matrix of float)
-0:449          matrix-scale (temp 3X3 matrix of float)
-0:449            'inF0' (in float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449      Sequence
-0:449        move second child to first child (temp 3X3 matrix of float)
-0:449          'r8' (temp 3X3 matrix of float)
-0:449          matrix-multiply (temp 3X3 matrix of float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449            'inFM1' (in 3X3 matrix of float)
-0:460  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
-0:455    Function Parameters: 
-0:455      'inF0' (in float)
-0:455      'inF1' (in float)
-0:455      'inFV0' (in 4-component vector of float)
-0:455      'inFV1' (in 4-component vector of float)
-0:455      'inFM0' (in 4X4 matrix of float)
-0:455      'inFM1' (in 4X4 matrix of float)
+0:450      Sequence
+0:450        move second child to first child (temp float)
+0:450          'r0' (temp float)
+0:450          component-wise multiply (temp float)
+0:450            'inF0' (in float)
+0:450            'inF1' (in float)
+0:450      Sequence
+0:450        move second child to first child (temp 3-component vector of float)
+0:450          'r1' (temp 3-component vector of float)
+0:450          vector-scale (temp 3-component vector of float)
+0:450            'inFV0' (in 3-component vector of float)
+0:450            'inF0' (in float)
+0:450      Sequence
+0:450        move second child to first child (temp 3-component vector of float)
+0:450          'r2' (temp 3-component vector of float)
+0:450          vector-scale (temp 3-component vector of float)
+0:450            'inF0' (in float)
+0:450            'inFV0' (in 3-component vector of float)
+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            'inFV0' (in 3-component vector of float)
+0:450            'inFV1' (in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child (temp 3-component vector of float)
+0:450          'r4' (temp 3-component vector of float)
+0:450          matrix-times-vector (temp 3-component vector of float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450            'inFV0' (in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child (temp 3-component vector of float)
+0:450          'r5' (temp 3-component vector of float)
+0:450          vector-times-matrix (temp 3-component vector of float)
+0:450            'inFV0' (in 3-component vector of float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450      Sequence
+0:450        move second child to first child (temp 3X3 matrix of float)
+0:450          'r6' (temp 3X3 matrix of float)
+0:450          matrix-scale (temp 3X3 matrix of float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450            'inF0' (in float)
+0:450      Sequence
+0:450        move second child to first child (temp 3X3 matrix of float)
+0:450          'r7' (temp 3X3 matrix of float)
+0:450          matrix-scale (temp 3X3 matrix of float)
+0:450            'inF0' (in float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450      Sequence
+0:450        move second child to first child (temp 3X3 matrix of float)
+0:450          'r8' (temp 3X3 matrix of float)
+0:450          matrix-multiply (temp 3X3 matrix of float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450            'inFM1' (in 3X3 matrix of float)
+0:461  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
+0:456    Function Parameters: 
+0:456      'inF0' (in float)
+0:456      'inF1' (in float)
+0:456      'inFV0' (in 4-component vector of float)
+0:456      'inFV1' (in 4-component vector of float)
+0:456      'inFM0' (in 4X4 matrix of float)
+0:456      'inFM1' (in 4X4 matrix of float)
 0:?     Sequence
-0:456      Sequence
-0:456        move second child to first child (temp float)
-0:456          'r0' (temp float)
-0:456          component-wise multiply (temp float)
-0:456            'inF0' (in float)
-0:456            'inF1' (in float)
-0:456      Sequence
-0:456        move second child to first child (temp 4-component vector of float)
-0:456          'r1' (temp 4-component vector of float)
-0:456          vector-scale (temp 4-component vector of float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456            'inF0' (in float)
-0:456      Sequence
-0:456        move second child to first child (temp 4-component vector of float)
-0:456          'r2' (temp 4-component vector of float)
-0:456          vector-scale (temp 4-component vector of float)
-0:456            'inF0' (in float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child (temp float)
-0:456          'r3' (temp float)
-0:456          dot-product (global float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456            'inFV1' (in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child (temp 4-component vector of float)
-0:456          'r4' (temp 4-component vector of float)
-0:456          matrix-times-vector (temp 4-component vector of float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child (temp 4-component vector of float)
-0:456          'r5' (temp 4-component vector of float)
-0:456          vector-times-matrix (temp 4-component vector of float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456      Sequence
-0:456        move second child to first child (temp 4X4 matrix of float)
-0:456          'r6' (temp 4X4 matrix of float)
-0:456          matrix-scale (temp 4X4 matrix of float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456            'inF0' (in float)
-0:456      Sequence
-0:456        move second child to first child (temp 4X4 matrix of float)
-0:456          'r7' (temp 4X4 matrix of float)
-0:456          matrix-scale (temp 4X4 matrix of float)
-0:456            'inF0' (in float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456      Sequence
-0:456        move second child to first child (temp 4X4 matrix of float)
-0:456          'r8' (temp 4X4 matrix of float)
-0:456          matrix-multiply (temp 4X4 matrix of float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456            'inFM1' (in 4X4 matrix of float)
-0:484  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42; (global void)
-0:465    Function Parameters: 
-0:465      'inF0' (in float)
-0:465      'inF1' (in float)
-0:465      'inFV2' (in 2-component vector of float)
-0:465      'inFV3' (in 3-component vector of float)
-0:465      'inFM2x3' (in 3X2 matrix of float)
-0:465      'inFM3x2' (in 2X3 matrix of float)
-0:465      'inFM3x3' (in 3X3 matrix of float)
-0:465      'inFM3x4' (in 4X3 matrix of float)
-0:465      'inFM2x4' (in 4X2 matrix of float)
+0:457      Sequence
+0:457        move second child to first child (temp float)
+0:457          'r0' (temp float)
+0:457          component-wise multiply (temp float)
+0:457            'inF0' (in float)
+0:457            'inF1' (in float)
+0:457      Sequence
+0:457        move second child to first child (temp 4-component vector of float)
+0:457          'r1' (temp 4-component vector of float)
+0:457          vector-scale (temp 4-component vector of float)
+0:457            'inFV0' (in 4-component vector of float)
+0:457            'inF0' (in float)
+0:457      Sequence
+0:457        move second child to first child (temp 4-component vector of float)
+0:457          'r2' (temp 4-component vector of float)
+0:457          vector-scale (temp 4-component vector of float)
+0:457            'inF0' (in float)
+0:457            'inFV0' (in 4-component vector of float)
+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            'inFV0' (in 4-component vector of float)
+0:457            'inFV1' (in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child (temp 4-component vector of float)
+0:457          'r4' (temp 4-component vector of float)
+0:457          matrix-times-vector (temp 4-component vector of float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457            'inFV0' (in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child (temp 4-component vector of float)
+0:457          'r5' (temp 4-component vector of float)
+0:457          vector-times-matrix (temp 4-component vector of float)
+0:457            'inFV0' (in 4-component vector of float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child (temp 4X4 matrix of float)
+0:457          'r6' (temp 4X4 matrix of float)
+0:457          matrix-scale (temp 4X4 matrix of float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457            'inF0' (in float)
+0:457      Sequence
+0:457        move second child to first child (temp 4X4 matrix of float)
+0:457          'r7' (temp 4X4 matrix of float)
+0:457          matrix-scale (temp 4X4 matrix of float)
+0:457            'inF0' (in float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child (temp 4X4 matrix of float)
+0:457          'r8' (temp 4X4 matrix of float)
+0:457          matrix-multiply (temp 4X4 matrix of float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457            'inFM1' (in 4X4 matrix of float)
+0:485  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42; (global void)
+0:466    Function Parameters: 
+0:466      'inF0' (in float)
+0:466      'inF1' (in float)
+0:466      'inFV2' (in 2-component vector of float)
+0:466      'inFV3' (in 3-component vector of float)
+0:466      'inFM2x3' (in 3X2 matrix of float)
+0:466      'inFM3x2' (in 2X3 matrix of float)
+0:466      'inFM3x3' (in 3X3 matrix of float)
+0:466      'inFM3x4' (in 4X3 matrix of float)
+0:466      'inFM2x4' (in 4X2 matrix of float)
 0:?     Sequence
-0:466      Sequence
-0:466        move second child to first child (temp float)
-0:466          'r00' (temp float)
-0:466          component-wise multiply (temp float)
-0:466            'inF0' (in float)
-0:466            'inF1' (in float)
 0:467      Sequence
-0:467        move second child to first child (temp 2-component vector of float)
-0:467          'r01' (temp 2-component vector of float)
-0:467          vector-scale (temp 2-component vector of float)
-0:467            'inFV2' (in 2-component vector of float)
+0:467        move second child to first child (temp float)
+0:467          'r00' (temp float)
+0:467          component-wise multiply (temp float)
 0:467            'inF0' (in float)
+0:467            'inF1' (in float)
 0:468      Sequence
-0:468        move second child to first child (temp 3-component vector of float)
-0:468          'r02' (temp 3-component vector of float)
-0:468          vector-scale (temp 3-component vector of float)
-0:468            'inFV3' (in 3-component vector of float)
+0:468        move second child to first child (temp 2-component vector of float)
+0:468          'r01' (temp 2-component vector of float)
+0:468          vector-scale (temp 2-component vector of float)
+0:468            'inFV2' (in 2-component vector of float)
 0:468            'inF0' (in float)
 0:469      Sequence
-0:469        move second child to first child (temp 2-component vector of float)
-0:469          'r03' (temp 2-component vector of float)
-0:469          vector-scale (temp 2-component vector of float)
+0:469        move second child to first child (temp 3-component vector of float)
+0:469          'r02' (temp 3-component vector of float)
+0:469          vector-scale (temp 3-component vector of float)
+0:469            'inFV3' (in 3-component vector of float)
 0:469            'inF0' (in float)
-0:469            'inFV2' (in 2-component vector of float)
 0:470      Sequence
-0:470        move second child to first child (temp 3-component vector of float)
-0:470          'r04' (temp 3-component vector of float)
-0:470          vector-scale (temp 3-component vector of float)
+0:470        move second child to first child (temp 2-component vector of float)
+0:470          'r03' (temp 2-component vector of float)
+0:470          vector-scale (temp 2-component vector of float)
 0:470            'inF0' (in float)
-0:470            'inFV3' (in 3-component vector of float)
+0:470            'inFV2' (in 2-component vector of float)
 0:471      Sequence
-0:471        move second child to first child (temp float)
-0:471          'r05' (temp float)
-0:471          dot-product (global float)
-0:471            'inFV2' (in 2-component vector of float)
-0:471            'inFV2' (in 2-component vector of float)
+0:471        move second child to first child (temp 3-component vector of float)
+0:471          'r04' (temp 3-component vector of float)
+0:471          vector-scale (temp 3-component vector of float)
+0:471            'inF0' (in float)
+0:471            'inFV3' (in 3-component vector of float)
 0:472      Sequence
 0:472        move second child to first child (temp float)
-0:472          'r06' (temp float)
+0:472          'r05' (temp float)
 0:472          dot-product (global float)
-0:472            'inFV3' (in 3-component vector of float)
-0:472            'inFV3' (in 3-component vector of 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 3-component vector of float)
-0:473          'r07' (temp 3-component vector of float)
-0:473          vector-times-matrix (temp 3-component vector of float)
-0:473            'inFV2' (in 2-component vector of float)
-0:473            'inFM2x3' (in 3X2 matrix of float)
+0:473        move second child to first child (temp float)
+0:473          'r06' (temp float)
+0:473          dot-product (global float)
+0:473            'inFV3' (in 3-component vector of float)
+0:473            'inFV3' (in 3-component vector of float)
 0:474      Sequence
-0:474        move second child to first child (temp 2-component vector of float)
-0:474          'r08' (temp 2-component vector of float)
-0:474          vector-times-matrix (temp 2-component vector of float)
-0:474            'inFV3' (in 3-component vector of float)
-0:474            'inFM3x2' (in 2X3 matrix of float)
+0:474        move second child to first child (temp 3-component vector of float)
+0:474          'r07' (temp 3-component vector of float)
+0:474          vector-times-matrix (temp 3-component vector of float)
+0:474            'inFV2' (in 2-component vector of float)
+0:474            'inFM2x3' (in 3X2 matrix of float)
 0:475      Sequence
 0:475        move second child to first child (temp 2-component vector of float)
-0:475          'r09' (temp 2-component vector of float)
-0:475          matrix-times-vector (temp 2-component vector of float)
-0:475            'inFM2x3' (in 3X2 matrix of float)
+0:475          'r08' (temp 2-component vector of float)
+0:475          vector-times-matrix (temp 2-component vector of float)
 0:475            'inFV3' (in 3-component vector of float)
+0:475            'inFM3x2' (in 2X3 matrix of float)
 0:476      Sequence
-0:476        move second child to first child (temp 3-component vector of float)
-0:476          'r10' (temp 3-component vector of float)
-0:476          matrix-times-vector (temp 3-component vector of float)
-0:476            'inFM3x2' (in 2X3 matrix of float)
-0:476            'inFV2' (in 2-component vector of float)
+0:476        move second child to first child (temp 2-component vector of float)
+0:476          'r09' (temp 2-component vector of float)
+0:476          matrix-times-vector (temp 2-component vector of float)
+0:476            'inFM2x3' (in 3X2 matrix of float)
+0:476            'inFV3' (in 3-component vector of float)
 0:477      Sequence
-0:477        move second child to first child (temp 3X2 matrix of float)
-0:477          'r11' (temp 3X2 matrix of float)
-0:477          matrix-scale (temp 3X2 matrix of float)
-0:477            'inFM2x3' (in 3X2 matrix of float)
-0:477            'inF0' (in float)
+0:477        move second child to first child (temp 3-component vector of float)
+0:477          'r10' (temp 3-component vector of float)
+0:477          matrix-times-vector (temp 3-component vector of float)
+0:477            'inFM3x2' (in 2X3 matrix of float)
+0:477            'inFV2' (in 2-component vector of float)
 0:478      Sequence
-0:478        move second child to first child (temp 2X3 matrix of float)
-0:478          'r12' (temp 2X3 matrix of float)
-0:478          matrix-scale (temp 2X3 matrix of float)
-0:478            'inFM3x2' (in 2X3 matrix of float)
+0:478        move second child to first child (temp 3X2 matrix of float)
+0:478          'r11' (temp 3X2 matrix of float)
+0:478          matrix-scale (temp 3X2 matrix of float)
+0:478            'inFM2x3' (in 3X2 matrix of float)
 0:478            'inF0' (in float)
 0:479      Sequence
-0:479        move second child to first child (temp 2X2 matrix of float)
-0:479          'r13' (temp 2X2 matrix of float)
-0:479          matrix-multiply (temp 2X2 matrix of float)
-0:479            'inFM2x3' (in 3X2 matrix of float)
+0:479        move second child to first child (temp 2X3 matrix of float)
+0:479          'r12' (temp 2X3 matrix of float)
+0:479          matrix-scale (temp 2X3 matrix of float)
 0:479            'inFM3x2' (in 2X3 matrix of float)
+0:479            'inF0' (in float)
 0:480      Sequence
-0:480        move second child to first child (temp 3X2 matrix of float)
-0:480          'r14' (temp 3X2 matrix of float)
-0:480          matrix-multiply (temp 3X2 matrix of float)
+0:480        move second child to first child (temp 2X2 matrix of float)
+0:480          'r13' (temp 2X2 matrix of float)
+0:480          matrix-multiply (temp 2X2 matrix of float)
 0:480            'inFM2x3' (in 3X2 matrix of float)
-0:480            'inFM3x3' (in 3X3 matrix of float)
+0:480            'inFM3x2' (in 2X3 matrix of float)
 0:481      Sequence
-0:481        move second child to first child (temp 4X2 matrix of float)
-0:481          'r15' (temp 4X2 matrix of float)
-0:481          matrix-multiply (temp 4X2 matrix of float)
+0:481        move second child to first child (temp 3X2 matrix of float)
+0:481          'r14' (temp 3X2 matrix of float)
+0:481          matrix-multiply (temp 3X2 matrix of float)
 0:481            'inFM2x3' (in 3X2 matrix of float)
-0:481            'inFM3x4' (in 4X3 matrix of float)
+0:481            'inFM3x3' (in 3X3 matrix of float)
 0:482      Sequence
-0:482        move second child to first child (temp 4X3 matrix of float)
-0:482          'r16' (temp 4X3 matrix of float)
-0:482          matrix-multiply (temp 4X3 matrix of float)
-0:482            'inFM3x2' (in 2X3 matrix of float)
-0:482            'inFM2x4' (in 4X2 matrix of float)
+0:482        move second child to first child (temp 4X2 matrix of float)
+0:482          'r15' (temp 4X2 matrix of float)
+0:482          matrix-multiply (temp 4X2 matrix of float)
+0:482            'inFM2x3' (in 3X2 matrix of float)
+0:482            'inFM3x4' (in 4X3 matrix of float)
+0:483      Sequence
+0:483        move second child to first child (temp 4X3 matrix of float)
+0:483          'r16' (temp 4X3 matrix of float)
+0:483          matrix-multiply (temp 4X3 matrix of float)
+0:483            'inFM3x2' (in 2X3 matrix of float)
+0:483            'inFM2x4' (in 4X2 matrix of float)
 0:?   Linker Objects
 0:?     'gs_ua' (global uint)
 0:?     'gs_ub' (global uint)
@@ -3503,7 +3511,7 @@
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:258  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:259  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 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)
@@ -3740,1162 +3748,1170 @@
 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 float)
-0:226          'r043' (temp float)
-0:226          length (global float)
+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            'inF0' (in 3-component vector of float)
+0:226            'inF1' (in 3-component vector of float)
+0:226            Constant:
+0:226              0.300000
 0:227      Sequence
-0:227        move second child to first child (temp 3-component vector of float)
-0:227          'r044' (temp 3-component vector of float)
-0:227          log (global 3-component vector of float)
+0:227        move second child to first child (temp float)
+0:227          'r043' (temp float)
+0:227          length (global 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          'r045' (temp 3-component vector of float)
-0:228          vector-scale (temp 3-component vector of float)
-0:228            log2 (temp 3-component vector of float)
-0:228              'inF0' (in 3-component vector of float)
-0:228            Constant:
-0:228              0.301030
+0:228          'r044' (temp 3-component vector of float)
+0:228          log (global 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)
-0:229          'r046' (temp 3-component vector of float)
-0:229          log2 (global 3-component vector of float)
-0:229            'inF0' (in 3-component vector of float)
+0:229          'r045' (temp 3-component vector of float)
+0:229          vector-scale (temp 3-component vector of float)
+0:229            log2 (temp 3-component vector of float)
+0:229              'inF0' (in 3-component vector of float)
+0:229            Constant:
+0:229              0.301030
 0:230      Sequence
 0:230        move second child to first child (temp 3-component vector of float)
-0:230          'r047' (temp 3-component vector of float)
-0:230          max (global 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            'inF0' (in 3-component vector of float)
-0:230            'inF1' (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          'r048' (temp 3-component vector of float)
-0:231          min (global 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            '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          'r049' (temp 3-component vector of float)
-0:232          normalize (global 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            '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          'r050' (temp 3-component vector of float)
-0:233          pow (global 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            'inF0' (in 3-component vector of float)
-0:233            'inF1' (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          'r051' (temp 3-component vector of float)
-0:234          radians (global 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            '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          'r052' (temp 3-component vector of float)
-0:235          divide (temp 3-component vector of float)
-0:235            Constant:
-0:235              1.000000
+0:235          'r051' (temp 3-component vector of float)
+0:235          radians (global 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)
-0:236          'r053' (temp 3-component vector of float)
-0:236          reflect (global 3-component vector of float)
+0:236          'r052' (temp 3-component vector of float)
+0:236          divide (temp 3-component vector of float)
+0:236            Constant:
+0:236              1.000000
 0:236            'inF0' (in 3-component vector of float)
-0:236            'inF1' (in 3-component vector of float)
 0:237      Sequence
 0:237        move second child to first child (temp 3-component vector of float)
-0:237          'r054' (temp 3-component vector of float)
-0:237          refract (global 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            'inF0' (in 3-component vector of float)
 0:237            'inF1' (in 3-component vector of float)
-0:237            Constant:
-0:237              2.000000
 0:238      Sequence
-0:238        move second child to first child (temp 3-component vector of uint)
-0:238          'r055' (temp 3-component vector of uint)
+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            'inF0' (in 3-component vector of float)
+0:238            'inF1' (in 3-component vector of float)
+0:238            Constant:
+0:238              2.000000
+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:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:239      Sequence
-0:239        move second child to first child (temp 3-component vector of float)
-0:239          'r056' (temp 3-component vector of float)
-0:239          roundEven (global 3-component vector of float)
-0:239            'inF0' (in 3-component vector of float)
 0:240      Sequence
 0:240        move second child to first child (temp 3-component vector of float)
-0:240          'r057' (temp 3-component vector of float)
-0:240          inverse sqrt (global 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            '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          'r058' (temp 3-component vector of float)
-0:241          clamp (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            'inF0' (in 3-component vector of float)
-0:241            Constant:
-0:241              0.000000
-0:241            Constant:
-0:241              1.000000
 0:242      Sequence
 0:242        move second child to first child (temp 3-component vector of float)
-0:242          'r059' (temp 3-component vector of float)
-0:242          Sign (global 3-component vector of float)
+0:242          'r058' (temp 3-component vector of float)
+0:242          clamp (temp 3-component vector of float)
 0:242            'inF0' (in 3-component vector of float)
+0:242            Constant:
+0:242              0.000000
+0:242            Constant:
+0:242              1.000000
 0:243      Sequence
 0:243        move second child to first child (temp 3-component vector of float)
-0:243          'r060' (temp 3-component vector of float)
-0:243          sine (global 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            '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          'inF1' (in 3-component vector of float)
-0:244          sine (temp 3-component vector of float)
-0:244            'inF0' (in 3-component vector of float)
-0:244        move second child to first child (temp 3-component vector of float)
-0:244          'inF2' (in 3-component vector of float)
-0:244          cosine (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            'inF0' (in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child (temp 3-component vector of float)
-0:245          'r061' (temp 3-component vector of float)
-0:245          hyp. sine (global 3-component vector of float)
+0:245          'inF1' (in 3-component vector of float)
+0:245          sine (temp 3-component vector of float)
+0:245            'inF0' (in 3-component vector of float)
+0:245        move second child to first child (temp 3-component vector of float)
+0:245          'inF2' (in 3-component vector of float)
+0:245          cosine (temp 3-component vector of float)
 0:245            'inF0' (in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child (temp 3-component vector of float)
-0:246          'r062' (temp 3-component vector of float)
-0:246          smoothstep (global 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            'inF0' (in 3-component vector of float)
-0:246            'inF1' (in 3-component vector of float)
-0:246            'inF2' (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          'r063' (temp 3-component vector of float)
-0:247          sqrt (global 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            '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          'r064' (temp 3-component vector of float)
-0:248          step (global 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            'inF0' (in 3-component vector of float)
-0:248            'inF1' (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          'r065' (temp 3-component vector of float)
-0:249          tangent (global 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            '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          'r066' (temp 3-component vector of float)
-0:250          hyp. tangent (global 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            'inF0' (in 3-component vector of float)
-0:252      Sequence
-0:252        move second child to first child (temp 3-component vector of float)
-0:252          'r067' (temp 3-component vector of float)
-0:252          trunc (global 3-component vector of float)
-0:252            'inF0' (in 3-component vector of float)
-0:255      Branch: Return with expression
+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            '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            '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:399  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
-0:259    Function Parameters: 
-0:259      'inF0' (in 4-component vector of float)
-0:259      'inF1' (in 4-component vector of float)
-0:259      'inF2' (in 4-component vector of float)
-0:259      'inU0' (in 4-component vector of uint)
-0:259      'inU1' (in 4-component vector of uint)
+0:400  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 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)
+0:260      'inF2' (in 4-component vector of float)
+0:260      'inU0' (in 4-component vector of uint)
+0:260      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:262      Sequence
-0:262        move second child to first child (temp bool)
-0:262          'r000' (temp bool)
-0:262          all (global bool)
-0:262            'inF0' (in 4-component vector of float)
 0:263      Sequence
-0:263        move second child to first child (temp 4-component vector of float)
-0:263          'r001' (temp 4-component vector of float)
-0:263          Absolute value (global 4-component vector of float)
+0:263        move second child to first child (temp bool)
+0:263          'r000' (temp bool)
+0:263          all (global 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          'r002' (temp 4-component vector of float)
-0:264          arc cosine (global 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            'inF0' (in 4-component vector of float)
 0:265      Sequence
-0:265        move second child to first child (temp bool)
-0:265          'r003' (temp bool)
-0:265          any (global bool)
+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            'inF0' (in 4-component vector of float)
 0:266      Sequence
-0:266        move second child to first child (temp 4-component vector of float)
-0:266          'r004' (temp 4-component vector of float)
-0:266          arc sine (global 4-component vector of float)
+0:266        move second child to first child (temp bool)
+0:266          'r003' (temp bool)
+0:266          any (global 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 int)
-0:267          'r005' (temp 4-component vector of int)
-0:267          floatBitsToInt (global 4-component vector of int)
+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            'inF0' (in 4-component vector of float)
 0:268      Sequence
-0:268        move second child to first child (temp 4-component vector of uint)
-0:268          'r006' (temp 4-component vector of uint)
-0:268          floatBitsToUint (global 4-component vector of uint)
+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            'inF0' (in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child (temp 4-component vector of float)
-0:269          'r007' (temp 4-component vector of float)
-0:269          intBitsToFloat (global 4-component vector of float)
-0:269            'inU0' (in 4-component vector of uint)
-0:271      Sequence
-0:271        move second child to first child (temp 4-component vector of float)
-0:271          'r009' (temp 4-component vector of float)
-0:271          arc tangent (global 4-component vector of float)
-0:271            'inF0' (in 4-component vector of float)
+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            '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            '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          'r010' (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            'inF0' (in 4-component vector of float)
-0:272            'inF1' (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          'r011' (temp 4-component vector of float)
-0:273          Ceiling (global 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            '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          'r012' (temp 4-component vector of float)
-0:274          clamp (global 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            'inF0' (in 4-component vector of float)
-0:274            'inF1' (in 4-component vector of float)
-0:274            'inF2' (in 4-component vector of float)
-0:275      Test condition and select (temp void)
-0:275        Condition
-0:275        any (temp bool)
-0:275          Compare Less Than (temp 4-component vector of bool)
+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            'inF0' (in 4-component vector of float)
-0:275            Constant:
-0:275              0.000000
-0:275              0.000000
-0:275              0.000000
-0:275              0.000000
-0:275        true case
-0:275        Branch: Kill
-0:276      Sequence
-0:276        move second child to first child (temp 4-component vector of float)
-0:276          'r013' (temp 4-component vector of float)
-0:276          cosine (global 4-component vector of float)
+0:275            'inF1' (in 4-component vector of float)
+0:275            'inF2' (in 4-component vector of float)
+0:276      Test condition and select (temp void)
+0:276        Condition
+0:276        any (temp bool)
+0:276          Compare Less Than (temp 4-component vector of bool)
 0:276            'inF0' (in 4-component vector of float)
+0:276            Constant:
+0:276              0.000000
+0:276              0.000000
+0:276              0.000000
+0:276              0.000000
+0:276        true case
+0:276        Branch: Kill
 0:277      Sequence
 0:277        move second child to first child (temp 4-component vector of float)
-0:277          'r014' (temp 4-component vector of float)
-0:277          hyp. cosine (global 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            'inF0' (in 4-component vector of float)
 0:278      Sequence
-0:278        move second child to first child (temp 4-component vector of uint)
-0:278          'r015' (temp 4-component vector of uint)
+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            '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:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:279      Sequence
-0:279        move second child to first child (temp 4-component vector of float)
-0:279          'r016' (temp 4-component vector of float)
-0:279          dPdx (global 4-component vector of float)
-0:279            'inF0' (in 4-component vector of float)
 0:280      Sequence
 0:280        move second child to first child (temp 4-component vector of float)
-0:280          'r017' (temp 4-component vector of float)
-0:280          dPdxCoarse (global 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            '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          'r018' (temp 4-component vector of float)
-0:281          dPdxFine (global 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            '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          'r019' (temp 4-component vector of float)
-0:282          dPdy (global 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            '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          'r020' (temp 4-component vector of float)
-0:283          dPdyCoarse (global 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            '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          'r021' (temp 4-component vector of float)
-0:284          dPdyFine (global 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            '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          'r022' (temp 4-component vector of float)
-0:285          degrees (global 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            'inF0' (in 4-component vector of float)
 0:286      Sequence
-0:286        move second child to first child (temp float)
-0:286          'r023' (temp float)
-0:286          distance (global float)
+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            'inF0' (in 4-component vector of float)
-0:286            'inF1' (in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child (temp float)
-0:287          'r024' (temp float)
-0:287          dot-product (global float)
+0:287          'r023' (temp float)
+0:287          distance (global 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 4-component vector of float)
-0:288          'r025' (temp 4-component vector of float)
-0:288          Construct vec4 (temp 4-component vector of float)
-0:288            Constant:
-0:288              1.000000
-0:288            component-wise multiply (temp float)
-0:288              direct index (temp float)
-0:288                'inF0' (in 4-component vector of float)
-0:288                Constant:
-0:288                  1 (const int)
-0:288              direct index (temp float)
-0:288                'inF1' (in 4-component vector of float)
-0:288                Constant:
-0:288                  1 (const int)
-0:288            direct index (temp float)
-0:288              'inF0' (in 4-component vector of float)
-0:288              Constant:
-0:288                2 (const int)
-0:288            direct index (temp float)
-0:288              'inF1' (in 4-component vector of float)
-0:288              Constant:
-0:288                3 (const int)
-0:292      Sequence
-0:292        move second child to first child (temp 4-component vector of float)
-0:292          'r029' (temp 4-component vector of float)
-0:292          exp (global 4-component vector of float)
-0:292            'inF0' (in 4-component vector of float)
+0:288        move second child to first child (temp float)
+0:288          'r024' (temp float)
+0:288          dot-product (global float)
+0:288            'inF0' (in 4-component vector of float)
+0:288            'inF1' (in 4-component vector of float)
+0:289      Sequence
+0:289        move second child to first child (temp 4-component vector of float)
+0:289          'r025' (temp 4-component vector of float)
+0:289          Construct vec4 (temp 4-component vector of float)
+0:289            Constant:
+0:289              1.000000
+0:289            component-wise multiply (temp float)
+0:289              direct index (temp float)
+0:289                'inF0' (in 4-component vector of float)
+0:289                Constant:
+0:289                  1 (const int)
+0:289              direct index (temp float)
+0:289                'inF1' (in 4-component vector of float)
+0:289                Constant:
+0:289                  1 (const int)
+0:289            direct index (temp float)
+0:289              'inF0' (in 4-component vector of float)
+0:289              Constant:
+0:289                2 (const int)
+0:289            direct index (temp float)
+0:289              'inF1' (in 4-component vector of float)
+0:289              Constant:
+0:289                3 (const int)
 0:293      Sequence
 0:293        move second child to first child (temp 4-component vector of float)
-0:293          'r030' (temp 4-component vector of float)
-0:293          exp2 (global 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            '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          'r031' (temp 4-component vector of float)
-0:294          face-forward (global 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            'inF0' (in 4-component vector of float)
-0:294            'inF1' (in 4-component vector of float)
-0:294            'inF2' (in 4-component vector of float)
 0:295      Sequence
-0:295        move second child to first child (temp 4-component vector of uint)
-0:295          'r032' (temp 4-component vector of uint)
+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            '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:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:296      Sequence
-0:296        move second child to first child (temp 4-component vector of uint)
-0:296          'r033' (temp 4-component vector of uint)
+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:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:297      Sequence
-0:297        move second child to first child (temp 4-component vector of float)
-0:297          'r034' (temp 4-component vector of float)
-0:297          Floor (global 4-component vector of float)
-0:297            'inF0' (in 4-component vector of float)
-0:299      Sequence
-0:299        move second child to first child (temp 4-component vector of float)
-0:299          'r036' (temp 4-component vector of float)
-0:299          mod (global 4-component vector of float)
-0:299            'inF0' (in 4-component vector of float)
-0:299            'inF1' (in 4-component vector of float)
+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            '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          'r037' (temp 4-component vector of float)
-0:300          Fraction (global 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            '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          'r038' (temp 4-component vector of float)
-0:301          frexp (global 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            'inF0' (in 4-component vector of float)
-0:301            'inF1' (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          'r039' (temp 4-component vector of float)
-0:302          fwidth (global 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            '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 bool)
-0:303          'r040' (temp 4-component vector of bool)
-0:303          isinf (global 4-component vector of bool)
+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            '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          'r041' (temp 4-component vector of bool)
-0:304          isnan (global 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            'inF0' (in 4-component vector of float)
 0:305      Sequence
-0:305        move second child to first child (temp 4-component vector of float)
-0:305          'r042' (temp 4-component vector of float)
-0:305          ldexp (global 4-component vector of float)
+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            'inF0' (in 4-component vector of float)
-0:305            'inF1' (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          'r039a' (temp 4-component vector of float)
-0:306          mix (global 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            'inF0' (in 4-component vector of float)
 0:306            'inF1' (in 4-component vector of float)
-0:306            'inF2' (in 4-component vector of float)
 0:307      Sequence
-0:307        move second child to first child (temp float)
-0:307          'r043' (temp float)
-0:307          length (global float)
+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            '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 4-component vector of float)
-0:308          'r044' (temp 4-component vector of float)
-0:308          log (global 4-component vector of float)
+0:308        move second child to first child (temp float)
+0:308          'r043' (temp float)
+0:308          length (global 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          'r045' (temp 4-component vector of float)
-0:309          vector-scale (temp 4-component vector of float)
-0:309            log2 (temp 4-component vector of float)
-0:309              'inF0' (in 4-component vector of float)
-0:309            Constant:
-0:309              0.301030
+0:309          'r044' (temp 4-component vector of float)
+0:309          log (global 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)
-0:310          'r046' (temp 4-component vector of float)
-0:310          log2 (global 4-component vector of float)
-0:310            'inF0' (in 4-component vector of float)
+0:310          'r045' (temp 4-component vector of float)
+0:310          vector-scale (temp 4-component vector of float)
+0:310            log2 (temp 4-component vector of float)
+0:310              'inF0' (in 4-component vector of float)
+0:310            Constant:
+0:310              0.301030
 0:311      Sequence
 0:311        move second child to first child (temp 4-component vector of float)
-0:311          'r047' (temp 4-component vector of float)
-0:311          max (global 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            'inF0' (in 4-component vector of float)
-0:311            'inF1' (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          'r048' (temp 4-component vector of float)
-0:312          min (global 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            '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          'r049' (temp 4-component vector of float)
-0:313          normalize (global 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            '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          'r050' (temp 4-component vector of float)
-0:314          pow (global 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            'inF0' (in 4-component vector of float)
-0:314            'inF1' (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          'r051' (temp 4-component vector of float)
-0:315          radians (global 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            '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          'r052' (temp 4-component vector of float)
-0:316          divide (temp 4-component vector of float)
-0:316            Constant:
-0:316              1.000000
+0:316          'r051' (temp 4-component vector of float)
+0:316          radians (global 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)
-0:317          'r053' (temp 4-component vector of float)
-0:317          reflect (global 4-component vector of float)
+0:317          'r052' (temp 4-component vector of float)
+0:317          divide (temp 4-component vector of float)
+0:317            Constant:
+0:317              1.000000
 0:317            'inF0' (in 4-component vector of float)
-0:317            'inF1' (in 4-component vector of float)
 0:318      Sequence
 0:318        move second child to first child (temp 4-component vector of float)
-0:318          'r054' (temp 4-component vector of float)
-0:318          refract (global 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            'inF0' (in 4-component vector of float)
 0:318            'inF1' (in 4-component vector of float)
-0:318            Constant:
-0:318              2.000000
 0:319      Sequence
-0:319        move second child to first child (temp 4-component vector of uint)
-0:319          'r055' (temp 4-component vector of uint)
+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            'inF0' (in 4-component vector of float)
+0:319            'inF1' (in 4-component vector of float)
+0:319            Constant:
+0:319              2.000000
+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:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:320      Sequence
-0:320        move second child to first child (temp 4-component vector of float)
-0:320          'r056' (temp 4-component vector of float)
-0:320          roundEven (global 4-component vector of float)
-0:320            'inF0' (in 4-component vector of float)
 0:321      Sequence
 0:321        move second child to first child (temp 4-component vector of float)
-0:321          'r057' (temp 4-component vector of float)
-0:321          inverse sqrt (global 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            '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          'r058' (temp 4-component vector of float)
-0:322          clamp (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            'inF0' (in 4-component vector of float)
-0:322            Constant:
-0:322              0.000000
-0:322            Constant:
-0:322              1.000000
 0:323      Sequence
 0:323        move second child to first child (temp 4-component vector of float)
-0:323          'r059' (temp 4-component vector of float)
-0:323          Sign (global 4-component vector of float)
+0:323          'r058' (temp 4-component vector of float)
+0:323          clamp (temp 4-component vector of float)
 0:323            'inF0' (in 4-component vector of float)
+0:323            Constant:
+0:323              0.000000
+0:323            Constant:
+0:323              1.000000
 0:324      Sequence
 0:324        move second child to first child (temp 4-component vector of float)
-0:324          'r060' (temp 4-component vector of float)
-0:324          sine (global 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            '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          'inF1' (in 4-component vector of float)
-0:325          sine (temp 4-component vector of float)
-0:325            'inF0' (in 4-component vector of float)
-0:325        move second child to first child (temp 4-component vector of float)
-0:325          'inF2' (in 4-component vector of float)
-0:325          cosine (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            'inF0' (in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child (temp 4-component vector of float)
-0:326          'r061' (temp 4-component vector of float)
-0:326          hyp. sine (global 4-component vector of float)
+0:326          'inF1' (in 4-component vector of float)
+0:326          sine (temp 4-component vector of float)
+0:326            'inF0' (in 4-component vector of float)
+0:326        move second child to first child (temp 4-component vector of float)
+0:326          'inF2' (in 4-component vector of float)
+0:326          cosine (temp 4-component vector of float)
 0:326            'inF0' (in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child (temp 4-component vector of float)
-0:327          'r062' (temp 4-component vector of float)
-0:327          smoothstep (global 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            'inF0' (in 4-component vector of float)
-0:327            'inF1' (in 4-component vector of float)
-0:327            'inF2' (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          'r063' (temp 4-component vector of float)
-0:328          sqrt (global 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            '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          'r064' (temp 4-component vector of float)
-0:329          step (global 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            'inF0' (in 4-component vector of float)
-0:329            'inF1' (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          'r065' (temp 4-component vector of float)
-0:330          tangent (global 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            '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          'r066' (temp 4-component vector of float)
-0:331          hyp. tangent (global 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            'inF0' (in 4-component vector of float)
-0:333      Sequence
-0:333        move second child to first child (temp 4-component vector of float)
-0:333          'r067' (temp 4-component vector of float)
-0:333          trunc (global 4-component vector of float)
-0:333            'inF0' (in 4-component vector of float)
-0:336      Branch: Return with expression
+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            '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            'inF0' (in 4-component vector of float)
+0:337      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:408  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
-0:400    Function Parameters: 
-0:400      'inF0' (in 2X2 matrix of float)
-0:400      'inF1' (in 2X2 matrix of float)
-0:400      'inF2' (in 2X2 matrix of float)
+0:409  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:401    Function Parameters: 
+0:401      'inF0' (in 2X2 matrix of float)
+0:401      'inF1' (in 2X2 matrix of float)
+0:401      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:402      Sequence
-0:402        move second child to first child (temp bool)
-0:402          'r000' (temp bool)
-0:402          all (global bool)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r001' (temp 2X2 matrix of float)
-0:402          Absolute value (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      arc cosine (global 2X2 matrix of float)
-0:402        'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp bool)
-0:402          'r003' (temp bool)
-0:402          any (global bool)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r004' (temp 2X2 matrix of float)
-0:402          arc sine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r005' (temp 2X2 matrix of float)
-0:402          arc tangent (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r006' (temp 2X2 matrix of float)
-0:402          arc tangent (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r007' (temp 2X2 matrix of float)
-0:402          Ceiling (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Test condition and select (temp void)
-0:402        Condition
-0:402        any (temp bool)
-0:402          Compare Less Than (temp 2X2 matrix of bool)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.000000
-0:402              0.000000
-0:402              0.000000
-0:402              0.000000
-0:402        true case
-0:402        Branch: Kill
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r008' (temp 2X2 matrix of float)
-0:402          clamp (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402            'inF2' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r009' (temp 2X2 matrix of float)
-0:402          cosine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r010' (temp 2X2 matrix of float)
-0:402          hyp. cosine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r011' (temp 2X2 matrix of float)
-0:402          dPdx (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r012' (temp 2X2 matrix of float)
-0:402          dPdxCoarse (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r013' (temp 2X2 matrix of float)
-0:402          dPdxFine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r014' (temp 2X2 matrix of float)
-0:402          dPdy (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r015' (temp 2X2 matrix of float)
-0:402          dPdyCoarse (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r016' (temp 2X2 matrix of float)
-0:402          dPdyFine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r017' (temp 2X2 matrix of float)
-0:402          degrees (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp float)
-0:402          'r018' (temp float)
-0:402          determinant (global float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r019' (temp 2X2 matrix of float)
-0:402          exp (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'R020' (temp 2X2 matrix of float)
-0:402          exp2 (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r021' (temp 2X2 matrix of float)
-0:402          Floor (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r022' (temp 2X2 matrix of float)
-0:402          mod (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r023' (temp 2X2 matrix of float)
-0:402          Fraction (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r024' (temp 2X2 matrix of float)
-0:402          frexp (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r025' (temp 2X2 matrix of float)
-0:402          fwidth (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r026' (temp 2X2 matrix of float)
-0:402          ldexp (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r026a' (temp 2X2 matrix of float)
-0:402          mix (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402            'inF2' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r027' (temp 2X2 matrix of float)
-0:402          log (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r028' (temp 2X2 matrix of float)
-0:402          matrix-scale (temp 2X2 matrix of float)
-0:402            log2 (temp 2X2 matrix of float)
-0:402              'inF0' (in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.301030
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r029' (temp 2X2 matrix of float)
-0:402          log2 (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r030' (temp 2X2 matrix of float)
-0:402          max (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r031' (temp 2X2 matrix of float)
-0:402          min (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r032' (temp 2X2 matrix of float)
-0:402          pow (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r033' (temp 2X2 matrix of float)
-0:402          radians (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r034' (temp 2X2 matrix of float)
-0:402          roundEven (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r035' (temp 2X2 matrix of float)
-0:402          inverse sqrt (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r036' (temp 2X2 matrix of float)
-0:402          clamp (temp 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.000000
-0:402            Constant:
-0:402              1.000000
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r037' (temp 2X2 matrix of float)
-0:402          Sign (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r038' (temp 2X2 matrix of float)
-0:402          sine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'inF1' (in 2X2 matrix of float)
-0:402          sine (temp 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'inF2' (in 2X2 matrix of float)
-0:402          cosine (temp 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r039' (temp 2X2 matrix of float)
-0:402          hyp. sine (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r049' (temp 2X2 matrix of float)
-0:402          smoothstep (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402            'inF2' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r041' (temp 2X2 matrix of float)
-0:402          sqrt (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r042' (temp 2X2 matrix of float)
-0:402          step (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402            'inF1' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r043' (temp 2X2 matrix of float)
-0:402          tangent (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r044' (temp 2X2 matrix of float)
-0:402          hyp. tangent (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:402      transpose (global 2X2 matrix of float)
-0:402        'inF0' (in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child (temp 2X2 matrix of float)
-0:402          'r046' (temp 2X2 matrix of float)
-0:402          trunc (global 2X2 matrix of float)
-0:402            'inF0' (in 2X2 matrix of float)
-0:405      Branch: Return with expression
+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            '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            'inF0' (in 2X2 matrix of float)
+0:403      arc cosine (global 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            '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            '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            '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            '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            'inF0' (in 2X2 matrix of float)
+0:403      Test condition and select (temp void)
+0:403        Condition
+0:403        any (temp bool)
+0:403          Compare Less Than (temp 2X2 matrix of bool)
+0:403            'inF0' (in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.000000
+0:403              0.000000
+0:403              0.000000
+0:403              0.000000
+0:403        true case
+0:403        Branch: Kill
+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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            'inF0' (in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child (temp 2X2 matrix of float)
+0:403          'r028' (temp 2X2 matrix of float)
+0:403          matrix-scale (temp 2X2 matrix of float)
+0:403            log2 (temp 2X2 matrix of float)
+0:403              'inF0' (in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.301030
+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            '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            '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            '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            '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            '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            '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            'inF0' (in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child (temp 2X2 matrix of float)
+0:403          'r036' (temp 2X2 matrix of float)
+0:403          clamp (temp 2X2 matrix of float)
+0:403            'inF0' (in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.000000
+0:403            Constant:
+0:403              1.000000
+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            '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            'inF0' (in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child (temp 2X2 matrix of float)
+0:403          'inF1' (in 2X2 matrix of float)
+0:403          sine (temp 2X2 matrix of float)
+0:403            'inF0' (in 2X2 matrix of float)
+0:403        move second child to first child (temp 2X2 matrix of float)
+0:403          'inF2' (in 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          'r039' (temp 2X2 matrix of float)
+0:403          hyp. sine (global 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            '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            '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            '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            '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            'inF0' (in 2X2 matrix of float)
+0:403      transpose (global 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            'inF0' (in 2X2 matrix of float)
+0:406      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:417  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
-0:409    Function Parameters: 
-0:409      'inF0' (in 3X3 matrix of float)
-0:409      'inF1' (in 3X3 matrix of float)
-0:409      'inF2' (in 3X3 matrix of float)
+0:418  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:410    Function Parameters: 
+0:410      'inF0' (in 3X3 matrix of float)
+0:410      'inF1' (in 3X3 matrix of float)
+0:410      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:411      Sequence
-0:411        move second child to first child (temp bool)
-0:411          'r000' (temp bool)
-0:411          all (global bool)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r001' (temp 3X3 matrix of float)
-0:411          Absolute value (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      arc cosine (global 3X3 matrix of float)
-0:411        'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp bool)
-0:411          'r003' (temp bool)
-0:411          any (global bool)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r004' (temp 3X3 matrix of float)
-0:411          arc sine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r005' (temp 3X3 matrix of float)
-0:411          arc tangent (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r006' (temp 3X3 matrix of float)
-0:411          arc tangent (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r007' (temp 3X3 matrix of float)
-0:411          Ceiling (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Test condition and select (temp void)
-0:411        Condition
-0:411        any (temp bool)
-0:411          Compare Less Than (temp 3X3 matrix of bool)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411        true case
-0:411        Branch: Kill
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r008' (temp 3X3 matrix of float)
-0:411          clamp (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411            'inF2' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r009' (temp 3X3 matrix of float)
-0:411          cosine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r010' (temp 3X3 matrix of float)
-0:411          hyp. cosine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r011' (temp 3X3 matrix of float)
-0:411          dPdx (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r012' (temp 3X3 matrix of float)
-0:411          dPdxCoarse (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r013' (temp 3X3 matrix of float)
-0:411          dPdxFine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r014' (temp 3X3 matrix of float)
-0:411          dPdy (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r015' (temp 3X3 matrix of float)
-0:411          dPdyCoarse (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r016' (temp 3X3 matrix of float)
-0:411          dPdyFine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r017' (temp 3X3 matrix of float)
-0:411          degrees (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp float)
-0:411          'r018' (temp float)
-0:411          determinant (global float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r019' (temp 3X3 matrix of float)
-0:411          exp (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'R020' (temp 3X3 matrix of float)
-0:411          exp2 (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r021' (temp 3X3 matrix of float)
-0:411          Floor (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r022' (temp 3X3 matrix of float)
-0:411          mod (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r023' (temp 3X3 matrix of float)
-0:411          Fraction (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r024' (temp 3X3 matrix of float)
-0:411          frexp (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r025' (temp 3X3 matrix of float)
-0:411          fwidth (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r026' (temp 3X3 matrix of float)
-0:411          ldexp (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r026a' (temp 3X3 matrix of float)
-0:411          mix (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411            'inF2' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r027' (temp 3X3 matrix of float)
-0:411          log (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r028' (temp 3X3 matrix of float)
-0:411          matrix-scale (temp 3X3 matrix of float)
-0:411            log2 (temp 3X3 matrix of float)
-0:411              'inF0' (in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.301030
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r029' (temp 3X3 matrix of float)
-0:411          log2 (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r030' (temp 3X3 matrix of float)
-0:411          max (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r031' (temp 3X3 matrix of float)
-0:411          min (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r032' (temp 3X3 matrix of float)
-0:411          pow (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r033' (temp 3X3 matrix of float)
-0:411          radians (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r034' (temp 3X3 matrix of float)
-0:411          roundEven (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r035' (temp 3X3 matrix of float)
-0:411          inverse sqrt (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r036' (temp 3X3 matrix of float)
-0:411          clamp (temp 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.000000
-0:411            Constant:
-0:411              1.000000
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r037' (temp 3X3 matrix of float)
-0:411          Sign (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r038' (temp 3X3 matrix of float)
-0:411          sine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'inF1' (in 3X3 matrix of float)
-0:411          sine (temp 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'inF2' (in 3X3 matrix of float)
-0:411          cosine (temp 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r039' (temp 3X3 matrix of float)
-0:411          hyp. sine (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r049' (temp 3X3 matrix of float)
-0:411          smoothstep (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411            'inF2' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r041' (temp 3X3 matrix of float)
-0:411          sqrt (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r042' (temp 3X3 matrix of float)
-0:411          step (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411            'inF1' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r043' (temp 3X3 matrix of float)
-0:411          tangent (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r044' (temp 3X3 matrix of float)
-0:411          hyp. tangent (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:411      transpose (global 3X3 matrix of float)
-0:411        'inF0' (in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child (temp 3X3 matrix of float)
-0:411          'r046' (temp 3X3 matrix of float)
-0:411          trunc (global 3X3 matrix of float)
-0:411            'inF0' (in 3X3 matrix of float)
-0:414      Branch: Return with expression
+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            '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            'inF0' (in 3X3 matrix of float)
+0:412      arc cosine (global 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            '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            '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            '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            '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            'inF0' (in 3X3 matrix of float)
+0:412      Test condition and select (temp void)
+0:412        Condition
+0:412        any (temp bool)
+0:412          Compare Less Than (temp 3X3 matrix of bool)
+0:412            'inF0' (in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412        true case
+0:412        Branch: Kill
+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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            'inF0' (in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child (temp 3X3 matrix of float)
+0:412          'r028' (temp 3X3 matrix of float)
+0:412          matrix-scale (temp 3X3 matrix of float)
+0:412            log2 (temp 3X3 matrix of float)
+0:412              'inF0' (in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.301030
+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            '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            '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            '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            '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            '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            '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            'inF0' (in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child (temp 3X3 matrix of float)
+0:412          'r036' (temp 3X3 matrix of float)
+0:412          clamp (temp 3X3 matrix of float)
+0:412            'inF0' (in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.000000
+0:412            Constant:
+0:412              1.000000
+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            '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            'inF0' (in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child (temp 3X3 matrix of float)
+0:412          'inF1' (in 3X3 matrix of float)
+0:412          sine (temp 3X3 matrix of float)
+0:412            'inF0' (in 3X3 matrix of float)
+0:412        move second child to first child (temp 3X3 matrix of float)
+0:412          'inF2' (in 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          'r039' (temp 3X3 matrix of float)
+0:412          hyp. sine (global 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            '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            '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            '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            '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            'inF0' (in 3X3 matrix of float)
+0:412      transpose (global 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            'inF0' (in 3X3 matrix of float)
+0:415      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -4906,301 +4922,301 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:438  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
-0:418    Function Parameters: 
-0:418      'inF0' (in 4X4 matrix of float)
-0:418      'inF1' (in 4X4 matrix of float)
-0:418      'inF2' (in 4X4 matrix of float)
+0:439  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:419    Function Parameters: 
+0:419      'inF0' (in 4X4 matrix of float)
+0:419      'inF1' (in 4X4 matrix of float)
+0:419      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:420      Sequence
-0:420        move second child to first child (temp bool)
-0:420          'r000' (temp bool)
-0:420          all (global bool)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r001' (temp 4X4 matrix of float)
-0:420          Absolute value (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      arc cosine (global 4X4 matrix of float)
-0:420        'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp bool)
-0:420          'r003' (temp bool)
-0:420          any (global bool)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r004' (temp 4X4 matrix of float)
-0:420          arc sine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r005' (temp 4X4 matrix of float)
-0:420          arc tangent (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r006' (temp 4X4 matrix of float)
-0:420          arc tangent (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r007' (temp 4X4 matrix of float)
-0:420          Ceiling (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Test condition and select (temp void)
-0:420        Condition
-0:420        any (temp bool)
-0:420          Compare Less Than (temp 4X4 matrix of bool)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420        true case
-0:420        Branch: Kill
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r008' (temp 4X4 matrix of float)
-0:420          clamp (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420            'inF2' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r009' (temp 4X4 matrix of float)
-0:420          cosine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r010' (temp 4X4 matrix of float)
-0:420          hyp. cosine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r011' (temp 4X4 matrix of float)
-0:420          dPdx (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r012' (temp 4X4 matrix of float)
-0:420          dPdxCoarse (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r013' (temp 4X4 matrix of float)
-0:420          dPdxFine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r014' (temp 4X4 matrix of float)
-0:420          dPdy (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r015' (temp 4X4 matrix of float)
-0:420          dPdyCoarse (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r016' (temp 4X4 matrix of float)
-0:420          dPdyFine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r017' (temp 4X4 matrix of float)
-0:420          degrees (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp float)
-0:420          'r018' (temp float)
-0:420          determinant (global float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r019' (temp 4X4 matrix of float)
-0:420          exp (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'R020' (temp 4X4 matrix of float)
-0:420          exp2 (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r021' (temp 4X4 matrix of float)
-0:420          Floor (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r022' (temp 4X4 matrix of float)
-0:420          mod (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r023' (temp 4X4 matrix of float)
-0:420          Fraction (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r024' (temp 4X4 matrix of float)
-0:420          frexp (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r025' (temp 4X4 matrix of float)
-0:420          fwidth (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r026' (temp 4X4 matrix of float)
-0:420          ldexp (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r026a' (temp 4X4 matrix of float)
-0:420          mix (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420            'inF2' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r027' (temp 4X4 matrix of float)
-0:420          log (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r028' (temp 4X4 matrix of float)
-0:420          matrix-scale (temp 4X4 matrix of float)
-0:420            log2 (temp 4X4 matrix of float)
-0:420              'inF0' (in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.301030
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r029' (temp 4X4 matrix of float)
-0:420          log2 (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r030' (temp 4X4 matrix of float)
-0:420          max (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r031' (temp 4X4 matrix of float)
-0:420          min (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r032' (temp 4X4 matrix of float)
-0:420          pow (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r033' (temp 4X4 matrix of float)
-0:420          radians (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r034' (temp 4X4 matrix of float)
-0:420          roundEven (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r035' (temp 4X4 matrix of float)
-0:420          inverse sqrt (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r036' (temp 4X4 matrix of float)
-0:420          clamp (temp 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.000000
-0:420            Constant:
-0:420              1.000000
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r037' (temp 4X4 matrix of float)
-0:420          Sign (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r038' (temp 4X4 matrix of float)
-0:420          sine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'inF1' (in 4X4 matrix of float)
-0:420          sine (temp 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'inF2' (in 4X4 matrix of float)
-0:420          cosine (temp 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r039' (temp 4X4 matrix of float)
-0:420          hyp. sine (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r049' (temp 4X4 matrix of float)
-0:420          smoothstep (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420            'inF2' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r041' (temp 4X4 matrix of float)
-0:420          sqrt (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r042' (temp 4X4 matrix of float)
-0:420          step (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420            'inF1' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r043' (temp 4X4 matrix of float)
-0:420          tangent (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r044' (temp 4X4 matrix of float)
-0:420          hyp. tangent (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:420      transpose (global 4X4 matrix of float)
-0:420        'inF0' (in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child (temp 4X4 matrix of float)
-0:420          'r046' (temp 4X4 matrix of float)
-0:420          trunc (global 4X4 matrix of float)
-0:420            'inF0' (in 4X4 matrix of float)
-0:423      Branch: Return with expression
+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            '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            'inF0' (in 4X4 matrix of float)
+0:421      arc cosine (global 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            '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            '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            '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            '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            'inF0' (in 4X4 matrix of float)
+0:421      Test condition and select (temp void)
+0:421        Condition
+0:421        any (temp bool)
+0:421          Compare Less Than (temp 4X4 matrix of bool)
+0:421            'inF0' (in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421        true case
+0:421        Branch: Kill
+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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            '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            'inF0' (in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child (temp 4X4 matrix of float)
+0:421          'r028' (temp 4X4 matrix of float)
+0:421          matrix-scale (temp 4X4 matrix of float)
+0:421            log2 (temp 4X4 matrix of float)
+0:421              'inF0' (in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.301030
+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            '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            '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            '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            '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            '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            '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            'inF0' (in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child (temp 4X4 matrix of float)
+0:421          'r036' (temp 4X4 matrix of float)
+0:421          clamp (temp 4X4 matrix of float)
+0:421            'inF0' (in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.000000
+0:421            Constant:
+0:421              1.000000
+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            '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            'inF0' (in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child (temp 4X4 matrix of float)
+0:421          'inF1' (in 4X4 matrix of float)
+0:421          sine (temp 4X4 matrix of float)
+0:421            'inF0' (in 4X4 matrix of float)
+0:421        move second child to first child (temp 4X4 matrix of float)
+0:421          'inF2' (in 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          'r039' (temp 4X4 matrix of float)
+0:421          hyp. sine (global 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            '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            '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            '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            '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            'inF0' (in 4X4 matrix of float)
+0:421      transpose (global 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            'inF0' (in 4X4 matrix of float)
+0:424      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -5218,309 +5234,309 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:445  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
-0:441    Function Parameters: 
-0:441      'inF0' (in float)
-0:441      'inF1' (in float)
-0:441      'inFV0' (in 2-component vector of float)
-0:441      'inFV1' (in 2-component vector of float)
-0:441      'inFM0' (in 2X2 matrix of float)
-0:441      'inFM1' (in 2X2 matrix of float)
+0:446  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
+0:442    Function Parameters: 
+0:442      'inF0' (in float)
+0:442      'inF1' (in float)
+0:442      'inFV0' (in 2-component vector of float)
+0:442      'inFV1' (in 2-component vector of float)
+0:442      'inFM0' (in 2X2 matrix of float)
+0:442      'inFM1' (in 2X2 matrix of float)
 0:?     Sequence
-0:442      Sequence
-0:442        move second child to first child (temp float)
-0:442          'r0' (temp float)
-0:442          component-wise multiply (temp float)
-0:442            'inF0' (in float)
-0:442            'inF1' (in float)
-0:442      Sequence
-0:442        move second child to first child (temp 2-component vector of float)
-0:442          'r1' (temp 2-component vector of float)
-0:442          vector-scale (temp 2-component vector of float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442            'inF0' (in float)
-0:442      Sequence
-0:442        move second child to first child (temp 2-component vector of float)
-0:442          'r2' (temp 2-component vector of float)
-0:442          vector-scale (temp 2-component vector of float)
-0:442            'inF0' (in float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child (temp float)
-0:442          'r3' (temp float)
-0:442          dot-product (global float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442            'inFV1' (in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child (temp 2-component vector of float)
-0:442          'r4' (temp 2-component vector of float)
-0:442          matrix-times-vector (temp 2-component vector of float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child (temp 2-component vector of float)
-0:442          'r5' (temp 2-component vector of float)
-0:442          vector-times-matrix (temp 2-component vector of float)
-0:442            'inFV0' (in 2-component vector of float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442      Sequence
-0:442        move second child to first child (temp 2X2 matrix of float)
-0:442          'r6' (temp 2X2 matrix of float)
-0:442          matrix-scale (temp 2X2 matrix of float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442            'inF0' (in float)
-0:442      Sequence
-0:442        move second child to first child (temp 2X2 matrix of float)
-0:442          'r7' (temp 2X2 matrix of float)
-0:442          matrix-scale (temp 2X2 matrix of float)
-0:442            'inF0' (in float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442      Sequence
-0:442        move second child to first child (temp 2X2 matrix of float)
-0:442          'r8' (temp 2X2 matrix of float)
-0:442          matrix-multiply (temp 2X2 matrix of float)
-0:442            'inFM0' (in 2X2 matrix of float)
-0:442            'inFM1' (in 2X2 matrix of float)
-0:452  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
-0:448    Function Parameters: 
-0:448      'inF0' (in float)
-0:448      'inF1' (in float)
-0:448      'inFV0' (in 3-component vector of float)
-0:448      'inFV1' (in 3-component vector of float)
-0:448      'inFM0' (in 3X3 matrix of float)
-0:448      'inFM1' (in 3X3 matrix of float)
+0:443      Sequence
+0:443        move second child to first child (temp float)
+0:443          'r0' (temp float)
+0:443          component-wise multiply (temp float)
+0:443            'inF0' (in float)
+0:443            'inF1' (in float)
+0:443      Sequence
+0:443        move second child to first child (temp 2-component vector of float)
+0:443          'r1' (temp 2-component vector of float)
+0:443          vector-scale (temp 2-component vector of float)
+0:443            'inFV0' (in 2-component vector of float)
+0:443            'inF0' (in float)
+0:443      Sequence
+0:443        move second child to first child (temp 2-component vector of float)
+0:443          'r2' (temp 2-component vector of float)
+0:443          vector-scale (temp 2-component vector of float)
+0:443            'inF0' (in float)
+0:443            'inFV0' (in 2-component vector of float)
+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            'inFV0' (in 2-component vector of float)
+0:443            'inFV1' (in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child (temp 2-component vector of float)
+0:443          'r4' (temp 2-component vector of float)
+0:443          matrix-times-vector (temp 2-component vector of float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443            'inFV0' (in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child (temp 2-component vector of float)
+0:443          'r5' (temp 2-component vector of float)
+0:443          vector-times-matrix (temp 2-component vector of float)
+0:443            'inFV0' (in 2-component vector of float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443      Sequence
+0:443        move second child to first child (temp 2X2 matrix of float)
+0:443          'r6' (temp 2X2 matrix of float)
+0:443          matrix-scale (temp 2X2 matrix of float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443            'inF0' (in float)
+0:443      Sequence
+0:443        move second child to first child (temp 2X2 matrix of float)
+0:443          'r7' (temp 2X2 matrix of float)
+0:443          matrix-scale (temp 2X2 matrix of float)
+0:443            'inF0' (in float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443      Sequence
+0:443        move second child to first child (temp 2X2 matrix of float)
+0:443          'r8' (temp 2X2 matrix of float)
+0:443          matrix-multiply (temp 2X2 matrix of float)
+0:443            'inFM0' (in 2X2 matrix of float)
+0:443            'inFM1' (in 2X2 matrix of float)
+0:453  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
+0:449    Function Parameters: 
+0:449      'inF0' (in float)
+0:449      'inF1' (in float)
+0:449      'inFV0' (in 3-component vector of float)
+0:449      'inFV1' (in 3-component vector of float)
+0:449      'inFM0' (in 3X3 matrix of float)
+0:449      'inFM1' (in 3X3 matrix of float)
 0:?     Sequence
-0:449      Sequence
-0:449        move second child to first child (temp float)
-0:449          'r0' (temp float)
-0:449          component-wise multiply (temp float)
-0:449            'inF0' (in float)
-0:449            'inF1' (in float)
-0:449      Sequence
-0:449        move second child to first child (temp 3-component vector of float)
-0:449          'r1' (temp 3-component vector of float)
-0:449          vector-scale (temp 3-component vector of float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449            'inF0' (in float)
-0:449      Sequence
-0:449        move second child to first child (temp 3-component vector of float)
-0:449          'r2' (temp 3-component vector of float)
-0:449          vector-scale (temp 3-component vector of float)
-0:449            'inF0' (in float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child (temp float)
-0:449          'r3' (temp float)
-0:449          dot-product (global float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449            'inFV1' (in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child (temp 3-component vector of float)
-0:449          'r4' (temp 3-component vector of float)
-0:449          matrix-times-vector (temp 3-component vector of float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child (temp 3-component vector of float)
-0:449          'r5' (temp 3-component vector of float)
-0:449          vector-times-matrix (temp 3-component vector of float)
-0:449            'inFV0' (in 3-component vector of float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449      Sequence
-0:449        move second child to first child (temp 3X3 matrix of float)
-0:449          'r6' (temp 3X3 matrix of float)
-0:449          matrix-scale (temp 3X3 matrix of float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449            'inF0' (in float)
-0:449      Sequence
-0:449        move second child to first child (temp 3X3 matrix of float)
-0:449          'r7' (temp 3X3 matrix of float)
-0:449          matrix-scale (temp 3X3 matrix of float)
-0:449            'inF0' (in float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449      Sequence
-0:449        move second child to first child (temp 3X3 matrix of float)
-0:449          'r8' (temp 3X3 matrix of float)
-0:449          matrix-multiply (temp 3X3 matrix of float)
-0:449            'inFM0' (in 3X3 matrix of float)
-0:449            'inFM1' (in 3X3 matrix of float)
-0:460  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
-0:455    Function Parameters: 
-0:455      'inF0' (in float)
-0:455      'inF1' (in float)
-0:455      'inFV0' (in 4-component vector of float)
-0:455      'inFV1' (in 4-component vector of float)
-0:455      'inFM0' (in 4X4 matrix of float)
-0:455      'inFM1' (in 4X4 matrix of float)
+0:450      Sequence
+0:450        move second child to first child (temp float)
+0:450          'r0' (temp float)
+0:450          component-wise multiply (temp float)
+0:450            'inF0' (in float)
+0:450            'inF1' (in float)
+0:450      Sequence
+0:450        move second child to first child (temp 3-component vector of float)
+0:450          'r1' (temp 3-component vector of float)
+0:450          vector-scale (temp 3-component vector of float)
+0:450            'inFV0' (in 3-component vector of float)
+0:450            'inF0' (in float)
+0:450      Sequence
+0:450        move second child to first child (temp 3-component vector of float)
+0:450          'r2' (temp 3-component vector of float)
+0:450          vector-scale (temp 3-component vector of float)
+0:450            'inF0' (in float)
+0:450            'inFV0' (in 3-component vector of float)
+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            'inFV0' (in 3-component vector of float)
+0:450            'inFV1' (in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child (temp 3-component vector of float)
+0:450          'r4' (temp 3-component vector of float)
+0:450          matrix-times-vector (temp 3-component vector of float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450            'inFV0' (in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child (temp 3-component vector of float)
+0:450          'r5' (temp 3-component vector of float)
+0:450          vector-times-matrix (temp 3-component vector of float)
+0:450            'inFV0' (in 3-component vector of float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450      Sequence
+0:450        move second child to first child (temp 3X3 matrix of float)
+0:450          'r6' (temp 3X3 matrix of float)
+0:450          matrix-scale (temp 3X3 matrix of float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450            'inF0' (in float)
+0:450      Sequence
+0:450        move second child to first child (temp 3X3 matrix of float)
+0:450          'r7' (temp 3X3 matrix of float)
+0:450          matrix-scale (temp 3X3 matrix of float)
+0:450            'inF0' (in float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450      Sequence
+0:450        move second child to first child (temp 3X3 matrix of float)
+0:450          'r8' (temp 3X3 matrix of float)
+0:450          matrix-multiply (temp 3X3 matrix of float)
+0:450            'inFM0' (in 3X3 matrix of float)
+0:450            'inFM1' (in 3X3 matrix of float)
+0:461  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
+0:456    Function Parameters: 
+0:456      'inF0' (in float)
+0:456      'inF1' (in float)
+0:456      'inFV0' (in 4-component vector of float)
+0:456      'inFV1' (in 4-component vector of float)
+0:456      'inFM0' (in 4X4 matrix of float)
+0:456      'inFM1' (in 4X4 matrix of float)
 0:?     Sequence
-0:456      Sequence
-0:456        move second child to first child (temp float)
-0:456          'r0' (temp float)
-0:456          component-wise multiply (temp float)
-0:456            'inF0' (in float)
-0:456            'inF1' (in float)
-0:456      Sequence
-0:456        move second child to first child (temp 4-component vector of float)
-0:456          'r1' (temp 4-component vector of float)
-0:456          vector-scale (temp 4-component vector of float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456            'inF0' (in float)
-0:456      Sequence
-0:456        move second child to first child (temp 4-component vector of float)
-0:456          'r2' (temp 4-component vector of float)
-0:456          vector-scale (temp 4-component vector of float)
-0:456            'inF0' (in float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child (temp float)
-0:456          'r3' (temp float)
-0:456          dot-product (global float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456            'inFV1' (in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child (temp 4-component vector of float)
-0:456          'r4' (temp 4-component vector of float)
-0:456          matrix-times-vector (temp 4-component vector of float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child (temp 4-component vector of float)
-0:456          'r5' (temp 4-component vector of float)
-0:456          vector-times-matrix (temp 4-component vector of float)
-0:456            'inFV0' (in 4-component vector of float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456      Sequence
-0:456        move second child to first child (temp 4X4 matrix of float)
-0:456          'r6' (temp 4X4 matrix of float)
-0:456          matrix-scale (temp 4X4 matrix of float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456            'inF0' (in float)
-0:456      Sequence
-0:456        move second child to first child (temp 4X4 matrix of float)
-0:456          'r7' (temp 4X4 matrix of float)
-0:456          matrix-scale (temp 4X4 matrix of float)
-0:456            'inF0' (in float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456      Sequence
-0:456        move second child to first child (temp 4X4 matrix of float)
-0:456          'r8' (temp 4X4 matrix of float)
-0:456          matrix-multiply (temp 4X4 matrix of float)
-0:456            'inFM0' (in 4X4 matrix of float)
-0:456            'inFM1' (in 4X4 matrix of float)
-0:484  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42; (global void)
-0:465    Function Parameters: 
-0:465      'inF0' (in float)
-0:465      'inF1' (in float)
-0:465      'inFV2' (in 2-component vector of float)
-0:465      'inFV3' (in 3-component vector of float)
-0:465      'inFM2x3' (in 3X2 matrix of float)
-0:465      'inFM3x2' (in 2X3 matrix of float)
-0:465      'inFM3x3' (in 3X3 matrix of float)
-0:465      'inFM3x4' (in 4X3 matrix of float)
-0:465      'inFM2x4' (in 4X2 matrix of float)
+0:457      Sequence
+0:457        move second child to first child (temp float)
+0:457          'r0' (temp float)
+0:457          component-wise multiply (temp float)
+0:457            'inF0' (in float)
+0:457            'inF1' (in float)
+0:457      Sequence
+0:457        move second child to first child (temp 4-component vector of float)
+0:457          'r1' (temp 4-component vector of float)
+0:457          vector-scale (temp 4-component vector of float)
+0:457            'inFV0' (in 4-component vector of float)
+0:457            'inF0' (in float)
+0:457      Sequence
+0:457        move second child to first child (temp 4-component vector of float)
+0:457          'r2' (temp 4-component vector of float)
+0:457          vector-scale (temp 4-component vector of float)
+0:457            'inF0' (in float)
+0:457            'inFV0' (in 4-component vector of float)
+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            'inFV0' (in 4-component vector of float)
+0:457            'inFV1' (in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child (temp 4-component vector of float)
+0:457          'r4' (temp 4-component vector of float)
+0:457          matrix-times-vector (temp 4-component vector of float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457            'inFV0' (in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child (temp 4-component vector of float)
+0:457          'r5' (temp 4-component vector of float)
+0:457          vector-times-matrix (temp 4-component vector of float)
+0:457            'inFV0' (in 4-component vector of float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child (temp 4X4 matrix of float)
+0:457          'r6' (temp 4X4 matrix of float)
+0:457          matrix-scale (temp 4X4 matrix of float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457            'inF0' (in float)
+0:457      Sequence
+0:457        move second child to first child (temp 4X4 matrix of float)
+0:457          'r7' (temp 4X4 matrix of float)
+0:457          matrix-scale (temp 4X4 matrix of float)
+0:457            'inF0' (in float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child (temp 4X4 matrix of float)
+0:457          'r8' (temp 4X4 matrix of float)
+0:457          matrix-multiply (temp 4X4 matrix of float)
+0:457            'inFM0' (in 4X4 matrix of float)
+0:457            'inFM1' (in 4X4 matrix of float)
+0:485  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42; (global void)
+0:466    Function Parameters: 
+0:466      'inF0' (in float)
+0:466      'inF1' (in float)
+0:466      'inFV2' (in 2-component vector of float)
+0:466      'inFV3' (in 3-component vector of float)
+0:466      'inFM2x3' (in 3X2 matrix of float)
+0:466      'inFM3x2' (in 2X3 matrix of float)
+0:466      'inFM3x3' (in 3X3 matrix of float)
+0:466      'inFM3x4' (in 4X3 matrix of float)
+0:466      'inFM2x4' (in 4X2 matrix of float)
 0:?     Sequence
-0:466      Sequence
-0:466        move second child to first child (temp float)
-0:466          'r00' (temp float)
-0:466          component-wise multiply (temp float)
-0:466            'inF0' (in float)
-0:466            'inF1' (in float)
 0:467      Sequence
-0:467        move second child to first child (temp 2-component vector of float)
-0:467          'r01' (temp 2-component vector of float)
-0:467          vector-scale (temp 2-component vector of float)
-0:467            'inFV2' (in 2-component vector of float)
+0:467        move second child to first child (temp float)
+0:467          'r00' (temp float)
+0:467          component-wise multiply (temp float)
 0:467            'inF0' (in float)
+0:467            'inF1' (in float)
 0:468      Sequence
-0:468        move second child to first child (temp 3-component vector of float)
-0:468          'r02' (temp 3-component vector of float)
-0:468          vector-scale (temp 3-component vector of float)
-0:468            'inFV3' (in 3-component vector of float)
+0:468        move second child to first child (temp 2-component vector of float)
+0:468          'r01' (temp 2-component vector of float)
+0:468          vector-scale (temp 2-component vector of float)
+0:468            'inFV2' (in 2-component vector of float)
 0:468            'inF0' (in float)
 0:469      Sequence
-0:469        move second child to first child (temp 2-component vector of float)
-0:469          'r03' (temp 2-component vector of float)
-0:469          vector-scale (temp 2-component vector of float)
+0:469        move second child to first child (temp 3-component vector of float)
+0:469          'r02' (temp 3-component vector of float)
+0:469          vector-scale (temp 3-component vector of float)
+0:469            'inFV3' (in 3-component vector of float)
 0:469            'inF0' (in float)
-0:469            'inFV2' (in 2-component vector of float)
 0:470      Sequence
-0:470        move second child to first child (temp 3-component vector of float)
-0:470          'r04' (temp 3-component vector of float)
-0:470          vector-scale (temp 3-component vector of float)
+0:470        move second child to first child (temp 2-component vector of float)
+0:470          'r03' (temp 2-component vector of float)
+0:470          vector-scale (temp 2-component vector of float)
 0:470            'inF0' (in float)
-0:470            'inFV3' (in 3-component vector of float)
+0:470            'inFV2' (in 2-component vector of float)
 0:471      Sequence
-0:471        move second child to first child (temp float)
-0:471          'r05' (temp float)
-0:471          dot-product (global float)
-0:471            'inFV2' (in 2-component vector of float)
-0:471            'inFV2' (in 2-component vector of float)
+0:471        move second child to first child (temp 3-component vector of float)
+0:471          'r04' (temp 3-component vector of float)
+0:471          vector-scale (temp 3-component vector of float)
+0:471            'inF0' (in float)
+0:471            'inFV3' (in 3-component vector of float)
 0:472      Sequence
 0:472        move second child to first child (temp float)
-0:472          'r06' (temp float)
+0:472          'r05' (temp float)
 0:472          dot-product (global float)
-0:472            'inFV3' (in 3-component vector of float)
-0:472            'inFV3' (in 3-component vector of 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 3-component vector of float)
-0:473          'r07' (temp 3-component vector of float)
-0:473          vector-times-matrix (temp 3-component vector of float)
-0:473            'inFV2' (in 2-component vector of float)
-0:473            'inFM2x3' (in 3X2 matrix of float)
+0:473        move second child to first child (temp float)
+0:473          'r06' (temp float)
+0:473          dot-product (global float)
+0:473            'inFV3' (in 3-component vector of float)
+0:473            'inFV3' (in 3-component vector of float)
 0:474      Sequence
-0:474        move second child to first child (temp 2-component vector of float)
-0:474          'r08' (temp 2-component vector of float)
-0:474          vector-times-matrix (temp 2-component vector of float)
-0:474            'inFV3' (in 3-component vector of float)
-0:474            'inFM3x2' (in 2X3 matrix of float)
+0:474        move second child to first child (temp 3-component vector of float)
+0:474          'r07' (temp 3-component vector of float)
+0:474          vector-times-matrix (temp 3-component vector of float)
+0:474            'inFV2' (in 2-component vector of float)
+0:474            'inFM2x3' (in 3X2 matrix of float)
 0:475      Sequence
 0:475        move second child to first child (temp 2-component vector of float)
-0:475          'r09' (temp 2-component vector of float)
-0:475          matrix-times-vector (temp 2-component vector of float)
-0:475            'inFM2x3' (in 3X2 matrix of float)
+0:475          'r08' (temp 2-component vector of float)
+0:475          vector-times-matrix (temp 2-component vector of float)
 0:475            'inFV3' (in 3-component vector of float)
+0:475            'inFM3x2' (in 2X3 matrix of float)
 0:476      Sequence
-0:476        move second child to first child (temp 3-component vector of float)
-0:476          'r10' (temp 3-component vector of float)
-0:476          matrix-times-vector (temp 3-component vector of float)
-0:476            'inFM3x2' (in 2X3 matrix of float)
-0:476            'inFV2' (in 2-component vector of float)
+0:476        move second child to first child (temp 2-component vector of float)
+0:476          'r09' (temp 2-component vector of float)
+0:476          matrix-times-vector (temp 2-component vector of float)
+0:476            'inFM2x3' (in 3X2 matrix of float)
+0:476            'inFV3' (in 3-component vector of float)
 0:477      Sequence
-0:477        move second child to first child (temp 3X2 matrix of float)
-0:477          'r11' (temp 3X2 matrix of float)
-0:477          matrix-scale (temp 3X2 matrix of float)
-0:477            'inFM2x3' (in 3X2 matrix of float)
-0:477            'inF0' (in float)
+0:477        move second child to first child (temp 3-component vector of float)
+0:477          'r10' (temp 3-component vector of float)
+0:477          matrix-times-vector (temp 3-component vector of float)
+0:477            'inFM3x2' (in 2X3 matrix of float)
+0:477            'inFV2' (in 2-component vector of float)
 0:478      Sequence
-0:478        move second child to first child (temp 2X3 matrix of float)
-0:478          'r12' (temp 2X3 matrix of float)
-0:478          matrix-scale (temp 2X3 matrix of float)
-0:478            'inFM3x2' (in 2X3 matrix of float)
+0:478        move second child to first child (temp 3X2 matrix of float)
+0:478          'r11' (temp 3X2 matrix of float)
+0:478          matrix-scale (temp 3X2 matrix of float)
+0:478            'inFM2x3' (in 3X2 matrix of float)
 0:478            'inF0' (in float)
 0:479      Sequence
-0:479        move second child to first child (temp 2X2 matrix of float)
-0:479          'r13' (temp 2X2 matrix of float)
-0:479          matrix-multiply (temp 2X2 matrix of float)
-0:479            'inFM2x3' (in 3X2 matrix of float)
+0:479        move second child to first child (temp 2X3 matrix of float)
+0:479          'r12' (temp 2X3 matrix of float)
+0:479          matrix-scale (temp 2X3 matrix of float)
 0:479            'inFM3x2' (in 2X3 matrix of float)
+0:479            'inF0' (in float)
 0:480      Sequence
-0:480        move second child to first child (temp 3X2 matrix of float)
-0:480          'r14' (temp 3X2 matrix of float)
-0:480          matrix-multiply (temp 3X2 matrix of float)
+0:480        move second child to first child (temp 2X2 matrix of float)
+0:480          'r13' (temp 2X2 matrix of float)
+0:480          matrix-multiply (temp 2X2 matrix of float)
 0:480            'inFM2x3' (in 3X2 matrix of float)
-0:480            'inFM3x3' (in 3X3 matrix of float)
+0:480            'inFM3x2' (in 2X3 matrix of float)
 0:481      Sequence
-0:481        move second child to first child (temp 4X2 matrix of float)
-0:481          'r15' (temp 4X2 matrix of float)
-0:481          matrix-multiply (temp 4X2 matrix of float)
+0:481        move second child to first child (temp 3X2 matrix of float)
+0:481          'r14' (temp 3X2 matrix of float)
+0:481          matrix-multiply (temp 3X2 matrix of float)
 0:481            'inFM2x3' (in 3X2 matrix of float)
-0:481            'inFM3x4' (in 4X3 matrix of float)
+0:481            'inFM3x3' (in 3X3 matrix of float)
 0:482      Sequence
-0:482        move second child to first child (temp 4X3 matrix of float)
-0:482          'r16' (temp 4X3 matrix of float)
-0:482          matrix-multiply (temp 4X3 matrix of float)
-0:482            'inFM3x2' (in 2X3 matrix of float)
-0:482            'inFM2x4' (in 4X2 matrix of float)
+0:482        move second child to first child (temp 4X2 matrix of float)
+0:482          'r15' (temp 4X2 matrix of float)
+0:482          matrix-multiply (temp 4X2 matrix of float)
+0:482            'inFM2x3' (in 3X2 matrix of float)
+0:482            'inFM3x4' (in 4X3 matrix of float)
+0:483      Sequence
+0:483        move second child to first child (temp 4X3 matrix of float)
+0:483          'r16' (temp 4X3 matrix of float)
+0:483          matrix-multiply (temp 4X3 matrix of float)
+0:483            'inFM3x2' (in 2X3 matrix of float)
+0:483            'inFM2x4' (in 4X2 matrix of float)
 0:?   Linker Objects
 0:?     'gs_ua' (global uint)
 0:?     'gs_ub' (global uint)
@@ -5537,13 +5553,13 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1806
+// Id's are bound by 1812
 
                               Capability Shader
                               Capability DerivativeControl
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 804 831 839 848
+                              EntryPoint Fragment 4  "PixelShaderFunction" 810 837 845 854
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 450
                               Name 4  "PixelShaderFunction"
@@ -5773,297 +5789,298 @@
                               Name 695  "r041"
                               Name 698  "r042"
                               Name 702  "r039a"
-                              Name 707  "r043"
-                              Name 710  "r044"
-                              Name 713  "r045"
-                              Name 717  "r046"
-                              Name 720  "r047"
-                              Name 724  "r048"
-                              Name 728  "r049"
-                              Name 731  "r050"
-                              Name 735  "r051"
-                              Name 738  "r052"
-                              Name 742  "r053"
-                              Name 746  "r054"
-                              Name 750  "r055"
-                              Name 753  "r056"
-                              Name 756  "r057"
-                              Name 759  "r058"
-                              Name 764  "r059"
-                              Name 767  "r060"
-                              Name 774  "r061"
-                              Name 777  "r062"
-                              Name 782  "r063"
-                              Name 785  "r064"
-                              Name 789  "r065"
-                              Name 792  "r066"
-                              Name 795  "r067"
-                              Name 802  "r000"
-                              Name 804  "inF0"
-                              Name 807  "r001"
-                              Name 810  "r002"
-                              Name 813  "r003"
-                              Name 816  "r004"
-                              Name 821  "r005"
-                              Name 826  "r006"
-                              Name 829  "r007"
-                              Name 831  "inU0"
-                              Name 834  "r009"
-                              Name 837  "r010"
-                              Name 839  "inF1"
-                              Name 842  "r011"
-                              Name 845  "r012"
-                              Name 848  "inF2"
-                              Name 859  "r013"
-                              Name 862  "r014"
-                              Name 865  "r015"
-                              Name 868  "r016"
-                              Name 871  "r017"
-                              Name 874  "r018"
-                              Name 877  "r019"
-                              Name 880  "r020"
-                              Name 883  "r021"
-                              Name 886  "r022"
-                              Name 889  "r023"
-                              Name 893  "r024"
-                              Name 897  "r025"
-                              Name 909  "r029"
-                              Name 912  "r030"
-                              Name 915  "r031"
-                              Name 920  "r032"
-                              Name 925  "r033"
-                              Name 927  "r034"
-                              Name 930  "r036"
-                              Name 934  "r037"
-                              Name 937  "r038"
-                              Name 939  "ResType"
-                              Name 943  "r039"
-                              Name 947  "r040"
-                              Name 950  "r041"
-                              Name 953  "r042"
-                              Name 957  "r039a"
-                              Name 962  "r043"
-                              Name 965  "r044"
-                              Name 968  "r045"
-                              Name 972  "r046"
-                              Name 975  "r047"
-                              Name 979  "r048"
-                              Name 983  "r049"
-                              Name 986  "r050"
-                              Name 990  "r051"
-                              Name 993  "r052"
-                              Name 997  "r053"
-                              Name 1001  "r054"
-                              Name 1005  "r055"
-                              Name 1008  "r056"
-                              Name 1011  "r057"
-                              Name 1014  "r058"
-                              Name 1019  "r059"
-                              Name 1022  "r060"
-                              Name 1029  "r061"
-                              Name 1032  "r062"
-                              Name 1037  "r063"
-                              Name 1040  "r064"
-                              Name 1044  "r065"
-                              Name 1047  "r066"
-                              Name 1050  "r067"
-                              Name 1056  "r000"
-                              Name 1059  "r001"
-                              Name 1064  "r003"
-                              Name 1067  "r004"
-                              Name 1070  "r005"
-                              Name 1073  "r006"
-                              Name 1077  "r007"
-                              Name 1088  "r008"
-                              Name 1093  "r009"
-                              Name 1096  "r010"
-                              Name 1099  "r011"
-                              Name 1102  "r012"
-                              Name 1105  "r013"
-                              Name 1108  "r014"
-                              Name 1111  "r015"
-                              Name 1114  "r016"
-                              Name 1117  "r017"
-                              Name 1120  "r018"
-                              Name 1123  "r019"
-                              Name 1126  "R020"
-                              Name 1129  "r021"
-                              Name 1132  "r022"
-                              Name 1142  "r023"
-                              Name 1145  "r024"
-                              Name 1147  "ResType"
-                              Name 1151  "r025"
-                              Name 1154  "r026"
-                              Name 1158  "r026a"
-                              Name 1163  "r027"
-                              Name 1166  "r028"
-                              Name 1170  "r029"
-                              Name 1173  "r030"
-                              Name 1177  "r031"
-                              Name 1181  "r032"
-                              Name 1185  "r033"
-                              Name 1188  "r034"
-                              Name 1191  "r035"
-                              Name 1194  "r036"
-                              Name 1199  "r037"
-                              Name 1202  "r038"
-                              Name 1209  "r039"
-                              Name 1212  "r049"
-                              Name 1217  "r041"
-                              Name 1220  "r042"
-                              Name 1224  "r043"
-                              Name 1227  "r044"
-                              Name 1232  "r046"
-                              Name 1239  "r000"
-                              Name 1242  "r001"
-                              Name 1247  "r003"
-                              Name 1250  "r004"
-                              Name 1253  "r005"
-                              Name 1256  "r006"
-                              Name 1260  "r007"
-                              Name 1271  "r008"
-                              Name 1276  "r009"
-                              Name 1279  "r010"
-                              Name 1282  "r011"
-                              Name 1285  "r012"
-                              Name 1288  "r013"
-                              Name 1291  "r014"
-                              Name 1294  "r015"
-                              Name 1297  "r016"
-                              Name 1300  "r017"
-                              Name 1303  "r018"
-                              Name 1306  "r019"
-                              Name 1309  "R020"
-                              Name 1312  "r021"
-                              Name 1315  "r022"
-                              Name 1328  "r023"
-                              Name 1331  "r024"
-                              Name 1333  "ResType"
-                              Name 1337  "r025"
-                              Name 1340  "r026"
-                              Name 1344  "r026a"
-                              Name 1349  "r027"
-                              Name 1352  "r028"
-                              Name 1356  "r029"
-                              Name 1359  "r030"
-                              Name 1363  "r031"
-                              Name 1367  "r032"
-                              Name 1371  "r033"
-                              Name 1374  "r034"
-                              Name 1377  "r035"
-                              Name 1380  "r036"
-                              Name 1385  "r037"
-                              Name 1388  "r038"
-                              Name 1395  "r039"
-                              Name 1398  "r049"
-                              Name 1403  "r041"
-                              Name 1406  "r042"
-                              Name 1410  "r043"
-                              Name 1413  "r044"
-                              Name 1418  "r046"
-                              Name 1425  "r000"
-                              Name 1428  "r001"
-                              Name 1433  "r003"
-                              Name 1436  "r004"
-                              Name 1439  "r005"
-                              Name 1442  "r006"
-                              Name 1446  "r007"
-                              Name 1457  "r008"
-                              Name 1462  "r009"
-                              Name 1465  "r010"
-                              Name 1468  "r011"
-                              Name 1471  "r012"
-                              Name 1474  "r013"
-                              Name 1477  "r014"
-                              Name 1480  "r015"
-                              Name 1483  "r016"
-                              Name 1486  "r017"
-                              Name 1489  "r018"
-                              Name 1492  "r019"
-                              Name 1495  "R020"
-                              Name 1498  "r021"
-                              Name 1501  "r022"
-                              Name 1517  "r023"
-                              Name 1520  "r024"
-                              Name 1522  "ResType"
-                              Name 1526  "r025"
-                              Name 1529  "r026"
-                              Name 1533  "r026a"
-                              Name 1538  "r027"
-                              Name 1541  "r028"
-                              Name 1545  "r029"
-                              Name 1548  "r030"
-                              Name 1552  "r031"
-                              Name 1556  "r032"
-                              Name 1560  "r033"
-                              Name 1563  "r034"
-                              Name 1566  "r035"
-                              Name 1569  "r036"
-                              Name 1574  "r037"
-                              Name 1577  "r038"
-                              Name 1584  "r039"
-                              Name 1587  "r049"
-                              Name 1592  "r041"
-                              Name 1595  "r042"
-                              Name 1599  "r043"
-                              Name 1602  "r044"
-                              Name 1607  "r046"
-                              Name 1614  "r0"
-                              Name 1618  "r1"
-                              Name 1622  "r2"
-                              Name 1626  "r3"
-                              Name 1630  "r4"
-                              Name 1634  "r5"
-                              Name 1638  "r6"
-                              Name 1642  "r7"
-                              Name 1646  "r8"
-                              Name 1650  "r0"
-                              Name 1654  "r1"
-                              Name 1658  "r2"
-                              Name 1662  "r3"
-                              Name 1666  "r4"
-                              Name 1670  "r5"
-                              Name 1674  "r6"
-                              Name 1678  "r7"
-                              Name 1682  "r8"
-                              Name 1686  "r0"
-                              Name 1690  "r1"
-                              Name 1694  "r2"
-                              Name 1698  "r3"
-                              Name 1702  "r4"
-                              Name 1706  "r5"
-                              Name 1710  "r6"
-                              Name 1714  "r7"
-                              Name 1718  "r8"
-                              Name 1722  "r00"
-                              Name 1726  "r01"
-                              Name 1730  "r02"
-                              Name 1734  "r03"
-                              Name 1738  "r04"
-                              Name 1742  "r05"
-                              Name 1746  "r06"
-                              Name 1750  "r07"
-                              Name 1754  "r08"
-                              Name 1758  "r09"
-                              Name 1762  "r10"
-                              Name 1766  "r11"
-                              Name 1770  "r12"
-                              Name 1774  "r13"
-                              Name 1778  "r14"
-                              Name 1782  "r15"
-                              Name 1786  "r16"
-                              Name 1791  "gs_ua"
-                              Name 1792  "gs_ub"
-                              Name 1793  "gs_uc"
-                              Name 1795  "gs_ua2"
-                              Name 1796  "gs_ub2"
-                              Name 1797  "gs_uc2"
-                              Name 1799  "gs_ua3"
-                              Name 1800  "gs_ub3"
-                              Name 1801  "gs_uc3"
-                              Name 1803  "gs_ua4"
-                              Name 1804  "gs_ub4"
-                              Name 1805  "gs_uc4"
+                              Name 707  "r039b"
+                              Name 713  "r043"
+                              Name 716  "r044"
+                              Name 719  "r045"
+                              Name 723  "r046"
+                              Name 726  "r047"
+                              Name 730  "r048"
+                              Name 734  "r049"
+                              Name 737  "r050"
+                              Name 741  "r051"
+                              Name 744  "r052"
+                              Name 748  "r053"
+                              Name 752  "r054"
+                              Name 756  "r055"
+                              Name 759  "r056"
+                              Name 762  "r057"
+                              Name 765  "r058"
+                              Name 770  "r059"
+                              Name 773  "r060"
+                              Name 780  "r061"
+                              Name 783  "r062"
+                              Name 788  "r063"
+                              Name 791  "r064"
+                              Name 795  "r065"
+                              Name 798  "r066"
+                              Name 801  "r067"
+                              Name 808  "r000"
+                              Name 810  "inF0"
+                              Name 813  "r001"
+                              Name 816  "r002"
+                              Name 819  "r003"
+                              Name 822  "r004"
+                              Name 827  "r005"
+                              Name 832  "r006"
+                              Name 835  "r007"
+                              Name 837  "inU0"
+                              Name 840  "r009"
+                              Name 843  "r010"
+                              Name 845  "inF1"
+                              Name 848  "r011"
+                              Name 851  "r012"
+                              Name 854  "inF2"
+                              Name 865  "r013"
+                              Name 868  "r014"
+                              Name 871  "r015"
+                              Name 874  "r016"
+                              Name 877  "r017"
+                              Name 880  "r018"
+                              Name 883  "r019"
+                              Name 886  "r020"
+                              Name 889  "r021"
+                              Name 892  "r022"
+                              Name 895  "r023"
+                              Name 899  "r024"
+                              Name 903  "r025"
+                              Name 915  "r029"
+                              Name 918  "r030"
+                              Name 921  "r031"
+                              Name 926  "r032"
+                              Name 931  "r033"
+                              Name 933  "r034"
+                              Name 936  "r036"
+                              Name 940  "r037"
+                              Name 943  "r038"
+                              Name 945  "ResType"
+                              Name 949  "r039"
+                              Name 953  "r040"
+                              Name 956  "r041"
+                              Name 959  "r042"
+                              Name 963  "r039a"
+                              Name 968  "r043"
+                              Name 971  "r044"
+                              Name 974  "r045"
+                              Name 978  "r046"
+                              Name 981  "r047"
+                              Name 985  "r048"
+                              Name 989  "r049"
+                              Name 992  "r050"
+                              Name 996  "r051"
+                              Name 999  "r052"
+                              Name 1003  "r053"
+                              Name 1007  "r054"
+                              Name 1011  "r055"
+                              Name 1014  "r056"
+                              Name 1017  "r057"
+                              Name 1020  "r058"
+                              Name 1025  "r059"
+                              Name 1028  "r060"
+                              Name 1035  "r061"
+                              Name 1038  "r062"
+                              Name 1043  "r063"
+                              Name 1046  "r064"
+                              Name 1050  "r065"
+                              Name 1053  "r066"
+                              Name 1056  "r067"
+                              Name 1062  "r000"
+                              Name 1065  "r001"
+                              Name 1070  "r003"
+                              Name 1073  "r004"
+                              Name 1076  "r005"
+                              Name 1079  "r006"
+                              Name 1083  "r007"
+                              Name 1094  "r008"
+                              Name 1099  "r009"
+                              Name 1102  "r010"
+                              Name 1105  "r011"
+                              Name 1108  "r012"
+                              Name 1111  "r013"
+                              Name 1114  "r014"
+                              Name 1117  "r015"
+                              Name 1120  "r016"
+                              Name 1123  "r017"
+                              Name 1126  "r018"
+                              Name 1129  "r019"
+                              Name 1132  "R020"
+                              Name 1135  "r021"
+                              Name 1138  "r022"
+                              Name 1148  "r023"
+                              Name 1151  "r024"
+                              Name 1153  "ResType"
+                              Name 1157  "r025"
+                              Name 1160  "r026"
+                              Name 1164  "r026a"
+                              Name 1169  "r027"
+                              Name 1172  "r028"
+                              Name 1176  "r029"
+                              Name 1179  "r030"
+                              Name 1183  "r031"
+                              Name 1187  "r032"
+                              Name 1191  "r033"
+                              Name 1194  "r034"
+                              Name 1197  "r035"
+                              Name 1200  "r036"
+                              Name 1205  "r037"
+                              Name 1208  "r038"
+                              Name 1215  "r039"
+                              Name 1218  "r049"
+                              Name 1223  "r041"
+                              Name 1226  "r042"
+                              Name 1230  "r043"
+                              Name 1233  "r044"
+                              Name 1238  "r046"
+                              Name 1245  "r000"
+                              Name 1248  "r001"
+                              Name 1253  "r003"
+                              Name 1256  "r004"
+                              Name 1259  "r005"
+                              Name 1262  "r006"
+                              Name 1266  "r007"
+                              Name 1277  "r008"
+                              Name 1282  "r009"
+                              Name 1285  "r010"
+                              Name 1288  "r011"
+                              Name 1291  "r012"
+                              Name 1294  "r013"
+                              Name 1297  "r014"
+                              Name 1300  "r015"
+                              Name 1303  "r016"
+                              Name 1306  "r017"
+                              Name 1309  "r018"
+                              Name 1312  "r019"
+                              Name 1315  "R020"
+                              Name 1318  "r021"
+                              Name 1321  "r022"
+                              Name 1334  "r023"
+                              Name 1337  "r024"
+                              Name 1339  "ResType"
+                              Name 1343  "r025"
+                              Name 1346  "r026"
+                              Name 1350  "r026a"
+                              Name 1355  "r027"
+                              Name 1358  "r028"
+                              Name 1362  "r029"
+                              Name 1365  "r030"
+                              Name 1369  "r031"
+                              Name 1373  "r032"
+                              Name 1377  "r033"
+                              Name 1380  "r034"
+                              Name 1383  "r035"
+                              Name 1386  "r036"
+                              Name 1391  "r037"
+                              Name 1394  "r038"
+                              Name 1401  "r039"
+                              Name 1404  "r049"
+                              Name 1409  "r041"
+                              Name 1412  "r042"
+                              Name 1416  "r043"
+                              Name 1419  "r044"
+                              Name 1424  "r046"
+                              Name 1431  "r000"
+                              Name 1434  "r001"
+                              Name 1439  "r003"
+                              Name 1442  "r004"
+                              Name 1445  "r005"
+                              Name 1448  "r006"
+                              Name 1452  "r007"
+                              Name 1463  "r008"
+                              Name 1468  "r009"
+                              Name 1471  "r010"
+                              Name 1474  "r011"
+                              Name 1477  "r012"
+                              Name 1480  "r013"
+                              Name 1483  "r014"
+                              Name 1486  "r015"
+                              Name 1489  "r016"
+                              Name 1492  "r017"
+                              Name 1495  "r018"
+                              Name 1498  "r019"
+                              Name 1501  "R020"
+                              Name 1504  "r021"
+                              Name 1507  "r022"
+                              Name 1523  "r023"
+                              Name 1526  "r024"
+                              Name 1528  "ResType"
+                              Name 1532  "r025"
+                              Name 1535  "r026"
+                              Name 1539  "r026a"
+                              Name 1544  "r027"
+                              Name 1547  "r028"
+                              Name 1551  "r029"
+                              Name 1554  "r030"
+                              Name 1558  "r031"
+                              Name 1562  "r032"
+                              Name 1566  "r033"
+                              Name 1569  "r034"
+                              Name 1572  "r035"
+                              Name 1575  "r036"
+                              Name 1580  "r037"
+                              Name 1583  "r038"
+                              Name 1590  "r039"
+                              Name 1593  "r049"
+                              Name 1598  "r041"
+                              Name 1601  "r042"
+                              Name 1605  "r043"
+                              Name 1608  "r044"
+                              Name 1613  "r046"
+                              Name 1620  "r0"
+                              Name 1624  "r1"
+                              Name 1628  "r2"
+                              Name 1632  "r3"
+                              Name 1636  "r4"
+                              Name 1640  "r5"
+                              Name 1644  "r6"
+                              Name 1648  "r7"
+                              Name 1652  "r8"
+                              Name 1656  "r0"
+                              Name 1660  "r1"
+                              Name 1664  "r2"
+                              Name 1668  "r3"
+                              Name 1672  "r4"
+                              Name 1676  "r5"
+                              Name 1680  "r6"
+                              Name 1684  "r7"
+                              Name 1688  "r8"
+                              Name 1692  "r0"
+                              Name 1696  "r1"
+                              Name 1700  "r2"
+                              Name 1704  "r3"
+                              Name 1708  "r4"
+                              Name 1712  "r5"
+                              Name 1716  "r6"
+                              Name 1720  "r7"
+                              Name 1724  "r8"
+                              Name 1728  "r00"
+                              Name 1732  "r01"
+                              Name 1736  "r02"
+                              Name 1740  "r03"
+                              Name 1744  "r04"
+                              Name 1748  "r05"
+                              Name 1752  "r06"
+                              Name 1756  "r07"
+                              Name 1760  "r08"
+                              Name 1764  "r09"
+                              Name 1768  "r10"
+                              Name 1772  "r11"
+                              Name 1776  "r12"
+                              Name 1780  "r13"
+                              Name 1784  "r14"
+                              Name 1788  "r15"
+                              Name 1792  "r16"
+                              Name 1797  "gs_ua"
+                              Name 1798  "gs_ub"
+                              Name 1799  "gs_uc"
+                              Name 1801  "gs_ua2"
+                              Name 1802  "gs_ub2"
+                              Name 1803  "gs_uc2"
+                              Name 1805  "gs_ua3"
+                              Name 1806  "gs_ub3"
+                              Name 1807  "gs_uc3"
+                              Name 1809  "gs_ua4"
+                              Name 1810  "gs_ub4"
+                              Name 1811  "gs_uc4"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -6140,365 +6157,366 @@
              668:   38(ivec3) ConstantComposite 278 383 667
     684(ResType):             TypeStruct 36(fvec3) 578(ivec3)
              691:             TypePointer Function 606(bvec3)
-             751:   38(ivec3) ConstantComposite 512 278 383
-             798:    6(float) Constant 1077936128
-             799:   36(fvec3) ConstantComposite 274 509 798
-             803:             TypePointer Input 64(fvec4)
-       804(inF0):    803(ptr) Variable Input
-             819:             TypeVector 138(int) 4
-             820:             TypePointer Function 819(ivec4)
-             824:             TypeVector 8(int) 4
-             825:             TypePointer Function 824(ivec4)
-             830:             TypePointer Input 824(ivec4)
-       831(inU0):    830(ptr) Variable Input
-       839(inF1):    803(ptr) Variable Input
-       848(inF2):    803(ptr) Variable Input
-             852:   64(fvec4) ConstantComposite 165 165 165 165
-             853:             TypeVector 121(bool) 4
-             866:  824(ivec4) ConstantComposite 177 383 619 278
-             898:             TypePointer Input 6(float)
-             921:      8(int) Constant 9
-             922:      8(int) Constant 10
-             923:  824(ivec4) ConstantComposite 177 427 921 922
-    939(ResType):             TypeStruct 64(fvec4) 819(ivec4)
-             946:             TypePointer Function 853(bvec4)
-            1006:  824(ivec4) ConstantComposite 512 278 383 667
-            1053:    6(float) Constant 1082130432
-            1054:   64(fvec4) ConstantComposite 274 509 798 1053
-            1081:          48 ConstantComposite 369 369
-            1082:             TypeMatrix 370(bvec2) 2
-   1147(ResType):             TypeStruct 48 342(ivec2)
-            1235:   24(fvec2) ConstantComposite 509 509
-            1236:          48 ConstantComposite 1235 1235
-            1264:          56 ConstantComposite 605 605 605
-            1265:             TypeMatrix 606(bvec3) 3
-   1333(ResType):             TypeStruct 56 578(ivec3)
-            1421:   36(fvec3) ConstantComposite 798 798 798
-            1422:          56 ConstantComposite 1421 1421 1421
-            1450:          65 ConstantComposite 852 852 852 852
-            1451:             TypeMatrix 853(bvec4) 4
-   1522(ResType):             TypeStruct 65 819(ivec4)
-            1610:   64(fvec4) ConstantComposite 1053 1053 1053 1053
-            1611:          65 ConstantComposite 1610 1610 1610 1610
-            1790:             TypePointer Private 8(int)
-     1791(gs_ua):   1790(ptr) Variable Private
-     1792(gs_ub):   1790(ptr) Variable Private
-     1793(gs_uc):   1790(ptr) Variable Private
-            1794:             TypePointer Private 26(ivec2)
-    1795(gs_ua2):   1794(ptr) Variable Private
-    1796(gs_ub2):   1794(ptr) Variable Private
-    1797(gs_uc2):   1794(ptr) Variable Private
-            1798:             TypePointer Private 38(ivec3)
-    1799(gs_ua3):   1798(ptr) Variable Private
-    1800(gs_ub3):   1798(ptr) Variable Private
-    1801(gs_uc3):   1798(ptr) Variable Private
-            1802:             TypePointer Private 824(ivec4)
-    1803(gs_ua4):   1802(ptr) Variable Private
-    1804(gs_ub4):   1802(ptr) Variable Private
-    1805(gs_uc4):   1802(ptr) Variable Private
+             710:    6(float) Constant 1050253722
+             757:   38(ivec3) ConstantComposite 512 278 383
+             804:    6(float) Constant 1077936128
+             805:   36(fvec3) ConstantComposite 274 509 804
+             809:             TypePointer Input 64(fvec4)
+       810(inF0):    809(ptr) Variable Input
+             825:             TypeVector 138(int) 4
+             826:             TypePointer Function 825(ivec4)
+             830:             TypeVector 8(int) 4
+             831:             TypePointer Function 830(ivec4)
+             836:             TypePointer Input 830(ivec4)
+       837(inU0):    836(ptr) Variable Input
+       845(inF1):    809(ptr) Variable Input
+       854(inF2):    809(ptr) Variable Input
+             858:   64(fvec4) ConstantComposite 165 165 165 165
+             859:             TypeVector 121(bool) 4
+             872:  830(ivec4) ConstantComposite 177 383 619 278
+             904:             TypePointer Input 6(float)
+             927:      8(int) Constant 9
+             928:      8(int) Constant 10
+             929:  830(ivec4) ConstantComposite 177 427 927 928
+    945(ResType):             TypeStruct 64(fvec4) 825(ivec4)
+             952:             TypePointer Function 859(bvec4)
+            1012:  830(ivec4) ConstantComposite 512 278 383 667
+            1059:    6(float) Constant 1082130432
+            1060:   64(fvec4) ConstantComposite 274 509 804 1059
+            1087:          48 ConstantComposite 369 369
+            1088:             TypeMatrix 370(bvec2) 2
+   1153(ResType):             TypeStruct 48 342(ivec2)
+            1241:   24(fvec2) ConstantComposite 509 509
+            1242:          48 ConstantComposite 1241 1241
+            1270:          56 ConstantComposite 605 605 605
+            1271:             TypeMatrix 606(bvec3) 3
+   1339(ResType):             TypeStruct 56 578(ivec3)
+            1427:   36(fvec3) ConstantComposite 804 804 804
+            1428:          56 ConstantComposite 1427 1427 1427
+            1456:          65 ConstantComposite 858 858 858 858
+            1457:             TypeMatrix 859(bvec4) 4
+   1528(ResType):             TypeStruct 65 825(ivec4)
+            1616:   64(fvec4) ConstantComposite 1059 1059 1059 1059
+            1617:          65 ConstantComposite 1616 1616 1616 1616
+            1796:             TypePointer Private 8(int)
+     1797(gs_ua):   1796(ptr) Variable Private
+     1798(gs_ub):   1796(ptr) Variable Private
+     1799(gs_uc):   1796(ptr) Variable Private
+            1800:             TypePointer Private 26(ivec2)
+    1801(gs_ua2):   1800(ptr) Variable Private
+    1802(gs_ub2):   1800(ptr) Variable Private
+    1803(gs_uc2):   1800(ptr) Variable Private
+            1804:             TypePointer Private 38(ivec3)
+    1805(gs_ua3):   1804(ptr) Variable Private
+    1806(gs_ub3):   1804(ptr) Variable Private
+    1807(gs_uc3):   1804(ptr) Variable Private
+            1808:             TypePointer Private 830(ivec4)
+    1809(gs_ua4):   1808(ptr) Variable Private
+    1810(gs_ub4):   1808(ptr) Variable Private
+    1811(gs_uc4):   1808(ptr) Variable Private
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       802(r000):    122(ptr) Variable Function
-       807(r001):     91(ptr) Variable Function
-       810(r002):     91(ptr) Variable Function
-       813(r003):    122(ptr) Variable Function
-       816(r004):     91(ptr) Variable Function
-       821(r005):    820(ptr) Variable Function
-       826(r006):    825(ptr) Variable Function
-       829(r007):     91(ptr) Variable Function
-       834(r009):     91(ptr) Variable Function
-       837(r010):     91(ptr) Variable Function
-       842(r011):     91(ptr) Variable Function
-       845(r012):     91(ptr) Variable Function
-       859(r013):     91(ptr) Variable Function
-       862(r014):     91(ptr) Variable Function
-       865(r015):    825(ptr) Variable Function
-       868(r016):     91(ptr) Variable Function
-       871(r017):     91(ptr) Variable Function
-       874(r018):     91(ptr) Variable Function
-       877(r019):     91(ptr) Variable Function
-       880(r020):     91(ptr) Variable Function
-       883(r021):     91(ptr) Variable Function
-       886(r022):     91(ptr) Variable Function
-       889(r023):      7(ptr) Variable Function
-       893(r024):      7(ptr) Variable Function
-       897(r025):     91(ptr) Variable Function
-       909(r029):     91(ptr) Variable Function
-       912(r030):     91(ptr) Variable Function
-       915(r031):     91(ptr) Variable Function
-       920(r032):    825(ptr) Variable Function
-       925(r033):    825(ptr) Variable Function
-       927(r034):     91(ptr) Variable Function
-       930(r036):     91(ptr) Variable Function
-       934(r037):     91(ptr) Variable Function
-       937(r038):     91(ptr) Variable Function
-       943(r039):     91(ptr) Variable Function
-       947(r040):    946(ptr) Variable Function
-       950(r041):    946(ptr) Variable Function
-       953(r042):     91(ptr) Variable Function
-      957(r039a):     91(ptr) Variable Function
-       962(r043):      7(ptr) Variable Function
-       965(r044):     91(ptr) Variable Function
-       968(r045):     91(ptr) Variable Function
-       972(r046):     91(ptr) Variable Function
-       975(r047):     91(ptr) Variable Function
-       979(r048):     91(ptr) Variable Function
-       983(r049):     91(ptr) Variable Function
-       986(r050):     91(ptr) Variable Function
-       990(r051):     91(ptr) Variable Function
-       993(r052):     91(ptr) Variable Function
-       997(r053):     91(ptr) Variable Function
-      1001(r054):     91(ptr) Variable Function
-      1005(r055):    825(ptr) Variable Function
-      1008(r056):     91(ptr) Variable Function
-      1011(r057):     91(ptr) Variable Function
-      1014(r058):     91(ptr) Variable Function
-      1019(r059):     91(ptr) Variable Function
-      1022(r060):     91(ptr) Variable Function
-      1029(r061):     91(ptr) Variable Function
-      1032(r062):     91(ptr) Variable Function
-      1037(r063):     91(ptr) Variable Function
-      1040(r064):     91(ptr) Variable Function
-      1044(r065):     91(ptr) Variable Function
-      1047(r066):     91(ptr) Variable Function
-      1050(r067):     91(ptr) Variable Function
-             805:   64(fvec4) Load 804(inF0)
-             806:   121(bool) All 805
-                              Store 802(r000) 806
-             808:   64(fvec4) Load 804(inF0)
-             809:   64(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 808
-                              Store 807(r001) 809
-             811:   64(fvec4) Load 804(inF0)
-             812:   64(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 811
-                              Store 810(r002) 812
-             814:   64(fvec4) Load 804(inF0)
-             815:   121(bool) Any 814
-                              Store 813(r003) 815
-             817:   64(fvec4) Load 804(inF0)
-             818:   64(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 817
-                              Store 816(r004) 818
-             822:   64(fvec4) Load 804(inF0)
-             823:  819(ivec4) Bitcast 822
-                              Store 821(r005) 823
-             827:   64(fvec4) Load 804(inF0)
-             828:  824(ivec4) Bitcast 827
-                              Store 826(r006) 828
-             832:  824(ivec4) Load 831(inU0)
-             833:   64(fvec4) Bitcast 832
-                              Store 829(r007) 833
-             835:   64(fvec4) Load 804(inF0)
-             836:   64(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 835
-                              Store 834(r009) 836
-             838:   64(fvec4) Load 804(inF0)
-             840:   64(fvec4) Load 839(inF1)
-             841:   64(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 838 840
-                              Store 837(r010) 841
-             843:   64(fvec4) Load 804(inF0)
-             844:   64(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 843
-                              Store 842(r011) 844
-             846:   64(fvec4) Load 804(inF0)
-             847:   64(fvec4) Load 839(inF1)
-             849:   64(fvec4) Load 848(inF2)
-             850:   64(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 846 847 849
-                              Store 845(r012) 850
-             851:   64(fvec4) Load 804(inF0)
-             854:  853(bvec4) FOrdLessThan 851 852
-             855:   121(bool) Any 854
-                              SelectionMerge 857 None
-                              BranchConditional 855 856 857
-             856:               Label
+       808(r000):    122(ptr) Variable Function
+       813(r001):     91(ptr) Variable Function
+       816(r002):     91(ptr) Variable Function
+       819(r003):    122(ptr) Variable Function
+       822(r004):     91(ptr) Variable Function
+       827(r005):    826(ptr) Variable Function
+       832(r006):    831(ptr) Variable Function
+       835(r007):     91(ptr) Variable Function
+       840(r009):     91(ptr) Variable Function
+       843(r010):     91(ptr) Variable Function
+       848(r011):     91(ptr) Variable Function
+       851(r012):     91(ptr) Variable Function
+       865(r013):     91(ptr) Variable Function
+       868(r014):     91(ptr) Variable Function
+       871(r015):    831(ptr) Variable Function
+       874(r016):     91(ptr) Variable Function
+       877(r017):     91(ptr) Variable Function
+       880(r018):     91(ptr) Variable Function
+       883(r019):     91(ptr) Variable Function
+       886(r020):     91(ptr) Variable Function
+       889(r021):     91(ptr) Variable Function
+       892(r022):     91(ptr) Variable Function
+       895(r023):      7(ptr) Variable Function
+       899(r024):      7(ptr) Variable Function
+       903(r025):     91(ptr) Variable Function
+       915(r029):     91(ptr) Variable Function
+       918(r030):     91(ptr) Variable Function
+       921(r031):     91(ptr) Variable Function
+       926(r032):    831(ptr) Variable Function
+       931(r033):    831(ptr) Variable Function
+       933(r034):     91(ptr) Variable Function
+       936(r036):     91(ptr) Variable Function
+       940(r037):     91(ptr) Variable Function
+       943(r038):     91(ptr) Variable Function
+       949(r039):     91(ptr) Variable Function
+       953(r040):    952(ptr) Variable Function
+       956(r041):    952(ptr) Variable Function
+       959(r042):     91(ptr) Variable Function
+      963(r039a):     91(ptr) Variable Function
+       968(r043):      7(ptr) Variable Function
+       971(r044):     91(ptr) Variable Function
+       974(r045):     91(ptr) Variable Function
+       978(r046):     91(ptr) Variable Function
+       981(r047):     91(ptr) Variable Function
+       985(r048):     91(ptr) Variable Function
+       989(r049):     91(ptr) Variable Function
+       992(r050):     91(ptr) Variable Function
+       996(r051):     91(ptr) Variable Function
+       999(r052):     91(ptr) Variable Function
+      1003(r053):     91(ptr) Variable Function
+      1007(r054):     91(ptr) Variable Function
+      1011(r055):    831(ptr) Variable Function
+      1014(r056):     91(ptr) Variable Function
+      1017(r057):     91(ptr) Variable Function
+      1020(r058):     91(ptr) Variable Function
+      1025(r059):     91(ptr) Variable Function
+      1028(r060):     91(ptr) Variable Function
+      1035(r061):     91(ptr) Variable Function
+      1038(r062):     91(ptr) Variable Function
+      1043(r063):     91(ptr) Variable Function
+      1046(r064):     91(ptr) Variable Function
+      1050(r065):     91(ptr) Variable Function
+      1053(r066):     91(ptr) Variable Function
+      1056(r067):     91(ptr) Variable Function
+             811:   64(fvec4) Load 810(inF0)
+             812:   121(bool) All 811
+                              Store 808(r000) 812
+             814:   64(fvec4) Load 810(inF0)
+             815:   64(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 814
+                              Store 813(r001) 815
+             817:   64(fvec4) Load 810(inF0)
+             818:   64(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 817
+                              Store 816(r002) 818
+             820:   64(fvec4) Load 810(inF0)
+             821:   121(bool) Any 820
+                              Store 819(r003) 821
+             823:   64(fvec4) Load 810(inF0)
+             824:   64(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 823
+                              Store 822(r004) 824
+             828:   64(fvec4) Load 810(inF0)
+             829:  825(ivec4) Bitcast 828
+                              Store 827(r005) 829
+             833:   64(fvec4) Load 810(inF0)
+             834:  830(ivec4) Bitcast 833
+                              Store 832(r006) 834
+             838:  830(ivec4) Load 837(inU0)
+             839:   64(fvec4) Bitcast 838
+                              Store 835(r007) 839
+             841:   64(fvec4) Load 810(inF0)
+             842:   64(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 841
+                              Store 840(r009) 842
+             844:   64(fvec4) Load 810(inF0)
+             846:   64(fvec4) Load 845(inF1)
+             847:   64(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 844 846
+                              Store 843(r010) 847
+             849:   64(fvec4) Load 810(inF0)
+             850:   64(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 849
+                              Store 848(r011) 850
+             852:   64(fvec4) Load 810(inF0)
+             853:   64(fvec4) Load 845(inF1)
+             855:   64(fvec4) Load 854(inF2)
+             856:   64(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 852 853 855
+                              Store 851(r012) 856
+             857:   64(fvec4) Load 810(inF0)
+             860:  859(bvec4) FOrdLessThan 857 858
+             861:   121(bool) Any 860
+                              SelectionMerge 863 None
+                              BranchConditional 861 862 863
+             862:               Label
                                 Kill
-             857:             Label
-             860:   64(fvec4) Load 804(inF0)
-             861:   64(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 860
-                              Store 859(r013) 861
-             863:   64(fvec4) Load 804(inF0)
-             864:   64(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 863
-                              Store 862(r014) 864
-             867:  824(ivec4) BitCount 866
-                              Store 865(r015) 867
-             869:   64(fvec4) Load 804(inF0)
-             870:   64(fvec4) DPdx 869
-                              Store 868(r016) 870
-             872:   64(fvec4) Load 804(inF0)
-             873:   64(fvec4) DPdxCoarse 872
-                              Store 871(r017) 873
-             875:   64(fvec4) Load 804(inF0)
-             876:   64(fvec4) DPdxFine 875
-                              Store 874(r018) 876
-             878:   64(fvec4) Load 804(inF0)
-             879:   64(fvec4) DPdy 878
-                              Store 877(r019) 879
-             881:   64(fvec4) Load 804(inF0)
-             882:   64(fvec4) DPdyCoarse 881
-                              Store 880(r020) 882
-             884:   64(fvec4) Load 804(inF0)
-             885:   64(fvec4) DPdyFine 884
-                              Store 883(r021) 885
-             887:   64(fvec4) Load 804(inF0)
-             888:   64(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 887
-                              Store 886(r022) 888
-             890:   64(fvec4) Load 804(inF0)
-             891:   64(fvec4) Load 839(inF1)
-             892:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 890 891
-                              Store 889(r023) 892
-             894:   64(fvec4) Load 804(inF0)
-             895:   64(fvec4) Load 839(inF1)
-             896:    6(float) Dot 894 895
-                              Store 893(r024) 896
-             899:    898(ptr) AccessChain 804(inF0) 512
-             900:    6(float) Load 899
-             901:    898(ptr) AccessChain 839(inF1) 512
-             902:    6(float) Load 901
-             903:    6(float) FMul 900 902
-             904:    898(ptr) AccessChain 804(inF0) 278
-             905:    6(float) Load 904
-             906:    898(ptr) AccessChain 839(inF1) 383
-             907:    6(float) Load 906
-             908:   64(fvec4) CompositeConstruct 274 903 905 907
-                              Store 897(r025) 908
-             910:   64(fvec4) Load 804(inF0)
-             911:   64(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 910
-                              Store 909(r029) 911
-             913:   64(fvec4) Load 804(inF0)
-             914:   64(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 913
-                              Store 912(r030) 914
-             916:   64(fvec4) Load 804(inF0)
-             917:   64(fvec4) Load 839(inF1)
-             918:   64(fvec4) Load 848(inF2)
-             919:   64(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 916 917 918
-                              Store 915(r031) 919
-             924:  824(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 923
-                              Store 920(r032) 924
-             926:  824(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 923
-                              Store 925(r033) 926
-             928:   64(fvec4) Load 804(inF0)
-             929:   64(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 928
-                              Store 927(r034) 929
-             931:   64(fvec4) Load 804(inF0)
-             932:   64(fvec4) Load 839(inF1)
-             933:   64(fvec4) FMod 931 932
-                              Store 930(r036) 933
-             935:   64(fvec4) Load 804(inF0)
-             936:   64(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 935
-                              Store 934(r037) 936
-             938:   64(fvec4) Load 804(inF0)
-             940:939(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 938
-             941:  819(ivec4) CompositeExtract 940 1
-                              Store 839(inF1) 941
-             942:   64(fvec4) CompositeExtract 940 0
-                              Store 937(r038) 942
-             944:   64(fvec4) Load 804(inF0)
-             945:   64(fvec4) Fwidth 944
-                              Store 943(r039) 945
-             948:   64(fvec4) Load 804(inF0)
-             949:  853(bvec4) IsInf 948
-                              Store 947(r040) 949
-             951:   64(fvec4) Load 804(inF0)
-             952:  853(bvec4) IsNan 951
-                              Store 950(r041) 952
-             954:   64(fvec4) Load 804(inF0)
-             955:   64(fvec4) Load 839(inF1)
-             956:   64(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 954 955
-                              Store 953(r042) 956
-             958:   64(fvec4) Load 804(inF0)
-             959:   64(fvec4) Load 839(inF1)
-             960:   64(fvec4) Load 848(inF2)
-             961:   64(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 958 959 960
-                              Store 957(r039a) 961
-             963:   64(fvec4) Load 804(inF0)
-             964:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 963
-                              Store 962(r043) 964
-             966:   64(fvec4) Load 804(inF0)
-             967:   64(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 966
-                              Store 965(r044) 967
-             969:   64(fvec4) Load 804(inF0)
-             970:   64(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 969
-             971:   64(fvec4) VectorTimesScalar 970 253
-                              Store 968(r045) 971
-             973:   64(fvec4) Load 804(inF0)
-             974:   64(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 973
-                              Store 972(r046) 974
-             976:   64(fvec4) Load 804(inF0)
-             977:   64(fvec4) Load 839(inF1)
-             978:   64(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 976 977
-                              Store 975(r047) 978
-             980:   64(fvec4) Load 804(inF0)
-             981:   64(fvec4) Load 839(inF1)
-             982:   64(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 980 981
-                              Store 979(r048) 982
-             984:   64(fvec4) Load 804(inF0)
-             985:   64(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 984
-                              Store 983(r049) 985
-             987:   64(fvec4) Load 804(inF0)
-             988:   64(fvec4) Load 839(inF1)
-             989:   64(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 987 988
-                              Store 986(r050) 989
-             991:   64(fvec4) Load 804(inF0)
-             992:   64(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 991
-                              Store 990(r051) 992
-             994:   64(fvec4) Load 804(inF0)
-             995:   64(fvec4) CompositeConstruct 274 274 274 274
-             996:   64(fvec4) FDiv 995 994
-                              Store 993(r052) 996
-             998:   64(fvec4) Load 804(inF0)
-             999:   64(fvec4) Load 839(inF1)
-            1000:   64(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 998 999
-                              Store 997(r053) 1000
-            1002:   64(fvec4) Load 804(inF0)
-            1003:   64(fvec4) Load 839(inF1)
-            1004:   64(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1002 1003 509
-                              Store 1001(r054) 1004
-            1007:  824(ivec4) BitReverse 1006
-                              Store 1005(r055) 1007
-            1009:   64(fvec4) Load 804(inF0)
-            1010:   64(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1009
-                              Store 1008(r056) 1010
-            1012:   64(fvec4) Load 804(inF0)
-            1013:   64(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1012
-                              Store 1011(r057) 1013
-            1015:   64(fvec4) Load 804(inF0)
-            1016:   64(fvec4) CompositeConstruct 165 165 165 165
-            1017:   64(fvec4) CompositeConstruct 274 274 274 274
-            1018:   64(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1015 1016 1017
-                              Store 1014(r058) 1018
-            1020:   64(fvec4) Load 804(inF0)
-            1021:   64(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1020
-                              Store 1019(r059) 1021
-            1023:   64(fvec4) Load 804(inF0)
-            1024:   64(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1023
-                              Store 1022(r060) 1024
-            1025:   64(fvec4) Load 804(inF0)
-            1026:   64(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1025
-                              Store 839(inF1) 1026
-            1027:   64(fvec4) Load 804(inF0)
-            1028:   64(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1027
-                              Store 848(inF2) 1028
-            1030:   64(fvec4) Load 804(inF0)
-            1031:   64(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1030
-                              Store 1029(r061) 1031
-            1033:   64(fvec4) Load 804(inF0)
-            1034:   64(fvec4) Load 839(inF1)
-            1035:   64(fvec4) Load 848(inF2)
-            1036:   64(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1033 1034 1035
-                              Store 1032(r062) 1036
-            1038:   64(fvec4) Load 804(inF0)
-            1039:   64(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1038
-                              Store 1037(r063) 1039
-            1041:   64(fvec4) Load 804(inF0)
-            1042:   64(fvec4) Load 839(inF1)
-            1043:   64(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1041 1042
-                              Store 1040(r064) 1043
-            1045:   64(fvec4) Load 804(inF0)
-            1046:   64(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1045
-                              Store 1044(r065) 1046
-            1048:   64(fvec4) Load 804(inF0)
-            1049:   64(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1048
-                              Store 1047(r066) 1049
-            1051:   64(fvec4) Load 804(inF0)
-            1052:   64(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1051
-                              Store 1050(r067) 1052
-                              ReturnValue 1054
+             863:             Label
+             866:   64(fvec4) Load 810(inF0)
+             867:   64(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 866
+                              Store 865(r013) 867
+             869:   64(fvec4) Load 810(inF0)
+             870:   64(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 869
+                              Store 868(r014) 870
+             873:  830(ivec4) BitCount 872
+                              Store 871(r015) 873
+             875:   64(fvec4) Load 810(inF0)
+             876:   64(fvec4) DPdx 875
+                              Store 874(r016) 876
+             878:   64(fvec4) Load 810(inF0)
+             879:   64(fvec4) DPdxCoarse 878
+                              Store 877(r017) 879
+             881:   64(fvec4) Load 810(inF0)
+             882:   64(fvec4) DPdxFine 881
+                              Store 880(r018) 882
+             884:   64(fvec4) Load 810(inF0)
+             885:   64(fvec4) DPdy 884
+                              Store 883(r019) 885
+             887:   64(fvec4) Load 810(inF0)
+             888:   64(fvec4) DPdyCoarse 887
+                              Store 886(r020) 888
+             890:   64(fvec4) Load 810(inF0)
+             891:   64(fvec4) DPdyFine 890
+                              Store 889(r021) 891
+             893:   64(fvec4) Load 810(inF0)
+             894:   64(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 893
+                              Store 892(r022) 894
+             896:   64(fvec4) Load 810(inF0)
+             897:   64(fvec4) Load 845(inF1)
+             898:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 896 897
+                              Store 895(r023) 898
+             900:   64(fvec4) Load 810(inF0)
+             901:   64(fvec4) Load 845(inF1)
+             902:    6(float) Dot 900 901
+                              Store 899(r024) 902
+             905:    904(ptr) AccessChain 810(inF0) 512
+             906:    6(float) Load 905
+             907:    904(ptr) AccessChain 845(inF1) 512
+             908:    6(float) Load 907
+             909:    6(float) FMul 906 908
+             910:    904(ptr) AccessChain 810(inF0) 278
+             911:    6(float) Load 910
+             912:    904(ptr) AccessChain 845(inF1) 383
+             913:    6(float) Load 912
+             914:   64(fvec4) CompositeConstruct 274 909 911 913
+                              Store 903(r025) 914
+             916:   64(fvec4) Load 810(inF0)
+             917:   64(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 916
+                              Store 915(r029) 917
+             919:   64(fvec4) Load 810(inF0)
+             920:   64(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 919
+                              Store 918(r030) 920
+             922:   64(fvec4) Load 810(inF0)
+             923:   64(fvec4) Load 845(inF1)
+             924:   64(fvec4) Load 854(inF2)
+             925:   64(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 922 923 924
+                              Store 921(r031) 925
+             930:  830(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 929
+                              Store 926(r032) 930
+             932:  830(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 929
+                              Store 931(r033) 932
+             934:   64(fvec4) Load 810(inF0)
+             935:   64(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 934
+                              Store 933(r034) 935
+             937:   64(fvec4) Load 810(inF0)
+             938:   64(fvec4) Load 845(inF1)
+             939:   64(fvec4) FMod 937 938
+                              Store 936(r036) 939
+             941:   64(fvec4) Load 810(inF0)
+             942:   64(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 941
+                              Store 940(r037) 942
+             944:   64(fvec4) Load 810(inF0)
+             946:945(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 944
+             947:  825(ivec4) CompositeExtract 946 1
+                              Store 845(inF1) 947
+             948:   64(fvec4) CompositeExtract 946 0
+                              Store 943(r038) 948
+             950:   64(fvec4) Load 810(inF0)
+             951:   64(fvec4) Fwidth 950
+                              Store 949(r039) 951
+             954:   64(fvec4) Load 810(inF0)
+             955:  859(bvec4) IsInf 954
+                              Store 953(r040) 955
+             957:   64(fvec4) Load 810(inF0)
+             958:  859(bvec4) IsNan 957
+                              Store 956(r041) 958
+             960:   64(fvec4) Load 810(inF0)
+             961:   64(fvec4) Load 845(inF1)
+             962:   64(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 960 961
+                              Store 959(r042) 962
+             964:   64(fvec4) Load 810(inF0)
+             965:   64(fvec4) Load 845(inF1)
+             966:   64(fvec4) Load 854(inF2)
+             967:   64(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 964 965 966
+                              Store 963(r039a) 967
+             969:   64(fvec4) Load 810(inF0)
+             970:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 969
+                              Store 968(r043) 970
+             972:   64(fvec4) Load 810(inF0)
+             973:   64(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 972
+                              Store 971(r044) 973
+             975:   64(fvec4) Load 810(inF0)
+             976:   64(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 975
+             977:   64(fvec4) VectorTimesScalar 976 253
+                              Store 974(r045) 977
+             979:   64(fvec4) Load 810(inF0)
+             980:   64(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 979
+                              Store 978(r046) 980
+             982:   64(fvec4) Load 810(inF0)
+             983:   64(fvec4) Load 845(inF1)
+             984:   64(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 982 983
+                              Store 981(r047) 984
+             986:   64(fvec4) Load 810(inF0)
+             987:   64(fvec4) Load 845(inF1)
+             988:   64(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 986 987
+                              Store 985(r048) 988
+             990:   64(fvec4) Load 810(inF0)
+             991:   64(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 990
+                              Store 989(r049) 991
+             993:   64(fvec4) Load 810(inF0)
+             994:   64(fvec4) Load 845(inF1)
+             995:   64(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 993 994
+                              Store 992(r050) 995
+             997:   64(fvec4) Load 810(inF0)
+             998:   64(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 997
+                              Store 996(r051) 998
+            1000:   64(fvec4) Load 810(inF0)
+            1001:   64(fvec4) CompositeConstruct 274 274 274 274
+            1002:   64(fvec4) FDiv 1001 1000
+                              Store 999(r052) 1002
+            1004:   64(fvec4) Load 810(inF0)
+            1005:   64(fvec4) Load 845(inF1)
+            1006:   64(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1004 1005
+                              Store 1003(r053) 1006
+            1008:   64(fvec4) Load 810(inF0)
+            1009:   64(fvec4) Load 845(inF1)
+            1010:   64(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1008 1009 509
+                              Store 1007(r054) 1010
+            1013:  830(ivec4) BitReverse 1012
+                              Store 1011(r055) 1013
+            1015:   64(fvec4) Load 810(inF0)
+            1016:   64(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1015
+                              Store 1014(r056) 1016
+            1018:   64(fvec4) Load 810(inF0)
+            1019:   64(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1018
+                              Store 1017(r057) 1019
+            1021:   64(fvec4) Load 810(inF0)
+            1022:   64(fvec4) CompositeConstruct 165 165 165 165
+            1023:   64(fvec4) CompositeConstruct 274 274 274 274
+            1024:   64(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1021 1022 1023
+                              Store 1020(r058) 1024
+            1026:   64(fvec4) Load 810(inF0)
+            1027:   64(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1026
+                              Store 1025(r059) 1027
+            1029:   64(fvec4) Load 810(inF0)
+            1030:   64(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1029
+                              Store 1028(r060) 1030
+            1031:   64(fvec4) Load 810(inF0)
+            1032:   64(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1031
+                              Store 845(inF1) 1032
+            1033:   64(fvec4) Load 810(inF0)
+            1034:   64(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1033
+                              Store 854(inF2) 1034
+            1036:   64(fvec4) Load 810(inF0)
+            1037:   64(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1036
+                              Store 1035(r061) 1037
+            1039:   64(fvec4) Load 810(inF0)
+            1040:   64(fvec4) Load 845(inF1)
+            1041:   64(fvec4) Load 854(inF2)
+            1042:   64(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1039 1040 1041
+                              Store 1038(r062) 1042
+            1044:   64(fvec4) Load 810(inF0)
+            1045:   64(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1044
+                              Store 1043(r063) 1045
+            1047:   64(fvec4) Load 810(inF0)
+            1048:   64(fvec4) Load 845(inF1)
+            1049:   64(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1047 1048
+                              Store 1046(r064) 1049
+            1051:   64(fvec4) Load 810(inF0)
+            1052:   64(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1051
+                              Store 1050(r065) 1052
+            1054:   64(fvec4) Load 810(inF0)
+            1055:   64(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1054
+                              Store 1053(r066) 1055
+            1057:   64(fvec4) Load 810(inF0)
+            1058:   64(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1057
+                              Store 1056(r067) 1058
+                              ReturnValue 1060
                               FunctionEnd
 16(PixelShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
         11(inF0):      7(ptr) FunctionParameter
@@ -7111,31 +7129,32 @@
        695(r041):    691(ptr) Variable Function
        698(r042):     37(ptr) Variable Function
       702(r039a):     37(ptr) Variable Function
-       707(r043):      7(ptr) Variable Function
-       710(r044):     37(ptr) Variable Function
-       713(r045):     37(ptr) Variable Function
-       717(r046):     37(ptr) Variable Function
-       720(r047):     37(ptr) Variable Function
-       724(r048):     37(ptr) Variable Function
-       728(r049):     37(ptr) Variable Function
-       731(r050):     37(ptr) Variable Function
-       735(r051):     37(ptr) Variable Function
-       738(r052):     37(ptr) Variable Function
-       742(r053):     37(ptr) Variable Function
-       746(r054):     37(ptr) Variable Function
-       750(r055):     39(ptr) Variable Function
-       753(r056):     37(ptr) Variable Function
-       756(r057):     37(ptr) Variable Function
-       759(r058):     37(ptr) Variable Function
-       764(r059):     37(ptr) Variable Function
-       767(r060):     37(ptr) Variable Function
-       774(r061):     37(ptr) Variable Function
-       777(r062):     37(ptr) Variable Function
-       782(r063):     37(ptr) Variable Function
-       785(r064):     37(ptr) Variable Function
-       789(r065):     37(ptr) Variable Function
-       792(r066):     37(ptr) Variable Function
-       795(r067):     37(ptr) Variable Function
+      707(r039b):     37(ptr) Variable Function
+       713(r043):      7(ptr) Variable Function
+       716(r044):     37(ptr) Variable Function
+       719(r045):     37(ptr) Variable Function
+       723(r046):     37(ptr) Variable Function
+       726(r047):     37(ptr) Variable Function
+       730(r048):     37(ptr) Variable Function
+       734(r049):     37(ptr) Variable Function
+       737(r050):     37(ptr) Variable Function
+       741(r051):     37(ptr) Variable Function
+       744(r052):     37(ptr) Variable Function
+       748(r053):     37(ptr) Variable Function
+       752(r054):     37(ptr) Variable Function
+       756(r055):     39(ptr) Variable Function
+       759(r056):     37(ptr) Variable Function
+       762(r057):     37(ptr) Variable Function
+       765(r058):     37(ptr) Variable Function
+       770(r059):     37(ptr) Variable Function
+       773(r060):     37(ptr) Variable Function
+       780(r061):     37(ptr) Variable Function
+       783(r062):     37(ptr) Variable Function
+       788(r063):     37(ptr) Variable Function
+       791(r064):     37(ptr) Variable Function
+       795(r065):     37(ptr) Variable Function
+       798(r066):     37(ptr) Variable Function
+       801(r067):     37(ptr) Variable Function
              564:   36(fvec3) Load 41(inF0)
              565:   121(bool) All 564
                               Store 563(r000) 565
@@ -7274,809 +7293,814 @@
              706:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 703 704 705
                               Store 702(r039a) 706
              708:   36(fvec3) Load 41(inF0)
-             709:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 708
-                              Store 707(r043) 709
-             711:   36(fvec3) Load 41(inF0)
-             712:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 711
-                              Store 710(r044) 712
+             709:   36(fvec3) Load 42(inF1)
+             711:   36(fvec3) CompositeConstruct 710 710 710
+             712:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 708 709 711
+                              Store 707(r039b) 712
              714:   36(fvec3) Load 41(inF0)
-             715:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 714
-             716:   36(fvec3) VectorTimesScalar 715 253
-                              Store 713(r045) 716
-             718:   36(fvec3) Load 41(inF0)
-             719:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 718
-                              Store 717(r046) 719
-             721:   36(fvec3) Load 41(inF0)
-             722:   36(fvec3) Load 42(inF1)
-             723:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 721 722
-                              Store 720(r047) 723
-             725:   36(fvec3) Load 41(inF0)
-             726:   36(fvec3) Load 42(inF1)
-             727:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 725 726
-                              Store 724(r048) 727
-             729:   36(fvec3) Load 41(inF0)
-             730:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 729
-                              Store 728(r049) 730
-             732:   36(fvec3) Load 41(inF0)
-             733:   36(fvec3) Load 42(inF1)
-             734:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 732 733
-                              Store 731(r050) 734
-             736:   36(fvec3) Load 41(inF0)
-             737:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 736
-                              Store 735(r051) 737
-             739:   36(fvec3) Load 41(inF0)
-             740:   36(fvec3) CompositeConstruct 274 274 274
-             741:   36(fvec3) FDiv 740 739
-                              Store 738(r052) 741
-             743:   36(fvec3) Load 41(inF0)
-             744:   36(fvec3) Load 42(inF1)
-             745:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 743 744
-                              Store 742(r053) 745
-             747:   36(fvec3) Load 41(inF0)
-             748:   36(fvec3) Load 42(inF1)
-             749:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 747 748 509
-                              Store 746(r054) 749
-             752:   38(ivec3) BitReverse 751
-                              Store 750(r055) 752
-             754:   36(fvec3) Load 41(inF0)
-             755:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 754
-                              Store 753(r056) 755
-             757:   36(fvec3) Load 41(inF0)
-             758:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 757
-                              Store 756(r057) 758
+             715:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 714
+                              Store 713(r043) 715
+             717:   36(fvec3) Load 41(inF0)
+             718:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 717
+                              Store 716(r044) 718
+             720:   36(fvec3) Load 41(inF0)
+             721:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 720
+             722:   36(fvec3) VectorTimesScalar 721 253
+                              Store 719(r045) 722
+             724:   36(fvec3) Load 41(inF0)
+             725:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 724
+                              Store 723(r046) 725
+             727:   36(fvec3) Load 41(inF0)
+             728:   36(fvec3) Load 42(inF1)
+             729:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 727 728
+                              Store 726(r047) 729
+             731:   36(fvec3) Load 41(inF0)
+             732:   36(fvec3) Load 42(inF1)
+             733:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 731 732
+                              Store 730(r048) 733
+             735:   36(fvec3) Load 41(inF0)
+             736:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 735
+                              Store 734(r049) 736
+             738:   36(fvec3) Load 41(inF0)
+             739:   36(fvec3) Load 42(inF1)
+             740:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 738 739
+                              Store 737(r050) 740
+             742:   36(fvec3) Load 41(inF0)
+             743:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 742
+                              Store 741(r051) 743
+             745:   36(fvec3) Load 41(inF0)
+             746:   36(fvec3) CompositeConstruct 274 274 274
+             747:   36(fvec3) FDiv 746 745
+                              Store 744(r052) 747
+             749:   36(fvec3) Load 41(inF0)
+             750:   36(fvec3) Load 42(inF1)
+             751:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 749 750
+                              Store 748(r053) 751
+             753:   36(fvec3) Load 41(inF0)
+             754:   36(fvec3) Load 42(inF1)
+             755:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 753 754 509
+                              Store 752(r054) 755
+             758:   38(ivec3) BitReverse 757
+                              Store 756(r055) 758
              760:   36(fvec3) Load 41(inF0)
-             761:   36(fvec3) CompositeConstruct 165 165 165
-             762:   36(fvec3) CompositeConstruct 274 274 274
-             763:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 760 761 762
-                              Store 759(r058) 763
-             765:   36(fvec3) Load 41(inF0)
-             766:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 765
-                              Store 764(r059) 766
-             768:   36(fvec3) Load 41(inF0)
-             769:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 768
-                              Store 767(r060) 769
-             770:   36(fvec3) Load 41(inF0)
-             771:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 770
-                              Store 42(inF1) 771
-             772:   36(fvec3) Load 41(inF0)
-             773:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 772
-                              Store 43(inF2) 773
-             775:   36(fvec3) Load 41(inF0)
-             776:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 775
-                              Store 774(r061) 776
+             761:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 760
+                              Store 759(r056) 761
+             763:   36(fvec3) Load 41(inF0)
+             764:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 763
+                              Store 762(r057) 764
+             766:   36(fvec3) Load 41(inF0)
+             767:   36(fvec3) CompositeConstruct 165 165 165
+             768:   36(fvec3) CompositeConstruct 274 274 274
+             769:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 766 767 768
+                              Store 765(r058) 769
+             771:   36(fvec3) Load 41(inF0)
+             772:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 771
+                              Store 770(r059) 772
+             774:   36(fvec3) Load 41(inF0)
+             775:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 774
+                              Store 773(r060) 775
+             776:   36(fvec3) Load 41(inF0)
+             777:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 776
+                              Store 42(inF1) 777
              778:   36(fvec3) Load 41(inF0)
-             779:   36(fvec3) Load 42(inF1)
-             780:   36(fvec3) Load 43(inF2)
-             781:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 778 779 780
-                              Store 777(r062) 781
-             783:   36(fvec3) Load 41(inF0)
-             784:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 783
-                              Store 782(r063) 784
-             786:   36(fvec3) Load 41(inF0)
-             787:   36(fvec3) Load 42(inF1)
-             788:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 786 787
-                              Store 785(r064) 788
-             790:   36(fvec3) Load 41(inF0)
-             791:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 790
-                              Store 789(r065) 791
-             793:   36(fvec3) Load 41(inF0)
-             794:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 793
-                              Store 792(r066) 794
+             779:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 778
+                              Store 43(inF2) 779
+             781:   36(fvec3) Load 41(inF0)
+             782:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 781
+                              Store 780(r061) 782
+             784:   36(fvec3) Load 41(inF0)
+             785:   36(fvec3) Load 42(inF1)
+             786:   36(fvec3) Load 43(inF2)
+             787:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 784 785 786
+                              Store 783(r062) 787
+             789:   36(fvec3) Load 41(inF0)
+             790:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 789
+                              Store 788(r063) 790
+             792:   36(fvec3) Load 41(inF0)
+             793:   36(fvec3) Load 42(inF1)
+             794:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 792 793
+                              Store 791(r064) 794
              796:   36(fvec3) Load 41(inF0)
-             797:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 796
-                              Store 795(r067) 797
-                              ReturnValue 799
+             797:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 796
+                              Store 795(r065) 797
+             799:   36(fvec3) Load 41(inF0)
+             800:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 799
+                              Store 798(r066) 800
+             802:   36(fvec3) Load 41(inF0)
+             803:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 802
+                              Store 801(r067) 803
+                              ReturnValue 805
                               FunctionEnd
 54(PixelShaderFunction2x2(mf22;mf22;mf22;):          48 Function None 50
         51(inF0):     49(ptr) FunctionParameter
         52(inF1):     49(ptr) FunctionParameter
         53(inF2):     49(ptr) FunctionParameter
               55:             Label
-      1056(r000):    122(ptr) Variable Function
-      1059(r001):     49(ptr) Variable Function
-      1064(r003):    122(ptr) Variable Function
-      1067(r004):     49(ptr) Variable Function
-      1070(r005):     49(ptr) Variable Function
-      1073(r006):     49(ptr) Variable Function
-      1077(r007):     49(ptr) Variable Function
-      1088(r008):     49(ptr) Variable Function
-      1093(r009):     49(ptr) Variable Function
-      1096(r010):     49(ptr) Variable Function
-      1099(r011):     49(ptr) Variable Function
-      1102(r012):     49(ptr) Variable Function
-      1105(r013):     49(ptr) Variable Function
-      1108(r014):     49(ptr) Variable Function
-      1111(r015):     49(ptr) Variable Function
-      1114(r016):     49(ptr) Variable Function
-      1117(r017):     49(ptr) Variable Function
-      1120(r018):      7(ptr) Variable Function
-      1123(r019):     49(ptr) Variable Function
-      1126(R020):     49(ptr) Variable Function
-      1129(r021):     49(ptr) Variable Function
-      1132(r022):     49(ptr) Variable Function
-      1142(r023):     49(ptr) Variable Function
-      1145(r024):     49(ptr) Variable Function
-      1151(r025):     49(ptr) Variable Function
-      1154(r026):     49(ptr) Variable Function
-     1158(r026a):     49(ptr) Variable Function
-      1163(r027):     49(ptr) Variable Function
-      1166(r028):     49(ptr) Variable Function
-      1170(r029):     49(ptr) Variable Function
-      1173(r030):     49(ptr) Variable Function
-      1177(r031):     49(ptr) Variable Function
-      1181(r032):     49(ptr) Variable Function
-      1185(r033):     49(ptr) Variable Function
-      1188(r034):     49(ptr) Variable Function
-      1191(r035):     49(ptr) Variable Function
-      1194(r036):     49(ptr) Variable Function
-      1199(r037):     49(ptr) Variable Function
-      1202(r038):     49(ptr) Variable Function
-      1209(r039):     49(ptr) Variable Function
-      1212(r049):     49(ptr) Variable Function
-      1217(r041):     49(ptr) Variable Function
-      1220(r042):     49(ptr) Variable Function
-      1224(r043):     49(ptr) Variable Function
-      1227(r044):     49(ptr) Variable Function
-      1232(r046):     49(ptr) Variable Function
-            1057:          48 Load 51(inF0)
-            1058:   121(bool) All 1057
-                              Store 1056(r000) 1058
-            1060:          48 Load 51(inF0)
-            1061:          48 ExtInst 1(GLSL.std.450) 4(FAbs) 1060
-                              Store 1059(r001) 1061
-            1062:          48 Load 51(inF0)
-            1063:          48 ExtInst 1(GLSL.std.450) 17(Acos) 1062
-            1065:          48 Load 51(inF0)
-            1066:   121(bool) Any 1065
-                              Store 1064(r003) 1066
+      1062(r000):    122(ptr) Variable Function
+      1065(r001):     49(ptr) Variable Function
+      1070(r003):    122(ptr) Variable Function
+      1073(r004):     49(ptr) Variable Function
+      1076(r005):     49(ptr) Variable Function
+      1079(r006):     49(ptr) Variable Function
+      1083(r007):     49(ptr) Variable Function
+      1094(r008):     49(ptr) Variable Function
+      1099(r009):     49(ptr) Variable Function
+      1102(r010):     49(ptr) Variable Function
+      1105(r011):     49(ptr) Variable Function
+      1108(r012):     49(ptr) Variable Function
+      1111(r013):     49(ptr) Variable Function
+      1114(r014):     49(ptr) Variable Function
+      1117(r015):     49(ptr) Variable Function
+      1120(r016):     49(ptr) Variable Function
+      1123(r017):     49(ptr) Variable Function
+      1126(r018):      7(ptr) Variable Function
+      1129(r019):     49(ptr) Variable Function
+      1132(R020):     49(ptr) Variable Function
+      1135(r021):     49(ptr) Variable Function
+      1138(r022):     49(ptr) Variable Function
+      1148(r023):     49(ptr) Variable Function
+      1151(r024):     49(ptr) Variable Function
+      1157(r025):     49(ptr) Variable Function
+      1160(r026):     49(ptr) Variable Function
+     1164(r026a):     49(ptr) Variable Function
+      1169(r027):     49(ptr) Variable Function
+      1172(r028):     49(ptr) Variable Function
+      1176(r029):     49(ptr) Variable Function
+      1179(r030):     49(ptr) Variable Function
+      1183(r031):     49(ptr) Variable Function
+      1187(r032):     49(ptr) Variable Function
+      1191(r033):     49(ptr) Variable Function
+      1194(r034):     49(ptr) Variable Function
+      1197(r035):     49(ptr) Variable Function
+      1200(r036):     49(ptr) Variable Function
+      1205(r037):     49(ptr) Variable Function
+      1208(r038):     49(ptr) Variable Function
+      1215(r039):     49(ptr) Variable Function
+      1218(r049):     49(ptr) Variable Function
+      1223(r041):     49(ptr) Variable Function
+      1226(r042):     49(ptr) Variable Function
+      1230(r043):     49(ptr) Variable Function
+      1233(r044):     49(ptr) Variable Function
+      1238(r046):     49(ptr) Variable Function
+            1063:          48 Load 51(inF0)
+            1064:   121(bool) All 1063
+                              Store 1062(r000) 1064
+            1066:          48 Load 51(inF0)
+            1067:          48 ExtInst 1(GLSL.std.450) 4(FAbs) 1066
+                              Store 1065(r001) 1067
             1068:          48 Load 51(inF0)
-            1069:          48 ExtInst 1(GLSL.std.450) 16(Asin) 1068
-                              Store 1067(r004) 1069
+            1069:          48 ExtInst 1(GLSL.std.450) 17(Acos) 1068
             1071:          48 Load 51(inF0)
-            1072:          48 ExtInst 1(GLSL.std.450) 18(Atan) 1071
-                              Store 1070(r005) 1072
+            1072:   121(bool) Any 1071
+                              Store 1070(r003) 1072
             1074:          48 Load 51(inF0)
-            1075:          48 Load 52(inF1)
-            1076:          48 ExtInst 1(GLSL.std.450) 25(Atan2) 1074 1075
-                              Store 1073(r006) 1076
-            1078:          48 Load 51(inF0)
-            1079:          48 ExtInst 1(GLSL.std.450) 9(Ceil) 1078
-                              Store 1077(r007) 1079
+            1075:          48 ExtInst 1(GLSL.std.450) 16(Asin) 1074
+                              Store 1073(r004) 1075
+            1077:          48 Load 51(inF0)
+            1078:          48 ExtInst 1(GLSL.std.450) 18(Atan) 1077
+                              Store 1076(r005) 1078
             1080:          48 Load 51(inF0)
-            1083:        1082 FOrdLessThan 1080 1081
-            1084:   121(bool) Any 1083
-                              SelectionMerge 1086 None
-                              BranchConditional 1084 1085 1086
-            1085:               Label
+            1081:          48 Load 52(inF1)
+            1082:          48 ExtInst 1(GLSL.std.450) 25(Atan2) 1080 1081
+                              Store 1079(r006) 1082
+            1084:          48 Load 51(inF0)
+            1085:          48 ExtInst 1(GLSL.std.450) 9(Ceil) 1084
+                              Store 1083(r007) 1085
+            1086:          48 Load 51(inF0)
+            1089:        1088 FOrdLessThan 1086 1087
+            1090:   121(bool) Any 1089
+                              SelectionMerge 1092 None
+                              BranchConditional 1090 1091 1092
+            1091:               Label
                                 Kill
-            1086:             Label
-            1089:          48 Load 51(inF0)
-            1090:          48 Load 52(inF1)
-            1091:          48 Load 53(inF2)
-            1092:          48 ExtInst 1(GLSL.std.450) 43(FClamp) 1089 1090 1091
-                              Store 1088(r008) 1092
-            1094:          48 Load 51(inF0)
-            1095:          48 ExtInst 1(GLSL.std.450) 14(Cos) 1094
-                              Store 1093(r009) 1095
-            1097:          48 Load 51(inF0)
-            1098:          48 ExtInst 1(GLSL.std.450) 20(Cosh) 1097
-                              Store 1096(r010) 1098
+            1092:             Label
+            1095:          48 Load 51(inF0)
+            1096:          48 Load 52(inF1)
+            1097:          48 Load 53(inF2)
+            1098:          48 ExtInst 1(GLSL.std.450) 43(FClamp) 1095 1096 1097
+                              Store 1094(r008) 1098
             1100:          48 Load 51(inF0)
-            1101:          48 DPdx 1100
-                              Store 1099(r011) 1101
+            1101:          48 ExtInst 1(GLSL.std.450) 14(Cos) 1100
+                              Store 1099(r009) 1101
             1103:          48 Load 51(inF0)
-            1104:          48 DPdxCoarse 1103
-                              Store 1102(r012) 1104
+            1104:          48 ExtInst 1(GLSL.std.450) 20(Cosh) 1103
+                              Store 1102(r010) 1104
             1106:          48 Load 51(inF0)
-            1107:          48 DPdxFine 1106
-                              Store 1105(r013) 1107
+            1107:          48 DPdx 1106
+                              Store 1105(r011) 1107
             1109:          48 Load 51(inF0)
-            1110:          48 DPdy 1109
-                              Store 1108(r014) 1110
+            1110:          48 DPdxCoarse 1109
+                              Store 1108(r012) 1110
             1112:          48 Load 51(inF0)
-            1113:          48 DPdyCoarse 1112
-                              Store 1111(r015) 1113
+            1113:          48 DPdxFine 1112
+                              Store 1111(r013) 1113
             1115:          48 Load 51(inF0)
-            1116:          48 DPdyFine 1115
-                              Store 1114(r016) 1116
+            1116:          48 DPdy 1115
+                              Store 1114(r014) 1116
             1118:          48 Load 51(inF0)
-            1119:          48 ExtInst 1(GLSL.std.450) 12(Degrees) 1118
-                              Store 1117(r017) 1119
+            1119:          48 DPdyCoarse 1118
+                              Store 1117(r015) 1119
             1121:          48 Load 51(inF0)
-            1122:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1121
-                              Store 1120(r018) 1122
+            1122:          48 DPdyFine 1121
+                              Store 1120(r016) 1122
             1124:          48 Load 51(inF0)
-            1125:          48 ExtInst 1(GLSL.std.450) 27(Exp) 1124
-                              Store 1123(r019) 1125
+            1125:          48 ExtInst 1(GLSL.std.450) 12(Degrees) 1124
+                              Store 1123(r017) 1125
             1127:          48 Load 51(inF0)
-            1128:          48 ExtInst 1(GLSL.std.450) 29(Exp2) 1127
-                              Store 1126(R020) 1128
+            1128:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1127
+                              Store 1126(r018) 1128
             1130:          48 Load 51(inF0)
-            1131:          48 ExtInst 1(GLSL.std.450) 8(Floor) 1130
-                              Store 1129(r021) 1131
+            1131:          48 ExtInst 1(GLSL.std.450) 27(Exp) 1130
+                              Store 1129(r019) 1131
             1133:          48 Load 51(inF0)
-            1134:          48 Load 52(inF1)
-            1135:   24(fvec2) CompositeExtract 1133 0
-            1136:   24(fvec2) CompositeExtract 1134 0
-            1137:   24(fvec2) FMod 1135 1136
-            1138:   24(fvec2) CompositeExtract 1133 1
-            1139:   24(fvec2) CompositeExtract 1134 1
-            1140:   24(fvec2) FMod 1138 1139
-            1141:          48 CompositeConstruct 1137 1140
-                              Store 1132(r022) 1141
-            1143:          48 Load 51(inF0)
-            1144:          48 ExtInst 1(GLSL.std.450) 10(Fract) 1143
-                              Store 1142(r023) 1144
-            1146:          48 Load 51(inF0)
-            1148:1147(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1146
-            1149:  342(ivec2) CompositeExtract 1148 1
-                              Store 52(inF1) 1149
-            1150:          48 CompositeExtract 1148 0
-                              Store 1145(r024) 1150
+            1134:          48 ExtInst 1(GLSL.std.450) 29(Exp2) 1133
+                              Store 1132(R020) 1134
+            1136:          48 Load 51(inF0)
+            1137:          48 ExtInst 1(GLSL.std.450) 8(Floor) 1136
+                              Store 1135(r021) 1137
+            1139:          48 Load 51(inF0)
+            1140:          48 Load 52(inF1)
+            1141:   24(fvec2) CompositeExtract 1139 0
+            1142:   24(fvec2) CompositeExtract 1140 0
+            1143:   24(fvec2) FMod 1141 1142
+            1144:   24(fvec2) CompositeExtract 1139 1
+            1145:   24(fvec2) CompositeExtract 1140 1
+            1146:   24(fvec2) FMod 1144 1145
+            1147:          48 CompositeConstruct 1143 1146
+                              Store 1138(r022) 1147
+            1149:          48 Load 51(inF0)
+            1150:          48 ExtInst 1(GLSL.std.450) 10(Fract) 1149
+                              Store 1148(r023) 1150
             1152:          48 Load 51(inF0)
-            1153:          48 Fwidth 1152
-                              Store 1151(r025) 1153
-            1155:          48 Load 51(inF0)
-            1156:          48 Load 52(inF1)
-            1157:          48 ExtInst 1(GLSL.std.450) 53(Ldexp) 1155 1156
-                              Store 1154(r026) 1157
-            1159:          48 Load 51(inF0)
-            1160:          48 Load 52(inF1)
-            1161:          48 Load 53(inF2)
-            1162:          48 ExtInst 1(GLSL.std.450) 46(FMix) 1159 1160 1161
-                              Store 1158(r026a) 1162
-            1164:          48 Load 51(inF0)
-            1165:          48 ExtInst 1(GLSL.std.450) 28(Log) 1164
-                              Store 1163(r027) 1165
-            1167:          48 Load 51(inF0)
-            1168:          48 ExtInst 1(GLSL.std.450) 30(Log2) 1167
-            1169:          48 MatrixTimesScalar 1168 253
-                              Store 1166(r028) 1169
-            1171:          48 Load 51(inF0)
-            1172:          48 ExtInst 1(GLSL.std.450) 30(Log2) 1171
-                              Store 1170(r029) 1172
-            1174:          48 Load 51(inF0)
-            1175:          48 Load 52(inF1)
-            1176:          48 ExtInst 1(GLSL.std.450) 40(FMax) 1174 1175
-                              Store 1173(r030) 1176
-            1178:          48 Load 51(inF0)
-            1179:          48 Load 52(inF1)
-            1180:          48 ExtInst 1(GLSL.std.450) 37(FMin) 1178 1179
-                              Store 1177(r031) 1180
-            1182:          48 Load 51(inF0)
-            1183:          48 Load 52(inF1)
-            1184:          48 ExtInst 1(GLSL.std.450) 26(Pow) 1182 1183
-                              Store 1181(r032) 1184
-            1186:          48 Load 51(inF0)
-            1187:          48 ExtInst 1(GLSL.std.450) 11(Radians) 1186
-                              Store 1185(r033) 1187
-            1189:          48 Load 51(inF0)
-            1190:          48 ExtInst 1(GLSL.std.450) 2(RoundEven) 1189
-                              Store 1188(r034) 1190
+            1154:1153(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1152
+            1155:  342(ivec2) CompositeExtract 1154 1
+                              Store 52(inF1) 1155
+            1156:          48 CompositeExtract 1154 0
+                              Store 1151(r024) 1156
+            1158:          48 Load 51(inF0)
+            1159:          48 Fwidth 1158
+                              Store 1157(r025) 1159
+            1161:          48 Load 51(inF0)
+            1162:          48 Load 52(inF1)
+            1163:          48 ExtInst 1(GLSL.std.450) 53(Ldexp) 1161 1162
+                              Store 1160(r026) 1163
+            1165:          48 Load 51(inF0)
+            1166:          48 Load 52(inF1)
+            1167:          48 Load 53(inF2)
+            1168:          48 ExtInst 1(GLSL.std.450) 46(FMix) 1165 1166 1167
+                              Store 1164(r026a) 1168
+            1170:          48 Load 51(inF0)
+            1171:          48 ExtInst 1(GLSL.std.450) 28(Log) 1170
+                              Store 1169(r027) 1171
+            1173:          48 Load 51(inF0)
+            1174:          48 ExtInst 1(GLSL.std.450) 30(Log2) 1173
+            1175:          48 MatrixTimesScalar 1174 253
+                              Store 1172(r028) 1175
+            1177:          48 Load 51(inF0)
+            1178:          48 ExtInst 1(GLSL.std.450) 30(Log2) 1177
+                              Store 1176(r029) 1178
+            1180:          48 Load 51(inF0)
+            1181:          48 Load 52(inF1)
+            1182:          48 ExtInst 1(GLSL.std.450) 40(FMax) 1180 1181
+                              Store 1179(r030) 1182
+            1184:          48 Load 51(inF0)
+            1185:          48 Load 52(inF1)
+            1186:          48 ExtInst 1(GLSL.std.450) 37(FMin) 1184 1185
+                              Store 1183(r031) 1186
+            1188:          48 Load 51(inF0)
+            1189:          48 Load 52(inF1)
+            1190:          48 ExtInst 1(GLSL.std.450) 26(Pow) 1188 1189
+                              Store 1187(r032) 1190
             1192:          48 Load 51(inF0)
-            1193:          48 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1192
-                              Store 1191(r035) 1193
+            1193:          48 ExtInst 1(GLSL.std.450) 11(Radians) 1192
+                              Store 1191(r033) 1193
             1195:          48 Load 51(inF0)
-            1196:   24(fvec2) CompositeConstruct 165 165
-            1197:   24(fvec2) CompositeConstruct 274 274
-            1198:          48 ExtInst 1(GLSL.std.450) 43(FClamp) 1195 1196 1197
-                              Store 1194(r036) 1198
-            1200:          48 Load 51(inF0)
-            1201:          48 ExtInst 1(GLSL.std.450) 6(FSign) 1200
-                              Store 1199(r037) 1201
-            1203:          48 Load 51(inF0)
-            1204:          48 ExtInst 1(GLSL.std.450) 13(Sin) 1203
-                              Store 1202(r038) 1204
-            1205:          48 Load 51(inF0)
-            1206:          48 ExtInst 1(GLSL.std.450) 13(Sin) 1205
-                              Store 52(inF1) 1206
-            1207:          48 Load 51(inF0)
-            1208:          48 ExtInst 1(GLSL.std.450) 14(Cos) 1207
-                              Store 53(inF2) 1208
-            1210:          48 Load 51(inF0)
-            1211:          48 ExtInst 1(GLSL.std.450) 19(Sinh) 1210
-                              Store 1209(r039) 1211
+            1196:          48 ExtInst 1(GLSL.std.450) 2(RoundEven) 1195
+                              Store 1194(r034) 1196
+            1198:          48 Load 51(inF0)
+            1199:          48 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1198
+                              Store 1197(r035) 1199
+            1201:          48 Load 51(inF0)
+            1202:   24(fvec2) CompositeConstruct 165 165
+            1203:   24(fvec2) CompositeConstruct 274 274
+            1204:          48 ExtInst 1(GLSL.std.450) 43(FClamp) 1201 1202 1203
+                              Store 1200(r036) 1204
+            1206:          48 Load 51(inF0)
+            1207:          48 ExtInst 1(GLSL.std.450) 6(FSign) 1206
+                              Store 1205(r037) 1207
+            1209:          48 Load 51(inF0)
+            1210:          48 ExtInst 1(GLSL.std.450) 13(Sin) 1209
+                              Store 1208(r038) 1210
+            1211:          48 Load 51(inF0)
+            1212:          48 ExtInst 1(GLSL.std.450) 13(Sin) 1211
+                              Store 52(inF1) 1212
             1213:          48 Load 51(inF0)
-            1214:          48 Load 52(inF1)
-            1215:          48 Load 53(inF2)
-            1216:          48 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1213 1214 1215
-                              Store 1212(r049) 1216
-            1218:          48 Load 51(inF0)
-            1219:          48 ExtInst 1(GLSL.std.450) 31(Sqrt) 1218
-                              Store 1217(r041) 1219
-            1221:          48 Load 51(inF0)
-            1222:          48 Load 52(inF1)
-            1223:          48 ExtInst 1(GLSL.std.450) 48(Step) 1221 1222
-                              Store 1220(r042) 1223
-            1225:          48 Load 51(inF0)
-            1226:          48 ExtInst 1(GLSL.std.450) 15(Tan) 1225
-                              Store 1224(r043) 1226
-            1228:          48 Load 51(inF0)
-            1229:          48 ExtInst 1(GLSL.std.450) 21(Tanh) 1228
-                              Store 1227(r044) 1229
-            1230:          48 Load 51(inF0)
-            1231:          48 Transpose 1230
-            1233:          48 Load 51(inF0)
-            1234:          48 ExtInst 1(GLSL.std.450) 3(Trunc) 1233
-                              Store 1232(r046) 1234
-                              ReturnValue 1236
+            1214:          48 ExtInst 1(GLSL.std.450) 14(Cos) 1213
+                              Store 53(inF2) 1214
+            1216:          48 Load 51(inF0)
+            1217:          48 ExtInst 1(GLSL.std.450) 19(Sinh) 1216
+                              Store 1215(r039) 1217
+            1219:          48 Load 51(inF0)
+            1220:          48 Load 52(inF1)
+            1221:          48 Load 53(inF2)
+            1222:          48 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1219 1220 1221
+                              Store 1218(r049) 1222
+            1224:          48 Load 51(inF0)
+            1225:          48 ExtInst 1(GLSL.std.450) 31(Sqrt) 1224
+                              Store 1223(r041) 1225
+            1227:          48 Load 51(inF0)
+            1228:          48 Load 52(inF1)
+            1229:          48 ExtInst 1(GLSL.std.450) 48(Step) 1227 1228
+                              Store 1226(r042) 1229
+            1231:          48 Load 51(inF0)
+            1232:          48 ExtInst 1(GLSL.std.450) 15(Tan) 1231
+                              Store 1230(r043) 1232
+            1234:          48 Load 51(inF0)
+            1235:          48 ExtInst 1(GLSL.std.450) 21(Tanh) 1234
+                              Store 1233(r044) 1235
+            1236:          48 Load 51(inF0)
+            1237:          48 Transpose 1236
+            1239:          48 Load 51(inF0)
+            1240:          48 ExtInst 1(GLSL.std.450) 3(Trunc) 1239
+                              Store 1238(r046) 1240
+                              ReturnValue 1242
                               FunctionEnd
 62(PixelShaderFunction3x3(mf33;mf33;mf33;):          56 Function None 58
         59(inF0):     57(ptr) FunctionParameter
         60(inF1):     57(ptr) FunctionParameter
         61(inF2):     57(ptr) FunctionParameter
               63:             Label
-      1239(r000):    122(ptr) Variable Function
-      1242(r001):     57(ptr) Variable Function
-      1247(r003):    122(ptr) Variable Function
-      1250(r004):     57(ptr) Variable Function
-      1253(r005):     57(ptr) Variable Function
-      1256(r006):     57(ptr) Variable Function
-      1260(r007):     57(ptr) Variable Function
-      1271(r008):     57(ptr) Variable Function
-      1276(r009):     57(ptr) Variable Function
-      1279(r010):     57(ptr) Variable Function
-      1282(r011):     57(ptr) Variable Function
-      1285(r012):     57(ptr) Variable Function
-      1288(r013):     57(ptr) Variable Function
-      1291(r014):     57(ptr) Variable Function
-      1294(r015):     57(ptr) Variable Function
-      1297(r016):     57(ptr) Variable Function
-      1300(r017):     57(ptr) Variable Function
-      1303(r018):      7(ptr) Variable Function
-      1306(r019):     57(ptr) Variable Function
-      1309(R020):     57(ptr) Variable Function
-      1312(r021):     57(ptr) Variable Function
-      1315(r022):     57(ptr) Variable Function
-      1328(r023):     57(ptr) Variable Function
-      1331(r024):     57(ptr) Variable Function
-      1337(r025):     57(ptr) Variable Function
-      1340(r026):     57(ptr) Variable Function
-     1344(r026a):     57(ptr) Variable Function
-      1349(r027):     57(ptr) Variable Function
-      1352(r028):     57(ptr) Variable Function
-      1356(r029):     57(ptr) Variable Function
-      1359(r030):     57(ptr) Variable Function
-      1363(r031):     57(ptr) Variable Function
-      1367(r032):     57(ptr) Variable Function
-      1371(r033):     57(ptr) Variable Function
-      1374(r034):     57(ptr) Variable Function
-      1377(r035):     57(ptr) Variable Function
-      1380(r036):     57(ptr) Variable Function
-      1385(r037):     57(ptr) Variable Function
-      1388(r038):     57(ptr) Variable Function
-      1395(r039):     57(ptr) Variable Function
-      1398(r049):     57(ptr) Variable Function
-      1403(r041):     57(ptr) Variable Function
-      1406(r042):     57(ptr) Variable Function
-      1410(r043):     57(ptr) Variable Function
-      1413(r044):     57(ptr) Variable Function
-      1418(r046):     57(ptr) Variable Function
-            1240:          56 Load 59(inF0)
-            1241:   121(bool) All 1240
-                              Store 1239(r000) 1241
-            1243:          56 Load 59(inF0)
-            1244:          56 ExtInst 1(GLSL.std.450) 4(FAbs) 1243
-                              Store 1242(r001) 1244
-            1245:          56 Load 59(inF0)
-            1246:          56 ExtInst 1(GLSL.std.450) 17(Acos) 1245
-            1248:          56 Load 59(inF0)
-            1249:   121(bool) Any 1248
-                              Store 1247(r003) 1249
+      1245(r000):    122(ptr) Variable Function
+      1248(r001):     57(ptr) Variable Function
+      1253(r003):    122(ptr) Variable Function
+      1256(r004):     57(ptr) Variable Function
+      1259(r005):     57(ptr) Variable Function
+      1262(r006):     57(ptr) Variable Function
+      1266(r007):     57(ptr) Variable Function
+      1277(r008):     57(ptr) Variable Function
+      1282(r009):     57(ptr) Variable Function
+      1285(r010):     57(ptr) Variable Function
+      1288(r011):     57(ptr) Variable Function
+      1291(r012):     57(ptr) Variable Function
+      1294(r013):     57(ptr) Variable Function
+      1297(r014):     57(ptr) Variable Function
+      1300(r015):     57(ptr) Variable Function
+      1303(r016):     57(ptr) Variable Function
+      1306(r017):     57(ptr) Variable Function
+      1309(r018):      7(ptr) Variable Function
+      1312(r019):     57(ptr) Variable Function
+      1315(R020):     57(ptr) Variable Function
+      1318(r021):     57(ptr) Variable Function
+      1321(r022):     57(ptr) Variable Function
+      1334(r023):     57(ptr) Variable Function
+      1337(r024):     57(ptr) Variable Function
+      1343(r025):     57(ptr) Variable Function
+      1346(r026):     57(ptr) Variable Function
+     1350(r026a):     57(ptr) Variable Function
+      1355(r027):     57(ptr) Variable Function
+      1358(r028):     57(ptr) Variable Function
+      1362(r029):     57(ptr) Variable Function
+      1365(r030):     57(ptr) Variable Function
+      1369(r031):     57(ptr) Variable Function
+      1373(r032):     57(ptr) Variable Function
+      1377(r033):     57(ptr) Variable Function
+      1380(r034):     57(ptr) Variable Function
+      1383(r035):     57(ptr) Variable Function
+      1386(r036):     57(ptr) Variable Function
+      1391(r037):     57(ptr) Variable Function
+      1394(r038):     57(ptr) Variable Function
+      1401(r039):     57(ptr) Variable Function
+      1404(r049):     57(ptr) Variable Function
+      1409(r041):     57(ptr) Variable Function
+      1412(r042):     57(ptr) Variable Function
+      1416(r043):     57(ptr) Variable Function
+      1419(r044):     57(ptr) Variable Function
+      1424(r046):     57(ptr) Variable Function
+            1246:          56 Load 59(inF0)
+            1247:   121(bool) All 1246
+                              Store 1245(r000) 1247
+            1249:          56 Load 59(inF0)
+            1250:          56 ExtInst 1(GLSL.std.450) 4(FAbs) 1249
+                              Store 1248(r001) 1250
             1251:          56 Load 59(inF0)
-            1252:          56 ExtInst 1(GLSL.std.450) 16(Asin) 1251
-                              Store 1250(r004) 1252
+            1252:          56 ExtInst 1(GLSL.std.450) 17(Acos) 1251
             1254:          56 Load 59(inF0)
-            1255:          56 ExtInst 1(GLSL.std.450) 18(Atan) 1254
-                              Store 1253(r005) 1255
+            1255:   121(bool) Any 1254
+                              Store 1253(r003) 1255
             1257:          56 Load 59(inF0)
-            1258:          56 Load 60(inF1)
-            1259:          56 ExtInst 1(GLSL.std.450) 25(Atan2) 1257 1258
-                              Store 1256(r006) 1259
-            1261:          56 Load 59(inF0)
-            1262:          56 ExtInst 1(GLSL.std.450) 9(Ceil) 1261
-                              Store 1260(r007) 1262
+            1258:          56 ExtInst 1(GLSL.std.450) 16(Asin) 1257
+                              Store 1256(r004) 1258
+            1260:          56 Load 59(inF0)
+            1261:          56 ExtInst 1(GLSL.std.450) 18(Atan) 1260
+                              Store 1259(r005) 1261
             1263:          56 Load 59(inF0)
-            1266:        1265 FOrdLessThan 1263 1264
-            1267:   121(bool) Any 1266
-                              SelectionMerge 1269 None
-                              BranchConditional 1267 1268 1269
-            1268:               Label
+            1264:          56 Load 60(inF1)
+            1265:          56 ExtInst 1(GLSL.std.450) 25(Atan2) 1263 1264
+                              Store 1262(r006) 1265
+            1267:          56 Load 59(inF0)
+            1268:          56 ExtInst 1(GLSL.std.450) 9(Ceil) 1267
+                              Store 1266(r007) 1268
+            1269:          56 Load 59(inF0)
+            1272:        1271 FOrdLessThan 1269 1270
+            1273:   121(bool) Any 1272
+                              SelectionMerge 1275 None
+                              BranchConditional 1273 1274 1275
+            1274:               Label
                                 Kill
-            1269:             Label
-            1272:          56 Load 59(inF0)
-            1273:          56 Load 60(inF1)
-            1274:          56 Load 61(inF2)
-            1275:          56 ExtInst 1(GLSL.std.450) 43(FClamp) 1272 1273 1274
-                              Store 1271(r008) 1275
-            1277:          56 Load 59(inF0)
-            1278:          56 ExtInst 1(GLSL.std.450) 14(Cos) 1277
-                              Store 1276(r009) 1278
-            1280:          56 Load 59(inF0)
-            1281:          56 ExtInst 1(GLSL.std.450) 20(Cosh) 1280
-                              Store 1279(r010) 1281
+            1275:             Label
+            1278:          56 Load 59(inF0)
+            1279:          56 Load 60(inF1)
+            1280:          56 Load 61(inF2)
+            1281:          56 ExtInst 1(GLSL.std.450) 43(FClamp) 1278 1279 1280
+                              Store 1277(r008) 1281
             1283:          56 Load 59(inF0)
-            1284:          56 DPdx 1283
-                              Store 1282(r011) 1284
+            1284:          56 ExtInst 1(GLSL.std.450) 14(Cos) 1283
+                              Store 1282(r009) 1284
             1286:          56 Load 59(inF0)
-            1287:          56 DPdxCoarse 1286
-                              Store 1285(r012) 1287
+            1287:          56 ExtInst 1(GLSL.std.450) 20(Cosh) 1286
+                              Store 1285(r010) 1287
             1289:          56 Load 59(inF0)
-            1290:          56 DPdxFine 1289
-                              Store 1288(r013) 1290
+            1290:          56 DPdx 1289
+                              Store 1288(r011) 1290
             1292:          56 Load 59(inF0)
-            1293:          56 DPdy 1292
-                              Store 1291(r014) 1293
+            1293:          56 DPdxCoarse 1292
+                              Store 1291(r012) 1293
             1295:          56 Load 59(inF0)
-            1296:          56 DPdyCoarse 1295
-                              Store 1294(r015) 1296
+            1296:          56 DPdxFine 1295
+                              Store 1294(r013) 1296
             1298:          56 Load 59(inF0)
-            1299:          56 DPdyFine 1298
-                              Store 1297(r016) 1299
+            1299:          56 DPdy 1298
+                              Store 1297(r014) 1299
             1301:          56 Load 59(inF0)
-            1302:          56 ExtInst 1(GLSL.std.450) 12(Degrees) 1301
-                              Store 1300(r017) 1302
+            1302:          56 DPdyCoarse 1301
+                              Store 1300(r015) 1302
             1304:          56 Load 59(inF0)
-            1305:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1304
-                              Store 1303(r018) 1305
+            1305:          56 DPdyFine 1304
+                              Store 1303(r016) 1305
             1307:          56 Load 59(inF0)
-            1308:          56 ExtInst 1(GLSL.std.450) 27(Exp) 1307
-                              Store 1306(r019) 1308
+            1308:          56 ExtInst 1(GLSL.std.450) 12(Degrees) 1307
+                              Store 1306(r017) 1308
             1310:          56 Load 59(inF0)
-            1311:          56 ExtInst 1(GLSL.std.450) 29(Exp2) 1310
-                              Store 1309(R020) 1311
+            1311:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1310
+                              Store 1309(r018) 1311
             1313:          56 Load 59(inF0)
-            1314:          56 ExtInst 1(GLSL.std.450) 8(Floor) 1313
-                              Store 1312(r021) 1314
+            1314:          56 ExtInst 1(GLSL.std.450) 27(Exp) 1313
+                              Store 1312(r019) 1314
             1316:          56 Load 59(inF0)
-            1317:          56 Load 60(inF1)
-            1318:   36(fvec3) CompositeExtract 1316 0
-            1319:   36(fvec3) CompositeExtract 1317 0
-            1320:   36(fvec3) FMod 1318 1319
-            1321:   36(fvec3) CompositeExtract 1316 1
-            1322:   36(fvec3) CompositeExtract 1317 1
-            1323:   36(fvec3) FMod 1321 1322
-            1324:   36(fvec3) CompositeExtract 1316 2
-            1325:   36(fvec3) CompositeExtract 1317 2
+            1317:          56 ExtInst 1(GLSL.std.450) 29(Exp2) 1316
+                              Store 1315(R020) 1317
+            1319:          56 Load 59(inF0)
+            1320:          56 ExtInst 1(GLSL.std.450) 8(Floor) 1319
+                              Store 1318(r021) 1320
+            1322:          56 Load 59(inF0)
+            1323:          56 Load 60(inF1)
+            1324:   36(fvec3) CompositeExtract 1322 0
+            1325:   36(fvec3) CompositeExtract 1323 0
             1326:   36(fvec3) FMod 1324 1325
-            1327:          56 CompositeConstruct 1320 1323 1326
-                              Store 1315(r022) 1327
-            1329:          56 Load 59(inF0)
-            1330:          56 ExtInst 1(GLSL.std.450) 10(Fract) 1329
-                              Store 1328(r023) 1330
-            1332:          56 Load 59(inF0)
-            1334:1333(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1332
-            1335:  578(ivec3) CompositeExtract 1334 1
-                              Store 60(inF1) 1335
-            1336:          56 CompositeExtract 1334 0
-                              Store 1331(r024) 1336
+            1327:   36(fvec3) CompositeExtract 1322 1
+            1328:   36(fvec3) CompositeExtract 1323 1
+            1329:   36(fvec3) FMod 1327 1328
+            1330:   36(fvec3) CompositeExtract 1322 2
+            1331:   36(fvec3) CompositeExtract 1323 2
+            1332:   36(fvec3) FMod 1330 1331
+            1333:          56 CompositeConstruct 1326 1329 1332
+                              Store 1321(r022) 1333
+            1335:          56 Load 59(inF0)
+            1336:          56 ExtInst 1(GLSL.std.450) 10(Fract) 1335
+                              Store 1334(r023) 1336
             1338:          56 Load 59(inF0)
-            1339:          56 Fwidth 1338
-                              Store 1337(r025) 1339
-            1341:          56 Load 59(inF0)
-            1342:          56 Load 60(inF1)
-            1343:          56 ExtInst 1(GLSL.std.450) 53(Ldexp) 1341 1342
-                              Store 1340(r026) 1343
-            1345:          56 Load 59(inF0)
-            1346:          56 Load 60(inF1)
-            1347:          56 Load 61(inF2)
-            1348:          56 ExtInst 1(GLSL.std.450) 46(FMix) 1345 1346 1347
-                              Store 1344(r026a) 1348
-            1350:          56 Load 59(inF0)
-            1351:          56 ExtInst 1(GLSL.std.450) 28(Log) 1350
-                              Store 1349(r027) 1351
-            1353:          56 Load 59(inF0)
-            1354:          56 ExtInst 1(GLSL.std.450) 30(Log2) 1353
-            1355:          56 MatrixTimesScalar 1354 253
-                              Store 1352(r028) 1355
-            1357:          56 Load 59(inF0)
-            1358:          56 ExtInst 1(GLSL.std.450) 30(Log2) 1357
-                              Store 1356(r029) 1358
-            1360:          56 Load 59(inF0)
-            1361:          56 Load 60(inF1)
-            1362:          56 ExtInst 1(GLSL.std.450) 40(FMax) 1360 1361
-                              Store 1359(r030) 1362
-            1364:          56 Load 59(inF0)
-            1365:          56 Load 60(inF1)
-            1366:          56 ExtInst 1(GLSL.std.450) 37(FMin) 1364 1365
-                              Store 1363(r031) 1366
-            1368:          56 Load 59(inF0)
-            1369:          56 Load 60(inF1)
-            1370:          56 ExtInst 1(GLSL.std.450) 26(Pow) 1368 1369
-                              Store 1367(r032) 1370
-            1372:          56 Load 59(inF0)
-            1373:          56 ExtInst 1(GLSL.std.450) 11(Radians) 1372
-                              Store 1371(r033) 1373
-            1375:          56 Load 59(inF0)
-            1376:          56 ExtInst 1(GLSL.std.450) 2(RoundEven) 1375
-                              Store 1374(r034) 1376
+            1340:1339(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1338
+            1341:  578(ivec3) CompositeExtract 1340 1
+                              Store 60(inF1) 1341
+            1342:          56 CompositeExtract 1340 0
+                              Store 1337(r024) 1342
+            1344:          56 Load 59(inF0)
+            1345:          56 Fwidth 1344
+                              Store 1343(r025) 1345
+            1347:          56 Load 59(inF0)
+            1348:          56 Load 60(inF1)
+            1349:          56 ExtInst 1(GLSL.std.450) 53(Ldexp) 1347 1348
+                              Store 1346(r026) 1349
+            1351:          56 Load 59(inF0)
+            1352:          56 Load 60(inF1)
+            1353:          56 Load 61(inF2)
+            1354:          56 ExtInst 1(GLSL.std.450) 46(FMix) 1351 1352 1353
+                              Store 1350(r026a) 1354
+            1356:          56 Load 59(inF0)
+            1357:          56 ExtInst 1(GLSL.std.450) 28(Log) 1356
+                              Store 1355(r027) 1357
+            1359:          56 Load 59(inF0)
+            1360:          56 ExtInst 1(GLSL.std.450) 30(Log2) 1359
+            1361:          56 MatrixTimesScalar 1360 253
+                              Store 1358(r028) 1361
+            1363:          56 Load 59(inF0)
+            1364:          56 ExtInst 1(GLSL.std.450) 30(Log2) 1363
+                              Store 1362(r029) 1364
+            1366:          56 Load 59(inF0)
+            1367:          56 Load 60(inF1)
+            1368:          56 ExtInst 1(GLSL.std.450) 40(FMax) 1366 1367
+                              Store 1365(r030) 1368
+            1370:          56 Load 59(inF0)
+            1371:          56 Load 60(inF1)
+            1372:          56 ExtInst 1(GLSL.std.450) 37(FMin) 1370 1371
+                              Store 1369(r031) 1372
+            1374:          56 Load 59(inF0)
+            1375:          56 Load 60(inF1)
+            1376:          56 ExtInst 1(GLSL.std.450) 26(Pow) 1374 1375
+                              Store 1373(r032) 1376
             1378:          56 Load 59(inF0)
-            1379:          56 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1378
-                              Store 1377(r035) 1379
+            1379:          56 ExtInst 1(GLSL.std.450) 11(Radians) 1378
+                              Store 1377(r033) 1379
             1381:          56 Load 59(inF0)
-            1382:   36(fvec3) CompositeConstruct 165 165 165
-            1383:   36(fvec3) CompositeConstruct 274 274 274
-            1384:          56 ExtInst 1(GLSL.std.450) 43(FClamp) 1381 1382 1383
-                              Store 1380(r036) 1384
-            1386:          56 Load 59(inF0)
-            1387:          56 ExtInst 1(GLSL.std.450) 6(FSign) 1386
-                              Store 1385(r037) 1387
-            1389:          56 Load 59(inF0)
-            1390:          56 ExtInst 1(GLSL.std.450) 13(Sin) 1389
-                              Store 1388(r038) 1390
-            1391:          56 Load 59(inF0)
-            1392:          56 ExtInst 1(GLSL.std.450) 13(Sin) 1391
-                              Store 60(inF1) 1392
-            1393:          56 Load 59(inF0)
-            1394:          56 ExtInst 1(GLSL.std.450) 14(Cos) 1393
-                              Store 61(inF2) 1394
-            1396:          56 Load 59(inF0)
-            1397:          56 ExtInst 1(GLSL.std.450) 19(Sinh) 1396
-                              Store 1395(r039) 1397
+            1382:          56 ExtInst 1(GLSL.std.450) 2(RoundEven) 1381
+                              Store 1380(r034) 1382
+            1384:          56 Load 59(inF0)
+            1385:          56 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1384
+                              Store 1383(r035) 1385
+            1387:          56 Load 59(inF0)
+            1388:   36(fvec3) CompositeConstruct 165 165 165
+            1389:   36(fvec3) CompositeConstruct 274 274 274
+            1390:          56 ExtInst 1(GLSL.std.450) 43(FClamp) 1387 1388 1389
+                              Store 1386(r036) 1390
+            1392:          56 Load 59(inF0)
+            1393:          56 ExtInst 1(GLSL.std.450) 6(FSign) 1392
+                              Store 1391(r037) 1393
+            1395:          56 Load 59(inF0)
+            1396:          56 ExtInst 1(GLSL.std.450) 13(Sin) 1395
+                              Store 1394(r038) 1396
+            1397:          56 Load 59(inF0)
+            1398:          56 ExtInst 1(GLSL.std.450) 13(Sin) 1397
+                              Store 60(inF1) 1398
             1399:          56 Load 59(inF0)
-            1400:          56 Load 60(inF1)
-            1401:          56 Load 61(inF2)
-            1402:          56 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1399 1400 1401
-                              Store 1398(r049) 1402
-            1404:          56 Load 59(inF0)
-            1405:          56 ExtInst 1(GLSL.std.450) 31(Sqrt) 1404
-                              Store 1403(r041) 1405
-            1407:          56 Load 59(inF0)
-            1408:          56 Load 60(inF1)
-            1409:          56 ExtInst 1(GLSL.std.450) 48(Step) 1407 1408
-                              Store 1406(r042) 1409
-            1411:          56 Load 59(inF0)
-            1412:          56 ExtInst 1(GLSL.std.450) 15(Tan) 1411
-                              Store 1410(r043) 1412
-            1414:          56 Load 59(inF0)
-            1415:          56 ExtInst 1(GLSL.std.450) 21(Tanh) 1414
-                              Store 1413(r044) 1415
-            1416:          56 Load 59(inF0)
-            1417:          56 Transpose 1416
-            1419:          56 Load 59(inF0)
-            1420:          56 ExtInst 1(GLSL.std.450) 3(Trunc) 1419
-                              Store 1418(r046) 1420
-                              ReturnValue 1422
+            1400:          56 ExtInst 1(GLSL.std.450) 14(Cos) 1399
+                              Store 61(inF2) 1400
+            1402:          56 Load 59(inF0)
+            1403:          56 ExtInst 1(GLSL.std.450) 19(Sinh) 1402
+                              Store 1401(r039) 1403
+            1405:          56 Load 59(inF0)
+            1406:          56 Load 60(inF1)
+            1407:          56 Load 61(inF2)
+            1408:          56 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1405 1406 1407
+                              Store 1404(r049) 1408
+            1410:          56 Load 59(inF0)
+            1411:          56 ExtInst 1(GLSL.std.450) 31(Sqrt) 1410
+                              Store 1409(r041) 1411
+            1413:          56 Load 59(inF0)
+            1414:          56 Load 60(inF1)
+            1415:          56 ExtInst 1(GLSL.std.450) 48(Step) 1413 1414
+                              Store 1412(r042) 1415
+            1417:          56 Load 59(inF0)
+            1418:          56 ExtInst 1(GLSL.std.450) 15(Tan) 1417
+                              Store 1416(r043) 1418
+            1420:          56 Load 59(inF0)
+            1421:          56 ExtInst 1(GLSL.std.450) 21(Tanh) 1420
+                              Store 1419(r044) 1421
+            1422:          56 Load 59(inF0)
+            1423:          56 Transpose 1422
+            1425:          56 Load 59(inF0)
+            1426:          56 ExtInst 1(GLSL.std.450) 3(Trunc) 1425
+                              Store 1424(r046) 1426
+                              ReturnValue 1428
                               FunctionEnd
 71(PixelShaderFunction4x4(mf44;mf44;mf44;):          65 Function None 67
         68(inF0):     66(ptr) FunctionParameter
         69(inF1):     66(ptr) FunctionParameter
         70(inF2):     66(ptr) FunctionParameter
               72:             Label
-      1425(r000):    122(ptr) Variable Function
-      1428(r001):     66(ptr) Variable Function
-      1433(r003):    122(ptr) Variable Function
-      1436(r004):     66(ptr) Variable Function
-      1439(r005):     66(ptr) Variable Function
-      1442(r006):     66(ptr) Variable Function
-      1446(r007):     66(ptr) Variable Function
-      1457(r008):     66(ptr) Variable Function
-      1462(r009):     66(ptr) Variable Function
-      1465(r010):     66(ptr) Variable Function
-      1468(r011):     66(ptr) Variable Function
-      1471(r012):     66(ptr) Variable Function
-      1474(r013):     66(ptr) Variable Function
-      1477(r014):     66(ptr) Variable Function
-      1480(r015):     66(ptr) Variable Function
-      1483(r016):     66(ptr) Variable Function
-      1486(r017):     66(ptr) Variable Function
-      1489(r018):      7(ptr) Variable Function
-      1492(r019):     66(ptr) Variable Function
-      1495(R020):     66(ptr) Variable Function
-      1498(r021):     66(ptr) Variable Function
-      1501(r022):     66(ptr) Variable Function
-      1517(r023):     66(ptr) Variable Function
-      1520(r024):     66(ptr) Variable Function
-      1526(r025):     66(ptr) Variable Function
-      1529(r026):     66(ptr) Variable Function
-     1533(r026a):     66(ptr) Variable Function
-      1538(r027):     66(ptr) Variable Function
-      1541(r028):     66(ptr) Variable Function
-      1545(r029):     66(ptr) Variable Function
-      1548(r030):     66(ptr) Variable Function
-      1552(r031):     66(ptr) Variable Function
-      1556(r032):     66(ptr) Variable Function
-      1560(r033):     66(ptr) Variable Function
-      1563(r034):     66(ptr) Variable Function
-      1566(r035):     66(ptr) Variable Function
-      1569(r036):     66(ptr) Variable Function
-      1574(r037):     66(ptr) Variable Function
-      1577(r038):     66(ptr) Variable Function
-      1584(r039):     66(ptr) Variable Function
-      1587(r049):     66(ptr) Variable Function
-      1592(r041):     66(ptr) Variable Function
-      1595(r042):     66(ptr) Variable Function
-      1599(r043):     66(ptr) Variable Function
-      1602(r044):     66(ptr) Variable Function
-      1607(r046):     66(ptr) Variable Function
-            1426:          65 Load 68(inF0)
-            1427:   121(bool) All 1426
-                              Store 1425(r000) 1427
-            1429:          65 Load 68(inF0)
-            1430:          65 ExtInst 1(GLSL.std.450) 4(FAbs) 1429
-                              Store 1428(r001) 1430
-            1431:          65 Load 68(inF0)
-            1432:          65 ExtInst 1(GLSL.std.450) 17(Acos) 1431
-            1434:          65 Load 68(inF0)
-            1435:   121(bool) Any 1434
-                              Store 1433(r003) 1435
+      1431(r000):    122(ptr) Variable Function
+      1434(r001):     66(ptr) Variable Function
+      1439(r003):    122(ptr) Variable Function
+      1442(r004):     66(ptr) Variable Function
+      1445(r005):     66(ptr) Variable Function
+      1448(r006):     66(ptr) Variable Function
+      1452(r007):     66(ptr) Variable Function
+      1463(r008):     66(ptr) Variable Function
+      1468(r009):     66(ptr) Variable Function
+      1471(r010):     66(ptr) Variable Function
+      1474(r011):     66(ptr) Variable Function
+      1477(r012):     66(ptr) Variable Function
+      1480(r013):     66(ptr) Variable Function
+      1483(r014):     66(ptr) Variable Function
+      1486(r015):     66(ptr) Variable Function
+      1489(r016):     66(ptr) Variable Function
+      1492(r017):     66(ptr) Variable Function
+      1495(r018):      7(ptr) Variable Function
+      1498(r019):     66(ptr) Variable Function
+      1501(R020):     66(ptr) Variable Function
+      1504(r021):     66(ptr) Variable Function
+      1507(r022):     66(ptr) Variable Function
+      1523(r023):     66(ptr) Variable Function
+      1526(r024):     66(ptr) Variable Function
+      1532(r025):     66(ptr) Variable Function
+      1535(r026):     66(ptr) Variable Function
+     1539(r026a):     66(ptr) Variable Function
+      1544(r027):     66(ptr) Variable Function
+      1547(r028):     66(ptr) Variable Function
+      1551(r029):     66(ptr) Variable Function
+      1554(r030):     66(ptr) Variable Function
+      1558(r031):     66(ptr) Variable Function
+      1562(r032):     66(ptr) Variable Function
+      1566(r033):     66(ptr) Variable Function
+      1569(r034):     66(ptr) Variable Function
+      1572(r035):     66(ptr) Variable Function
+      1575(r036):     66(ptr) Variable Function
+      1580(r037):     66(ptr) Variable Function
+      1583(r038):     66(ptr) Variable Function
+      1590(r039):     66(ptr) Variable Function
+      1593(r049):     66(ptr) Variable Function
+      1598(r041):     66(ptr) Variable Function
+      1601(r042):     66(ptr) Variable Function
+      1605(r043):     66(ptr) Variable Function
+      1608(r044):     66(ptr) Variable Function
+      1613(r046):     66(ptr) Variable Function
+            1432:          65 Load 68(inF0)
+            1433:   121(bool) All 1432
+                              Store 1431(r000) 1433
+            1435:          65 Load 68(inF0)
+            1436:          65 ExtInst 1(GLSL.std.450) 4(FAbs) 1435
+                              Store 1434(r001) 1436
             1437:          65 Load 68(inF0)
-            1438:          65 ExtInst 1(GLSL.std.450) 16(Asin) 1437
-                              Store 1436(r004) 1438
+            1438:          65 ExtInst 1(GLSL.std.450) 17(Acos) 1437
             1440:          65 Load 68(inF0)
-            1441:          65 ExtInst 1(GLSL.std.450) 18(Atan) 1440
-                              Store 1439(r005) 1441
+            1441:   121(bool) Any 1440
+                              Store 1439(r003) 1441
             1443:          65 Load 68(inF0)
-            1444:          65 Load 69(inF1)
-            1445:          65 ExtInst 1(GLSL.std.450) 25(Atan2) 1443 1444
-                              Store 1442(r006) 1445
-            1447:          65 Load 68(inF0)
-            1448:          65 ExtInst 1(GLSL.std.450) 9(Ceil) 1447
-                              Store 1446(r007) 1448
+            1444:          65 ExtInst 1(GLSL.std.450) 16(Asin) 1443
+                              Store 1442(r004) 1444
+            1446:          65 Load 68(inF0)
+            1447:          65 ExtInst 1(GLSL.std.450) 18(Atan) 1446
+                              Store 1445(r005) 1447
             1449:          65 Load 68(inF0)
-            1452:        1451 FOrdLessThan 1449 1450
-            1453:   121(bool) Any 1452
-                              SelectionMerge 1455 None
-                              BranchConditional 1453 1454 1455
-            1454:               Label
+            1450:          65 Load 69(inF1)
+            1451:          65 ExtInst 1(GLSL.std.450) 25(Atan2) 1449 1450
+                              Store 1448(r006) 1451
+            1453:          65 Load 68(inF0)
+            1454:          65 ExtInst 1(GLSL.std.450) 9(Ceil) 1453
+                              Store 1452(r007) 1454
+            1455:          65 Load 68(inF0)
+            1458:        1457 FOrdLessThan 1455 1456
+            1459:   121(bool) Any 1458
+                              SelectionMerge 1461 None
+                              BranchConditional 1459 1460 1461
+            1460:               Label
                                 Kill
-            1455:             Label
-            1458:          65 Load 68(inF0)
-            1459:          65 Load 69(inF1)
-            1460:          65 Load 70(inF2)
-            1461:          65 ExtInst 1(GLSL.std.450) 43(FClamp) 1458 1459 1460
-                              Store 1457(r008) 1461
-            1463:          65 Load 68(inF0)
-            1464:          65 ExtInst 1(GLSL.std.450) 14(Cos) 1463
-                              Store 1462(r009) 1464
-            1466:          65 Load 68(inF0)
-            1467:          65 ExtInst 1(GLSL.std.450) 20(Cosh) 1466
-                              Store 1465(r010) 1467
+            1461:             Label
+            1464:          65 Load 68(inF0)
+            1465:          65 Load 69(inF1)
+            1466:          65 Load 70(inF2)
+            1467:          65 ExtInst 1(GLSL.std.450) 43(FClamp) 1464 1465 1466
+                              Store 1463(r008) 1467
             1469:          65 Load 68(inF0)
-            1470:          65 DPdx 1469
-                              Store 1468(r011) 1470
+            1470:          65 ExtInst 1(GLSL.std.450) 14(Cos) 1469
+                              Store 1468(r009) 1470
             1472:          65 Load 68(inF0)
-            1473:          65 DPdxCoarse 1472
-                              Store 1471(r012) 1473
+            1473:          65 ExtInst 1(GLSL.std.450) 20(Cosh) 1472
+                              Store 1471(r010) 1473
             1475:          65 Load 68(inF0)
-            1476:          65 DPdxFine 1475
-                              Store 1474(r013) 1476
+            1476:          65 DPdx 1475
+                              Store 1474(r011) 1476
             1478:          65 Load 68(inF0)
-            1479:          65 DPdy 1478
-                              Store 1477(r014) 1479
+            1479:          65 DPdxCoarse 1478
+                              Store 1477(r012) 1479
             1481:          65 Load 68(inF0)
-            1482:          65 DPdyCoarse 1481
-                              Store 1480(r015) 1482
+            1482:          65 DPdxFine 1481
+                              Store 1480(r013) 1482
             1484:          65 Load 68(inF0)
-            1485:          65 DPdyFine 1484
-                              Store 1483(r016) 1485
+            1485:          65 DPdy 1484
+                              Store 1483(r014) 1485
             1487:          65 Load 68(inF0)
-            1488:          65 ExtInst 1(GLSL.std.450) 12(Degrees) 1487
-                              Store 1486(r017) 1488
+            1488:          65 DPdyCoarse 1487
+                              Store 1486(r015) 1488
             1490:          65 Load 68(inF0)
-            1491:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1490
-                              Store 1489(r018) 1491
+            1491:          65 DPdyFine 1490
+                              Store 1489(r016) 1491
             1493:          65 Load 68(inF0)
-            1494:          65 ExtInst 1(GLSL.std.450) 27(Exp) 1493
-                              Store 1492(r019) 1494
+            1494:          65 ExtInst 1(GLSL.std.450) 12(Degrees) 1493
+                              Store 1492(r017) 1494
             1496:          65 Load 68(inF0)
-            1497:          65 ExtInst 1(GLSL.std.450) 29(Exp2) 1496
-                              Store 1495(R020) 1497
+            1497:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1496
+                              Store 1495(r018) 1497
             1499:          65 Load 68(inF0)
-            1500:          65 ExtInst 1(GLSL.std.450) 8(Floor) 1499
-                              Store 1498(r021) 1500
+            1500:          65 ExtInst 1(GLSL.std.450) 27(Exp) 1499
+                              Store 1498(r019) 1500
             1502:          65 Load 68(inF0)
-            1503:          65 Load 69(inF1)
-            1504:   64(fvec4) CompositeExtract 1502 0
-            1505:   64(fvec4) CompositeExtract 1503 0
-            1506:   64(fvec4) FMod 1504 1505
-            1507:   64(fvec4) CompositeExtract 1502 1
-            1508:   64(fvec4) CompositeExtract 1503 1
-            1509:   64(fvec4) FMod 1507 1508
-            1510:   64(fvec4) CompositeExtract 1502 2
-            1511:   64(fvec4) CompositeExtract 1503 2
+            1503:          65 ExtInst 1(GLSL.std.450) 29(Exp2) 1502
+                              Store 1501(R020) 1503
+            1505:          65 Load 68(inF0)
+            1506:          65 ExtInst 1(GLSL.std.450) 8(Floor) 1505
+                              Store 1504(r021) 1506
+            1508:          65 Load 68(inF0)
+            1509:          65 Load 69(inF1)
+            1510:   64(fvec4) CompositeExtract 1508 0
+            1511:   64(fvec4) CompositeExtract 1509 0
             1512:   64(fvec4) FMod 1510 1511
-            1513:   64(fvec4) CompositeExtract 1502 3
-            1514:   64(fvec4) CompositeExtract 1503 3
+            1513:   64(fvec4) CompositeExtract 1508 1
+            1514:   64(fvec4) CompositeExtract 1509 1
             1515:   64(fvec4) FMod 1513 1514
-            1516:          65 CompositeConstruct 1506 1509 1512 1515
-                              Store 1501(r022) 1516
-            1518:          65 Load 68(inF0)
-            1519:          65 ExtInst 1(GLSL.std.450) 10(Fract) 1518
-                              Store 1517(r023) 1519
-            1521:          65 Load 68(inF0)
-            1523:1522(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1521
-            1524:  819(ivec4) CompositeExtract 1523 1
-                              Store 69(inF1) 1524
-            1525:          65 CompositeExtract 1523 0
-                              Store 1520(r024) 1525
+            1516:   64(fvec4) CompositeExtract 1508 2
+            1517:   64(fvec4) CompositeExtract 1509 2
+            1518:   64(fvec4) FMod 1516 1517
+            1519:   64(fvec4) CompositeExtract 1508 3
+            1520:   64(fvec4) CompositeExtract 1509 3
+            1521:   64(fvec4) FMod 1519 1520
+            1522:          65 CompositeConstruct 1512 1515 1518 1521
+                              Store 1507(r022) 1522
+            1524:          65 Load 68(inF0)
+            1525:          65 ExtInst 1(GLSL.std.450) 10(Fract) 1524
+                              Store 1523(r023) 1525
             1527:          65 Load 68(inF0)
-            1528:          65 Fwidth 1527
-                              Store 1526(r025) 1528
-            1530:          65 Load 68(inF0)
-            1531:          65 Load 69(inF1)
-            1532:          65 ExtInst 1(GLSL.std.450) 53(Ldexp) 1530 1531
-                              Store 1529(r026) 1532
-            1534:          65 Load 68(inF0)
-            1535:          65 Load 69(inF1)
-            1536:          65 Load 70(inF2)
-            1537:          65 ExtInst 1(GLSL.std.450) 46(FMix) 1534 1535 1536
-                              Store 1533(r026a) 1537
-            1539:          65 Load 68(inF0)
-            1540:          65 ExtInst 1(GLSL.std.450) 28(Log) 1539
-                              Store 1538(r027) 1540
-            1542:          65 Load 68(inF0)
-            1543:          65 ExtInst 1(GLSL.std.450) 30(Log2) 1542
-            1544:          65 MatrixTimesScalar 1543 253
-                              Store 1541(r028) 1544
-            1546:          65 Load 68(inF0)
-            1547:          65 ExtInst 1(GLSL.std.450) 30(Log2) 1546
-                              Store 1545(r029) 1547
-            1549:          65 Load 68(inF0)
-            1550:          65 Load 69(inF1)
-            1551:          65 ExtInst 1(GLSL.std.450) 40(FMax) 1549 1550
-                              Store 1548(r030) 1551
-            1553:          65 Load 68(inF0)
-            1554:          65 Load 69(inF1)
-            1555:          65 ExtInst 1(GLSL.std.450) 37(FMin) 1553 1554
-                              Store 1552(r031) 1555
-            1557:          65 Load 68(inF0)
-            1558:          65 Load 69(inF1)
-            1559:          65 ExtInst 1(GLSL.std.450) 26(Pow) 1557 1558
-                              Store 1556(r032) 1559
-            1561:          65 Load 68(inF0)
-            1562:          65 ExtInst 1(GLSL.std.450) 11(Radians) 1561
-                              Store 1560(r033) 1562
-            1564:          65 Load 68(inF0)
-            1565:          65 ExtInst 1(GLSL.std.450) 2(RoundEven) 1564
-                              Store 1563(r034) 1565
+            1529:1528(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1527
+            1530:  825(ivec4) CompositeExtract 1529 1
+                              Store 69(inF1) 1530
+            1531:          65 CompositeExtract 1529 0
+                              Store 1526(r024) 1531
+            1533:          65 Load 68(inF0)
+            1534:          65 Fwidth 1533
+                              Store 1532(r025) 1534
+            1536:          65 Load 68(inF0)
+            1537:          65 Load 69(inF1)
+            1538:          65 ExtInst 1(GLSL.std.450) 53(Ldexp) 1536 1537
+                              Store 1535(r026) 1538
+            1540:          65 Load 68(inF0)
+            1541:          65 Load 69(inF1)
+            1542:          65 Load 70(inF2)
+            1543:          65 ExtInst 1(GLSL.std.450) 46(FMix) 1540 1541 1542
+                              Store 1539(r026a) 1543
+            1545:          65 Load 68(inF0)
+            1546:          65 ExtInst 1(GLSL.std.450) 28(Log) 1545
+                              Store 1544(r027) 1546
+            1548:          65 Load 68(inF0)
+            1549:          65 ExtInst 1(GLSL.std.450) 30(Log2) 1548
+            1550:          65 MatrixTimesScalar 1549 253
+                              Store 1547(r028) 1550
+            1552:          65 Load 68(inF0)
+            1553:          65 ExtInst 1(GLSL.std.450) 30(Log2) 1552
+                              Store 1551(r029) 1553
+            1555:          65 Load 68(inF0)
+            1556:          65 Load 69(inF1)
+            1557:          65 ExtInst 1(GLSL.std.450) 40(FMax) 1555 1556
+                              Store 1554(r030) 1557
+            1559:          65 Load 68(inF0)
+            1560:          65 Load 69(inF1)
+            1561:          65 ExtInst 1(GLSL.std.450) 37(FMin) 1559 1560
+                              Store 1558(r031) 1561
+            1563:          65 Load 68(inF0)
+            1564:          65 Load 69(inF1)
+            1565:          65 ExtInst 1(GLSL.std.450) 26(Pow) 1563 1564
+                              Store 1562(r032) 1565
             1567:          65 Load 68(inF0)
-            1568:          65 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1567
-                              Store 1566(r035) 1568
+            1568:          65 ExtInst 1(GLSL.std.450) 11(Radians) 1567
+                              Store 1566(r033) 1568
             1570:          65 Load 68(inF0)
-            1571:   64(fvec4) CompositeConstruct 165 165 165 165
-            1572:   64(fvec4) CompositeConstruct 274 274 274 274
-            1573:          65 ExtInst 1(GLSL.std.450) 43(FClamp) 1570 1571 1572
-                              Store 1569(r036) 1573
-            1575:          65 Load 68(inF0)
-            1576:          65 ExtInst 1(GLSL.std.450) 6(FSign) 1575
-                              Store 1574(r037) 1576
-            1578:          65 Load 68(inF0)
-            1579:          65 ExtInst 1(GLSL.std.450) 13(Sin) 1578
-                              Store 1577(r038) 1579
-            1580:          65 Load 68(inF0)
-            1581:          65 ExtInst 1(GLSL.std.450) 13(Sin) 1580
-                              Store 69(inF1) 1581
-            1582:          65 Load 68(inF0)
-            1583:          65 ExtInst 1(GLSL.std.450) 14(Cos) 1582
-                              Store 70(inF2) 1583
-            1585:          65 Load 68(inF0)
-            1586:          65 ExtInst 1(GLSL.std.450) 19(Sinh) 1585
-                              Store 1584(r039) 1586
+            1571:          65 ExtInst 1(GLSL.std.450) 2(RoundEven) 1570
+                              Store 1569(r034) 1571
+            1573:          65 Load 68(inF0)
+            1574:          65 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1573
+                              Store 1572(r035) 1574
+            1576:          65 Load 68(inF0)
+            1577:   64(fvec4) CompositeConstruct 165 165 165 165
+            1578:   64(fvec4) CompositeConstruct 274 274 274 274
+            1579:          65 ExtInst 1(GLSL.std.450) 43(FClamp) 1576 1577 1578
+                              Store 1575(r036) 1579
+            1581:          65 Load 68(inF0)
+            1582:          65 ExtInst 1(GLSL.std.450) 6(FSign) 1581
+                              Store 1580(r037) 1582
+            1584:          65 Load 68(inF0)
+            1585:          65 ExtInst 1(GLSL.std.450) 13(Sin) 1584
+                              Store 1583(r038) 1585
+            1586:          65 Load 68(inF0)
+            1587:          65 ExtInst 1(GLSL.std.450) 13(Sin) 1586
+                              Store 69(inF1) 1587
             1588:          65 Load 68(inF0)
-            1589:          65 Load 69(inF1)
-            1590:          65 Load 70(inF2)
-            1591:          65 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1588 1589 1590
-                              Store 1587(r049) 1591
-            1593:          65 Load 68(inF0)
-            1594:          65 ExtInst 1(GLSL.std.450) 31(Sqrt) 1593
-                              Store 1592(r041) 1594
-            1596:          65 Load 68(inF0)
-            1597:          65 Load 69(inF1)
-            1598:          65 ExtInst 1(GLSL.std.450) 48(Step) 1596 1597
-                              Store 1595(r042) 1598
-            1600:          65 Load 68(inF0)
-            1601:          65 ExtInst 1(GLSL.std.450) 15(Tan) 1600
-                              Store 1599(r043) 1601
-            1603:          65 Load 68(inF0)
-            1604:          65 ExtInst 1(GLSL.std.450) 21(Tanh) 1603
-                              Store 1602(r044) 1604
-            1605:          65 Load 68(inF0)
-            1606:          65 Transpose 1605
-            1608:          65 Load 68(inF0)
-            1609:          65 ExtInst 1(GLSL.std.450) 3(Trunc) 1608
-                              Store 1607(r046) 1609
-                              ReturnValue 1611
+            1589:          65 ExtInst 1(GLSL.std.450) 14(Cos) 1588
+                              Store 70(inF2) 1589
+            1591:          65 Load 68(inF0)
+            1592:          65 ExtInst 1(GLSL.std.450) 19(Sinh) 1591
+                              Store 1590(r039) 1592
+            1594:          65 Load 68(inF0)
+            1595:          65 Load 69(inF1)
+            1596:          65 Load 70(inF2)
+            1597:          65 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1594 1595 1596
+                              Store 1593(r049) 1597
+            1599:          65 Load 68(inF0)
+            1600:          65 ExtInst 1(GLSL.std.450) 31(Sqrt) 1599
+                              Store 1598(r041) 1600
+            1602:          65 Load 68(inF0)
+            1603:          65 Load 69(inF1)
+            1604:          65 ExtInst 1(GLSL.std.450) 48(Step) 1602 1603
+                              Store 1601(r042) 1604
+            1606:          65 Load 68(inF0)
+            1607:          65 ExtInst 1(GLSL.std.450) 15(Tan) 1606
+                              Store 1605(r043) 1607
+            1609:          65 Load 68(inF0)
+            1610:          65 ExtInst 1(GLSL.std.450) 21(Tanh) 1609
+                              Store 1608(r044) 1610
+            1611:          65 Load 68(inF0)
+            1612:          65 Transpose 1611
+            1614:          65 Load 68(inF0)
+            1615:          65 ExtInst 1(GLSL.std.450) 3(Trunc) 1614
+                              Store 1613(r046) 1615
+                              ReturnValue 1617
                               FunctionEnd
 80(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 73
         74(inF0):      7(ptr) FunctionParameter
@@ -8086,51 +8110,51 @@
        78(inFM0):     49(ptr) FunctionParameter
        79(inFM1):     49(ptr) FunctionParameter
               81:             Label
-        1614(r0):      7(ptr) Variable Function
-        1618(r1):     25(ptr) Variable Function
-        1622(r2):     25(ptr) Variable Function
-        1626(r3):      7(ptr) Variable Function
-        1630(r4):     25(ptr) Variable Function
-        1634(r5):     25(ptr) Variable Function
-        1638(r6):     49(ptr) Variable Function
-        1642(r7):     49(ptr) Variable Function
-        1646(r8):     49(ptr) Variable Function
-            1615:    6(float) Load 74(inF0)
-            1616:    6(float) Load 75(inF1)
-            1617:    6(float) FMul 1615 1616
-                              Store 1614(r0) 1617
-            1619:   24(fvec2) Load 76(inFV0)
-            1620:    6(float) Load 74(inF0)
-            1621:   24(fvec2) VectorTimesScalar 1619 1620
-                              Store 1618(r1) 1621
-            1623:    6(float) Load 74(inF0)
-            1624:   24(fvec2) Load 76(inFV0)
-            1625:   24(fvec2) VectorTimesScalar 1624 1623
-                              Store 1622(r2) 1625
-            1627:   24(fvec2) Load 76(inFV0)
-            1628:   24(fvec2) Load 77(inFV1)
-            1629:    6(float) Dot 1627 1628
-                              Store 1626(r3) 1629
-            1631:          48 Load 78(inFM0)
-            1632:   24(fvec2) Load 76(inFV0)
-            1633:   24(fvec2) MatrixTimesVector 1631 1632
-                              Store 1630(r4) 1633
-            1635:   24(fvec2) Load 76(inFV0)
-            1636:          48 Load 78(inFM0)
-            1637:   24(fvec2) VectorTimesMatrix 1635 1636
-                              Store 1634(r5) 1637
-            1639:          48 Load 78(inFM0)
-            1640:    6(float) Load 74(inF0)
-            1641:          48 MatrixTimesScalar 1639 1640
-                              Store 1638(r6) 1641
-            1643:    6(float) Load 74(inF0)
-            1644:          48 Load 78(inFM0)
-            1645:          48 MatrixTimesScalar 1644 1643
-                              Store 1642(r7) 1645
-            1647:          48 Load 78(inFM0)
-            1648:          48 Load 79(inFM1)
-            1649:          48 MatrixTimesMatrix 1647 1648
-                              Store 1646(r8) 1649
+        1620(r0):      7(ptr) Variable Function
+        1624(r1):     25(ptr) Variable Function
+        1628(r2):     25(ptr) Variable Function
+        1632(r3):      7(ptr) Variable Function
+        1636(r4):     25(ptr) Variable Function
+        1640(r5):     25(ptr) Variable Function
+        1644(r6):     49(ptr) Variable Function
+        1648(r7):     49(ptr) Variable Function
+        1652(r8):     49(ptr) Variable Function
+            1621:    6(float) Load 74(inF0)
+            1622:    6(float) Load 75(inF1)
+            1623:    6(float) FMul 1621 1622
+                              Store 1620(r0) 1623
+            1625:   24(fvec2) Load 76(inFV0)
+            1626:    6(float) Load 74(inF0)
+            1627:   24(fvec2) VectorTimesScalar 1625 1626
+                              Store 1624(r1) 1627
+            1629:    6(float) Load 74(inF0)
+            1630:   24(fvec2) Load 76(inFV0)
+            1631:   24(fvec2) VectorTimesScalar 1630 1629
+                              Store 1628(r2) 1631
+            1633:   24(fvec2) Load 76(inFV0)
+            1634:   24(fvec2) Load 77(inFV1)
+            1635:    6(float) Dot 1633 1634
+                              Store 1632(r3) 1635
+            1637:          48 Load 78(inFM0)
+            1638:   24(fvec2) Load 76(inFV0)
+            1639:   24(fvec2) MatrixTimesVector 1637 1638
+                              Store 1636(r4) 1639
+            1641:   24(fvec2) Load 76(inFV0)
+            1642:          48 Load 78(inFM0)
+            1643:   24(fvec2) VectorTimesMatrix 1641 1642
+                              Store 1640(r5) 1643
+            1645:          48 Load 78(inFM0)
+            1646:    6(float) Load 74(inF0)
+            1647:          48 MatrixTimesScalar 1645 1646
+                              Store 1644(r6) 1647
+            1649:    6(float) Load 74(inF0)
+            1650:          48 Load 78(inFM0)
+            1651:          48 MatrixTimesScalar 1650 1649
+                              Store 1648(r7) 1651
+            1653:          48 Load 78(inFM0)
+            1654:          48 Load 79(inFM1)
+            1655:          48 MatrixTimesMatrix 1653 1654
+                              Store 1652(r8) 1655
                               Return
                               FunctionEnd
 89(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 82
@@ -8141,51 +8165,51 @@
        87(inFM0):     57(ptr) FunctionParameter
        88(inFM1):     57(ptr) FunctionParameter
               90:             Label
-        1650(r0):      7(ptr) Variable Function
-        1654(r1):     37(ptr) Variable Function
-        1658(r2):     37(ptr) Variable Function
-        1662(r3):      7(ptr) Variable Function
-        1666(r4):     37(ptr) Variable Function
-        1670(r5):     37(ptr) Variable Function
-        1674(r6):     57(ptr) Variable Function
-        1678(r7):     57(ptr) Variable Function
-        1682(r8):     57(ptr) Variable Function
-            1651:    6(float) Load 83(inF0)
-            1652:    6(float) Load 84(inF1)
-            1653:    6(float) FMul 1651 1652
-                              Store 1650(r0) 1653
-            1655:   36(fvec3) Load 85(inFV0)
-            1656:    6(float) Load 83(inF0)
-            1657:   36(fvec3) VectorTimesScalar 1655 1656
-                              Store 1654(r1) 1657
-            1659:    6(float) Load 83(inF0)
-            1660:   36(fvec3) Load 85(inFV0)
-            1661:   36(fvec3) VectorTimesScalar 1660 1659
-                              Store 1658(r2) 1661
-            1663:   36(fvec3) Load 85(inFV0)
-            1664:   36(fvec3) Load 86(inFV1)
-            1665:    6(float) Dot 1663 1664
-                              Store 1662(r3) 1665
-            1667:          56 Load 87(inFM0)
-            1668:   36(fvec3) Load 85(inFV0)
-            1669:   36(fvec3) MatrixTimesVector 1667 1668
-                              Store 1666(r4) 1669
-            1671:   36(fvec3) Load 85(inFV0)
-            1672:          56 Load 87(inFM0)
-            1673:   36(fvec3) VectorTimesMatrix 1671 1672
-                              Store 1670(r5) 1673
-            1675:          56 Load 87(inFM0)
-            1676:    6(float) Load 83(inF0)
-            1677:          56 MatrixTimesScalar 1675 1676
-                              Store 1674(r6) 1677
-            1679:    6(float) Load 83(inF0)
-            1680:          56 Load 87(inFM0)
-            1681:          56 MatrixTimesScalar 1680 1679
-                              Store 1678(r7) 1681
-            1683:          56 Load 87(inFM0)
-            1684:          56 Load 88(inFM1)
-            1685:          56 MatrixTimesMatrix 1683 1684
-                              Store 1682(r8) 1685
+        1656(r0):      7(ptr) Variable Function
+        1660(r1):     37(ptr) Variable Function
+        1664(r2):     37(ptr) Variable Function
+        1668(r3):      7(ptr) Variable Function
+        1672(r4):     37(ptr) Variable Function
+        1676(r5):     37(ptr) Variable Function
+        1680(r6):     57(ptr) Variable Function
+        1684(r7):     57(ptr) Variable Function
+        1688(r8):     57(ptr) Variable Function
+            1657:    6(float) Load 83(inF0)
+            1658:    6(float) Load 84(inF1)
+            1659:    6(float) FMul 1657 1658
+                              Store 1656(r0) 1659
+            1661:   36(fvec3) Load 85(inFV0)
+            1662:    6(float) Load 83(inF0)
+            1663:   36(fvec3) VectorTimesScalar 1661 1662
+                              Store 1660(r1) 1663
+            1665:    6(float) Load 83(inF0)
+            1666:   36(fvec3) Load 85(inFV0)
+            1667:   36(fvec3) VectorTimesScalar 1666 1665
+                              Store 1664(r2) 1667
+            1669:   36(fvec3) Load 85(inFV0)
+            1670:   36(fvec3) Load 86(inFV1)
+            1671:    6(float) Dot 1669 1670
+                              Store 1668(r3) 1671
+            1673:          56 Load 87(inFM0)
+            1674:   36(fvec3) Load 85(inFV0)
+            1675:   36(fvec3) MatrixTimesVector 1673 1674
+                              Store 1672(r4) 1675
+            1677:   36(fvec3) Load 85(inFV0)
+            1678:          56 Load 87(inFM0)
+            1679:   36(fvec3) VectorTimesMatrix 1677 1678
+                              Store 1676(r5) 1679
+            1681:          56 Load 87(inFM0)
+            1682:    6(float) Load 83(inF0)
+            1683:          56 MatrixTimesScalar 1681 1682
+                              Store 1680(r6) 1683
+            1685:    6(float) Load 83(inF0)
+            1686:          56 Load 87(inFM0)
+            1687:          56 MatrixTimesScalar 1686 1685
+                              Store 1684(r7) 1687
+            1689:          56 Load 87(inFM0)
+            1690:          56 Load 88(inFM1)
+            1691:          56 MatrixTimesMatrix 1689 1690
+                              Store 1688(r8) 1691
                               Return
                               FunctionEnd
 99(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 92
@@ -8196,51 +8220,51 @@
        97(inFM0):     66(ptr) FunctionParameter
        98(inFM1):     66(ptr) FunctionParameter
              100:             Label
-        1686(r0):      7(ptr) Variable Function
-        1690(r1):     91(ptr) Variable Function
-        1694(r2):     91(ptr) Variable Function
-        1698(r3):      7(ptr) Variable Function
-        1702(r4):     91(ptr) Variable Function
-        1706(r5):     91(ptr) Variable Function
-        1710(r6):     66(ptr) Variable Function
-        1714(r7):     66(ptr) Variable Function
-        1718(r8):     66(ptr) Variable Function
-            1687:    6(float) Load 93(inF0)
-            1688:    6(float) Load 94(inF1)
-            1689:    6(float) FMul 1687 1688
-                              Store 1686(r0) 1689
-            1691:   64(fvec4) Load 95(inFV0)
-            1692:    6(float) Load 93(inF0)
-            1693:   64(fvec4) VectorTimesScalar 1691 1692
-                              Store 1690(r1) 1693
-            1695:    6(float) Load 93(inF0)
-            1696:   64(fvec4) Load 95(inFV0)
-            1697:   64(fvec4) VectorTimesScalar 1696 1695
-                              Store 1694(r2) 1697
-            1699:   64(fvec4) Load 95(inFV0)
-            1700:   64(fvec4) Load 96(inFV1)
-            1701:    6(float) Dot 1699 1700
-                              Store 1698(r3) 1701
-            1703:          65 Load 97(inFM0)
-            1704:   64(fvec4) Load 95(inFV0)
-            1705:   64(fvec4) MatrixTimesVector 1703 1704
-                              Store 1702(r4) 1705
-            1707:   64(fvec4) Load 95(inFV0)
-            1708:          65 Load 97(inFM0)
-            1709:   64(fvec4) VectorTimesMatrix 1707 1708
-                              Store 1706(r5) 1709
-            1711:          65 Load 97(inFM0)
-            1712:    6(float) Load 93(inF0)
-            1713:          65 MatrixTimesScalar 1711 1712
-                              Store 1710(r6) 1713
-            1715:    6(float) Load 93(inF0)
-            1716:          65 Load 97(inFM0)
-            1717:          65 MatrixTimesScalar 1716 1715
-                              Store 1714(r7) 1717
-            1719:          65 Load 97(inFM0)
-            1720:          65 Load 98(inFM1)
-            1721:          65 MatrixTimesMatrix 1719 1720
-                              Store 1718(r8) 1721
+        1692(r0):      7(ptr) Variable Function
+        1696(r1):     91(ptr) Variable Function
+        1700(r2):     91(ptr) Variable Function
+        1704(r3):      7(ptr) Variable Function
+        1708(r4):     91(ptr) Variable Function
+        1712(r5):     91(ptr) Variable Function
+        1716(r6):     66(ptr) Variable Function
+        1720(r7):     66(ptr) Variable Function
+        1724(r8):     66(ptr) Variable Function
+            1693:    6(float) Load 93(inF0)
+            1694:    6(float) Load 94(inF1)
+            1695:    6(float) FMul 1693 1694
+                              Store 1692(r0) 1695
+            1697:   64(fvec4) Load 95(inFV0)
+            1698:    6(float) Load 93(inF0)
+            1699:   64(fvec4) VectorTimesScalar 1697 1698
+                              Store 1696(r1) 1699
+            1701:    6(float) Load 93(inF0)
+            1702:   64(fvec4) Load 95(inFV0)
+            1703:   64(fvec4) VectorTimesScalar 1702 1701
+                              Store 1700(r2) 1703
+            1705:   64(fvec4) Load 95(inFV0)
+            1706:   64(fvec4) Load 96(inFV1)
+            1707:    6(float) Dot 1705 1706
+                              Store 1704(r3) 1707
+            1709:          65 Load 97(inFM0)
+            1710:   64(fvec4) Load 95(inFV0)
+            1711:   64(fvec4) MatrixTimesVector 1709 1710
+                              Store 1708(r4) 1711
+            1713:   64(fvec4) Load 95(inFV0)
+            1714:          65 Load 97(inFM0)
+            1715:   64(fvec4) VectorTimesMatrix 1713 1714
+                              Store 1712(r5) 1715
+            1717:          65 Load 97(inFM0)
+            1718:    6(float) Load 93(inF0)
+            1719:          65 MatrixTimesScalar 1717 1718
+                              Store 1716(r6) 1719
+            1721:    6(float) Load 93(inF0)
+            1722:          65 Load 97(inFM0)
+            1723:          65 MatrixTimesScalar 1722 1721
+                              Store 1720(r7) 1723
+            1725:          65 Load 97(inFM0)
+            1726:          65 Load 98(inFM1)
+            1727:          65 MatrixTimesMatrix 1725 1726
+                              Store 1724(r8) 1727
                               Return
                               FunctionEnd
 119(TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42;):           2 Function None 109
@@ -8254,90 +8278,90 @@
     117(inFM3x4):    106(ptr) FunctionParameter
     118(inFM2x4):    108(ptr) FunctionParameter
              120:             Label
-       1722(r00):      7(ptr) Variable Function
-       1726(r01):     25(ptr) Variable Function
-       1730(r02):     37(ptr) Variable Function
-       1734(r03):     25(ptr) Variable Function
-       1738(r04):     37(ptr) Variable Function
-       1742(r05):      7(ptr) Variable Function
-       1746(r06):      7(ptr) Variable Function
-       1750(r07):     37(ptr) Variable Function
-       1754(r08):     25(ptr) Variable Function
-       1758(r09):     25(ptr) Variable Function
-       1762(r10):     37(ptr) Variable Function
-       1766(r11):    102(ptr) Variable Function
-       1770(r12):    104(ptr) Variable Function
-       1774(r13):     49(ptr) Variable Function
-       1778(r14):    102(ptr) Variable Function
-       1782(r15):    108(ptr) Variable Function
-       1786(r16):    106(ptr) Variable Function
-            1723:    6(float) Load 110(inF0)
-            1724:    6(float) Load 111(inF1)
-            1725:    6(float) FMul 1723 1724
-                              Store 1722(r00) 1725
-            1727:   24(fvec2) Load 112(inFV2)
-            1728:    6(float) Load 110(inF0)
-            1729:   24(fvec2) VectorTimesScalar 1727 1728
-                              Store 1726(r01) 1729
-            1731:   36(fvec3) Load 113(inFV3)
-            1732:    6(float) Load 110(inF0)
-            1733:   36(fvec3) VectorTimesScalar 1731 1732
-                              Store 1730(r02) 1733
-            1735:    6(float) Load 110(inF0)
-            1736:   24(fvec2) Load 112(inFV2)
-            1737:   24(fvec2) VectorTimesScalar 1736 1735
-                              Store 1734(r03) 1737
-            1739:    6(float) Load 110(inF0)
-            1740:   36(fvec3) Load 113(inFV3)
-            1741:   36(fvec3) VectorTimesScalar 1740 1739
-                              Store 1738(r04) 1741
-            1743:   24(fvec2) Load 112(inFV2)
-            1744:   24(fvec2) Load 112(inFV2)
-            1745:    6(float) Dot 1743 1744
-                              Store 1742(r05) 1745
-            1747:   36(fvec3) Load 113(inFV3)
-            1748:   36(fvec3) Load 113(inFV3)
-            1749:    6(float) Dot 1747 1748
-                              Store 1746(r06) 1749
-            1751:   24(fvec2) Load 112(inFV2)
-            1752:         101 Load 114(inFM2x3)
-            1753:   36(fvec3) VectorTimesMatrix 1751 1752
-                              Store 1750(r07) 1753
-            1755:   36(fvec3) Load 113(inFV3)
-            1756:         103 Load 115(inFM3x2)
-            1757:   24(fvec2) VectorTimesMatrix 1755 1756
-                              Store 1754(r08) 1757
-            1759:         101 Load 114(inFM2x3)
-            1760:   36(fvec3) Load 113(inFV3)
-            1761:   24(fvec2) MatrixTimesVector 1759 1760
-                              Store 1758(r09) 1761
-            1763:         103 Load 115(inFM3x2)
-            1764:   24(fvec2) Load 112(inFV2)
-            1765:   36(fvec3) MatrixTimesVector 1763 1764
-                              Store 1762(r10) 1765
-            1767:         101 Load 114(inFM2x3)
-            1768:    6(float) Load 110(inF0)
-            1769:         101 MatrixTimesScalar 1767 1768
-                              Store 1766(r11) 1769
-            1771:         103 Load 115(inFM3x2)
-            1772:    6(float) Load 110(inF0)
-            1773:         103 MatrixTimesScalar 1771 1772
-                              Store 1770(r12) 1773
-            1775:         101 Load 114(inFM2x3)
-            1776:         103 Load 115(inFM3x2)
-            1777:          48 MatrixTimesMatrix 1775 1776
-                              Store 1774(r13) 1777
-            1779:         101 Load 114(inFM2x3)
-            1780:          56 Load 116(inFM3x3)
-            1781:         101 MatrixTimesMatrix 1779 1780
-                              Store 1778(r14) 1781
-            1783:         101 Load 114(inFM2x3)
-            1784:         105 Load 117(inFM3x4)
-            1785:         107 MatrixTimesMatrix 1783 1784
-                              Store 1782(r15) 1785
-            1787:         103 Load 115(inFM3x2)
-            1788:         107 Load 118(inFM2x4)
-            1789:         105 MatrixTimesMatrix 1787 1788
-                              Store 1786(r16) 1789
+       1728(r00):      7(ptr) Variable Function
+       1732(r01):     25(ptr) Variable Function
+       1736(r02):     37(ptr) Variable Function
+       1740(r03):     25(ptr) Variable Function
+       1744(r04):     37(ptr) Variable Function
+       1748(r05):      7(ptr) Variable Function
+       1752(r06):      7(ptr) Variable Function
+       1756(r07):     37(ptr) Variable Function
+       1760(r08):     25(ptr) Variable Function
+       1764(r09):     25(ptr) Variable Function
+       1768(r10):     37(ptr) Variable Function
+       1772(r11):    102(ptr) Variable Function
+       1776(r12):    104(ptr) Variable Function
+       1780(r13):     49(ptr) Variable Function
+       1784(r14):    102(ptr) Variable Function
+       1788(r15):    108(ptr) Variable Function
+       1792(r16):    106(ptr) Variable Function
+            1729:    6(float) Load 110(inF0)
+            1730:    6(float) Load 111(inF1)
+            1731:    6(float) FMul 1729 1730
+                              Store 1728(r00) 1731
+            1733:   24(fvec2) Load 112(inFV2)
+            1734:    6(float) Load 110(inF0)
+            1735:   24(fvec2) VectorTimesScalar 1733 1734
+                              Store 1732(r01) 1735
+            1737:   36(fvec3) Load 113(inFV3)
+            1738:    6(float) Load 110(inF0)
+            1739:   36(fvec3) VectorTimesScalar 1737 1738
+                              Store 1736(r02) 1739
+            1741:    6(float) Load 110(inF0)
+            1742:   24(fvec2) Load 112(inFV2)
+            1743:   24(fvec2) VectorTimesScalar 1742 1741
+                              Store 1740(r03) 1743
+            1745:    6(float) Load 110(inF0)
+            1746:   36(fvec3) Load 113(inFV3)
+            1747:   36(fvec3) VectorTimesScalar 1746 1745
+                              Store 1744(r04) 1747
+            1749:   24(fvec2) Load 112(inFV2)
+            1750:   24(fvec2) Load 112(inFV2)
+            1751:    6(float) Dot 1749 1750
+                              Store 1748(r05) 1751
+            1753:   36(fvec3) Load 113(inFV3)
+            1754:   36(fvec3) Load 113(inFV3)
+            1755:    6(float) Dot 1753 1754
+                              Store 1752(r06) 1755
+            1757:   24(fvec2) Load 112(inFV2)
+            1758:         101 Load 114(inFM2x3)
+            1759:   36(fvec3) VectorTimesMatrix 1757 1758
+                              Store 1756(r07) 1759
+            1761:   36(fvec3) Load 113(inFV3)
+            1762:         103 Load 115(inFM3x2)
+            1763:   24(fvec2) VectorTimesMatrix 1761 1762
+                              Store 1760(r08) 1763
+            1765:         101 Load 114(inFM2x3)
+            1766:   36(fvec3) Load 113(inFV3)
+            1767:   24(fvec2) MatrixTimesVector 1765 1766
+                              Store 1764(r09) 1767
+            1769:         103 Load 115(inFM3x2)
+            1770:   24(fvec2) Load 112(inFV2)
+            1771:   36(fvec3) MatrixTimesVector 1769 1770
+                              Store 1768(r10) 1771
+            1773:         101 Load 114(inFM2x3)
+            1774:    6(float) Load 110(inF0)
+            1775:         101 MatrixTimesScalar 1773 1774
+                              Store 1772(r11) 1775
+            1777:         103 Load 115(inFM3x2)
+            1778:    6(float) Load 110(inF0)
+            1779:         103 MatrixTimesScalar 1777 1778
+                              Store 1776(r12) 1779
+            1781:         101 Load 114(inFM2x3)
+            1782:         103 Load 115(inFM3x2)
+            1783:          48 MatrixTimesMatrix 1781 1782
+                              Store 1780(r13) 1783
+            1785:         101 Load 114(inFM2x3)
+            1786:          56 Load 116(inFM3x3)
+            1787:         101 MatrixTimesMatrix 1785 1786
+                              Store 1784(r14) 1787
+            1789:         101 Load 114(inFM2x3)
+            1790:         105 Load 117(inFM3x4)
+            1791:         107 MatrixTimesMatrix 1789 1790
+                              Store 1788(r15) 1791
+            1793:         103 Load 115(inFM3x2)
+            1794:         107 Load 118(inFM2x4)
+            1795:         105 MatrixTimesMatrix 1793 1794
+                              Store 1792(r16) 1795
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
new file mode 100644
index 0000000..c9f4c91
--- /dev/null
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -0,0 +1,366 @@
+hlsl.load.2dms.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:57  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:28    Function Parameters: 
+0:?     Sequence
+0:32      textureFetch (global 4-component vector of float)
+0:32        'g_tTex2dmsf4' (uniform texture2DMS)
+0:32        'c2' (uniform 2-component vector of int)
+0:32        Constant:
+0:32          3 (const int)
+0:33      textureFetch (global 4-component vector of int)
+0:33        'g_tTex2dmsi4' (uniform itexture2DMS)
+0:33        'c2' (uniform 2-component vector of int)
+0:33        Constant:
+0:33          3 (const int)
+0:34      textureFetch (global 4-component vector of uint)
+0:34        'g_tTex2dmsu4' (uniform utexture2DMS)
+0:34        'c2' (uniform 2-component vector of int)
+0:34        Constant:
+0:34          3 (const int)
+0:37      textureFetchOffset (global 4-component vector of float)
+0:37        'g_tTex2dmsf4' (uniform texture2DMS)
+0:37        'c2' (uniform 2-component vector of int)
+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:38        'g_tTex2dmsi4' (uniform itexture2DMS)
+0:38        'c2' (uniform 2-component vector of int)
+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:39        'g_tTex2dmsu4' (uniform utexture2DMS)
+0:39        'c2' (uniform 2-component vector of int)
+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:42        'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:42        'c3' (uniform 3-component vector of int)
+0:42        Constant:
+0:42          3 (const int)
+0:43      textureFetch (global 4-component vector of int)
+0:43        'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:43        'c3' (uniform 3-component vector of int)
+0:43        Constant:
+0:43          3 (const int)
+0:44      textureFetch (global 4-component vector of uint)
+0:44        'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:44        'c3' (uniform 3-component vector of int)
+0:44        Constant:
+0:44          3 (const int)
+0:47      textureFetchOffset (global 4-component vector of float)
+0:47        'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:47        'c3' (uniform 3-component vector of int)
+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:48        'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:48        'c3' (uniform 3-component vector of int)
+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:49        'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:49        'c3' (uniform 3-component vector of int)
+0:49        Constant:
+0:49          3 (const int)
+0:49        'o2' (uniform 2-component vector of int)
+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 FragDepth Depth})
+0:51          Constant:
+0:51            0 (const int)
+0:51        Constant:
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:52      move second child to first child (temp float)
+0:52        Depth: direct index for structure (temp float FragDepth)
+0:52          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:52          Constant:
+0:52            1 (const int)
+0:52        Constant:
+0:52          1.000000
+0:54      Branch: Return with expression
+0:54        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex2dmsf4' (uniform texture2DMS)
+0:?     'g_tTex2dmsi4' (uniform itexture2DMS)
+0:?     'g_tTex2dmsu4' (uniform utexture2DMS)
+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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:57  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:28    Function Parameters: 
+0:?     Sequence
+0:32      textureFetch (global 4-component vector of float)
+0:32        'g_tTex2dmsf4' (uniform texture2DMS)
+0:32        'c2' (uniform 2-component vector of int)
+0:32        Constant:
+0:32          3 (const int)
+0:33      textureFetch (global 4-component vector of int)
+0:33        'g_tTex2dmsi4' (uniform itexture2DMS)
+0:33        'c2' (uniform 2-component vector of int)
+0:33        Constant:
+0:33          3 (const int)
+0:34      textureFetch (global 4-component vector of uint)
+0:34        'g_tTex2dmsu4' (uniform utexture2DMS)
+0:34        'c2' (uniform 2-component vector of int)
+0:34        Constant:
+0:34          3 (const int)
+0:37      textureFetchOffset (global 4-component vector of float)
+0:37        'g_tTex2dmsf4' (uniform texture2DMS)
+0:37        'c2' (uniform 2-component vector of int)
+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:38        'g_tTex2dmsi4' (uniform itexture2DMS)
+0:38        'c2' (uniform 2-component vector of int)
+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:39        'g_tTex2dmsu4' (uniform utexture2DMS)
+0:39        'c2' (uniform 2-component vector of int)
+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:42        'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:42        'c3' (uniform 3-component vector of int)
+0:42        Constant:
+0:42          3 (const int)
+0:43      textureFetch (global 4-component vector of int)
+0:43        'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:43        'c3' (uniform 3-component vector of int)
+0:43        Constant:
+0:43          3 (const int)
+0:44      textureFetch (global 4-component vector of uint)
+0:44        'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:44        'c3' (uniform 3-component vector of int)
+0:44        Constant:
+0:44          3 (const int)
+0:47      textureFetchOffset (global 4-component vector of float)
+0:47        'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:47        'c3' (uniform 3-component vector of int)
+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:48        'g_tTex2dmsi4a' (uniform itexture2DMSArray)
+0:48        'c3' (uniform 3-component vector of int)
+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:49        'g_tTex2dmsu4a' (uniform utexture2DMSArray)
+0:49        'c3' (uniform 3-component vector of int)
+0:49        Constant:
+0:49          3 (const int)
+0:49        'o2' (uniform 2-component vector of int)
+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 FragDepth Depth})
+0:51          Constant:
+0:51            0 (const int)
+0:51        Constant:
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:52      move second child to first child (temp float)
+0:52        Depth: direct index for structure (temp float FragDepth)
+0:52          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:52          Constant:
+0:52            1 (const int)
+0:52        Constant:
+0:52          1.000000
+0:54      Branch: Return with expression
+0:54        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex2dmsf4' (uniform texture2DMS)
+0:?     'g_tTex2dmsi4' (uniform itexture2DMS)
+0:?     'g_tTex2dmsu4' (uniform utexture2DMS)
+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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 103
+
+                              Capability Shader
+                              Capability ImageGatherExtended
+                              Capability ImageMSArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 95  "g_sSamp"
+                              Name 97  "c1"
+                              Name 99  "c4"
+                              Name 100  "o1"
+                              Name 101  "o3"
+                              Name 102  "o4"
+                              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
+                              MemberDecorate 80(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 95(g_sSamp) DescriptorSet 0
+                              Decorate 95(g_sSamp) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 2D multi-sampled sampled format:Unknown
+               8:             TypePointer UniformConstant 7
+ 9(g_tTex2dmsf4):      8(ptr) Variable UniformConstant
+              11:             TypeInt 32 1
+              12:             TypeVector 11(int) 2
+              13:             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)
+              93:             TypeSampler
+              94:             TypePointer UniformConstant 93
+     95(g_sSamp):     94(ptr) Variable UniformConstant
+              96:             TypePointer UniformConstant 11(int)
+          97(c1):     96(ptr) Variable UniformConstant
+              98:             TypePointer UniformConstant 24(ivec4)
+          99(c4):     98(ptr) Variable UniformConstant
+         100(o1):     96(ptr) Variable UniformConstant
+         101(o3):     52(ptr) Variable UniformConstant
+         102(o4):     98(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+       82(psout):     81(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
+              91:80(PS_OUTPUT) Load 82(psout)
+                              ReturnValue 91
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
new file mode 100644
index 0000000..ea7e347
--- /dev/null
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -0,0 +1,503 @@
+hlsl.load.array.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:72  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:48    Function Parameters: 
+0:?     Sequence
+0:52      textureFetch (global 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          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          Constant:
+0:52            2 (const int)
+0:53      textureFetch (global 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          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          Constant:
+0:53            2 (const int)
+0:54      textureFetch (global 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          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          Constant:
+0:54            2 (const int)
+0:57      textureFetch (global 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          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+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          Constant:
+0:57            3 (const int)
+0:58      textureFetch (global 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          Sequence
+0:58            Constant:
+0:58              0 (const int)
+0:58            Constant:
+0:58              1 (const int)
+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          Constant:
+0:58            3 (const int)
+0:59      textureFetch (global 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          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+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          Constant:
+0:59            3 (const int)
+0:67      move second child to first child (temp 4-component vector of float)
+0:67        Color: direct index for structure (temp 4-component vector of float)
+0:67          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:67          Constant:
+0:67            0 (const int)
+0:67        Constant:
+0:67          1.000000
+0:67          1.000000
+0:67          1.000000
+0:67          1.000000
+0:68      move second child to first child (temp float)
+0:68        Depth: direct index for structure (temp float FragDepth)
+0:68          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:68          Constant:
+0:68            1 (const int)
+0:68        Constant:
+0:68          1.000000
+0:70      Branch: Return with expression
+0:70        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:72  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:48    Function Parameters: 
+0:?     Sequence
+0:52      textureFetch (global 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          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          Constant:
+0:52            2 (const int)
+0:53      textureFetch (global 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          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          Constant:
+0:53            2 (const int)
+0:54      textureFetch (global 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          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          Constant:
+0:54            2 (const int)
+0:57      textureFetch (global 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          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+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          Constant:
+0:57            3 (const int)
+0:58      textureFetch (global 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          Sequence
+0:58            Constant:
+0:58              0 (const int)
+0:58            Constant:
+0:58              1 (const int)
+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          Constant:
+0:58            3 (const int)
+0:59      textureFetch (global 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          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+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          Constant:
+0:59            3 (const int)
+0:67      move second child to first child (temp 4-component vector of float)
+0:67        Color: direct index for structure (temp 4-component vector of float)
+0:67          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:67          Constant:
+0:67            0 (const int)
+0:67        Constant:
+0:67          1.000000
+0:67          1.000000
+0:67          1.000000
+0:67          1.000000
+0:68      move second child to first child (temp float)
+0:68        Depth: direct index for structure (temp float FragDepth)
+0:68          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:68          Constant:
+0:68            1 (const int)
+0:68        Constant:
+0:68          1.000000
+0:70      Branch: Return with expression
+0:70        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 143
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 90  "g_sSamp"
+                              Name 93  "g_tTex1df4"
+                              Name 96  "g_tTex1di4"
+                              Name 99  "g_tTex1du4"
+                              Name 102  "g_tTex2df4"
+                              Name 105  "g_tTex2di4"
+                              Name 108  "g_tTex2du4"
+                              Name 111  "g_tTex3df4"
+                              Name 114  "g_tTex3di4"
+                              Name 117  "g_tTex3du4"
+                              Name 120  "g_tTexcdf4"
+                              Name 123  "g_tTexcdi4"
+                              Name 126  "g_tTexcdu4"
+                              Name 129  "g_tTexcdf4a"
+                              Name 132  "g_tTexcdi4a"
+                              Name 135  "g_tTexcdu4a"
+                              Name 136  "c1"
+                              Name 138  "c2"
+                              Name 139  "o1"
+                              Name 140  "o2"
+                              Name 141  "o3"
+                              Name 142  "o4"
+                              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
+                              MemberDecorate 75(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 90(g_sSamp) DescriptorSet 0
+                              Decorate 90(g_sSamp) Binding 0
+                              Decorate 93(g_tTex1df4) DescriptorSet 0
+                              Decorate 93(g_tTex1df4) Binding 0
+                              Decorate 96(g_tTex1di4) DescriptorSet 0
+                              Decorate 99(g_tTex1du4) DescriptorSet 0
+                              Decorate 102(g_tTex2df4) DescriptorSet 0
+                              Decorate 105(g_tTex2di4) DescriptorSet 0
+                              Decorate 108(g_tTex2du4) DescriptorSet 0
+                              Decorate 111(g_tTex3df4) DescriptorSet 0
+                              Decorate 114(g_tTex3di4) DescriptorSet 0
+                              Decorate 117(g_tTex3du4) DescriptorSet 0
+                              Decorate 120(g_tTexcdf4) DescriptorSet 0
+                              Decorate 123(g_tTexcdi4) DescriptorSet 0
+                              Decorate 126(g_tTexcdu4) DescriptorSet 0
+                              Decorate 129(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 132(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 135(g_tTexcdu4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 1D array sampled format:Unknown
+               8:             TypePointer UniformConstant 7
+  9(g_tTex1df4a):      8(ptr) Variable UniformConstant
+              11:             TypeInt 32 1
+              12:             TypeVector 11(int) 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)
+              88:             TypeSampler
+              89:             TypePointer UniformConstant 88
+     90(g_sSamp):     89(ptr) Variable UniformConstant
+              91:             TypeImage 6(float) 1D sampled format:Unknown
+              92:             TypePointer UniformConstant 91
+  93(g_tTex1df4):     92(ptr) Variable UniformConstant
+              94:             TypeImage 11(int) 1D sampled format:Unknown
+              95:             TypePointer UniformConstant 94
+  96(g_tTex1di4):     95(ptr) Variable UniformConstant
+              97:             TypeImage 18(int) 1D sampled format:Unknown
+              98:             TypePointer UniformConstant 97
+  99(g_tTex1du4):     98(ptr) Variable UniformConstant
+             100:             TypeImage 6(float) 2D sampled format:Unknown
+             101:             TypePointer UniformConstant 100
+ 102(g_tTex2df4):    101(ptr) Variable UniformConstant
+             103:             TypeImage 11(int) 2D sampled format:Unknown
+             104:             TypePointer UniformConstant 103
+ 105(g_tTex2di4):    104(ptr) Variable UniformConstant
+             106:             TypeImage 18(int) 2D sampled format:Unknown
+             107:             TypePointer UniformConstant 106
+ 108(g_tTex2du4):    107(ptr) Variable UniformConstant
+             109:             TypeImage 6(float) 3D sampled format:Unknown
+             110:             TypePointer UniformConstant 109
+ 111(g_tTex3df4):    110(ptr) Variable UniformConstant
+             112:             TypeImage 11(int) 3D sampled format:Unknown
+             113:             TypePointer UniformConstant 112
+ 114(g_tTex3di4):    113(ptr) Variable UniformConstant
+             115:             TypeImage 18(int) 3D sampled format:Unknown
+             116:             TypePointer UniformConstant 115
+ 117(g_tTex3du4):    116(ptr) Variable UniformConstant
+             118:             TypeImage 6(float) Cube sampled format:Unknown
+             119:             TypePointer UniformConstant 118
+ 120(g_tTexcdf4):    119(ptr) Variable UniformConstant
+             121:             TypeImage 11(int) Cube sampled format:Unknown
+             122:             TypePointer UniformConstant 121
+ 123(g_tTexcdi4):    122(ptr) Variable UniformConstant
+             124:             TypeImage 18(int) Cube sampled format:Unknown
+             125:             TypePointer UniformConstant 124
+ 126(g_tTexcdu4):    125(ptr) Variable UniformConstant
+             127:             TypeImage 6(float) Cube array sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+129(g_tTexcdf4a):    128(ptr) Variable UniformConstant
+             130:             TypeImage 11(int) Cube array sampled format:Unknown
+             131:             TypePointer UniformConstant 130
+132(g_tTexcdi4a):    131(ptr) Variable UniformConstant
+             133:             TypeImage 18(int) Cube array sampled format:Unknown
+             134:             TypePointer UniformConstant 133
+135(g_tTexcdu4a):    134(ptr) Variable UniformConstant
+         136(c1):     20(ptr) Variable UniformConstant
+             137:             TypePointer UniformConstant 15(ivec2)
+         138(c2):    137(ptr) Variable UniformConstant
+         139(o1):     20(ptr) Variable UniformConstant
+         140(o2):    137(ptr) Variable UniformConstant
+         141(o3):     13(ptr) Variable UniformConstant
+         142(o4):     49(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+       77(psout):     76(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
+              86:75(PS_OUTPUT) Load 77(psout)
+                              ReturnValue 86
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
new file mode 100644
index 0000000..54f964e
--- /dev/null
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -0,0 +1,589 @@
+hlsl.load.basic.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:77  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:48    Function Parameters: 
+0:?     Sequence
+0:52      textureFetch (global 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          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          Constant:
+0:52            1 (const int)
+0:53      textureFetch (global 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          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          Constant:
+0:53            1 (const int)
+0:54      textureFetch (global 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          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          Constant:
+0:54            1 (const int)
+0:57      textureFetch (global 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          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          Constant:
+0:57            2 (const int)
+0:58      textureFetch (global 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          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          Constant:
+0:58            2 (const int)
+0:59      textureFetch (global 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          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          Constant:
+0:59            2 (const int)
+0:62      textureFetch (global 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          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+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          Constant:
+0:62            3 (const int)
+0:63      textureFetch (global 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          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        direct index (temp int)
+0:63          'c4' (uniform 4-component vector of int)
+0:63          Constant:
+0:63            3 (const int)
+0:64      textureFetch (global 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          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+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          Constant:
+0:64            3 (const int)
+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 FragDepth Depth})
+0:72          Constant:
+0:72            0 (const int)
+0:72        Constant:
+0:72          1.000000
+0:72          1.000000
+0:72          1.000000
+0:72          1.000000
+0:73      move second child to first child (temp float)
+0:73        Depth: direct index for structure (temp float FragDepth)
+0:73          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:73          Constant:
+0:73            1 (const int)
+0:73        Constant:
+0:73          1.000000
+0:75      Branch: Return with expression
+0:75        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:77  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:48    Function Parameters: 
+0:?     Sequence
+0:52      textureFetch (global 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          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          Constant:
+0:52            1 (const int)
+0:53      textureFetch (global 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          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          Constant:
+0:53            1 (const int)
+0:54      textureFetch (global 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          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          Constant:
+0:54            1 (const int)
+0:57      textureFetch (global 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          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          Constant:
+0:57            2 (const int)
+0:58      textureFetch (global 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          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          Constant:
+0:58            2 (const int)
+0:59      textureFetch (global 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          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          Constant:
+0:59            2 (const int)
+0:62      textureFetch (global 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          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+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          Constant:
+0:62            3 (const int)
+0:63      textureFetch (global 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          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        direct index (temp int)
+0:63          'c4' (uniform 4-component vector of int)
+0:63          Constant:
+0:63            3 (const int)
+0:64      textureFetch (global 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          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+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          Constant:
+0:64            3 (const int)
+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 FragDepth Depth})
+0:72          Constant:
+0:72            0 (const int)
+0:72        Constant:
+0:72          1.000000
+0:72          1.000000
+0:72          1.000000
+0:72          1.000000
+0:73      move second child to first child (temp float)
+0:73        Depth: direct index for structure (temp float FragDepth)
+0:73          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:73          Constant:
+0:73            1 (const int)
+0:73        Constant:
+0:73          1.000000
+0:75      Branch: Return with expression
+0:75        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 163
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 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"
+                              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
+                              MemberDecorate 106(PS_OUTPUT) 1 BuiltIn FragDepth
+                              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
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 1D sampled format:Unknown
+               8:             TypePointer UniformConstant 7
+   9(g_tTex1df4):      8(ptr) Variable UniformConstant
+              11:             TypeInt 32 1
+              12:             TypeVector 11(int) 2
+              13:             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)
+             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
+         4(main):           2 Function None 3
+               5:             Label
+      108(psout):    107(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
+             117:106(PS_OUTPUT) Load 108(psout)
+                              ReturnValue 117
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
new file mode 100644
index 0000000..cd4fea5
--- /dev/null
+++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -0,0 +1,567 @@
+hlsl.load.basic.dx10.vert
+Shader version: 450
+0:? Sequence
+0:71  Function Definition: main( (global structure{temp 4-component vector of float FragCoord Pos})
+0:47    Function Parameters: 
+0:?     Sequence
+0:51      textureFetch (global 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          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          Constant:
+0:51            1 (const int)
+0:52      textureFetch (global 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          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          Constant:
+0:52            1 (const int)
+0:53      textureFetch (global 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          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          Constant:
+0:53            1 (const int)
+0:56      textureFetch (global 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          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          Constant:
+0:56            2 (const int)
+0:57      textureFetch (global 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          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          Constant:
+0:57            2 (const int)
+0:58      textureFetch (global 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          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          Constant:
+0:58            2 (const int)
+0:61      textureFetch (global 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          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+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          Constant:
+0:61            3 (const int)
+0:62      textureFetch (global 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          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+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          Constant:
+0:62            3 (const int)
+0:63      textureFetch (global 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          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        direct index (temp int)
+0:63          'c4' (uniform 4-component vector of int)
+0:63          Constant:
+0:63            3 (const int)
+0:67      move second child to first child (temp 4-component vector of float)
+0:67        Pos: direct index for structure (temp 4-component vector of float FragCoord)
+0:67          'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:67          Constant:
+0:67            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:69      Branch: Return with expression
+0:69        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+0:? Sequence
+0:71  Function Definition: main( (global structure{temp 4-component vector of float FragCoord Pos})
+0:47    Function Parameters: 
+0:?     Sequence
+0:51      textureFetch (global 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          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          Constant:
+0:51            1 (const int)
+0:52      textureFetch (global 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          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          Constant:
+0:52            1 (const int)
+0:53      textureFetch (global 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          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          Constant:
+0:53            1 (const int)
+0:56      textureFetch (global 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          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          Constant:
+0:56            2 (const int)
+0:57      textureFetch (global 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          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          Constant:
+0:57            2 (const int)
+0:58      textureFetch (global 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          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          Constant:
+0:58            2 (const int)
+0:61      textureFetch (global 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          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+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          Constant:
+0:61            3 (const int)
+0:62      textureFetch (global 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          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+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          Constant:
+0:62            3 (const int)
+0:63      textureFetch (global 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          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        direct index (temp int)
+0:63          'c4' (uniform 4-component vector of int)
+0:63          Constant:
+0:63            3 (const int)
+0:67      move second child to first child (temp 4-component vector of float)
+0:67        Pos: direct index for structure (temp 4-component vector of float FragCoord)
+0:67          'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:67          Constant:
+0:67            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:69      Branch: Return with expression
+0:69        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 160
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main"
+                              Source HLSL 450
+                              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 118  "g_sSamp"
+                              Name 121  "g_tTexcdf4"
+                              Name 124  "g_tTexcdi4"
+                              Name 127  "g_tTexcdu4"
+                              Name 130  "g_tTex1df4a"
+                              Name 133  "g_tTex1di4a"
+                              Name 136  "g_tTex1du4a"
+                              Name 139  "g_tTex2df4a"
+                              Name 142  "g_tTex2di4a"
+                              Name 145  "g_tTex2du4a"
+                              Name 148  "g_tTexcdf4a"
+                              Name 151  "g_tTexcdi4a"
+                              Name 154  "g_tTexcdu4a"
+                              Name 155  "c1"
+                              Name 156  "o1"
+                              Name 157  "o2"
+                              Name 158  "o3"
+                              Name 159  "o4"
+                              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
+                              MemberDecorate 106(VS_OUTPUT) 0 BuiltIn FragCoord
+                              Decorate 118(g_sSamp) DescriptorSet 0
+                              Decorate 118(g_sSamp) Binding 0
+                              Decorate 121(g_tTexcdf4) DescriptorSet 0
+                              Decorate 124(g_tTexcdi4) DescriptorSet 0
+                              Decorate 127(g_tTexcdu4) DescriptorSet 0
+                              Decorate 130(g_tTex1df4a) DescriptorSet 0
+                              Decorate 133(g_tTex1di4a) DescriptorSet 0
+                              Decorate 136(g_tTex1du4a) DescriptorSet 0
+                              Decorate 139(g_tTex2df4a) DescriptorSet 0
+                              Decorate 142(g_tTex2di4a) DescriptorSet 0
+                              Decorate 145(g_tTex2du4a) DescriptorSet 0
+                              Decorate 148(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 151(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 154(g_tTexcdu4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 1D sampled format:Unknown
+               8:             TypePointer UniformConstant 7
+   9(g_tTex1df4):      8(ptr) Variable UniformConstant
+              11:             TypeInt 32 1
+              12:             TypeVector 11(int) 2
+              13:             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)
+             116:             TypeSampler
+             117:             TypePointer UniformConstant 116
+    118(g_sSamp):    117(ptr) Variable UniformConstant
+             119:             TypeImage 6(float) Cube sampled format:Unknown
+             120:             TypePointer UniformConstant 119
+ 121(g_tTexcdf4):    120(ptr) Variable UniformConstant
+             122:             TypeImage 11(int) Cube sampled format:Unknown
+             123:             TypePointer UniformConstant 122
+ 124(g_tTexcdi4):    123(ptr) Variable UniformConstant
+             125:             TypeImage 15(int) Cube sampled format:Unknown
+             126:             TypePointer UniformConstant 125
+ 127(g_tTexcdu4):    126(ptr) Variable UniformConstant
+             128:             TypeImage 6(float) 1D array sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+130(g_tTex1df4a):    129(ptr) Variable UniformConstant
+             131:             TypeImage 11(int) 1D array sampled format:Unknown
+             132:             TypePointer UniformConstant 131
+133(g_tTex1di4a):    132(ptr) Variable UniformConstant
+             134:             TypeImage 15(int) 1D array sampled format:Unknown
+             135:             TypePointer UniformConstant 134
+136(g_tTex1du4a):    135(ptr) Variable UniformConstant
+             137:             TypeImage 6(float) 2D array sampled format:Unknown
+             138:             TypePointer UniformConstant 137
+139(g_tTex2df4a):    138(ptr) Variable UniformConstant
+             140:             TypeImage 11(int) 2D array sampled format:Unknown
+             141:             TypePointer UniformConstant 140
+142(g_tTex2di4a):    141(ptr) Variable UniformConstant
+             143:             TypeImage 15(int) 2D array sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+145(g_tTex2du4a):    144(ptr) Variable UniformConstant
+             146:             TypeImage 6(float) Cube array sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+148(g_tTexcdf4a):    147(ptr) Variable UniformConstant
+             149:             TypeImage 11(int) Cube array sampled format:Unknown
+             150:             TypePointer UniformConstant 149
+151(g_tTexcdi4a):    150(ptr) Variable UniformConstant
+             152:             TypeImage 15(int) Cube array sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+154(g_tTexcdu4a):    153(ptr) Variable UniformConstant
+         155(c1):     17(ptr) Variable UniformConstant
+         156(o1):     17(ptr) Variable UniformConstant
+         157(o2):     13(ptr) Variable UniformConstant
+         158(o3):     50(ptr) Variable UniformConstant
+         159(o4):     80(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      108(vsout):    107(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
+             114:106(VS_OUTPUT) Load 108(vsout)
+                              ReturnValue 114
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
new file mode 100644
index 0000000..8c77675
--- /dev/null
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -0,0 +1,229 @@
+hlsl.load.buffer.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 FragDepth 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: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: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: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 FragDepth 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 FragDepth)
+0:35          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:35          Constant:
+0:35            1 (const int)
+0:35        Constant:
+0:35          1.000000
+0:37      Branch: Return with expression
+0:37        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+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)
+
+
+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 FragDepth 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: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: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: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 FragDepth 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 FragDepth)
+0:35          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:35          Constant:
+0:35            1 (const int)
+0:35        Constant:
+0:35          1.000000
+0:37      Branch: Return with expression
+0:37        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 69
+
+                              Capability Shader
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 56  "g_tTexbf4_test"
+                              Name 59  "c2"
+                              Name 62  "c3"
+                              Name 64  "c4"
+                              Name 65  "o1"
+                              Name 66  "o2"
+                              Name 67  "o3"
+                              Name 68  "o4"
+                              Decorate 13(g_tTexbf4) DescriptorSet 0
+                              Decorate 27(g_tTexbi4) DescriptorSet 0
+                              Decorate 39(g_tTexbu4) DescriptorSet 0
+                              MemberDecorate 44(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 56(g_tTexbf4_test) DescriptorSet 0
+                              Decorate 56(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
+              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)
+56(g_tTexbf4_test):     12(ptr) Variable UniformConstant
+              57:             TypeVector 15(int) 2
+              58:             TypePointer UniformConstant 57(ivec2)
+          59(c2):     58(ptr) Variable UniformConstant
+              60:             TypeVector 15(int) 3
+              61:             TypePointer UniformConstant 60(ivec3)
+          62(c3):     61(ptr) Variable UniformConstant
+              63:             TypePointer UniformConstant 21(ivec4)
+          64(c4):     63(ptr) Variable UniformConstant
+          65(o1):     16(ptr) Variable UniformConstant
+          66(o2):     58(ptr) Variable UniformConstant
+          67(o3):     61(ptr) Variable UniformConstant
+          68(o4):     63(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
+              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
+              54:44(PS_OUTPUT) Load 46(psout)
+                              ReturnValue 54
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
new file mode 100644
index 0000000..da9f2e4
--- /dev/null
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -0,0 +1,617 @@
+hlsl.load.offset.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:77  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:48    Function Parameters: 
+0:?     Sequence
+0:52      textureFetchOffset (global 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          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          Constant:
+0:52            1 (const int)
+0:52        'o1' (uniform int)
+0:53      textureFetchOffset (global 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          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          Constant:
+0:53            1 (const int)
+0:53        'o1' (uniform int)
+0:54      textureFetchOffset (global 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          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          Constant:
+0:54            1 (const int)
+0:54        'o1' (uniform int)
+0:57      textureFetchOffset (global 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          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          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: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          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          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: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          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          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: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          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+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          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: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          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        direct index (temp int)
+0:63          'c4' (uniform 4-component vector of int)
+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: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          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+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          Constant:
+0:64            3 (const int)
+0:64        'o3' (uniform 3-component vector of int)
+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 FragDepth Depth})
+0:72          Constant:
+0:72            0 (const int)
+0:72        Constant:
+0:72          1.000000
+0:72          1.000000
+0:72          1.000000
+0:72          1.000000
+0:73      move second child to first child (temp float)
+0:73        Depth: direct index for structure (temp float FragDepth)
+0:73          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:73          Constant:
+0:73            1 (const int)
+0:73        Constant:
+0:73          1.000000
+0:75      Branch: Return with expression
+0:75        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:77  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:48    Function Parameters: 
+0:?     Sequence
+0:52      textureFetchOffset (global 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          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          Constant:
+0:52            1 (const int)
+0:52        'o1' (uniform int)
+0:53      textureFetchOffset (global 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          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          Constant:
+0:53            1 (const int)
+0:53        'o1' (uniform int)
+0:54      textureFetchOffset (global 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          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          Constant:
+0:54            1 (const int)
+0:54        'o1' (uniform int)
+0:57      textureFetchOffset (global 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          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          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: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          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          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: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          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          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: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          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+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          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: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          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        direct index (temp int)
+0:63          'c4' (uniform 4-component vector of int)
+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: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          Sequence
+0:64            Constant:
+0:64              0 (const int)
+0:64            Constant:
+0:64              1 (const int)
+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          Constant:
+0:64            3 (const int)
+0:64        'o3' (uniform 3-component vector of int)
+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 FragDepth Depth})
+0:72          Constant:
+0:72            0 (const int)
+0:72        Constant:
+0:72          1.000000
+0:72          1.000000
+0:72          1.000000
+0:72          1.000000
+0:73      move second child to first child (temp float)
+0:73        Depth: direct index for structure (temp float FragDepth)
+0:73          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:73          Constant:
+0:73            1 (const int)
+0:73        Constant:
+0:73          1.000000
+0:75      Branch: Return with expression
+0:75        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 172
+
+                              Capability Shader
+                              Capability ImageGatherExtended
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 133  "g_sSamp"
+                              Name 136  "g_tTexcdf4"
+                              Name 139  "g_tTexcdi4"
+                              Name 142  "g_tTexcdu4"
+                              Name 145  "g_tTex1df4a"
+                              Name 148  "g_tTex1di4a"
+                              Name 151  "g_tTex1du4a"
+                              Name 154  "g_tTex2df4a"
+                              Name 157  "g_tTex2di4a"
+                              Name 160  "g_tTex2du4a"
+                              Name 163  "g_tTexcdf4a"
+                              Name 166  "g_tTexcdi4a"
+                              Name 169  "g_tTexcdu4a"
+                              Name 170  "c1"
+                              Name 171  "o4"
+                              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
+                              MemberDecorate 118(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 133(g_sSamp) DescriptorSet 0
+                              Decorate 133(g_sSamp) Binding 0
+                              Decorate 136(g_tTexcdf4) DescriptorSet 0
+                              Decorate 139(g_tTexcdi4) DescriptorSet 0
+                              Decorate 142(g_tTexcdu4) DescriptorSet 0
+                              Decorate 145(g_tTex1df4a) DescriptorSet 0
+                              Decorate 148(g_tTex1di4a) DescriptorSet 0
+                              Decorate 151(g_tTex1du4a) DescriptorSet 0
+                              Decorate 154(g_tTex2df4a) DescriptorSet 0
+                              Decorate 157(g_tTex2di4a) DescriptorSet 0
+                              Decorate 160(g_tTex2du4a) DescriptorSet 0
+                              Decorate 163(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 166(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 169(g_tTexcdu4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 1D sampled format:Unknown
+               8:             TypePointer UniformConstant 7
+   9(g_tTex1df4):      8(ptr) Variable UniformConstant
+              11:             TypeInt 32 1
+              12:             TypeVector 11(int) 2
+              13:             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
+              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)
+             131:             TypeSampler
+             132:             TypePointer UniformConstant 131
+    133(g_sSamp):    132(ptr) Variable UniformConstant
+             134:             TypeImage 6(float) Cube sampled format:Unknown
+             135:             TypePointer UniformConstant 134
+ 136(g_tTexcdf4):    135(ptr) Variable UniformConstant
+             137:             TypeImage 11(int) Cube sampled format:Unknown
+             138:             TypePointer UniformConstant 137
+ 139(g_tTexcdi4):    138(ptr) Variable UniformConstant
+             140:             TypeImage 15(int) Cube sampled format:Unknown
+             141:             TypePointer UniformConstant 140
+ 142(g_tTexcdu4):    141(ptr) Variable UniformConstant
+             143:             TypeImage 6(float) 1D array sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+145(g_tTex1df4a):    144(ptr) Variable UniformConstant
+             146:             TypeImage 11(int) 1D array sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+148(g_tTex1di4a):    147(ptr) Variable UniformConstant
+             149:             TypeImage 15(int) 1D array sampled format:Unknown
+             150:             TypePointer UniformConstant 149
+151(g_tTex1du4a):    150(ptr) Variable UniformConstant
+             152:             TypeImage 6(float) 2D array sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+154(g_tTex2df4a):    153(ptr) Variable UniformConstant
+             155:             TypeImage 11(int) 2D array sampled format:Unknown
+             156:             TypePointer UniformConstant 155
+157(g_tTex2di4a):    156(ptr) Variable UniformConstant
+             158:             TypeImage 15(int) 2D array sampled format:Unknown
+             159:             TypePointer UniformConstant 158
+160(g_tTex2du4a):    159(ptr) Variable UniformConstant
+             161:             TypeImage 6(float) Cube array sampled format:Unknown
+             162:             TypePointer UniformConstant 161
+163(g_tTexcdf4a):    162(ptr) Variable UniformConstant
+             164:             TypeImage 11(int) Cube array sampled format:Unknown
+             165:             TypePointer UniformConstant 164
+166(g_tTexcdi4a):    165(ptr) Variable UniformConstant
+             167:             TypeImage 15(int) Cube array sampled format:Unknown
+             168:             TypePointer UniformConstant 167
+169(g_tTexcdu4a):    168(ptr) Variable UniformConstant
+         170(c1):     17(ptr) Variable UniformConstant
+         171(o4):     88(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      120(psout):    119(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
+             129:118(PS_OUTPUT) Load 120(psout)
+                              ReturnValue 129
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
new file mode 100644
index 0000000..97c164c
--- /dev/null
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -0,0 +1,522 @@
+hlsl.load.offsetarray.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:70  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:48    Function Parameters: 
+0:?     Sequence
+0:52      textureFetchOffset (global 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          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          Constant:
+0:52            2 (const int)
+0:52        'o1' (uniform int)
+0:53      textureFetchOffset (global 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          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          Constant:
+0:53            2 (const int)
+0:53        'o1' (uniform int)
+0:54      textureFetchOffset (global 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          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          Constant:
+0:54            2 (const int)
+0:54        'o1' (uniform int)
+0:57      textureFetchOffset (global 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          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+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          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: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          Sequence
+0:58            Constant:
+0:58              0 (const int)
+0:58            Constant:
+0:58              1 (const int)
+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          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: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          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+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          Constant:
+0:59            3 (const int)
+0:59        'o2' (uniform 2-component vector of int)
+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 FragDepth Depth})
+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:66      move second child to first child (temp float)
+0:66        Depth: direct index for structure (temp float FragDepth)
+0:66          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:66          Constant:
+0:66            1 (const int)
+0:66        Constant:
+0:66          1.000000
+0:68      Branch: Return with expression
+0:68        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:70  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:48    Function Parameters: 
+0:?     Sequence
+0:52      textureFetchOffset (global 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          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          Constant:
+0:52            2 (const int)
+0:52        'o1' (uniform int)
+0:53      textureFetchOffset (global 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          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          Constant:
+0:53            2 (const int)
+0:53        'o1' (uniform int)
+0:54      textureFetchOffset (global 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          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          Constant:
+0:54            2 (const int)
+0:54        'o1' (uniform int)
+0:57      textureFetchOffset (global 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          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+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          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: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          Sequence
+0:58            Constant:
+0:58              0 (const int)
+0:58            Constant:
+0:58              1 (const int)
+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          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: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          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+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          Constant:
+0:59            3 (const int)
+0:59        'o2' (uniform 2-component vector of int)
+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 FragDepth Depth})
+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:66      move second child to first child (temp float)
+0:66        Depth: direct index for structure (temp float FragDepth)
+0:66          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:66          Constant:
+0:66            1 (const int)
+0:66        Constant:
+0:66          1.000000
+0:68      Branch: Return with expression
+0:68        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     '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)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 149
+
+                              Capability Shader
+                              Capability ImageGatherExtended
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 99  "g_sSamp"
+                              Name 102  "g_tTex1df4"
+                              Name 105  "g_tTex1di4"
+                              Name 108  "g_tTex1du4"
+                              Name 111  "g_tTex2df4"
+                              Name 114  "g_tTex2di4"
+                              Name 117  "g_tTex2du4"
+                              Name 120  "g_tTex3df4"
+                              Name 123  "g_tTex3di4"
+                              Name 126  "g_tTex3du4"
+                              Name 129  "g_tTexcdf4"
+                              Name 132  "g_tTexcdi4"
+                              Name 135  "g_tTexcdu4"
+                              Name 138  "g_tTexcdf4a"
+                              Name 141  "g_tTexcdi4a"
+                              Name 144  "g_tTexcdu4a"
+                              Name 145  "c1"
+                              Name 146  "c2"
+                              Name 147  "o3"
+                              Name 148  "o4"
+                              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
+                              MemberDecorate 84(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 99(g_sSamp) DescriptorSet 0
+                              Decorate 99(g_sSamp) Binding 0
+                              Decorate 102(g_tTex1df4) DescriptorSet 0
+                              Decorate 102(g_tTex1df4) Binding 0
+                              Decorate 105(g_tTex1di4) DescriptorSet 0
+                              Decorate 108(g_tTex1du4) DescriptorSet 0
+                              Decorate 111(g_tTex2df4) DescriptorSet 0
+                              Decorate 114(g_tTex2di4) DescriptorSet 0
+                              Decorate 117(g_tTex2du4) DescriptorSet 0
+                              Decorate 120(g_tTex3df4) DescriptorSet 0
+                              Decorate 123(g_tTex3di4) DescriptorSet 0
+                              Decorate 126(g_tTex3du4) DescriptorSet 0
+                              Decorate 129(g_tTexcdf4) DescriptorSet 0
+                              Decorate 132(g_tTexcdi4) DescriptorSet 0
+                              Decorate 135(g_tTexcdu4) DescriptorSet 0
+                              Decorate 138(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 141(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 144(g_tTexcdu4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 1D array sampled format:Unknown
+               8:             TypePointer UniformConstant 7
+  9(g_tTex1df4a):      8(ptr) Variable UniformConstant
+              11:             TypeInt 32 1
+              12:             TypeVector 11(int) 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)
+              97:             TypeSampler
+              98:             TypePointer UniformConstant 97
+     99(g_sSamp):     98(ptr) Variable UniformConstant
+             100:             TypeImage 6(float) 1D sampled format:Unknown
+             101:             TypePointer UniformConstant 100
+ 102(g_tTex1df4):    101(ptr) Variable UniformConstant
+             103:             TypeImage 11(int) 1D sampled format:Unknown
+             104:             TypePointer UniformConstant 103
+ 105(g_tTex1di4):    104(ptr) Variable UniformConstant
+             106:             TypeImage 18(int) 1D sampled format:Unknown
+             107:             TypePointer UniformConstant 106
+ 108(g_tTex1du4):    107(ptr) Variable UniformConstant
+             109:             TypeImage 6(float) 2D sampled format:Unknown
+             110:             TypePointer UniformConstant 109
+ 111(g_tTex2df4):    110(ptr) Variable UniformConstant
+             112:             TypeImage 11(int) 2D sampled format:Unknown
+             113:             TypePointer UniformConstant 112
+ 114(g_tTex2di4):    113(ptr) Variable UniformConstant
+             115:             TypeImage 18(int) 2D sampled format:Unknown
+             116:             TypePointer UniformConstant 115
+ 117(g_tTex2du4):    116(ptr) Variable UniformConstant
+             118:             TypeImage 6(float) 3D sampled format:Unknown
+             119:             TypePointer UniformConstant 118
+ 120(g_tTex3df4):    119(ptr) Variable UniformConstant
+             121:             TypeImage 11(int) 3D sampled format:Unknown
+             122:             TypePointer UniformConstant 121
+ 123(g_tTex3di4):    122(ptr) Variable UniformConstant
+             124:             TypeImage 18(int) 3D sampled format:Unknown
+             125:             TypePointer UniformConstant 124
+ 126(g_tTex3du4):    125(ptr) Variable UniformConstant
+             127:             TypeImage 6(float) Cube sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+ 129(g_tTexcdf4):    128(ptr) Variable UniformConstant
+             130:             TypeImage 11(int) Cube sampled format:Unknown
+             131:             TypePointer UniformConstant 130
+ 132(g_tTexcdi4):    131(ptr) Variable UniformConstant
+             133:             TypeImage 18(int) Cube sampled format:Unknown
+             134:             TypePointer UniformConstant 133
+ 135(g_tTexcdu4):    134(ptr) Variable UniformConstant
+             136:             TypeImage 6(float) Cube array sampled format:Unknown
+             137:             TypePointer UniformConstant 136
+138(g_tTexcdf4a):    137(ptr) Variable UniformConstant
+             139:             TypeImage 11(int) Cube array sampled format:Unknown
+             140:             TypePointer UniformConstant 139
+141(g_tTexcdi4a):    140(ptr) Variable UniformConstant
+             142:             TypeImage 18(int) Cube array sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+144(g_tTexcdu4a):    143(ptr) Variable UniformConstant
+         145(c1):     20(ptr) Variable UniformConstant
+         146(c2):     60(ptr) Variable UniformConstant
+         147(o3):     13(ptr) Variable UniformConstant
+         148(o4):     53(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+       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:     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
+              95:84(PS_OUTPUT) Load 86(psout)
+                              ReturnValue 95
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out
new file mode 100644
index 0000000..5ba5831
--- /dev/null
+++ b/Test/baseResults/hlsl.numericsuffixes.frag.out
@@ -0,0 +1,204 @@
+hlsl.numericsuffixes.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:21  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:5    Function Parameters: 
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child (temp float)
+0:7          'r00' (temp float)
+0:7          Constant:
+0:7            1.000000
+0:8      Sequence
+0:8        move second child to first child (temp uint)
+0:8          'r01' (temp uint)
+0:8          Constant:
+0:8            1 (const uint)
+0:9      Sequence
+0:9        move second child to first child (temp uint)
+0:9          'r02' (temp uint)
+0:9          Constant:
+0:9            2 (const uint)
+0:10      Sequence
+0:10        move second child to first child (temp uint)
+0:10          'r03' (temp uint)
+0:10          Constant:
+0:10            2748 (const uint)
+0:11      Sequence
+0:11        move second child to first child (temp uint)
+0:11          'r04' (temp uint)
+0:11          Constant:
+0:11            2748 (const uint)
+0:12      Sequence
+0:12        move second child to first child (temp int)
+0:12          'r05' (temp int)
+0:12          Constant:
+0:12            5 (const int)
+0:13      Sequence
+0:13        move second child to first child (temp int)
+0:13          'r06' (temp int)
+0:13          Constant:
+0:13            6 (const int)
+0:14      Sequence
+0:14        move second child to first child (temp int)
+0:14          'r07' (temp int)
+0:14          Constant:
+0:14            57 (const int)
+0:15      Sequence
+0:15        move second child to first child (temp uint)
+0:15          'r08' (temp uint)
+0:15          Constant:
+0:15            58 (const uint)
+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          'ps_output' (temp structure{temp 4-component vector of float color})
+0:18          Constant:
+0:18            0 (const int)
+0:18        Construct vec4 (temp 4-component vector of float)
+0:18          Convert int to float (temp float)
+0:18            'r07' (temp int)
+0:19      Branch: Return with expression
+0:19        'ps_output' (temp structure{temp 4-component vector of float color})
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:21  Function Definition: main( (global structure{temp 4-component vector of float color})
+0:5    Function Parameters: 
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child (temp float)
+0:7          'r00' (temp float)
+0:7          Constant:
+0:7            1.000000
+0:8      Sequence
+0:8        move second child to first child (temp uint)
+0:8          'r01' (temp uint)
+0:8          Constant:
+0:8            1 (const uint)
+0:9      Sequence
+0:9        move second child to first child (temp uint)
+0:9          'r02' (temp uint)
+0:9          Constant:
+0:9            2 (const uint)
+0:10      Sequence
+0:10        move second child to first child (temp uint)
+0:10          'r03' (temp uint)
+0:10          Constant:
+0:10            2748 (const uint)
+0:11      Sequence
+0:11        move second child to first child (temp uint)
+0:11          'r04' (temp uint)
+0:11          Constant:
+0:11            2748 (const uint)
+0:12      Sequence
+0:12        move second child to first child (temp int)
+0:12          'r05' (temp int)
+0:12          Constant:
+0:12            5 (const int)
+0:13      Sequence
+0:13        move second child to first child (temp int)
+0:13          'r06' (temp int)
+0:13          Constant:
+0:13            6 (const int)
+0:14      Sequence
+0:14        move second child to first child (temp int)
+0:14          'r07' (temp int)
+0:14          Constant:
+0:14            57 (const int)
+0:15      Sequence
+0:15        move second child to first child (temp uint)
+0:15          'r08' (temp uint)
+0:15          Constant:
+0:15            58 (const uint)
+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          'ps_output' (temp structure{temp 4-component vector of float color})
+0:18          Constant:
+0:18            0 (const int)
+0:18        Construct vec4 (temp 4-component vector of float)
+0:18          Convert int to float (temp float)
+0:18            'r07' (temp int)
+0:19      Branch: Return with expression
+0:19        'ps_output' (temp structure{temp 4-component vector of float color})
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 41
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 8  "r00"
+                              Name 12  "r01"
+                              Name 14  "r02"
+                              Name 16  "r03"
+                              Name 18  "r04"
+                              Name 21  "r05"
+                              Name 23  "r06"
+                              Name 25  "r07"
+                              Name 27  "r08"
+                              Name 30  "PS_OUTPUT"
+                              MemberName 30(PS_OUTPUT) 0  "color"
+                              Name 32  "ps_output"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:    6(float) Constant 1065353216
+              10:             TypeInt 32 0
+              11:             TypePointer Function 10(int)
+              13:     10(int) Constant 1
+              15:     10(int) Constant 2
+              17:     10(int) Constant 2748
+              19:             TypeInt 32 1
+              20:             TypePointer Function 19(int)
+              22:     19(int) Constant 5
+              24:     19(int) Constant 6
+              26:     19(int) Constant 57
+              28:     10(int) Constant 58
+              29:             TypeVector 6(float) 4
+   30(PS_OUTPUT):             TypeStruct 29(fvec4)
+              31:             TypePointer Function 30(PS_OUTPUT)
+              33:     19(int) Constant 0
+              37:             TypePointer Function 29(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+          8(r00):      7(ptr) Variable Function
+         12(r01):     11(ptr) Variable Function
+         14(r02):     11(ptr) Variable Function
+         16(r03):     11(ptr) Variable Function
+         18(r04):     11(ptr) Variable Function
+         21(r05):     20(ptr) Variable Function
+         23(r06):     20(ptr) Variable Function
+         25(r07):     20(ptr) Variable Function
+         27(r08):     11(ptr) Variable Function
+   32(ps_output):     31(ptr) Variable Function
+                              Store 8(r00) 9
+                              Store 12(r01) 13
+                              Store 14(r02) 15
+                              Store 16(r03) 17
+                              Store 18(r04) 17
+                              Store 21(r05) 22
+                              Store 23(r06) 24
+                              Store 25(r07) 26
+                              Store 27(r08) 28
+              34:     19(int) Load 25(r07)
+              35:    6(float) ConvertSToF 34
+              36:   29(fvec4) CompositeConstruct 35 35 35 35
+              38:     37(ptr) AccessChain 32(ps_output) 33
+                              Store 38 36
+              39:30(PS_OUTPUT) Load 32(ps_output)
+                              ReturnValue 39
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.pp.line.frag.out b/Test/baseResults/hlsl.pp.line.frag.out
new file mode 100644
index 0000000..6484eb0
--- /dev/null
+++ b/Test/baseResults/hlsl.pp.line.frag.out
@@ -0,0 +1,124 @@
+hlsl.pp.line.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:131  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:4    Function Parameters: 
+0:?     Sequence
+0:124      Sequence
+0:124        move second child to first child (temp int)
+0:124          'thisLineIs' (temp int)
+0:124          Constant:
+0:124            124 (const int)
+0:126      move second child to first child (temp 4-component vector of float)
+0:126        Color: direct index for structure (temp 4-component vector of float)
+0:126          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:126          Constant:
+0:126            0 (const int)
+0:?         Construct vec4 (temp 4-component vector of float)
+0:126          Convert int to float (temp float)
+0:126            'thisLineIs' (temp int)
+0:126          Constant:
+0:126            0.000000
+0:126          Constant:
+0:126            0.000000
+0:126          Constant:
+0:126            1.000000
+0:127      move second child to first child (temp float)
+0:127        Depth: direct index for structure (temp float FragDepth)
+0:127          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:127          Constant:
+0:127            1 (const int)
+0:127        Constant:
+0:127          1.000000
+0:129      Branch: Return with expression
+0:129        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:131  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:4    Function Parameters: 
+0:?     Sequence
+0:124      Sequence
+0:124        move second child to first child (temp int)
+0:124          'thisLineIs' (temp int)
+0:124          Constant:
+0:124            124 (const int)
+0:126      move second child to first child (temp 4-component vector of float)
+0:126        Color: direct index for structure (temp 4-component vector of float)
+0:126          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:126          Constant:
+0:126            0 (const int)
+0:?         Construct vec4 (temp 4-component vector of float)
+0:126          Convert int to float (temp float)
+0:126            'thisLineIs' (temp int)
+0:126          Constant:
+0:126            0.000000
+0:126          Constant:
+0:126            0.000000
+0:126          Constant:
+0:126            1.000000
+0:127      move second child to first child (temp float)
+0:127        Depth: direct index for structure (temp float FragDepth)
+0:127          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:127          Constant:
+0:127            1 (const int)
+0:127        Constant:
+0:127          1.000000
+0:129      Branch: Return with expression
+0:129        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+
+// 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"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 8  "thisLineIs"
+                              Name 12  "PS_OUTPUT"
+                              MemberName 12(PS_OUTPUT) 0  "Color"
+                              MemberName 12(PS_OUTPUT) 1  "Depth"
+                              Name 14  "psout"
+                              MemberDecorate 12(PS_OUTPUT) 1 BuiltIn FragDepth
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 124
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+   12(PS_OUTPUT):             TypeStruct 11(fvec4) 10(float)
+              13:             TypePointer Function 12(PS_OUTPUT)
+              15:      6(int) Constant 0
+              18:   10(float) Constant 0
+              19:   10(float) Constant 1065353216
+              21:             TypePointer Function 11(fvec4)
+              23:      6(int) Constant 1
+              24:             TypePointer Function 10(float)
+         4(main):           2 Function None 3
+               5:             Label
+   8(thisLineIs):      7(ptr) Variable Function
+       14(psout):     13(ptr) Variable Function
+                              Store 8(thisLineIs) 9
+              16:      6(int) Load 8(thisLineIs)
+              17:   10(float) ConvertSToF 16
+              20:   11(fvec4) CompositeConstruct 17 18 18 19
+              22:     21(ptr) AccessChain 14(psout) 15
+                              Store 22 20
+              25:     24(ptr) AccessChain 14(psout) 23
+                              Store 25 19
+              26:12(PS_OUTPUT) Load 14(psout)
+                              ReturnValue 26
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out
index d351353..2ad5ab5 100755
--- a/Test/baseResults/hlsl.precedence.frag.out
+++ b/Test/baseResults/hlsl.precedence.frag.out
@@ -12,11 +12,36 @@
 0:8      Branch: Return with expression
 0:8        add (temp 4-component vector of float)
 0:8          add (temp 4-component vector of float)
-0:8            'a1' (in 4-component vector of float)
-0:8            component-wise multiply (temp 4-component vector of float)
-0:8              'a2' (in 4-component vector of float)
+0:8            add (temp 4-component vector of float)
+0:8              'a1' (in 4-component vector of float)
+0:8              component-wise multiply (temp 4-component vector of float)
+0:8                'a2' (in 4-component vector of float)
+0:8                'a3' (in 4-component vector of float)
+0:8            'a4' (in 4-component vector of float)
+0:?           Construct vec4 (temp 4-component vector of float)
+0:8            component-wise multiply (temp 3-component vector of float)
+0:8              vector swizzle (temp 3-component vector of float)
+0:8                'a1' (in 4-component vector of float)
+0:8                Sequence
+0:8                  Constant:
+0:8                    0 (const int)
+0:8                  Constant:
+0:8                    1 (const int)
+0:8                  Constant:
+0:8                    2 (const int)
+0:8              vector swizzle (temp 3-component vector of float)
+0:8                'a2' (in 4-component vector of float)
+0:8                Sequence
+0:8                  Constant:
+0:8                    0 (const int)
+0:8                  Constant:
+0:8                    1 (const int)
+0:8                  Constant:
+0:8                    2 (const int)
+0:8            direct index (temp float)
 0:8              'a3' (in 4-component vector of float)
-0:8          'a4' (in 4-component vector of float)
+0:8              Constant:
+0:8                3 (const int)
 0:?   Linker Objects
 
 
@@ -36,16 +61,41 @@
 0:8      Branch: Return with expression
 0:8        add (temp 4-component vector of float)
 0:8          add (temp 4-component vector of float)
-0:8            'a1' (in 4-component vector of float)
-0:8            component-wise multiply (temp 4-component vector of float)
-0:8              'a2' (in 4-component vector of float)
+0:8            add (temp 4-component vector of float)
+0:8              'a1' (in 4-component vector of float)
+0:8              component-wise multiply (temp 4-component vector of float)
+0:8                'a2' (in 4-component vector of float)
+0:8                'a3' (in 4-component vector of float)
+0:8            'a4' (in 4-component vector of float)
+0:?           Construct vec4 (temp 4-component vector of float)
+0:8            component-wise multiply (temp 3-component vector of float)
+0:8              vector swizzle (temp 3-component vector of float)
+0:8                'a1' (in 4-component vector of float)
+0:8                Sequence
+0:8                  Constant:
+0:8                    0 (const int)
+0:8                  Constant:
+0:8                    1 (const int)
+0:8                  Constant:
+0:8                    2 (const int)
+0:8              vector swizzle (temp 3-component vector of float)
+0:8                'a2' (in 4-component vector of float)
+0:8                Sequence
+0:8                  Constant:
+0:8                    0 (const int)
+0:8                  Constant:
+0:8                    1 (const int)
+0:8                  Constant:
+0:8                    2 (const int)
+0:8            direct index (temp float)
 0:8              'a3' (in 4-component vector of float)
-0:8          'a4' (in 4-component vector of float)
+0:8              Constant:
+0:8                3 (const int)
 0:?   Linker Objects
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 21
+// Id's are bound by 37
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -67,6 +117,10 @@
           11(a2):      8(ptr) Variable Input
           13(a3):      8(ptr) Variable Input
           17(a4):      8(ptr) Variable Input
+              20:             TypeVector 6(float) 3
+              26:             TypeInt 32 0
+              27:     26(int) Constant 3
+              28:             TypePointer Input 6(float)
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
               10:    7(fvec4) Load 9(a1)
@@ -76,5 +130,17 @@
               16:    7(fvec4) FAdd 10 15
               18:    7(fvec4) Load 17(a4)
               19:    7(fvec4) FAdd 16 18
-                              ReturnValue 19
+              21:    7(fvec4) Load 9(a1)
+              22:   20(fvec3) VectorShuffle 21 21 0 1 2
+              23:    7(fvec4) Load 11(a2)
+              24:   20(fvec3) VectorShuffle 23 23 0 1 2
+              25:   20(fvec3) FMul 22 24
+              29:     28(ptr) AccessChain 13(a3) 27
+              30:    6(float) Load 29
+              31:    6(float) CompositeExtract 25 0
+              32:    6(float) CompositeExtract 25 1
+              33:    6(float) CompositeExtract 25 2
+              34:    7(fvec4) CompositeConstruct 31 32 33 30
+              35:    7(fvec4) FAdd 19 34
+                              ReturnValue 35
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 99784de..6336cfa 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -10,8 +10,8 @@
 0:27          'txval10' (temp 4-component vector of float)
 0:27          texture (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
-0:27              'g_tTex1df4' (uniform texture1DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -21,7 +21,7 @@
 0:28          texture (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -31,7 +31,7 @@
 0:29          texture (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -41,7 +41,7 @@
 0:31          texture (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -52,7 +52,7 @@
 0:32          texture (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -63,7 +63,7 @@
 0:33          texture (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -74,7 +74,7 @@
 0:35          texture (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -86,7 +86,7 @@
 0:36          texture (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -98,12 +98,22 @@
 0:37          texture (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
 0:?               0.900000
 0:?               1.000000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
 0:40      move second child to first child (temp float)
 0:40        Depth: direct index for structure (temp float FragDepth)
 0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -114,9 +124,9 @@
 0:42      Branch: Return with expression
 0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -141,8 +151,8 @@
 0:27          'txval10' (temp 4-component vector of float)
 0:27          texture (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
-0:27              'g_tTex1df4' (uniform texture1DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -152,7 +162,7 @@
 0:28          texture (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -162,7 +172,7 @@
 0:29          texture (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -172,7 +182,7 @@
 0:31          texture (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -183,7 +193,7 @@
 0:32          texture (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -194,7 +204,7 @@
 0:33          texture (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -205,7 +215,7 @@
 0:35          texture (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -217,7 +227,7 @@
 0:36          texture (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -229,12 +239,22 @@
 0:37          texture (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
 0:?               0.900000
 0:?               1.000000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
 0:40      move second child to first child (temp float)
 0:40        Depth: direct index for structure (temp float FragDepth)
 0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -245,9 +265,9 @@
 0:42      Branch: Return with expression
 0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -259,7 +279,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 129
+// Id's are bound by 132
 
                               Capability Shader
                               Capability Sampled1D
@@ -293,9 +313,11 @@
                               MemberName 120(PS_OUTPUT) 0  "Color"
                               MemberName 120(PS_OUTPUT) 1  "Depth"
                               Name 122  "psout"
-                              Name 128  "g_tTex1df4a"
+                              Name 131  "g_tTex1df4a"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 31(g_tTex1di4) DescriptorSet 0
                               Decorate 45(g_tTex1du4) DescriptorSet 0
                               Decorate 56(g_tTex2df4) DescriptorSet 0
@@ -305,7 +327,8 @@
                               Decorate 100(g_tTexcdi4) DescriptorSet 0
                               Decorate 110(g_tTexcdu4) DescriptorSet 0
                               MemberDecorate 120(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 128(g_tTex1df4a) DescriptorSet 0
+                              Decorate 131(g_tTex1df4a) DescriptorSet 0
+                              Decorate 131(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -379,9 +402,11 @@
              118:    7(fvec4) ConstantComposite 84 115 116 117
   120(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
              121:             TypePointer Function 120(PS_OUTPUT)
-             123:     25(int) Constant 1
-             124:             TypePointer Function 6(float)
-128(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             123:     25(int) Constant 0
+             124:    7(fvec4) ConstantComposite 117 117 117 117
+             126:     25(int) Constant 1
+             127:             TypePointer Function 6(float)
+131(g_tTex1df4a):     11(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -439,8 +464,10 @@
              114:         113 SampledImage 111 112
              119:   40(ivec4) ImageSampleImplicitLod 114 118
                               Store 107(txval42) 119
-             125:    124(ptr) AccessChain 122(psout) 123
-                              Store 125 117
-             126:120(PS_OUTPUT) Load 122(psout)
-                              ReturnValue 126
+             125:      8(ptr) AccessChain 122(psout) 123
+                              Store 125 124
+             128:    127(ptr) AccessChain 122(psout) 126
+                              Store 128 117
+             129:120(PS_OUTPUT) Load 122(psout)
+                              ReturnValue 129
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index 234e388..feb6461 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -96,8 +96,8 @@
 0:70          'txval10' (temp 4-component vector of float)
 0:70          texture (global 4-component vector of float)
 0:70            Construct combined texture-sampler (temp sampler1D)
-0:70              'g_tTex1df4' (uniform texture1D)
-0:70              'g_sSamp' (uniform sampler)
+0:70              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:70              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:70            Constant:
 0:70              0.100000
 0:71      Sequence
@@ -106,7 +106,7 @@
 0:71          texture (global 4-component vector of int)
 0:71            Construct combined texture-sampler (temp isampler1D)
 0:71              'g_tTex1di4' (uniform itexture1D)
-0:71              'g_sSamp' (uniform sampler)
+0:71              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:71            Constant:
 0:71              0.200000
 0:72      Sequence
@@ -115,7 +115,7 @@
 0:72          texture (global 4-component vector of uint)
 0:72            Construct combined texture-sampler (temp usampler1D)
 0:72              'g_tTex1du4' (uniform utexture1D)
-0:72              'g_sSamp' (uniform sampler)
+0:72              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:72            Constant:
 0:72              0.300000
 0:74      Sequence
@@ -124,7 +124,7 @@
 0:74          texture (global 4-component vector of float)
 0:74            Construct combined texture-sampler (temp sampler2D)
 0:74              'g_tTex2df4' (uniform texture2D)
-0:74              'g_sSamp' (uniform sampler)
+0:74              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -134,7 +134,7 @@
 0:75          texture (global 4-component vector of int)
 0:75            Construct combined texture-sampler (temp isampler2D)
 0:75              'g_tTex2di4' (uniform itexture2D)
-0:75              'g_sSamp' (uniform sampler)
+0:75              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -144,7 +144,7 @@
 0:76          texture (global 4-component vector of uint)
 0:76            Construct combined texture-sampler (temp usampler2D)
 0:76              'g_tTex2du4' (uniform utexture2D)
-0:76              'g_sSamp' (uniform sampler)
+0:76              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -154,7 +154,7 @@
 0:78          texture (global 4-component vector of float)
 0:78            Construct combined texture-sampler (temp sampler3D)
 0:78              'g_tTex3df4' (uniform texture3D)
-0:78              'g_sSamp' (uniform sampler)
+0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -165,7 +165,7 @@
 0:79          texture (global 4-component vector of int)
 0:79            Construct combined texture-sampler (temp isampler3D)
 0:79              'g_tTex3di4' (uniform itexture3D)
-0:79              'g_sSamp' (uniform sampler)
+0:79              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -176,7 +176,7 @@
 0:80          texture (global 4-component vector of uint)
 0:80            Construct combined texture-sampler (temp usampler3D)
 0:80              'g_tTex3du4' (uniform utexture3D)
-0:80              'g_sSamp' (uniform sampler)
+0:80              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -187,7 +187,7 @@
 0:82          texture (global 4-component vector of float)
 0:82            Construct combined texture-sampler (temp samplerCube)
 0:82              'g_tTexcdf4' (uniform textureCube)
-0:82              'g_sSamp' (uniform sampler)
+0:82              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -198,7 +198,7 @@
 0:83          texture (global 4-component vector of int)
 0:83            Construct combined texture-sampler (temp isamplerCube)
 0:83              'g_tTexcdi4' (uniform itextureCube)
-0:83              'g_sSamp' (uniform sampler)
+0:83              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -209,11 +209,21 @@
 0:84          texture (global 4-component vector of uint)
 0:84            Construct combined texture-sampler (temp usamplerCube)
 0:84              'g_tTexcdu4' (uniform utextureCube)
-0:84              'g_sSamp' (uniform sampler)
+0:84              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
 0:?               0.900000
+0:86      move second child to first child (temp 4-component vector of float)
+0:86        Color: direct index for structure (temp 4-component vector of float)
+0:86          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:86          Constant:
+0:86            0 (const int)
+0:86        Constant:
+0:86          1.000000
+0:86          1.000000
+0:86          1.000000
+0:86          1.000000
 0:87      move second child to first child (temp float)
 0:87        Depth: direct index for structure (temp float FragDepth)
 0:87          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -224,11 +234,11 @@
 0:89      Branch: Return with expression
 0:89        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_sSamp2D_b' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -340,8 +350,8 @@
 0:70          'txval10' (temp 4-component vector of float)
 0:70          texture (global 4-component vector of float)
 0:70            Construct combined texture-sampler (temp sampler1D)
-0:70              'g_tTex1df4' (uniform texture1D)
-0:70              'g_sSamp' (uniform sampler)
+0:70              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:70              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:70            Constant:
 0:70              0.100000
 0:71      Sequence
@@ -350,7 +360,7 @@
 0:71          texture (global 4-component vector of int)
 0:71            Construct combined texture-sampler (temp isampler1D)
 0:71              'g_tTex1di4' (uniform itexture1D)
-0:71              'g_sSamp' (uniform sampler)
+0:71              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:71            Constant:
 0:71              0.200000
 0:72      Sequence
@@ -359,7 +369,7 @@
 0:72          texture (global 4-component vector of uint)
 0:72            Construct combined texture-sampler (temp usampler1D)
 0:72              'g_tTex1du4' (uniform utexture1D)
-0:72              'g_sSamp' (uniform sampler)
+0:72              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:72            Constant:
 0:72              0.300000
 0:74      Sequence
@@ -368,7 +378,7 @@
 0:74          texture (global 4-component vector of float)
 0:74            Construct combined texture-sampler (temp sampler2D)
 0:74              'g_tTex2df4' (uniform texture2D)
-0:74              'g_sSamp' (uniform sampler)
+0:74              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -378,7 +388,7 @@
 0:75          texture (global 4-component vector of int)
 0:75            Construct combined texture-sampler (temp isampler2D)
 0:75              'g_tTex2di4' (uniform itexture2D)
-0:75              'g_sSamp' (uniform sampler)
+0:75              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -388,7 +398,7 @@
 0:76          texture (global 4-component vector of uint)
 0:76            Construct combined texture-sampler (temp usampler2D)
 0:76              'g_tTex2du4' (uniform utexture2D)
-0:76              'g_sSamp' (uniform sampler)
+0:76              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -398,7 +408,7 @@
 0:78          texture (global 4-component vector of float)
 0:78            Construct combined texture-sampler (temp sampler3D)
 0:78              'g_tTex3df4' (uniform texture3D)
-0:78              'g_sSamp' (uniform sampler)
+0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -409,7 +419,7 @@
 0:79          texture (global 4-component vector of int)
 0:79            Construct combined texture-sampler (temp isampler3D)
 0:79              'g_tTex3di4' (uniform itexture3D)
-0:79              'g_sSamp' (uniform sampler)
+0:79              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -420,7 +430,7 @@
 0:80          texture (global 4-component vector of uint)
 0:80            Construct combined texture-sampler (temp usampler3D)
 0:80              'g_tTex3du4' (uniform utexture3D)
-0:80              'g_sSamp' (uniform sampler)
+0:80              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -431,7 +441,7 @@
 0:82          texture (global 4-component vector of float)
 0:82            Construct combined texture-sampler (temp samplerCube)
 0:82              'g_tTexcdf4' (uniform textureCube)
-0:82              'g_sSamp' (uniform sampler)
+0:82              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -442,7 +452,7 @@
 0:83          texture (global 4-component vector of int)
 0:83            Construct combined texture-sampler (temp isamplerCube)
 0:83              'g_tTexcdi4' (uniform itextureCube)
-0:83              'g_sSamp' (uniform sampler)
+0:83              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -453,11 +463,21 @@
 0:84          texture (global 4-component vector of uint)
 0:84            Construct combined texture-sampler (temp usamplerCube)
 0:84              'g_tTexcdu4' (uniform utextureCube)
-0:84              'g_sSamp' (uniform sampler)
+0:84              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
 0:?               0.900000
+0:86      move second child to first child (temp 4-component vector of float)
+0:86        Color: direct index for structure (temp 4-component vector of float)
+0:86          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:86          Constant:
+0:86            0 (const int)
+0:86        Constant:
+0:86          1.000000
+0:86          1.000000
+0:86          1.000000
+0:86          1.000000
 0:87      move second child to first child (temp float)
 0:87        Depth: direct index for structure (temp float FragDepth)
 0:87          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -468,11 +488,11 @@
 0:89      Branch: Return with expression
 0:89        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_sSamp2D_b' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -487,7 +507,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 182
+// Id's are bound by 184
 
                               Capability Shader
                               Capability Sampled1D
@@ -540,11 +560,13 @@
                               MemberName 171(PS_OUTPUT) 0  "Color"
                               MemberName 171(PS_OUTPUT) 1  "Depth"
                               Name 173  "psout"
-                              Name 179  "g_sSamp2d"
-                              Name 180  "g_sSamp2D_b"
-                              Name 181  "g_tTex1df4a"
+                              Name 181  "g_sSamp2d"
+                              Name 182  "g_sSamp2D_b"
+                              Name 183  "g_tTex1df4a"
                               Decorate 41(g_tTex1df4) DescriptorSet 0
+                              Decorate 41(g_tTex1df4) Binding 0
                               Decorate 45(g_sSamp) DescriptorSet 0
+                              Decorate 45(g_sSamp) Binding 0
                               Decorate 56(g_tTex1di4) DescriptorSet 0
                               Decorate 69(g_tTex1du4) DescriptorSet 0
                               Decorate 79(g_tTex2df4) DescriptorSet 0
@@ -557,9 +579,10 @@
                               Decorate 156(g_tTexcdi4) DescriptorSet 0
                               Decorate 165(g_tTexcdu4) DescriptorSet 0
                               MemberDecorate 171(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 179(g_sSamp2d) DescriptorSet 0
-                              Decorate 180(g_sSamp2D_b) DescriptorSet 0
-                              Decorate 181(g_tTex1df4a) DescriptorSet 0
+                              Decorate 181(g_sSamp2d) DescriptorSet 0
+                              Decorate 182(g_sSamp2D_b) DescriptorSet 0
+                              Decorate 183(g_tTex1df4a) DescriptorSet 0
+                              Decorate 183(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -657,10 +680,11 @@
   171(PS_OUTPUT):             TypeStruct 36(fvec4) 35(float)
              172:             TypePointer Function 171(PS_OUTPUT)
              174:   35(float) Constant 1065353216
-             175:             TypePointer Function 35(float)
-  179(g_sSamp2d):     44(ptr) Variable UniformConstant
-180(g_sSamp2D_b):     44(ptr) Variable UniformConstant
-181(g_tTex1df4a):     40(ptr) Variable UniformConstant
+             175:   36(fvec4) ConstantComposite 174 174 174 174
+             177:             TypePointer Function 35(float)
+  181(g_sSamp2d):     44(ptr) Variable UniformConstant
+182(g_sSamp2D_b):     44(ptr) Variable UniformConstant
+183(g_tTex1df4a):     40(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
         9(mtest):      8(ptr) Variable Function
@@ -761,8 +785,10 @@
              169:         168 SampledImage 166 167
              170:   64(ivec4) ImageSampleImplicitLod 169 142
                               Store 162(txval42) 170
-             176:    175(ptr) AccessChain 173(psout) 10
-                              Store 176 174
-             177:171(PS_OUTPUT) Load 173(psout)
-                              ReturnValue 177
+             176:     37(ptr) AccessChain 173(psout) 23
+                              Store 176 175
+             178:    177(ptr) AccessChain 173(psout) 10
+                              Store 178 174
+             179:171(PS_OUTPUT) Load 173(psout)
+                              ReturnValue 179
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index 09e94a7..ce20777 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -10,8 +10,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          textureOffset (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -22,7 +22,7 @@
 0:32          textureOffset (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -33,7 +33,7 @@
 0:33          textureOffset (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -44,7 +44,7 @@
 0:35          textureOffset (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -57,7 +57,7 @@
 0:36          textureOffset (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -70,7 +70,7 @@
 0:37          textureOffset (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -83,7 +83,7 @@
 0:39          textureOffset (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -98,7 +98,7 @@
 0:40          textureOffset (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -113,7 +113,7 @@
 0:41          textureOffset (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -122,6 +122,16 @@
 0:?               1 (const int)
 0:?               0 (const int)
 0:?               -1 (const int)
+0:45      move second child to first child (temp 4-component vector of float)
+0:45        Color: direct index for structure (temp 4-component vector of float)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            0 (const int)
+0:45        Constant:
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
 0:46      move second child to first child (temp float)
 0:46        Depth: direct index for structure (temp float FragDepth)
 0:46          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -132,9 +142,9 @@
 0:48      Branch: Return with expression
 0:48        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -162,8 +172,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          textureOffset (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -174,7 +184,7 @@
 0:32          textureOffset (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -185,7 +195,7 @@
 0:33          textureOffset (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -196,7 +206,7 @@
 0:35          textureOffset (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -209,7 +219,7 @@
 0:36          textureOffset (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -222,7 +232,7 @@
 0:37          textureOffset (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -235,7 +245,7 @@
 0:39          textureOffset (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -250,7 +260,7 @@
 0:40          textureOffset (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -265,7 +275,7 @@
 0:41          textureOffset (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -274,6 +284,16 @@
 0:?               1 (const int)
 0:?               0 (const int)
 0:?               -1 (const int)
+0:45      move second child to first child (temp 4-component vector of float)
+0:45        Color: direct index for structure (temp 4-component vector of float)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            0 (const int)
+0:45        Constant:
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
 0:46      move second child to first child (temp float)
 0:46        Depth: direct index for structure (temp float FragDepth)
 0:46          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -284,9 +304,9 @@
 0:48      Branch: Return with expression
 0:48        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -301,7 +321,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 145
+// Id's are bound by 147
 
                               Capability Shader
                               Capability Sampled1D
@@ -334,12 +354,14 @@
                               MemberName 127(PS_OUTPUT) 0  "Color"
                               MemberName 127(PS_OUTPUT) 1  "Depth"
                               Name 129  "psout"
-                              Name 135  "g_tTex1df4a"
-                              Name 138  "g_tTexcdf4"
-                              Name 141  "g_tTexcdi4"
-                              Name 144  "g_tTexcdu4"
+                              Name 137  "g_tTex1df4a"
+                              Name 140  "g_tTexcdf4"
+                              Name 143  "g_tTexcdi4"
+                              Name 146  "g_tTexcdu4"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 29(g_tTex1di4) DescriptorSet 0
                               Decorate 42(g_tTex1du4) DescriptorSet 0
                               Decorate 52(g_tTex2df4) DescriptorSet 0
@@ -349,10 +371,11 @@
                               Decorate 105(g_tTex3di4) DescriptorSet 0
                               Decorate 116(g_tTex3du4) DescriptorSet 0
                               MemberDecorate 127(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 135(g_tTex1df4a) DescriptorSet 0
-                              Decorate 138(g_tTexcdf4) DescriptorSet 0
-                              Decorate 141(g_tTexcdi4) DescriptorSet 0
-                              Decorate 144(g_tTexcdu4) DescriptorSet 0
+                              Decorate 137(g_tTex1df4a) DescriptorSet 0
+                              Decorate 137(g_tTex1df4a) Binding 1
+                              Decorate 140(g_tTexcdf4) DescriptorSet 0
+                              Decorate 143(g_tTexcdi4) DescriptorSet 0
+                              Decorate 146(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -434,17 +457,18 @@
   127(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
              128:             TypePointer Function 127(PS_OUTPUT)
              130:    6(float) Constant 1065353216
-             131:             TypePointer Function 6(float)
-135(g_tTex1df4a):     11(ptr) Variable UniformConstant
-             136:             TypeImage 6(float) Cube sampled format:Unknown
-             137:             TypePointer UniformConstant 136
- 138(g_tTexcdf4):    137(ptr) Variable UniformConstant
-             139:             TypeImage 21(int) Cube sampled format:Unknown
-             140:             TypePointer UniformConstant 139
- 141(g_tTexcdi4):    140(ptr) Variable UniformConstant
-             142:             TypeImage 36(int) Cube sampled format:Unknown
-             143:             TypePointer UniformConstant 142
- 144(g_tTexcdu4):    143(ptr) Variable UniformConstant
+             131:    7(fvec4) ConstantComposite 130 130 130 130
+             133:             TypePointer Function 6(float)
+137(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             138:             TypeImage 6(float) Cube sampled format:Unknown
+             139:             TypePointer UniformConstant 138
+ 140(g_tTexcdf4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 21(int) Cube sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTexcdi4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 36(int) Cube sampled format:Unknown
+             145:             TypePointer UniformConstant 144
+ 146(g_tTexcdu4):    145(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -502,8 +526,10 @@
              120:         119 SampledImage 117 118
              126:   37(ivec4) ImageSampleImplicitLod 120 124 ConstOffset 125
                               Store 113(txval32) 126
-             132:    131(ptr) AccessChain 129(psout) 22
-                              Store 132 130
-             133:127(PS_OUTPUT) Load 129(psout)
-                              ReturnValue 133
+             132:      8(ptr) AccessChain 129(psout) 60
+                              Store 132 131
+             134:    133(ptr) AccessChain 129(psout) 22
+                              Store 134 130
+             135:127(PS_OUTPUT) Load 129(psout)
+                              ReturnValue 135
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index 38119f7..008ba94 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -10,8 +10,8 @@
 0:23          'txval10' (temp 4-component vector of float)
 0:23          textureOffset (global 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
-0:23              'g_tTex1df4' (uniform texture1DArray)
-0:23              'g_sSamp' (uniform sampler)
+0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -23,7 +23,7 @@
 0:24          textureOffset (global 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
-0:24              'g_sSamp' (uniform sampler)
+0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -35,7 +35,7 @@
 0:25          textureOffset (global 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
-0:25              'g_sSamp' (uniform sampler)
+0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -47,7 +47,7 @@
 0:27          textureOffset (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -61,7 +61,7 @@
 0:28          textureOffset (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -75,7 +75,7 @@
 0:29          textureOffset (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -83,6 +83,16 @@
 0:?             Constant:
 0:?               0 (const int)
 0:?               1 (const int)
+0:33      move second child to first child (temp 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, temp float FragDepth Depth})
+0:33          Constant:
+0:33            0 (const int)
+0:33        Constant:
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
 0:34      move second child to first child (temp float)
 0:34        Depth: direct index for structure (temp float FragDepth)
 0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -93,9 +103,9 @@
 0:36      Branch: Return with expression
 0:36        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -117,8 +127,8 @@
 0:23          'txval10' (temp 4-component vector of float)
 0:23          textureOffset (global 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
-0:23              'g_tTex1df4' (uniform texture1DArray)
-0:23              'g_sSamp' (uniform sampler)
+0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -130,7 +140,7 @@
 0:24          textureOffset (global 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
-0:24              'g_sSamp' (uniform sampler)
+0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -142,7 +152,7 @@
 0:25          textureOffset (global 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
-0:25              'g_sSamp' (uniform sampler)
+0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -154,7 +164,7 @@
 0:27          textureOffset (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -168,7 +178,7 @@
 0:28          textureOffset (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -182,7 +192,7 @@
 0:29          textureOffset (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -190,6 +200,16 @@
 0:?             Constant:
 0:?               0 (const int)
 0:?               1 (const int)
+0:33      move second child to first child (temp 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, temp float FragDepth Depth})
+0:33          Constant:
+0:33            0 (const int)
+0:33        Constant:
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
 0:34      move second child to first child (temp float)
 0:34        Depth: direct index for structure (temp float FragDepth)
 0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -200,9 +220,9 @@
 0:36      Branch: Return with expression
 0:36        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -211,7 +231,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 102
+// Id's are bound by 104
 
                               Capability Shader
                               Capability Sampled1D
@@ -238,16 +258,19 @@
                               MemberName 93(PS_OUTPUT) 0  "Color"
                               MemberName 93(PS_OUTPUT) 1  "Depth"
                               Name 95  "psout"
-                              Name 101  "g_tTex1df4a"
+                              Name 103  "g_tTex1df4a"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 32(g_tTex1di4) DescriptorSet 0
                               Decorate 47(g_tTex1du4) DescriptorSet 0
                               Decorate 59(g_tTex2df4) DescriptorSet 0
                               Decorate 72(g_tTex2di4) DescriptorSet 0
                               Decorate 83(g_tTex2du4) DescriptorSet 0
                               MemberDecorate 93(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 101(g_tTex1df4a) DescriptorSet 0
+                              Decorate 103(g_tTex1df4a) DescriptorSet 0
+                              Decorate 103(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -310,8 +333,9 @@
    93(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
               94:             TypePointer Function 93(PS_OUTPUT)
               96:    6(float) Constant 1065353216
-              97:             TypePointer Function 6(float)
-101(g_tTex1df4a):     11(ptr) Variable UniformConstant
+              97:    7(fvec4) ConstantComposite 96 96 96 96
+              99:             TypePointer Function 6(float)
+103(g_tTex1df4a):     11(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -351,8 +375,10 @@
               87:          86 SampledImage 84 85
               92:   42(ivec4) ImageSampleImplicitLod 87 90 ConstOffset 91
                               Store 80(txval22) 92
-              98:     97(ptr) AccessChain 95(psout) 39
-                              Store 98 96
-              99:93(PS_OUTPUT) Load 95(psout)
-                              ReturnValue 99
+              98:      8(ptr) AccessChain 95(psout) 25
+                              Store 98 97
+             100:     99(ptr) AccessChain 95(psout) 39
+                              Store 100 96
+             101:93(PS_OUTPUT) Load 95(psout)
+                              ReturnValue 101
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index 96d9be7..b672544 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -10,8 +10,8 @@
 0:27          'txval10' (temp 4-component vector of float)
 0:27          texture (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
-0:27              'g_tTex1df4' (uniform texture1DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -23,7 +23,7 @@
 0:28          texture (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -35,7 +35,7 @@
 0:29          texture (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -47,7 +47,7 @@
 0:31          texture (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -60,7 +60,7 @@
 0:32          texture (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -73,7 +73,7 @@
 0:33          texture (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -86,7 +86,7 @@
 0:35          texture (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -100,7 +100,7 @@
 0:36          texture (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -114,7 +114,7 @@
 0:37          texture (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -122,6 +122,16 @@
 0:?               1.000000
 0:37            Constant:
 0:37              0.500000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
 0:40      move second child to first child (temp float)
 0:40        Depth: direct index for structure (temp float FragDepth)
 0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -132,9 +142,9 @@
 0:42      Branch: Return with expression
 0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -159,8 +169,8 @@
 0:27          'txval10' (temp 4-component vector of float)
 0:27          texture (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
-0:27              'g_tTex1df4' (uniform texture1DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -172,7 +182,7 @@
 0:28          texture (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -184,7 +194,7 @@
 0:29          texture (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -196,7 +206,7 @@
 0:31          texture (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -209,7 +219,7 @@
 0:32          texture (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -222,7 +232,7 @@
 0:33          texture (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -235,7 +245,7 @@
 0:35          texture (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -249,7 +259,7 @@
 0:36          texture (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -263,7 +273,7 @@
 0:37          texture (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -271,6 +281,16 @@
 0:?               1.000000
 0:37            Constant:
 0:37              0.500000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
 0:40      move second child to first child (temp float)
 0:40        Depth: direct index for structure (temp float FragDepth)
 0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -281,9 +301,9 @@
 0:42      Branch: Return with expression
 0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -295,7 +315,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 129
+// Id's are bound by 132
 
                               Capability Shader
                               Capability Sampled1D
@@ -329,9 +349,11 @@
                               MemberName 120(PS_OUTPUT) 0  "Color"
                               MemberName 120(PS_OUTPUT) 1  "Depth"
                               Name 122  "psout"
-                              Name 128  "g_tTex1df4a"
+                              Name 131  "g_tTex1df4a"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 32(g_tTex1di4) DescriptorSet 0
                               Decorate 46(g_tTex1du4) DescriptorSet 0
                               Decorate 57(g_tTex2df4) DescriptorSet 0
@@ -341,7 +363,8 @@
                               Decorate 100(g_tTexcdi4) DescriptorSet 0
                               Decorate 110(g_tTexcdu4) DescriptorSet 0
                               MemberDecorate 120(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 128(g_tTex1df4a) DescriptorSet 0
+                              Decorate 131(g_tTex1df4a) DescriptorSet 0
+                              Decorate 131(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -415,9 +438,11 @@
              118:    7(fvec4) ConstantComposite 84 115 116 117
   120(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
              121:             TypePointer Function 120(PS_OUTPUT)
-             123:     26(int) Constant 1
-             124:             TypePointer Function 6(float)
-128(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             123:     26(int) Constant 0
+             124:    7(fvec4) ConstantComposite 117 117 117 117
+             126:     26(int) Constant 1
+             127:             TypePointer Function 6(float)
+131(g_tTex1df4a):     11(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -475,8 +500,10 @@
              114:         113 SampledImage 111 112
              119:   41(ivec4) ImageSampleImplicitLod 114 118 Bias 24
                               Store 107(txval42) 119
-             125:    124(ptr) AccessChain 122(psout) 123
-                              Store 125 117
-             126:120(PS_OUTPUT) Load 122(psout)
-                              ReturnValue 126
+             125:      8(ptr) AccessChain 122(psout) 123
+                              Store 125 124
+             128:    127(ptr) AccessChain 122(psout) 126
+                              Store 128 117
+             129:120(PS_OUTPUT) Load 122(psout)
+                              ReturnValue 129
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index 3fb36ee..8161a59 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -10,8 +10,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          texture (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -22,7 +22,7 @@
 0:32          texture (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -33,7 +33,7 @@
 0:33          texture (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -44,7 +44,7 @@
 0:35          texture (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -56,7 +56,7 @@
 0:36          texture (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -68,7 +68,7 @@
 0:37          texture (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -80,7 +80,7 @@
 0:39          texture (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -93,7 +93,7 @@
 0:40          texture (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -106,7 +106,7 @@
 0:41          texture (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -119,7 +119,7 @@
 0:43          texture (global 4-component vector of float)
 0:43            Construct combined texture-sampler (temp samplerCube)
 0:43              'g_tTexcdf4' (uniform textureCube)
-0:43              'g_sSamp' (uniform sampler)
+0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -132,7 +132,7 @@
 0:44          texture (global 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isamplerCube)
 0:44              'g_tTexcdi4' (uniform itextureCube)
-0:44              'g_sSamp' (uniform sampler)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -145,13 +145,23 @@
 0:45          texture (global 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usamplerCube)
 0:45              'g_tTexcdu4' (uniform utextureCube)
-0:45              'g_sSamp' (uniform sampler)
+0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
 0:?               0.900000
 0:45            Constant:
 0:45              0.500000
+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, temp float FragDepth Depth})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          1.000000
+0:47          1.000000
+0:47          1.000000
+0:47          1.000000
 0:48      move second child to first child (temp float)
 0:48        Depth: direct index for structure (temp float FragDepth)
 0:48          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -162,9 +172,9 @@
 0:50      Branch: Return with expression
 0:50        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -192,8 +202,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          texture (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -204,7 +214,7 @@
 0:32          texture (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -215,7 +225,7 @@
 0:33          texture (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -226,7 +236,7 @@
 0:35          texture (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -238,7 +248,7 @@
 0:36          texture (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -250,7 +260,7 @@
 0:37          texture (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -262,7 +272,7 @@
 0:39          texture (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -275,7 +285,7 @@
 0:40          texture (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -288,7 +298,7 @@
 0:41          texture (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -301,7 +311,7 @@
 0:43          texture (global 4-component vector of float)
 0:43            Construct combined texture-sampler (temp samplerCube)
 0:43              'g_tTexcdf4' (uniform textureCube)
-0:43              'g_sSamp' (uniform sampler)
+0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -314,7 +324,7 @@
 0:44          texture (global 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isamplerCube)
 0:44              'g_tTexcdi4' (uniform itextureCube)
-0:44              'g_sSamp' (uniform sampler)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -327,13 +337,23 @@
 0:45          texture (global 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usamplerCube)
 0:45              'g_tTexcdu4' (uniform utextureCube)
-0:45              'g_sSamp' (uniform sampler)
+0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
 0:?               0.900000
 0:45            Constant:
 0:45              0.500000
+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, temp float FragDepth Depth})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          1.000000
+0:47          1.000000
+0:47          1.000000
+0:47          1.000000
 0:48      move second child to first child (temp float)
 0:48        Depth: direct index for structure (temp float FragDepth)
 0:48          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -344,9 +364,9 @@
 0:50      Branch: Return with expression
 0:50        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -361,7 +381,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 153
+// Id's are bound by 156
 
                               Capability Shader
                               Capability Sampled1D
@@ -400,9 +420,11 @@
                               MemberName 143(PS_OUTPUT) 0  "Color"
                               MemberName 143(PS_OUTPUT) 1  "Depth"
                               Name 145  "psout"
-                              Name 152  "g_tTex1df4a"
+                              Name 155  "g_tTex1df4a"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 29(g_tTex1di4) DescriptorSet 0
                               Decorate 42(g_tTex1du4) DescriptorSet 0
                               Decorate 52(g_tTex2df4) DescriptorSet 0
@@ -415,7 +437,8 @@
                               Decorate 128(g_tTexcdi4) DescriptorSet 0
                               Decorate 137(g_tTexcdu4) DescriptorSet 0
                               MemberDecorate 143(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 152(g_tTex1df4a) DescriptorSet 0
+                              Decorate 155(g_tTex1df4a) DescriptorSet 0
+                              Decorate 155(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -497,10 +520,12 @@
              140:             TypeSampledImage 135
   143(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
              144:             TypePointer Function 143(PS_OUTPUT)
-             146:     23(int) Constant 1
+             146:     23(int) Constant 0
              147:    6(float) Constant 1065353216
-             148:             TypePointer Function 6(float)
-152(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             148:    7(fvec4) ConstantComposite 147 147 147 147
+             150:     23(int) Constant 1
+             151:             TypePointer Function 6(float)
+155(g_tTex1df4a):     11(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -576,8 +601,10 @@
              141:         140 SampledImage 138 139
              142:   37(ivec4) ImageSampleImplicitLod 141 114 Bias 21
                               Store 134(txval42) 142
-             149:    148(ptr) AccessChain 145(psout) 146
-                              Store 149 147
-             150:143(PS_OUTPUT) Load 145(psout)
-                              ReturnValue 150
+             149:      8(ptr) AccessChain 145(psout) 146
+                              Store 149 148
+             152:    151(ptr) AccessChain 145(psout) 150
+                              Store 152 147
+             153:143(PS_OUTPUT) Load 145(psout)
+                              ReturnValue 153
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index 8faab19..8c5726c 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -10,8 +10,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          textureOffset (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -24,7 +24,7 @@
 0:32          textureOffset (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -37,7 +37,7 @@
 0:33          textureOffset (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -50,7 +50,7 @@
 0:35          textureOffset (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -65,7 +65,7 @@
 0:36          textureOffset (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -80,7 +80,7 @@
 0:37          textureOffset (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -95,7 +95,7 @@
 0:39          textureOffset (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -112,7 +112,7 @@
 0:40          textureOffset (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -129,7 +129,7 @@
 0:41          textureOffset (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -140,6 +140,16 @@
 0:?               1 (const int)
 0:?               0 (const int)
 0:?               -1 (const int)
+0:45      move second child to first child (temp 4-component vector of float)
+0:45        Color: direct index for structure (temp 4-component vector of float)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            0 (const int)
+0:45        Constant:
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
 0:46      move second child to first child (temp float)
 0:46        Depth: direct index for structure (temp float FragDepth)
 0:46          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -150,9 +160,9 @@
 0:48      Branch: Return with expression
 0:48        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -180,8 +190,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          textureOffset (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -194,7 +204,7 @@
 0:32          textureOffset (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -207,7 +217,7 @@
 0:33          textureOffset (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -220,7 +230,7 @@
 0:35          textureOffset (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -235,7 +245,7 @@
 0:36          textureOffset (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -250,7 +260,7 @@
 0:37          textureOffset (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -265,7 +275,7 @@
 0:39          textureOffset (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -282,7 +292,7 @@
 0:40          textureOffset (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -299,7 +309,7 @@
 0:41          textureOffset (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -310,6 +320,16 @@
 0:?               1 (const int)
 0:?               0 (const int)
 0:?               -1 (const int)
+0:45      move second child to first child (temp 4-component vector of float)
+0:45        Color: direct index for structure (temp 4-component vector of float)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            0 (const int)
+0:45        Constant:
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
 0:46      move second child to first child (temp float)
 0:46        Depth: direct index for structure (temp float FragDepth)
 0:46          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -320,9 +340,9 @@
 0:48      Branch: Return with expression
 0:48        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -337,7 +357,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 145
+// Id's are bound by 147
 
                               Capability Shader
                               Capability Sampled1D
@@ -370,12 +390,14 @@
                               MemberName 127(PS_OUTPUT) 0  "Color"
                               MemberName 127(PS_OUTPUT) 1  "Depth"
                               Name 129  "psout"
-                              Name 135  "g_tTex1df4a"
-                              Name 138  "g_tTexcdf4"
-                              Name 141  "g_tTexcdi4"
-                              Name 144  "g_tTexcdu4"
+                              Name 137  "g_tTex1df4a"
+                              Name 140  "g_tTexcdf4"
+                              Name 143  "g_tTexcdi4"
+                              Name 146  "g_tTexcdu4"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 30(g_tTex1di4) DescriptorSet 0
                               Decorate 43(g_tTex1du4) DescriptorSet 0
                               Decorate 53(g_tTex2df4) DescriptorSet 0
@@ -385,10 +407,11 @@
                               Decorate 105(g_tTex3di4) DescriptorSet 0
                               Decorate 116(g_tTex3du4) DescriptorSet 0
                               MemberDecorate 127(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 135(g_tTex1df4a) DescriptorSet 0
-                              Decorate 138(g_tTexcdf4) DescriptorSet 0
-                              Decorate 141(g_tTexcdi4) DescriptorSet 0
-                              Decorate 144(g_tTexcdu4) DescriptorSet 0
+                              Decorate 137(g_tTex1df4a) DescriptorSet 0
+                              Decorate 137(g_tTex1df4a) Binding 1
+                              Decorate 140(g_tTexcdf4) DescriptorSet 0
+                              Decorate 143(g_tTexcdi4) DescriptorSet 0
+                              Decorate 146(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -470,17 +493,18 @@
   127(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
              128:             TypePointer Function 127(PS_OUTPUT)
              130:    6(float) Constant 1065353216
-             131:             TypePointer Function 6(float)
-135(g_tTex1df4a):     11(ptr) Variable UniformConstant
-             136:             TypeImage 6(float) Cube sampled format:Unknown
-             137:             TypePointer UniformConstant 136
- 138(g_tTexcdf4):    137(ptr) Variable UniformConstant
-             139:             TypeImage 22(int) Cube sampled format:Unknown
-             140:             TypePointer UniformConstant 139
- 141(g_tTexcdi4):    140(ptr) Variable UniformConstant
-             142:             TypeImage 37(int) Cube sampled format:Unknown
-             143:             TypePointer UniformConstant 142
- 144(g_tTexcdu4):    143(ptr) Variable UniformConstant
+             131:    7(fvec4) ConstantComposite 130 130 130 130
+             133:             TypePointer Function 6(float)
+137(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             138:             TypeImage 6(float) Cube sampled format:Unknown
+             139:             TypePointer UniformConstant 138
+ 140(g_tTexcdf4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 22(int) Cube sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTexcdi4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 37(int) Cube sampled format:Unknown
+             145:             TypePointer UniformConstant 144
+ 146(g_tTexcdu4):    145(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -538,8 +562,10 @@
              120:         119 SampledImage 117 118
              126:   38(ivec4) ImageSampleImplicitLod 120 124 Bias ConstOffset 125 21
                               Store 113(txval32) 126
-             132:    131(ptr) AccessChain 129(psout) 23
-                              Store 132 130
-             133:127(PS_OUTPUT) Load 129(psout)
-                              ReturnValue 133
+             132:      8(ptr) AccessChain 129(psout) 61
+                              Store 132 131
+             134:    133(ptr) AccessChain 129(psout) 23
+                              Store 134 130
+             135:127(PS_OUTPUT) Load 129(psout)
+                              ReturnValue 135
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index 51f6123..0933594 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -10,8 +10,8 @@
 0:23          'txval10' (temp 4-component vector of float)
 0:23          textureOffset (global 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
-0:23              'g_tTex1df4' (uniform texture1DArray)
-0:23              'g_sSamp' (uniform sampler)
+0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -25,7 +25,7 @@
 0:24          textureOffset (global 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
-0:24              'g_sSamp' (uniform sampler)
+0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -39,7 +39,7 @@
 0:25          textureOffset (global 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
-0:25              'g_sSamp' (uniform sampler)
+0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -53,7 +53,7 @@
 0:27          textureOffset (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -69,7 +69,7 @@
 0:28          textureOffset (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -85,7 +85,7 @@
 0:29          textureOffset (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -95,6 +95,16 @@
 0:?             Constant:
 0:?               0 (const int)
 0:?               1 (const int)
+0:33      move second child to first child (temp 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, temp float FragDepth Depth})
+0:33          Constant:
+0:33            0 (const int)
+0:33        Constant:
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
 0:34      move second child to first child (temp float)
 0:34        Depth: direct index for structure (temp float FragDepth)
 0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -105,9 +115,9 @@
 0:36      Branch: Return with expression
 0:36        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -129,8 +139,8 @@
 0:23          'txval10' (temp 4-component vector of float)
 0:23          textureOffset (global 4-component vector of float)
 0:23            Construct combined texture-sampler (temp sampler1DArray)
-0:23              'g_tTex1df4' (uniform texture1DArray)
-0:23              'g_sSamp' (uniform sampler)
+0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -144,7 +154,7 @@
 0:24          textureOffset (global 4-component vector of int)
 0:24            Construct combined texture-sampler (temp isampler1DArray)
 0:24              'g_tTex1di4' (uniform itexture1DArray)
-0:24              'g_sSamp' (uniform sampler)
+0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -158,7 +168,7 @@
 0:25          textureOffset (global 4-component vector of uint)
 0:25            Construct combined texture-sampler (temp usampler1DArray)
 0:25              'g_tTex1du4' (uniform utexture1DArray)
-0:25              'g_sSamp' (uniform sampler)
+0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -172,7 +182,7 @@
 0:27          textureOffset (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler2DArray)
 0:27              'g_tTex2df4' (uniform texture2DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -188,7 +198,7 @@
 0:28          textureOffset (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler2DArray)
 0:28              'g_tTex2di4' (uniform itexture2DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -204,7 +214,7 @@
 0:29          textureOffset (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler2DArray)
 0:29              'g_tTex2du4' (uniform utexture2DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -214,6 +224,16 @@
 0:?             Constant:
 0:?               0 (const int)
 0:?               1 (const int)
+0:33      move second child to first child (temp 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, temp float FragDepth Depth})
+0:33          Constant:
+0:33            0 (const int)
+0:33        Constant:
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
 0:34      move second child to first child (temp float)
 0:34        Depth: direct index for structure (temp float FragDepth)
 0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -224,9 +244,9 @@
 0:36      Branch: Return with expression
 0:36        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -235,7 +255,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 102
+// Id's are bound by 104
 
                               Capability Shader
                               Capability Sampled1D
@@ -262,16 +282,19 @@
                               MemberName 93(PS_OUTPUT) 0  "Color"
                               MemberName 93(PS_OUTPUT) 1  "Depth"
                               Name 95  "psout"
-                              Name 101  "g_tTex1df4a"
+                              Name 103  "g_tTex1df4a"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 33(g_tTex1di4) DescriptorSet 0
                               Decorate 48(g_tTex1du4) DescriptorSet 0
                               Decorate 60(g_tTex2df4) DescriptorSet 0
                               Decorate 73(g_tTex2di4) DescriptorSet 0
                               Decorate 83(g_tTex2du4) DescriptorSet 0
                               MemberDecorate 93(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 101(g_tTex1df4a) DescriptorSet 0
+                              Decorate 103(g_tTex1df4a) DescriptorSet 0
+                              Decorate 103(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -334,8 +357,9 @@
    93(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
               94:             TypePointer Function 93(PS_OUTPUT)
               96:    6(float) Constant 1065353216
-              97:             TypePointer Function 6(float)
-101(g_tTex1df4a):     11(ptr) Variable UniformConstant
+              97:    7(fvec4) ConstantComposite 96 96 96 96
+              99:             TypePointer Function 6(float)
+103(g_tTex1df4a):     11(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -375,8 +399,10 @@
               87:          86 SampledImage 84 85
               92:   43(ivec4) ImageSampleImplicitLod 87 90 Bias ConstOffset 91 24
                               Store 80(txval22) 92
-              98:     97(ptr) AccessChain 95(psout) 40
-                              Store 98 96
-              99:93(PS_OUTPUT) Load 95(psout)
-                              ReturnValue 99
+              98:      8(ptr) AccessChain 95(psout) 26
+                              Store 98 97
+             100:     99(ptr) AccessChain 95(psout) 40
+                              Store 100 96
+             101:93(PS_OUTPUT) Load 95(psout)
+                              ReturnValue 101
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
new file mode 100644
index 0000000..1b2d27f
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -0,0 +1,615 @@
+hlsl.samplecmp.array.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:61  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:42              Constant:
+0:42                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:43              Constant:
+0:43                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:44              Constant:
+0:44                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:47              Constant:
+0:47                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:48              Constant:
+0:48                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:49              Constant:
+0:49                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:52            Constant:
+0:52              0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:53            Constant:
+0:53              0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:54            Constant:
+0:54              0.750000
+0:56      move second child to first child (temp 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 FragDepth Depth})
+0:56          Constant:
+0:56            0 (const int)
+0:56        Constant:
+0:56          1.000000
+0:56          1.000000
+0:56          1.000000
+0:56          1.000000
+0:57      move second child to first child (temp float)
+0:57        Depth: direct index for structure (temp float FragDepth)
+0:57          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:57          Constant:
+0:57            1 (const int)
+0:57        Constant:
+0:57          1.000000
+0:59      Branch: Return with expression
+0:59        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:61  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:42              Constant:
+0:42                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:43              Constant:
+0:43                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:44              Constant:
+0:44                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:47              Constant:
+0:47                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:48              Constant:
+0:48                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:49              Constant:
+0:49                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:52            Constant:
+0:52              0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:53            Constant:
+0:53              0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:54            Constant:
+0:54              0.750000
+0:56      move second child to first child (temp 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 FragDepth Depth})
+0:56          Constant:
+0:56            0 (const int)
+0:56        Constant:
+0:56          1.000000
+0:56          1.000000
+0:56          1.000000
+0:56          1.000000
+0:57      move second child to first child (temp float)
+0:57        Depth: direct index for structure (temp float FragDepth)
+0:57          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:57          Constant:
+0:57            1 (const int)
+0:57        Constant:
+0:57          1.000000
+0:59      Branch: Return with expression
+0:59        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 177
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 143  "g_tTex1df4"
+                              Name 146  "g_tTex1di4"
+                              Name 149  "g_tTex1du4"
+                              Name 152  "g_tTex2df4"
+                              Name 155  "g_tTex2di4"
+                              Name 158  "g_tTex2du4"
+                              Name 161  "g_tTex3df4"
+                              Name 164  "g_tTex3di4"
+                              Name 167  "g_tTex3du4"
+                              Name 170  "g_tTexcdf4"
+                              Name 173  "g_tTexcdi4"
+                              Name 176  "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
+                              MemberDecorate 129(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 143(g_tTex1df4) DescriptorSet 0
+                              Decorate 143(g_tTex1df4) Binding 0
+                              Decorate 146(g_tTex1di4) DescriptorSet 0
+                              Decorate 149(g_tTex1du4) DescriptorSet 0
+                              Decorate 152(g_tTex2df4) DescriptorSet 0
+                              Decorate 155(g_tTex2di4) DescriptorSet 0
+                              Decorate 158(g_tTex2du4) DescriptorSet 0
+                              Decorate 161(g_tTex3df4) DescriptorSet 0
+                              Decorate 164(g_tTex3di4) DescriptorSet 0
+                              Decorate 167(g_tTex3du4) DescriptorSet 0
+                              Decorate 170(g_tTexcdf4) DescriptorSet 0
+                              Decorate 173(g_tTexcdi4) DescriptorSet 0
+                              Decorate 176(g_tTexcdu4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D array sampled format:Unknown
+              10:             TypePointer UniformConstant 9
+ 11(g_tTex1df4a):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeImage 6(float) 1D depth array sampled format:Unknown
+              18:             TypeSampledImage 17
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              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
+             141:             TypeImage 6(float) 1D sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTex1df4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 29(int) 1D sampled format:Unknown
+             145:             TypePointer UniformConstant 144
+ 146(g_tTex1di4):    145(ptr) Variable UniformConstant
+             147:             TypeImage 42(int) 1D sampled format:Unknown
+             148:             TypePointer UniformConstant 147
+ 149(g_tTex1du4):    148(ptr) Variable UniformConstant
+             150:             TypeImage 6(float) 2D sampled format:Unknown
+             151:             TypePointer UniformConstant 150
+ 152(g_tTex2df4):    151(ptr) Variable UniformConstant
+             153:             TypeImage 29(int) 2D sampled format:Unknown
+             154:             TypePointer UniformConstant 153
+ 155(g_tTex2di4):    154(ptr) Variable UniformConstant
+             156:             TypeImage 42(int) 2D sampled format:Unknown
+             157:             TypePointer UniformConstant 156
+ 158(g_tTex2du4):    157(ptr) Variable UniformConstant
+             159:             TypeImage 6(float) 3D sampled format:Unknown
+             160:             TypePointer UniformConstant 159
+ 161(g_tTex3df4):    160(ptr) Variable UniformConstant
+             162:             TypeImage 29(int) 3D sampled format:Unknown
+             163:             TypePointer UniformConstant 162
+ 164(g_tTex3di4):    163(ptr) Variable UniformConstant
+             165:             TypeImage 42(int) 3D sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+ 167(g_tTex3du4):    166(ptr) Variable UniformConstant
+             168:             TypeImage 6(float) Cube sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+ 170(g_tTexcdf4):    169(ptr) Variable UniformConstant
+             171:             TypeImage 29(int) Cube sampled format:Unknown
+             172:             TypePointer UniformConstant 171
+ 173(g_tTexcdi4):    172(ptr) Variable UniformConstant
+             174:             TypeImage 42(int) Cube sampled format:Unknown
+             175:             TypePointer UniformConstant 174
+ 176(g_tTexcdu4):    175(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
+              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
+             139:129(PS_OUTPUT) Load 131(psout)
+                              ReturnValue 139
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
new file mode 100644
index 0000000..3068030
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -0,0 +1,595 @@
+hlsl.samplecmp.basic.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:62  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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              Constant:
+0:42                0.100000
+0:42              Constant:
+0:42                0.750000
+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            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              Constant:
+0:43                0.100000
+0:43              Constant:
+0:43                0.750000
+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            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              Constant:
+0:44                0.100000
+0:44              Constant:
+0:44                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:47              Constant:
+0:47                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:48              Constant:
+0:48                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:49              Constant:
+0:49                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:53              Constant:
+0:53                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:54              Constant:
+0:54                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:55              Constant:
+0:55                0.750000
+0:57      move second child to first child (temp 4-component vector of float)
+0:57        Color: direct index for structure (temp 4-component vector of float)
+0:57          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:57          Constant:
+0:57            0 (const int)
+0:57        Constant:
+0:57          1.000000
+0:57          1.000000
+0:57          1.000000
+0:57          1.000000
+0:58      move second child to first child (temp float)
+0:58        Depth: direct index for structure (temp float FragDepth)
+0:58          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:58          Constant:
+0:58            1 (const int)
+0:58        Constant:
+0:58          1.000000
+0:60      Branch: Return with expression
+0:60        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:62  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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              Constant:
+0:42                0.100000
+0:42              Constant:
+0:42                0.750000
+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            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              Constant:
+0:43                0.100000
+0:43              Constant:
+0:43                0.750000
+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            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              Constant:
+0:44                0.100000
+0:44              Constant:
+0:44                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:47              Constant:
+0:47                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:48              Constant:
+0:48                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:49              Constant:
+0:49                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:53              Constant:
+0:53                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:54              Constant:
+0:54                0.750000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:55              Constant:
+0:55                0.750000
+0:57      move second child to first child (temp 4-component vector of float)
+0:57        Color: direct index for structure (temp 4-component vector of float)
+0:57          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:57          Constant:
+0:57            0 (const int)
+0:57        Constant:
+0:57          1.000000
+0:57          1.000000
+0:57          1.000000
+0:57          1.000000
+0:58      move second child to first child (temp float)
+0:58        Depth: direct index for structure (temp float FragDepth)
+0:58          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:58          Constant:
+0:58            1 (const int)
+0:58        Constant:
+0:58          1.000000
+0:60      Branch: Return with expression
+0:60        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 175
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 141  "g_tTex3df4"
+                              Name 144  "g_tTex3di4"
+                              Name 147  "g_tTex3du4"
+                              Name 150  "g_tTex1df4a"
+                              Name 153  "g_tTex1di4a"
+                              Name 156  "g_tTex1du4a"
+                              Name 159  "g_tTex2df4a"
+                              Name 162  "g_tTex2di4a"
+                              Name 165  "g_tTex2du4a"
+                              Name 168  "g_tTexcdf4a"
+                              Name 171  "g_tTexcdi4a"
+                              Name 174  "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
+                              MemberDecorate 127(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 141(g_tTex3df4) DescriptorSet 0
+                              Decorate 144(g_tTex3di4) DescriptorSet 0
+                              Decorate 147(g_tTex3du4) DescriptorSet 0
+                              Decorate 150(g_tTex1df4a) DescriptorSet 0
+                              Decorate 153(g_tTex1di4a) DescriptorSet 0
+                              Decorate 156(g_tTex1du4a) DescriptorSet 0
+                              Decorate 159(g_tTex2df4a) DescriptorSet 0
+                              Decorate 162(g_tTex2di4a) DescriptorSet 0
+                              Decorate 165(g_tTex2du4a) DescriptorSet 0
+                              Decorate 168(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 171(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 174(g_tTexcdu4a) DescriptorSet 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_tTex1df4):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeImage 6(float) 1D depth sampled format:Unknown
+              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
+             139:             TypeImage 6(float) 3D sampled format:Unknown
+             140:             TypePointer UniformConstant 139
+ 141(g_tTex3df4):    140(ptr) Variable UniformConstant
+             142:             TypeImage 25(int) 3D sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+ 144(g_tTex3di4):    143(ptr) Variable UniformConstant
+             145:             TypeImage 37(int) 3D sampled format:Unknown
+             146:             TypePointer UniformConstant 145
+ 147(g_tTex3du4):    146(ptr) Variable UniformConstant
+             148:             TypeImage 6(float) 1D array sampled format:Unknown
+             149:             TypePointer UniformConstant 148
+150(g_tTex1df4a):    149(ptr) Variable UniformConstant
+             151:             TypeImage 25(int) 1D array sampled format:Unknown
+             152:             TypePointer UniformConstant 151
+153(g_tTex1di4a):    152(ptr) Variable UniformConstant
+             154:             TypeImage 37(int) 1D array sampled format:Unknown
+             155:             TypePointer UniformConstant 154
+156(g_tTex1du4a):    155(ptr) Variable UniformConstant
+             157:             TypeImage 6(float) 2D array sampled format:Unknown
+             158:             TypePointer UniformConstant 157
+159(g_tTex2df4a):    158(ptr) Variable UniformConstant
+             160:             TypeImage 25(int) 2D array sampled format:Unknown
+             161:             TypePointer UniformConstant 160
+162(g_tTex2di4a):    161(ptr) Variable UniformConstant
+             163:             TypeImage 37(int) 2D array sampled format:Unknown
+             164:             TypePointer UniformConstant 163
+165(g_tTex2du4a):    164(ptr) Variable UniformConstant
+             166:             TypeImage 6(float) Cube array sampled format:Unknown
+             167:             TypePointer UniformConstant 166
+168(g_tTexcdf4a):    167(ptr) Variable UniformConstant
+             169:             TypeImage 25(int) Cube array sampled format:Unknown
+             170:             TypePointer UniformConstant 169
+171(g_tTexcdi4a):    170(ptr) Variable UniformConstant
+             172:             TypeImage 37(int) Cube array sampled format:Unknown
+             173:             TypePointer UniformConstant 172
+174(g_tTexcdu4a):    173(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
+              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
+             137:127(PS_OUTPUT) Load 129(psout)
+                              ReturnValue 137
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
new file mode 100644
index 0000000..df298da
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -0,0 +1,509 @@
+hlsl.samplecmp.offset.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:67  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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              Constant:
+0:42                0.100000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              2 (const int)
+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            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              Constant:
+0:43                0.100000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              2 (const int)
+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            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              Constant:
+0:44                0.100000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:47              Constant:
+0:47                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:48              Constant:
+0:48                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:49              Constant:
+0:49                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:62      move second child to first child (temp 4-component vector of float)
+0:62        Color: direct index for structure (temp 4-component vector of float)
+0:62          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:62          Constant:
+0:62            0 (const int)
+0:62        Constant:
+0:62          1.000000
+0:62          1.000000
+0:62          1.000000
+0:62          1.000000
+0:63      move second child to first child (temp float)
+0:63        Depth: direct index for structure (temp float FragDepth)
+0:63          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:63          Constant:
+0:63            1 (const int)
+0:63        Constant:
+0:63          1.000000
+0:65      Branch: Return with expression
+0:65        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:67  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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              Constant:
+0:42                0.100000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              2 (const int)
+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            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              Constant:
+0:43                0.100000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              2 (const int)
+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            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              Constant:
+0:44                0.100000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:47              Constant:
+0:47                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:48              Constant:
+0:48                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:49              Constant:
+0:49                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:62      move second child to first child (temp 4-component vector of float)
+0:62        Color: direct index for structure (temp 4-component vector of float)
+0:62          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:62          Constant:
+0:62            0 (const int)
+0:62        Constant:
+0:62          1.000000
+0:62          1.000000
+0:62          1.000000
+0:62          1.000000
+0:63      move second child to first child (temp float)
+0:63        Depth: direct index for structure (temp float FragDepth)
+0:63          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:63          Constant:
+0:63            1 (const int)
+0:63        Constant:
+0:63          1.000000
+0:65      Branch: Return with expression
+0:65        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 149
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 106  "g_tTex3df4"
+                              Name 109  "g_tTex3di4"
+                              Name 112  "g_tTex3du4"
+                              Name 115  "g_tTexcdf4"
+                              Name 118  "g_tTexcdi4"
+                              Name 121  "g_tTexcdu4"
+                              Name 124  "g_tTex1df4a"
+                              Name 127  "g_tTex1di4a"
+                              Name 130  "g_tTex1du4a"
+                              Name 133  "g_tTex2df4a"
+                              Name 136  "g_tTex2di4a"
+                              Name 139  "g_tTex2du4a"
+                              Name 142  "g_tTexcdf4a"
+                              Name 145  "g_tTexcdi4a"
+                              Name 148  "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
+                              MemberDecorate 92(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 106(g_tTex3df4) DescriptorSet 0
+                              Decorate 109(g_tTex3di4) DescriptorSet 0
+                              Decorate 112(g_tTex3du4) DescriptorSet 0
+                              Decorate 115(g_tTexcdf4) DescriptorSet 0
+                              Decorate 118(g_tTexcdi4) DescriptorSet 0
+                              Decorate 121(g_tTexcdu4) DescriptorSet 0
+                              Decorate 124(g_tTex1df4a) DescriptorSet 0
+                              Decorate 127(g_tTex1di4a) DescriptorSet 0
+                              Decorate 130(g_tTex1du4a) DescriptorSet 0
+                              Decorate 133(g_tTex2df4a) DescriptorSet 0
+                              Decorate 136(g_tTex2di4a) DescriptorSet 0
+                              Decorate 139(g_tTex2du4a) DescriptorSet 0
+                              Decorate 142(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 145(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 148(g_tTexcdu4a) DescriptorSet 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_tTex1df4):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeImage 6(float) 1D depth sampled format:Unknown
+              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
+             104:             TypeImage 6(float) 3D sampled format:Unknown
+             105:             TypePointer UniformConstant 104
+ 106(g_tTex3df4):    105(ptr) Variable UniformConstant
+             107:             TypeImage 22(int) 3D sampled format:Unknown
+             108:             TypePointer UniformConstant 107
+ 109(g_tTex3di4):    108(ptr) Variable UniformConstant
+             110:             TypeImage 38(int) 3D sampled format:Unknown
+             111:             TypePointer UniformConstant 110
+ 112(g_tTex3du4):    111(ptr) Variable UniformConstant
+             113:             TypeImage 6(float) Cube sampled format:Unknown
+             114:             TypePointer UniformConstant 113
+ 115(g_tTexcdf4):    114(ptr) Variable UniformConstant
+             116:             TypeImage 22(int) Cube sampled format:Unknown
+             117:             TypePointer UniformConstant 116
+ 118(g_tTexcdi4):    117(ptr) Variable UniformConstant
+             119:             TypeImage 38(int) Cube sampled format:Unknown
+             120:             TypePointer UniformConstant 119
+ 121(g_tTexcdu4):    120(ptr) Variable UniformConstant
+             122:             TypeImage 6(float) 1D array sampled format:Unknown
+             123:             TypePointer UniformConstant 122
+124(g_tTex1df4a):    123(ptr) Variable UniformConstant
+             125:             TypeImage 22(int) 1D array sampled format:Unknown
+             126:             TypePointer UniformConstant 125
+127(g_tTex1di4a):    126(ptr) Variable UniformConstant
+             128:             TypeImage 38(int) 1D array sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+130(g_tTex1du4a):    129(ptr) Variable UniformConstant
+             131:             TypeImage 6(float) 2D array sampled format:Unknown
+             132:             TypePointer UniformConstant 131
+133(g_tTex2df4a):    132(ptr) Variable UniformConstant
+             134:             TypeImage 22(int) 2D array sampled format:Unknown
+             135:             TypePointer UniformConstant 134
+136(g_tTex2di4a):    135(ptr) Variable UniformConstant
+             137:             TypeImage 38(int) 2D array sampled format:Unknown
+             138:             TypePointer UniformConstant 137
+139(g_tTex2du4a):    138(ptr) Variable UniformConstant
+             140:             TypeImage 6(float) Cube array sampled format:Unknown
+             141:             TypePointer UniformConstant 140
+142(g_tTexcdf4a):    141(ptr) Variable UniformConstant
+             143:             TypeImage 22(int) Cube array sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+145(g_tTexcdi4a):    144(ptr) Variable UniformConstant
+             146:             TypeImage 38(int) Cube array sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+148(g_tTexcdu4a):    147(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
+              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
+             102:92(PS_OUTPUT) Load 94(psout)
+                              ReturnValue 102
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
new file mode 100644
index 0000000..5d42073
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -0,0 +1,527 @@
+hlsl.samplecmp.offsetarray.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:68  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:47              Constant:
+0:47                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:48              Constant:
+0:48                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:49              Constant:
+0:49                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:63      move second child to first child (temp 4-component vector of float)
+0:63        Color: direct index for structure (temp 4-component vector of float)
+0:63          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:63          Constant:
+0:63            0 (const int)
+0:63        Constant:
+0:63          1.000000
+0:63          1.000000
+0:63          1.000000
+0:63          1.000000
+0:64      move second child to first child (temp float)
+0:64        Depth: direct index for structure (temp float FragDepth)
+0:64          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:64          Constant:
+0:64            1 (const int)
+0:64        Constant:
+0:64          1.000000
+0:66      Branch: Return with expression
+0:66        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:68  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:47              Constant:
+0:47                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:48              Constant:
+0:48                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:49              Constant:
+0:49                0.750000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:63      move second child to first child (temp 4-component vector of float)
+0:63        Color: direct index for structure (temp 4-component vector of float)
+0:63          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:63          Constant:
+0:63            0 (const int)
+0:63        Constant:
+0:63          1.000000
+0:63          1.000000
+0:63          1.000000
+0:63          1.000000
+0:64      move second child to first child (temp float)
+0:64        Depth: direct index for structure (temp float FragDepth)
+0:64          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:64          Constant:
+0:64            1 (const int)
+0:64        Constant:
+0:64          1.000000
+0:66      Branch: Return with expression
+0:66        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 155
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 112  "g_tTex1df4"
+                              Name 115  "g_tTex1di4"
+                              Name 118  "g_tTex1du4"
+                              Name 121  "g_tTex2df4"
+                              Name 124  "g_tTex2di4"
+                              Name 127  "g_tTex2du4"
+                              Name 130  "g_tTex3df4"
+                              Name 133  "g_tTex3di4"
+                              Name 136  "g_tTex3du4"
+                              Name 139  "g_tTexcdf4"
+                              Name 142  "g_tTexcdi4"
+                              Name 145  "g_tTexcdu4"
+                              Name 148  "g_tTexcdf4a"
+                              Name 151  "g_tTexcdi4a"
+                              Name 154  "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
+                              MemberDecorate 98(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 112(g_tTex1df4) DescriptorSet 0
+                              Decorate 112(g_tTex1df4) Binding 0
+                              Decorate 115(g_tTex1di4) DescriptorSet 0
+                              Decorate 118(g_tTex1du4) DescriptorSet 0
+                              Decorate 121(g_tTex2df4) DescriptorSet 0
+                              Decorate 124(g_tTex2di4) DescriptorSet 0
+                              Decorate 127(g_tTex2du4) DescriptorSet 0
+                              Decorate 130(g_tTex3df4) DescriptorSet 0
+                              Decorate 133(g_tTex3di4) DescriptorSet 0
+                              Decorate 136(g_tTex3du4) DescriptorSet 0
+                              Decorate 139(g_tTexcdf4) DescriptorSet 0
+                              Decorate 142(g_tTexcdi4) DescriptorSet 0
+                              Decorate 145(g_tTexcdu4) DescriptorSet 0
+                              Decorate 148(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 151(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 154(g_tTexcdu4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D array sampled format:Unknown
+              10:             TypePointer UniformConstant 9
+ 11(g_tTex1df4a):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeImage 6(float) 1D depth array sampled format:Unknown
+              18:             TypeSampledImage 17
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              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
+             110:             TypeImage 6(float) 1D sampled format:Unknown
+             111:             TypePointer UniformConstant 110
+ 112(g_tTex1df4):    111(ptr) Variable UniformConstant
+             113:             TypeImage 26(int) 1D sampled format:Unknown
+             114:             TypePointer UniformConstant 113
+ 115(g_tTex1di4):    114(ptr) Variable UniformConstant
+             116:             TypeImage 43(int) 1D sampled format:Unknown
+             117:             TypePointer UniformConstant 116
+ 118(g_tTex1du4):    117(ptr) Variable UniformConstant
+             119:             TypeImage 6(float) 2D sampled format:Unknown
+             120:             TypePointer UniformConstant 119
+ 121(g_tTex2df4):    120(ptr) Variable UniformConstant
+             122:             TypeImage 26(int) 2D sampled format:Unknown
+             123:             TypePointer UniformConstant 122
+ 124(g_tTex2di4):    123(ptr) Variable UniformConstant
+             125:             TypeImage 43(int) 2D sampled format:Unknown
+             126:             TypePointer UniformConstant 125
+ 127(g_tTex2du4):    126(ptr) Variable UniformConstant
+             128:             TypeImage 6(float) 3D sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+ 130(g_tTex3df4):    129(ptr) Variable UniformConstant
+             131:             TypeImage 26(int) 3D sampled format:Unknown
+             132:             TypePointer UniformConstant 131
+ 133(g_tTex3di4):    132(ptr) Variable UniformConstant
+             134:             TypeImage 43(int) 3D sampled format:Unknown
+             135:             TypePointer UniformConstant 134
+ 136(g_tTex3du4):    135(ptr) Variable UniformConstant
+             137:             TypeImage 6(float) Cube sampled format:Unknown
+             138:             TypePointer UniformConstant 137
+ 139(g_tTexcdf4):    138(ptr) Variable UniformConstant
+             140:             TypeImage 26(int) Cube sampled format:Unknown
+             141:             TypePointer UniformConstant 140
+ 142(g_tTexcdi4):    141(ptr) Variable UniformConstant
+             143:             TypeImage 43(int) Cube sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+ 145(g_tTexcdu4):    144(ptr) Variable UniformConstant
+             146:             TypeImage 6(float) Cube array sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+148(g_tTexcdf4a):    147(ptr) Variable UniformConstant
+             149:             TypeImage 26(int) Cube array sampled format:Unknown
+             150:             TypePointer UniformConstant 149
+151(g_tTexcdi4a):    150(ptr) Variable UniformConstant
+             152:             TypeImage 43(int) Cube array sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+154(g_tTexcdu4a):    153(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
+              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
+             108:98(PS_OUTPUT) Load 100(psout)
+                              ReturnValue 108
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
new file mode 100644
index 0000000..c54e2d5
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -0,0 +1,652 @@
+hlsl.samplecmplevelzero.array.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:61  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:47              Constant:
+0:47                0.750000
+0:47            Constant:
+0:47              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:48              Constant:
+0:48                0.750000
+0:48            Constant:
+0:48              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:49              Constant:
+0:49                0.750000
+0:49            Constant:
+0:49              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:52            Constant:
+0:52              0.750000
+0:52            Constant:
+0:52              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:53            Constant:
+0:53              0.750000
+0:53            Constant:
+0:53              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:54            Constant:
+0:54              0.750000
+0:54            Constant:
+0:54              0.000000
+0:56      move second child to first child (temp 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 FragDepth Depth})
+0:56          Constant:
+0:56            0 (const int)
+0:56        Constant:
+0:56          1.000000
+0:56          1.000000
+0:56          1.000000
+0:56          1.000000
+0:57      move second child to first child (temp float)
+0:57        Depth: direct index for structure (temp float FragDepth)
+0:57          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:57          Constant:
+0:57            1 (const int)
+0:57        Constant:
+0:57          1.000000
+0:59      Branch: Return with expression
+0:59        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:61  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:47              Constant:
+0:47                0.750000
+0:47            Constant:
+0:47              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:48              Constant:
+0:48                0.750000
+0:48            Constant:
+0:48              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:49              Constant:
+0:49                0.750000
+0:49            Constant:
+0:49              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:52            Constant:
+0:52              0.750000
+0:52            Constant:
+0:52              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:53            Constant:
+0:53              0.750000
+0:53            Constant:
+0:53              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:?                 0.400000
+0:54            Constant:
+0:54              0.750000
+0:54            Constant:
+0:54              0.000000
+0:56      move second child to first child (temp 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 FragDepth Depth})
+0:56          Constant:
+0:56            0 (const int)
+0:56        Constant:
+0:56          1.000000
+0:56          1.000000
+0:56          1.000000
+0:56          1.000000
+0:57      move second child to first child (temp float)
+0:57        Depth: direct index for structure (temp float FragDepth)
+0:57          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:57          Constant:
+0:57            1 (const int)
+0:57        Constant:
+0:57          1.000000
+0:59      Branch: Return with expression
+0:59        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 178
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 144  "g_tTex1df4"
+                              Name 147  "g_tTex1di4"
+                              Name 150  "g_tTex1du4"
+                              Name 153  "g_tTex2df4"
+                              Name 156  "g_tTex2di4"
+                              Name 159  "g_tTex2du4"
+                              Name 162  "g_tTex3df4"
+                              Name 165  "g_tTex3di4"
+                              Name 168  "g_tTex3du4"
+                              Name 171  "g_tTexcdf4"
+                              Name 174  "g_tTexcdi4"
+                              Name 177  "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
+                              MemberDecorate 130(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 144(g_tTex1df4) DescriptorSet 0
+                              Decorate 144(g_tTex1df4) Binding 0
+                              Decorate 147(g_tTex1di4) DescriptorSet 0
+                              Decorate 150(g_tTex1du4) DescriptorSet 0
+                              Decorate 153(g_tTex2df4) DescriptorSet 0
+                              Decorate 156(g_tTex2di4) DescriptorSet 0
+                              Decorate 159(g_tTex2du4) DescriptorSet 0
+                              Decorate 162(g_tTex3df4) DescriptorSet 0
+                              Decorate 165(g_tTex3di4) DescriptorSet 0
+                              Decorate 168(g_tTex3du4) DescriptorSet 0
+                              Decorate 171(g_tTexcdf4) DescriptorSet 0
+                              Decorate 174(g_tTexcdi4) DescriptorSet 0
+                              Decorate 177(g_tTexcdu4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D array sampled format:Unknown
+              10:             TypePointer UniformConstant 9
+ 11(g_tTex1df4a):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeImage 6(float) 1D depth array sampled format:Unknown
+              18:             TypeSampledImage 17
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              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
+             142:             TypeImage 6(float) 1D sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+ 144(g_tTex1df4):    143(ptr) Variable UniformConstant
+             145:             TypeImage 30(int) 1D sampled format:Unknown
+             146:             TypePointer UniformConstant 145
+ 147(g_tTex1di4):    146(ptr) Variable UniformConstant
+             148:             TypeImage 43(int) 1D sampled format:Unknown
+             149:             TypePointer UniformConstant 148
+ 150(g_tTex1du4):    149(ptr) Variable UniformConstant
+             151:             TypeImage 6(float) 2D sampled format:Unknown
+             152:             TypePointer UniformConstant 151
+ 153(g_tTex2df4):    152(ptr) Variable UniformConstant
+             154:             TypeImage 30(int) 2D sampled format:Unknown
+             155:             TypePointer UniformConstant 154
+ 156(g_tTex2di4):    155(ptr) Variable UniformConstant
+             157:             TypeImage 43(int) 2D sampled format:Unknown
+             158:             TypePointer UniformConstant 157
+ 159(g_tTex2du4):    158(ptr) Variable UniformConstant
+             160:             TypeImage 6(float) 3D sampled format:Unknown
+             161:             TypePointer UniformConstant 160
+ 162(g_tTex3df4):    161(ptr) Variable UniformConstant
+             163:             TypeImage 30(int) 3D sampled format:Unknown
+             164:             TypePointer UniformConstant 163
+ 165(g_tTex3di4):    164(ptr) Variable UniformConstant
+             166:             TypeImage 43(int) 3D sampled format:Unknown
+             167:             TypePointer UniformConstant 166
+ 168(g_tTex3du4):    167(ptr) Variable UniformConstant
+             169:             TypeImage 6(float) Cube sampled format:Unknown
+             170:             TypePointer UniformConstant 169
+ 171(g_tTexcdf4):    170(ptr) Variable UniformConstant
+             172:             TypeImage 30(int) Cube sampled format:Unknown
+             173:             TypePointer UniformConstant 172
+ 174(g_tTexcdi4):    173(ptr) Variable UniformConstant
+             175:             TypeImage 43(int) Cube sampled format:Unknown
+             176:             TypePointer UniformConstant 175
+ 177(g_tTexcdu4):    176(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
+              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
+             140:130(PS_OUTPUT) Load 132(psout)
+                              ReturnValue 140
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
new file mode 100644
index 0000000..1fbdb48
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -0,0 +1,632 @@
+hlsl.samplecmplevelzero.basic.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:62  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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              Constant:
+0:42                0.100000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              0.000000
+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            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              Constant:
+0:43                0.100000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              0.000000
+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            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              Constant:
+0:44                0.100000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:47              Constant:
+0:47                0.750000
+0:47            Constant:
+0:47              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:48              Constant:
+0:48                0.750000
+0:48            Constant:
+0:48              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:49              Constant:
+0:49                0.750000
+0:49            Constant:
+0:49              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:53              Constant:
+0:53                0.750000
+0:53            Constant:
+0:53              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:54              Constant:
+0:54                0.750000
+0:54            Constant:
+0:54              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:55              Constant:
+0:55                0.750000
+0:55            Constant:
+0:55              0.000000
+0:57      move second child to first child (temp 4-component vector of float)
+0:57        Color: direct index for structure (temp 4-component vector of float)
+0:57          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:57          Constant:
+0:57            0 (const int)
+0:57        Constant:
+0:57          1.000000
+0:57          1.000000
+0:57          1.000000
+0:57          1.000000
+0:58      move second child to first child (temp float)
+0:58        Depth: direct index for structure (temp float FragDepth)
+0:58          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:58          Constant:
+0:58            1 (const int)
+0:58        Constant:
+0:58          1.000000
+0:60      Branch: Return with expression
+0:60        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:62  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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              Constant:
+0:42                0.100000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              0.000000
+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            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              Constant:
+0:43                0.100000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              0.000000
+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            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              Constant:
+0:44                0.100000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:47              Constant:
+0:47                0.750000
+0:47            Constant:
+0:47              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:48              Constant:
+0:48                0.750000
+0:48            Constant:
+0:48              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:49              Constant:
+0:49                0.750000
+0:49            Constant:
+0:49              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:53              Constant:
+0:53                0.750000
+0:53            Constant:
+0:53              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:54              Constant:
+0:54                0.750000
+0:54            Constant:
+0:54              0.000000
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:55              Constant:
+0:55                0.750000
+0:55            Constant:
+0:55              0.000000
+0:57      move second child to first child (temp 4-component vector of float)
+0:57        Color: direct index for structure (temp 4-component vector of float)
+0:57          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:57          Constant:
+0:57            0 (const int)
+0:57        Constant:
+0:57          1.000000
+0:57          1.000000
+0:57          1.000000
+0:57          1.000000
+0:58      move second child to first child (temp float)
+0:58        Depth: direct index for structure (temp float FragDepth)
+0:58          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:58          Constant:
+0:58            1 (const int)
+0:58        Constant:
+0:58          1.000000
+0:60      Branch: Return with expression
+0:60        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 176
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 142  "g_tTex3df4"
+                              Name 145  "g_tTex3di4"
+                              Name 148  "g_tTex3du4"
+                              Name 151  "g_tTex1df4a"
+                              Name 154  "g_tTex1di4a"
+                              Name 157  "g_tTex1du4a"
+                              Name 160  "g_tTex2df4a"
+                              Name 163  "g_tTex2di4a"
+                              Name 166  "g_tTex2du4a"
+                              Name 169  "g_tTexcdf4a"
+                              Name 172  "g_tTexcdi4a"
+                              Name 175  "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
+                              MemberDecorate 128(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 142(g_tTex3df4) DescriptorSet 0
+                              Decorate 145(g_tTex3di4) DescriptorSet 0
+                              Decorate 148(g_tTex3du4) DescriptorSet 0
+                              Decorate 151(g_tTex1df4a) DescriptorSet 0
+                              Decorate 154(g_tTex1di4a) DescriptorSet 0
+                              Decorate 157(g_tTex1du4a) DescriptorSet 0
+                              Decorate 160(g_tTex2df4a) DescriptorSet 0
+                              Decorate 163(g_tTex2di4a) DescriptorSet 0
+                              Decorate 166(g_tTex2du4a) DescriptorSet 0
+                              Decorate 169(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 172(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 175(g_tTexcdu4a) DescriptorSet 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_tTex1df4):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeImage 6(float) 1D depth sampled format:Unknown
+              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
+             140:             TypeImage 6(float) 3D sampled format:Unknown
+             141:             TypePointer UniformConstant 140
+ 142(g_tTex3df4):    141(ptr) Variable UniformConstant
+             143:             TypeImage 26(int) 3D sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+ 145(g_tTex3di4):    144(ptr) Variable UniformConstant
+             146:             TypeImage 38(int) 3D sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+ 148(g_tTex3du4):    147(ptr) Variable UniformConstant
+             149:             TypeImage 6(float) 1D array sampled format:Unknown
+             150:             TypePointer UniformConstant 149
+151(g_tTex1df4a):    150(ptr) Variable UniformConstant
+             152:             TypeImage 26(int) 1D array sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+154(g_tTex1di4a):    153(ptr) Variable UniformConstant
+             155:             TypeImage 38(int) 1D array sampled format:Unknown
+             156:             TypePointer UniformConstant 155
+157(g_tTex1du4a):    156(ptr) Variable UniformConstant
+             158:             TypeImage 6(float) 2D array sampled format:Unknown
+             159:             TypePointer UniformConstant 158
+160(g_tTex2df4a):    159(ptr) Variable UniformConstant
+             161:             TypeImage 26(int) 2D array sampled format:Unknown
+             162:             TypePointer UniformConstant 161
+163(g_tTex2di4a):    162(ptr) Variable UniformConstant
+             164:             TypeImage 38(int) 2D array sampled format:Unknown
+             165:             TypePointer UniformConstant 164
+166(g_tTex2du4a):    165(ptr) Variable UniformConstant
+             167:             TypeImage 6(float) Cube array sampled format:Unknown
+             168:             TypePointer UniformConstant 167
+169(g_tTexcdf4a):    168(ptr) Variable UniformConstant
+             170:             TypeImage 26(int) Cube array sampled format:Unknown
+             171:             TypePointer UniformConstant 170
+172(g_tTexcdi4a):    171(ptr) Variable UniformConstant
+             173:             TypeImage 38(int) Cube array sampled format:Unknown
+             174:             TypePointer UniformConstant 173
+175(g_tTexcdu4a):    174(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
+              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
+             138:128(PS_OUTPUT) Load 130(psout)
+                              ReturnValue 138
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
new file mode 100644
index 0000000..68d07d5
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -0,0 +1,534 @@
+hlsl.samplecmplevelzero.offset.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:67  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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              Constant:
+0:42                0.100000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              0.000000
+0:42            Constant:
+0:42              2 (const int)
+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            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              Constant:
+0:43                0.100000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              0.000000
+0:43            Constant:
+0:43              2 (const int)
+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            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              Constant:
+0:44                0.100000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              0.000000
+0:44            Constant:
+0:44              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:47              Constant:
+0:47                0.750000
+0:47            Constant:
+0:47              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:48              Constant:
+0:48                0.750000
+0:48            Constant:
+0:48              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:49              Constant:
+0:49                0.750000
+0:49            Constant:
+0:49              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:62      move second child to first child (temp 4-component vector of float)
+0:62        Color: direct index for structure (temp 4-component vector of float)
+0:62          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:62          Constant:
+0:62            0 (const int)
+0:62        Constant:
+0:62          1.000000
+0:62          1.000000
+0:62          1.000000
+0:62          1.000000
+0:63      move second child to first child (temp float)
+0:63        Depth: direct index for structure (temp float FragDepth)
+0:63          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:63          Constant:
+0:63            1 (const int)
+0:63        Constant:
+0:63          1.000000
+0:65      Branch: Return with expression
+0:65        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:67  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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              Constant:
+0:42                0.100000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              0.000000
+0:42            Constant:
+0:42              2 (const int)
+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            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              Constant:
+0:43                0.100000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              0.000000
+0:43            Constant:
+0:43              2 (const int)
+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            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              Constant:
+0:44                0.100000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              0.000000
+0:44            Constant:
+0:44              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:47              Constant:
+0:47                0.750000
+0:47            Constant:
+0:47              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:48              Constant:
+0:48                0.750000
+0:48            Constant:
+0:48              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:49              Constant:
+0:49                0.750000
+0:49            Constant:
+0:49              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:62      move second child to first child (temp 4-component vector of float)
+0:62        Color: direct index for structure (temp 4-component vector of float)
+0:62          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:62          Constant:
+0:62            0 (const int)
+0:62        Constant:
+0:62          1.000000
+0:62          1.000000
+0:62          1.000000
+0:62          1.000000
+0:63      move second child to first child (temp float)
+0:63        Depth: direct index for structure (temp float FragDepth)
+0:63          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:63          Constant:
+0:63            1 (const int)
+0:63        Constant:
+0:63          1.000000
+0:65      Branch: Return with expression
+0:65        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 150
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 107  "g_tTex3df4"
+                              Name 110  "g_tTex3di4"
+                              Name 113  "g_tTex3du4"
+                              Name 116  "g_tTexcdf4"
+                              Name 119  "g_tTexcdi4"
+                              Name 122  "g_tTexcdu4"
+                              Name 125  "g_tTex1df4a"
+                              Name 128  "g_tTex1di4a"
+                              Name 131  "g_tTex1du4a"
+                              Name 134  "g_tTex2df4a"
+                              Name 137  "g_tTex2di4a"
+                              Name 140  "g_tTex2du4a"
+                              Name 143  "g_tTexcdf4a"
+                              Name 146  "g_tTexcdi4a"
+                              Name 149  "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
+                              MemberDecorate 93(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 107(g_tTex3df4) DescriptorSet 0
+                              Decorate 110(g_tTex3di4) DescriptorSet 0
+                              Decorate 113(g_tTex3du4) DescriptorSet 0
+                              Decorate 116(g_tTexcdf4) DescriptorSet 0
+                              Decorate 119(g_tTexcdi4) DescriptorSet 0
+                              Decorate 122(g_tTexcdu4) DescriptorSet 0
+                              Decorate 125(g_tTex1df4a) DescriptorSet 0
+                              Decorate 128(g_tTex1di4a) DescriptorSet 0
+                              Decorate 131(g_tTex1du4a) DescriptorSet 0
+                              Decorate 134(g_tTex2df4a) DescriptorSet 0
+                              Decorate 137(g_tTex2di4a) DescriptorSet 0
+                              Decorate 140(g_tTex2du4a) DescriptorSet 0
+                              Decorate 143(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 146(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 149(g_tTexcdu4a) DescriptorSet 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_tTex1df4):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeImage 6(float) 1D depth sampled format:Unknown
+              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
+             105:             TypeImage 6(float) 3D sampled format:Unknown
+             106:             TypePointer UniformConstant 105
+ 107(g_tTex3df4):    106(ptr) Variable UniformConstant
+             108:             TypeImage 23(int) 3D sampled format:Unknown
+             109:             TypePointer UniformConstant 108
+ 110(g_tTex3di4):    109(ptr) Variable UniformConstant
+             111:             TypeImage 39(int) 3D sampled format:Unknown
+             112:             TypePointer UniformConstant 111
+ 113(g_tTex3du4):    112(ptr) Variable UniformConstant
+             114:             TypeImage 6(float) Cube sampled format:Unknown
+             115:             TypePointer UniformConstant 114
+ 116(g_tTexcdf4):    115(ptr) Variable UniformConstant
+             117:             TypeImage 23(int) Cube sampled format:Unknown
+             118:             TypePointer UniformConstant 117
+ 119(g_tTexcdi4):    118(ptr) Variable UniformConstant
+             120:             TypeImage 39(int) Cube sampled format:Unknown
+             121:             TypePointer UniformConstant 120
+ 122(g_tTexcdu4):    121(ptr) Variable UniformConstant
+             123:             TypeImage 6(float) 1D array sampled format:Unknown
+             124:             TypePointer UniformConstant 123
+125(g_tTex1df4a):    124(ptr) Variable UniformConstant
+             126:             TypeImage 23(int) 1D array sampled format:Unknown
+             127:             TypePointer UniformConstant 126
+128(g_tTex1di4a):    127(ptr) Variable UniformConstant
+             129:             TypeImage 39(int) 1D array sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+131(g_tTex1du4a):    130(ptr) Variable UniformConstant
+             132:             TypeImage 6(float) 2D array sampled format:Unknown
+             133:             TypePointer UniformConstant 132
+134(g_tTex2df4a):    133(ptr) Variable UniformConstant
+             135:             TypeImage 23(int) 2D array sampled format:Unknown
+             136:             TypePointer UniformConstant 135
+137(g_tTex2di4a):    136(ptr) Variable UniformConstant
+             138:             TypeImage 39(int) 2D array sampled format:Unknown
+             139:             TypePointer UniformConstant 138
+140(g_tTex2du4a):    139(ptr) Variable UniformConstant
+             141:             TypeImage 6(float) Cube array sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+143(g_tTexcdf4a):    142(ptr) Variable UniformConstant
+             144:             TypeImage 23(int) Cube array sampled format:Unknown
+             145:             TypePointer UniformConstant 144
+146(g_tTexcdi4a):    145(ptr) Variable UniformConstant
+             147:             TypeImage 39(int) Cube array sampled format:Unknown
+             148:             TypePointer UniformConstant 147
+149(g_tTexcdu4a):    148(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
+              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
+             103:93(PS_OUTPUT) Load 95(psout)
+                              ReturnValue 103
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
new file mode 100644
index 0000000..627b023
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -0,0 +1,552 @@
+hlsl.samplecmplevelzero.offsetarray.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:68  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              0.000000
+0:42            Constant:
+0:42              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              0.000000
+0:43            Constant:
+0:43              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              0.000000
+0:44            Constant:
+0:44              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:47              Constant:
+0:47                0.750000
+0:47            Constant:
+0:47              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:48              Constant:
+0:48                0.750000
+0:48            Constant:
+0:48              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:49              Constant:
+0:49                0.750000
+0:49            Constant:
+0:49              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:63      move second child to first child (temp 4-component vector of float)
+0:63        Color: direct index for structure (temp 4-component vector of float)
+0:63          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:63          Constant:
+0:63            0 (const int)
+0:63        Constant:
+0:63          1.000000
+0:63          1.000000
+0:63          1.000000
+0:63          1.000000
+0:64      move second child to first child (temp float)
+0:64        Depth: direct index for structure (temp float FragDepth)
+0:64          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:64          Constant:
+0:64            1 (const int)
+0:64        Constant:
+0:64          1.000000
+0:66      Branch: Return with expression
+0:66        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:68  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:42              Constant:
+0:42                0.750000
+0:42            Constant:
+0:42              0.000000
+0:42            Constant:
+0:42              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:43              Constant:
+0:43                0.750000
+0:43            Constant:
+0:43              0.000000
+0:43            Constant:
+0:43              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:44              Constant:
+0:44                0.750000
+0:44            Constant:
+0:44              0.000000
+0:44            Constant:
+0:44              2 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:47              Constant:
+0:47                0.750000
+0:47            Constant:
+0:47              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:48              Constant:
+0:48                0.750000
+0:48            Constant:
+0:48              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+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            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:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:49              Constant:
+0:49                0.750000
+0:49            Constant:
+0:49              0.000000
+0:?             Constant:
+0:?               2 (const int)
+0:?               3 (const int)
+0:63      move second child to first child (temp 4-component vector of float)
+0:63        Color: direct index for structure (temp 4-component vector of float)
+0:63          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:63          Constant:
+0:63            0 (const int)
+0:63        Constant:
+0:63          1.000000
+0:63          1.000000
+0:63          1.000000
+0:63          1.000000
+0:64      move second child to first child (temp float)
+0:64        Depth: direct index for structure (temp float FragDepth)
+0:64          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:64          Constant:
+0:64            1 (const int)
+0:64        Constant:
+0:64          1.000000
+0:66      Branch: Return with expression
+0:66        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 156
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              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 113  "g_tTex1df4"
+                              Name 116  "g_tTex1di4"
+                              Name 119  "g_tTex1du4"
+                              Name 122  "g_tTex2df4"
+                              Name 125  "g_tTex2di4"
+                              Name 128  "g_tTex2du4"
+                              Name 131  "g_tTex3df4"
+                              Name 134  "g_tTex3di4"
+                              Name 137  "g_tTex3du4"
+                              Name 140  "g_tTexcdf4"
+                              Name 143  "g_tTexcdi4"
+                              Name 146  "g_tTexcdu4"
+                              Name 149  "g_tTexcdf4a"
+                              Name 152  "g_tTexcdi4a"
+                              Name 155  "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
+                              MemberDecorate 99(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 113(g_tTex1df4) DescriptorSet 0
+                              Decorate 113(g_tTex1df4) Binding 0
+                              Decorate 116(g_tTex1di4) DescriptorSet 0
+                              Decorate 119(g_tTex1du4) DescriptorSet 0
+                              Decorate 122(g_tTex2df4) DescriptorSet 0
+                              Decorate 125(g_tTex2di4) DescriptorSet 0
+                              Decorate 128(g_tTex2du4) DescriptorSet 0
+                              Decorate 131(g_tTex3df4) DescriptorSet 0
+                              Decorate 134(g_tTex3di4) DescriptorSet 0
+                              Decorate 137(g_tTex3du4) DescriptorSet 0
+                              Decorate 140(g_tTexcdf4) DescriptorSet 0
+                              Decorate 143(g_tTexcdi4) DescriptorSet 0
+                              Decorate 146(g_tTexcdu4) DescriptorSet 0
+                              Decorate 149(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 152(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 155(g_tTexcdu4a) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D array sampled format:Unknown
+              10:             TypePointer UniformConstant 9
+ 11(g_tTex1df4a):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeImage 6(float) 1D depth array sampled format:Unknown
+              18:             TypeSampledImage 17
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              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
+             111:             TypeImage 6(float) 1D sampled format:Unknown
+             112:             TypePointer UniformConstant 111
+ 113(g_tTex1df4):    112(ptr) Variable UniformConstant
+             114:             TypeImage 27(int) 1D sampled format:Unknown
+             115:             TypePointer UniformConstant 114
+ 116(g_tTex1di4):    115(ptr) Variable UniformConstant
+             117:             TypeImage 44(int) 1D sampled format:Unknown
+             118:             TypePointer UniformConstant 117
+ 119(g_tTex1du4):    118(ptr) Variable UniformConstant
+             120:             TypeImage 6(float) 2D sampled format:Unknown
+             121:             TypePointer UniformConstant 120
+ 122(g_tTex2df4):    121(ptr) Variable UniformConstant
+             123:             TypeImage 27(int) 2D sampled format:Unknown
+             124:             TypePointer UniformConstant 123
+ 125(g_tTex2di4):    124(ptr) Variable UniformConstant
+             126:             TypeImage 44(int) 2D sampled format:Unknown
+             127:             TypePointer UniformConstant 126
+ 128(g_tTex2du4):    127(ptr) Variable UniformConstant
+             129:             TypeImage 6(float) 3D sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+ 131(g_tTex3df4):    130(ptr) Variable UniformConstant
+             132:             TypeImage 27(int) 3D sampled format:Unknown
+             133:             TypePointer UniformConstant 132
+ 134(g_tTex3di4):    133(ptr) Variable UniformConstant
+             135:             TypeImage 44(int) 3D sampled format:Unknown
+             136:             TypePointer UniformConstant 135
+ 137(g_tTex3du4):    136(ptr) Variable UniformConstant
+             138:             TypeImage 6(float) Cube sampled format:Unknown
+             139:             TypePointer UniformConstant 138
+ 140(g_tTexcdf4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 27(int) Cube sampled format:Unknown
+             142:             TypePointer UniformConstant 141
+ 143(g_tTexcdi4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 44(int) Cube sampled format:Unknown
+             145:             TypePointer UniformConstant 144
+ 146(g_tTexcdu4):    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 27(int) Cube array sampled format:Unknown
+             151:             TypePointer UniformConstant 150
+152(g_tTexcdi4a):    151(ptr) Variable UniformConstant
+             153:             TypeImage 44(int) Cube array sampled format:Unknown
+             154:             TypePointer UniformConstant 153
+155(g_tTexcdu4a):    154(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
+              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
+             109:99(PS_OUTPUT) Load 101(psout)
+                              ReturnValue 109
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 4d3a096..6da919a 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -10,8 +10,8 @@
 0:27          'txval10' (temp 4-component vector of float)
 0:27          textureGrad (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
-0:27              'g_tTex1df4' (uniform texture1DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -25,7 +25,7 @@
 0:28          textureGrad (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -39,7 +39,7 @@
 0:29          textureGrad (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -53,7 +53,7 @@
 0:31          textureGrad (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -70,7 +70,7 @@
 0:32          textureGrad (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -87,7 +87,7 @@
 0:33          textureGrad (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -104,7 +104,7 @@
 0:35          textureGrad (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -124,7 +124,7 @@
 0:36          textureGrad (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -144,7 +144,7 @@
 0:37          textureGrad (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -158,6 +158,16 @@
 0:?               1.100000
 0:?               1.200000
 0:?               1.300000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
 0:40      move second child to first child (temp float)
 0:40        Depth: direct index for structure (temp float FragDepth)
 0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -168,9 +178,9 @@
 0:42      Branch: Return with expression
 0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -195,8 +205,8 @@
 0:27          'txval10' (temp 4-component vector of float)
 0:27          textureGrad (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
-0:27              'g_tTex1df4' (uniform texture1DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -210,7 +220,7 @@
 0:28          textureGrad (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -224,7 +234,7 @@
 0:29          textureGrad (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -238,7 +248,7 @@
 0:31          textureGrad (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -255,7 +265,7 @@
 0:32          textureGrad (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -272,7 +282,7 @@
 0:33          textureGrad (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -289,7 +299,7 @@
 0:35          textureGrad (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4' (uniform textureCubeArray)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -309,7 +319,7 @@
 0:36          textureGrad (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4' (uniform itextureCubeArray)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -329,7 +339,7 @@
 0:37          textureGrad (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4' (uniform utextureCubeArray)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -343,6 +353,16 @@
 0:?               1.100000
 0:?               1.200000
 0:?               1.300000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
 0:40      move second child to first child (temp float)
 0:40        Depth: direct index for structure (temp float FragDepth)
 0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -353,9 +373,9 @@
 0:42      Branch: Return with expression
 0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -367,7 +387,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 123
+// Id's are bound by 126
 
                               Capability Shader
                               Capability Sampled1D
@@ -401,9 +421,11 @@
                               MemberName 113(PS_OUTPUT) 0  "Color"
                               MemberName 113(PS_OUTPUT) 1  "Depth"
                               Name 115  "psout"
-                              Name 122  "g_tTex1df4a"
+                              Name 125  "g_tTex1df4a"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 33(g_tTex1di4) DescriptorSet 0
                               Decorate 45(g_tTex1du4) DescriptorSet 0
                               Decorate 54(g_tTex2df4) DescriptorSet 0
@@ -413,7 +435,8 @@
                               Decorate 98(g_tTexcdi4) DescriptorSet 0
                               Decorate 107(g_tTexcdu4) DescriptorSet 0
                               MemberDecorate 113(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 122(g_tTex1df4a) DescriptorSet 0
+                              Decorate 125(g_tTex1df4a) DescriptorSet 0
+                              Decorate 125(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -480,10 +503,12 @@
              110:             TypeSampledImage 105
   113(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
              114:             TypePointer Function 113(PS_OUTPUT)
-             116:     27(int) Constant 1
+             116:     27(int) Constant 0
              117:    6(float) Constant 1065353216
-             118:             TypePointer Function 6(float)
-122(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             118:    7(fvec4) ConstantComposite 117 117 117 117
+             120:     27(int) Constant 1
+             121:             TypePointer Function 6(float)
+125(g_tTex1df4a):     11(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -541,8 +566,10 @@
              111:         110 SampledImage 108 109
              112:   40(ivec4) ImageSampleExplicitLod 111 91 Grad 93 93
                               Store 104(txval42) 112
-             119:    118(ptr) AccessChain 115(psout) 116
-                              Store 119 117
-             120:113(PS_OUTPUT) Load 115(psout)
-                              ReturnValue 120
+             119:      8(ptr) AccessChain 115(psout) 116
+                              Store 119 118
+             122:    121(ptr) AccessChain 115(psout) 120
+                              Store 122 117
+             123:113(PS_OUTPUT) Load 115(psout)
+                              ReturnValue 123
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index ac5442e..0685dc2 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -10,8 +10,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          textureGrad (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -24,7 +24,7 @@
 0:32          textureGrad (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -37,7 +37,7 @@
 0:33          textureGrad (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -50,7 +50,7 @@
 0:35          textureGrad (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -66,7 +66,7 @@
 0:36          textureGrad (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -82,7 +82,7 @@
 0:37          textureGrad (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -98,7 +98,7 @@
 0:39          textureGrad (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -117,7 +117,7 @@
 0:40          textureGrad (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -136,7 +136,7 @@
 0:41          textureGrad (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -155,7 +155,7 @@
 0:43          textureGrad (global 4-component vector of float)
 0:43            Construct combined texture-sampler (temp samplerCube)
 0:43              'g_tTexcdf4' (uniform textureCube)
-0:43              'g_sSamp' (uniform sampler)
+0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -174,7 +174,7 @@
 0:44          textureGrad (global 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isamplerCube)
 0:44              'g_tTexcdi4' (uniform itextureCube)
-0:44              'g_sSamp' (uniform sampler)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -193,7 +193,7 @@
 0:45          textureGrad (global 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usamplerCube)
 0:45              'g_tTexcdu4' (uniform utextureCube)
-0:45              'g_sSamp' (uniform sampler)
+0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -206,6 +206,16 @@
 0:?               1.100000
 0:?               1.200000
 0:?               1.300000
+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, temp float FragDepth Depth})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          1.000000
+0:47          1.000000
+0:47          1.000000
+0:47          1.000000
 0:48      move second child to first child (temp float)
 0:48        Depth: direct index for structure (temp float FragDepth)
 0:48          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -216,9 +226,9 @@
 0:50      Branch: Return with expression
 0:50        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -246,8 +256,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          textureGrad (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -260,7 +270,7 @@
 0:32          textureGrad (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -273,7 +283,7 @@
 0:33          textureGrad (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -286,7 +296,7 @@
 0:35          textureGrad (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -302,7 +312,7 @@
 0:36          textureGrad (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -318,7 +328,7 @@
 0:37          textureGrad (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -334,7 +344,7 @@
 0:39          textureGrad (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -353,7 +363,7 @@
 0:40          textureGrad (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -372,7 +382,7 @@
 0:41          textureGrad (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -391,7 +401,7 @@
 0:43          textureGrad (global 4-component vector of float)
 0:43            Construct combined texture-sampler (temp samplerCube)
 0:43              'g_tTexcdf4' (uniform textureCube)
-0:43              'g_sSamp' (uniform sampler)
+0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -410,7 +420,7 @@
 0:44          textureGrad (global 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isamplerCube)
 0:44              'g_tTexcdi4' (uniform itextureCube)
-0:44              'g_sSamp' (uniform sampler)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -429,7 +439,7 @@
 0:45          textureGrad (global 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usamplerCube)
 0:45              'g_tTexcdu4' (uniform utextureCube)
-0:45              'g_sSamp' (uniform sampler)
+0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -442,6 +452,16 @@
 0:?               1.100000
 0:?               1.200000
 0:?               1.300000
+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, temp float FragDepth Depth})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          1.000000
+0:47          1.000000
+0:47          1.000000
+0:47          1.000000
 0:48      move second child to first child (temp float)
 0:48        Depth: direct index for structure (temp float FragDepth)
 0:48          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -452,9 +472,9 @@
 0:50      Branch: Return with expression
 0:50        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -469,7 +489,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 158
+// Id's are bound by 161
 
                               Capability Shader
                               Capability Sampled1D
@@ -508,9 +528,11 @@
                               MemberName 148(PS_OUTPUT) 0  "Color"
                               MemberName 148(PS_OUTPUT) 1  "Depth"
                               Name 150  "psout"
-                              Name 157  "g_tTex1df4a"
+                              Name 160  "g_tTex1df4a"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 30(g_tTex1di4) DescriptorSet 0
                               Decorate 43(g_tTex1du4) DescriptorSet 0
                               Decorate 53(g_tTex2df4) DescriptorSet 0
@@ -523,7 +545,8 @@
                               Decorate 133(g_tTexcdi4) DescriptorSet 0
                               Decorate 142(g_tTexcdu4) DescriptorSet 0
                               MemberDecorate 148(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 157(g_tTex1df4a) DescriptorSet 0
+                              Decorate 160(g_tTex1df4a) DescriptorSet 0
+                              Decorate 160(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -610,10 +633,12 @@
              145:             TypeSampledImage 140
   148(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
              149:             TypePointer Function 148(PS_OUTPUT)
-             151:     24(int) Constant 1
+             151:     24(int) Constant 0
              152:    6(float) Constant 1065353216
-             153:             TypePointer Function 6(float)
-157(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             153:    7(fvec4) ConstantComposite 152 152 152 152
+             155:     24(int) Constant 1
+             156:             TypePointer Function 6(float)
+160(g_tTex1df4a):     11(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -689,8 +714,10 @@
              146:         145 SampledImage 143 144
              147:   38(ivec4) ImageSampleExplicitLod 146 119 Grad 96 96
                               Store 139(txval42) 147
-             154:    153(ptr) AccessChain 150(psout) 151
-                              Store 154 152
-             155:148(PS_OUTPUT) Load 150(psout)
-                              ReturnValue 155
+             154:      8(ptr) AccessChain 150(psout) 151
+                              Store 154 153
+             157:    156(ptr) AccessChain 150(psout) 155
+                              Store 157 152
+             158:148(PS_OUTPUT) Load 150(psout)
+                              ReturnValue 158
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index 7b4cbde..eacddae 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -9,8 +9,8 @@
 0:30          'txval10' (temp 4-component vector of float)
 0:30          textureGrad (global 4-component vector of float)
 0:30            Construct combined texture-sampler (temp sampler1D)
-0:30              'g_tTex1df4' (uniform texture1D)
-0:30              'g_sSamp' (uniform sampler)
+0:30              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:30            Constant:
 0:30              0.100000
 0:30            Constant:
@@ -23,7 +23,7 @@
 0:31          textureGrad (global 4-component vector of int)
 0:31            Construct combined texture-sampler (temp isampler1D)
 0:31              'g_tTex1di4' (uniform itexture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.200000
 0:31            Constant:
@@ -36,7 +36,7 @@
 0:32          textureGrad (global 4-component vector of uint)
 0:32            Construct combined texture-sampler (temp usampler1D)
 0:32              'g_tTex1du4' (uniform utexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.300000
 0:32            Constant:
@@ -49,7 +49,7 @@
 0:34          textureGrad (global 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
-0:34              'g_sSamp' (uniform sampler)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -65,7 +65,7 @@
 0:35          textureGrad (global 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -81,7 +81,7 @@
 0:36          textureGrad (global 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -97,7 +97,7 @@
 0:38          textureGrad (global 4-component vector of float)
 0:38            Construct combined texture-sampler (temp sampler3D)
 0:38              'g_tTex3df4' (uniform texture3D)
-0:38              'g_sSamp' (uniform sampler)
+0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -116,7 +116,7 @@
 0:39          textureGrad (global 4-component vector of int)
 0:39            Construct combined texture-sampler (temp isampler3D)
 0:39              'g_tTex3di4' (uniform itexture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -135,7 +135,7 @@
 0:40          textureGrad (global 4-component vector of uint)
 0:40            Construct combined texture-sampler (temp usampler3D)
 0:40              'g_tTex3du4' (uniform utexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -154,7 +154,7 @@
 0:42          textureGrad (global 4-component vector of float)
 0:42            Construct combined texture-sampler (temp samplerCube)
 0:42              'g_tTexcdf4' (uniform textureCube)
-0:42              'g_sSamp' (uniform sampler)
+0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -173,7 +173,7 @@
 0:43          textureGrad (global 4-component vector of int)
 0:43            Construct combined texture-sampler (temp isamplerCube)
 0:43              'g_tTexcdi4' (uniform itextureCube)
-0:43              'g_sSamp' (uniform sampler)
+0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -192,7 +192,7 @@
 0:44          textureGrad (global 4-component vector of uint)
 0:44            Construct combined texture-sampler (temp usamplerCube)
 0:44              'g_tTexcdu4' (uniform utextureCube)
-0:44              'g_sSamp' (uniform sampler)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -218,9 +218,9 @@
 0:48      Branch: Return with expression
 0:48        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -247,8 +247,8 @@
 0:30          'txval10' (temp 4-component vector of float)
 0:30          textureGrad (global 4-component vector of float)
 0:30            Construct combined texture-sampler (temp sampler1D)
-0:30              'g_tTex1df4' (uniform texture1D)
-0:30              'g_sSamp' (uniform sampler)
+0:30              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:30            Constant:
 0:30              0.100000
 0:30            Constant:
@@ -261,7 +261,7 @@
 0:31          textureGrad (global 4-component vector of int)
 0:31            Construct combined texture-sampler (temp isampler1D)
 0:31              'g_tTex1di4' (uniform itexture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.200000
 0:31            Constant:
@@ -274,7 +274,7 @@
 0:32          textureGrad (global 4-component vector of uint)
 0:32            Construct combined texture-sampler (temp usampler1D)
 0:32              'g_tTex1du4' (uniform utexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.300000
 0:32            Constant:
@@ -287,7 +287,7 @@
 0:34          textureGrad (global 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
-0:34              'g_sSamp' (uniform sampler)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -303,7 +303,7 @@
 0:35          textureGrad (global 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -319,7 +319,7 @@
 0:36          textureGrad (global 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -335,7 +335,7 @@
 0:38          textureGrad (global 4-component vector of float)
 0:38            Construct combined texture-sampler (temp sampler3D)
 0:38              'g_tTex3df4' (uniform texture3D)
-0:38              'g_sSamp' (uniform sampler)
+0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -354,7 +354,7 @@
 0:39          textureGrad (global 4-component vector of int)
 0:39            Construct combined texture-sampler (temp isampler3D)
 0:39              'g_tTex3di4' (uniform itexture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -373,7 +373,7 @@
 0:40          textureGrad (global 4-component vector of uint)
 0:40            Construct combined texture-sampler (temp usampler3D)
 0:40              'g_tTex3du4' (uniform utexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -392,7 +392,7 @@
 0:42          textureGrad (global 4-component vector of float)
 0:42            Construct combined texture-sampler (temp samplerCube)
 0:42              'g_tTexcdf4' (uniform textureCube)
-0:42              'g_sSamp' (uniform sampler)
+0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -411,7 +411,7 @@
 0:43          textureGrad (global 4-component vector of int)
 0:43            Construct combined texture-sampler (temp isamplerCube)
 0:43              'g_tTexcdi4' (uniform itextureCube)
-0:43              'g_sSamp' (uniform sampler)
+0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -430,7 +430,7 @@
 0:44          textureGrad (global 4-component vector of uint)
 0:44            Construct combined texture-sampler (temp usamplerCube)
 0:44              'g_tTexcdu4' (uniform utextureCube)
-0:44              'g_sSamp' (uniform sampler)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -456,9 +456,9 @@
 0:48      Branch: Return with expression
 0:48        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -512,7 +512,9 @@
                               Name 150  "vsout"
                               Name 157  "g_tTex1df4a"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 30(g_tTex1di4) DescriptorSet 0
                               Decorate 43(g_tTex1du4) DescriptorSet 0
                               Decorate 53(g_tTex2df4) DescriptorSet 0
@@ -526,6 +528,7 @@
                               Decorate 142(g_tTexcdu4) DescriptorSet 0
                               MemberDecorate 148(VS_OUTPUT) 0 BuiltIn FragCoord
                               Decorate 157(g_tTex1df4a) DescriptorSet 0
+                              Decorate 157(g_tTex1df4a) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 30f5d06..343babc 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -10,8 +10,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          textureGradOffset (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -26,7 +26,7 @@
 0:32          textureGradOffset (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -41,7 +41,7 @@
 0:33          textureGradOffset (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -56,7 +56,7 @@
 0:35          textureGradOffset (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -75,7 +75,7 @@
 0:36          textureGradOffset (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -94,7 +94,7 @@
 0:37          textureGradOffset (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -113,7 +113,7 @@
 0:39          textureGradOffset (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -136,7 +136,7 @@
 0:40          textureGradOffset (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -159,7 +159,7 @@
 0:41          textureGradOffset (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -176,6 +176,16 @@
 0:?               1 (const int)
 0:?               0 (const int)
 0:?               -1 (const int)
+0:45      move second child to first child (temp 4-component vector of float)
+0:45        Color: direct index for structure (temp 4-component vector of float)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            0 (const int)
+0:45        Constant:
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
 0:46      move second child to first child (temp float)
 0:46        Depth: direct index for structure (temp float FragDepth)
 0:46          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -186,9 +196,9 @@
 0:48      Branch: Return with expression
 0:48        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -216,8 +226,8 @@
 0:31          'txval10' (temp 4-component vector of float)
 0:31          textureGradOffset (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler1D)
-0:31              'g_tTex1df4' (uniform texture1D)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:31            Constant:
 0:31              0.100000
 0:31            Constant:
@@ -232,7 +242,7 @@
 0:32          textureGradOffset (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler1D)
 0:32              'g_tTex1di4' (uniform itexture1D)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:32            Constant:
 0:32              0.200000
 0:32            Constant:
@@ -247,7 +257,7 @@
 0:33          textureGradOffset (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler1D)
 0:33              'g_tTex1du4' (uniform utexture1D)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:33            Constant:
 0:33              0.300000
 0:33            Constant:
@@ -262,7 +272,7 @@
 0:35          textureGradOffset (global 4-component vector of float)
 0:35            Construct combined texture-sampler (temp sampler2D)
 0:35              'g_tTex2df4' (uniform texture2D)
-0:35              'g_sSamp' (uniform sampler)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -281,7 +291,7 @@
 0:36          textureGradOffset (global 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isampler2D)
 0:36              'g_tTex2di4' (uniform itexture2D)
-0:36              'g_sSamp' (uniform sampler)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.300000
 0:?               0.400000
@@ -300,7 +310,7 @@
 0:37          textureGradOffset (global 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usampler2D)
 0:37              'g_tTex2du4' (uniform utexture2D)
-0:37              'g_sSamp' (uniform sampler)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.500000
 0:?               0.600000
@@ -319,7 +329,7 @@
 0:39          textureGradOffset (global 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler3D)
 0:39              'g_tTex3df4' (uniform texture3D)
-0:39              'g_sSamp' (uniform sampler)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -342,7 +352,7 @@
 0:40          textureGradOffset (global 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler3D)
 0:40              'g_tTex3di4' (uniform itexture3D)
-0:40              'g_sSamp' (uniform sampler)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.400000
 0:?               0.500000
@@ -365,7 +375,7 @@
 0:41          textureGradOffset (global 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler3D)
 0:41              'g_tTex3du4' (uniform utexture3D)
-0:41              'g_sSamp' (uniform sampler)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.700000
 0:?               0.800000
@@ -382,6 +392,16 @@
 0:?               1 (const int)
 0:?               0 (const int)
 0:?               -1 (const int)
+0:45      move second child to first child (temp 4-component vector of float)
+0:45        Color: direct index for structure (temp 4-component vector of float)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            0 (const int)
+0:45        Constant:
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
 0:46      move second child to first child (temp float)
 0:46        Depth: direct index for structure (temp float FragDepth)
 0:46          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -392,9 +412,9 @@
 0:48      Branch: Return with expression
 0:48        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1D)
-0:?     'g_tTex1df4' (uniform texture1D)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
 0:?     'g_tTex1du4' (uniform utexture1D)
 0:?     'g_tTex2df4' (uniform texture2D)
@@ -409,7 +429,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 150
+// Id's are bound by 152
 
                               Capability Shader
                               Capability Sampled1D
@@ -442,12 +462,14 @@
                               MemberName 132(PS_OUTPUT) 0  "Color"
                               MemberName 132(PS_OUTPUT) 1  "Depth"
                               Name 134  "psout"
-                              Name 140  "g_tTex1df4a"
-                              Name 143  "g_tTexcdf4"
-                              Name 146  "g_tTexcdi4"
-                              Name 149  "g_tTexcdu4"
+                              Name 142  "g_tTex1df4a"
+                              Name 145  "g_tTexcdf4"
+                              Name 148  "g_tTexcdi4"
+                              Name 151  "g_tTexcdu4"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 31(g_tTex1di4) DescriptorSet 0
                               Decorate 44(g_tTex1du4) DescriptorSet 0
                               Decorate 54(g_tTex2df4) DescriptorSet 0
@@ -457,10 +479,11 @@
                               Decorate 110(g_tTex3di4) DescriptorSet 0
                               Decorate 121(g_tTex3du4) DescriptorSet 0
                               MemberDecorate 132(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 140(g_tTex1df4a) DescriptorSet 0
-                              Decorate 143(g_tTexcdf4) DescriptorSet 0
-                              Decorate 146(g_tTexcdi4) DescriptorSet 0
-                              Decorate 149(g_tTexcdu4) DescriptorSet 0
+                              Decorate 142(g_tTex1df4a) DescriptorSet 0
+                              Decorate 142(g_tTex1df4a) Binding 1
+                              Decorate 145(g_tTexcdf4) DescriptorSet 0
+                              Decorate 148(g_tTexcdi4) DescriptorSet 0
+                              Decorate 151(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -547,17 +570,18 @@
   132(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
              133:             TypePointer Function 132(PS_OUTPUT)
              135:    6(float) Constant 1065353216
-             136:             TypePointer Function 6(float)
-140(g_tTex1df4a):     11(ptr) Variable UniformConstant
-             141:             TypeImage 6(float) Cube sampled format:Unknown
-             142:             TypePointer UniformConstant 141
- 143(g_tTexcdf4):    142(ptr) Variable UniformConstant
-             144:             TypeImage 23(int) Cube sampled format:Unknown
-             145:             TypePointer UniformConstant 144
- 146(g_tTexcdi4):    145(ptr) Variable UniformConstant
-             147:             TypeImage 38(int) Cube sampled format:Unknown
-             148:             TypePointer UniformConstant 147
- 149(g_tTexcdu4):    148(ptr) Variable UniformConstant
+             136:    7(fvec4) ConstantComposite 135 135 135 135
+             138:             TypePointer Function 6(float)
+142(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             143:             TypeImage 6(float) Cube sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+ 145(g_tTexcdf4):    144(ptr) Variable UniformConstant
+             146:             TypeImage 23(int) Cube sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+ 148(g_tTexcdi4):    147(ptr) Variable UniformConstant
+             149:             TypeImage 38(int) Cube sampled format:Unknown
+             150:             TypePointer UniformConstant 149
+ 151(g_tTexcdu4):    150(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -615,8 +639,10 @@
              125:         124 SampledImage 122 123
              131:   39(ivec4) ImageSampleExplicitLod 125 129 Grad ConstOffset 103 103 130
                               Store 118(txval32) 131
-             137:    136(ptr) AccessChain 134(psout) 24
-                              Store 137 135
-             138:132(PS_OUTPUT) Load 134(psout)
-                              ReturnValue 138
+             137:      8(ptr) AccessChain 134(psout) 63
+                              Store 137 136
+             139:    138(ptr) AccessChain 134(psout) 24
+                              Store 139 135
+             140:132(PS_OUTPUT) Load 134(psout)
+                              ReturnValue 140
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index e568f44..3318e46 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -10,8 +10,8 @@
 0:27          'txval10' (temp 4-component vector of float)
 0:27          textureGradOffset (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
-0:27              'g_tTex1df4' (uniform texture1DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -27,7 +27,7 @@
 0:28          textureGradOffset (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -43,7 +43,7 @@
 0:29          textureGradOffset (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -59,7 +59,7 @@
 0:31          textureGradOffset (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -79,7 +79,7 @@
 0:32          textureGradOffset (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -99,7 +99,7 @@
 0:33          textureGradOffset (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -113,6 +113,16 @@
 0:?             Constant:
 0:?               1 (const int)
 0:?               0 (const int)
+0:35      move second child to first child (temp 4-component vector of float)
+0:35        Color: direct index for structure (temp 4-component vector of float)
+0:35          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:35          Constant:
+0:35            0 (const int)
+0:35        Constant:
+0:35          1.000000
+0:35          1.000000
+0:35          1.000000
+0:35          1.000000
 0:36      move second child to first child (temp float)
 0:36        Depth: direct index for structure (temp float FragDepth)
 0:36          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -123,9 +133,9 @@
 0:38      Branch: Return with expression
 0:38        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -150,8 +160,8 @@
 0:27          'txval10' (temp 4-component vector of float)
 0:27          textureGradOffset (global 4-component vector of float)
 0:27            Construct combined texture-sampler (temp sampler1DArray)
-0:27              'g_tTex1df4' (uniform texture1DArray)
-0:27              'g_sSamp' (uniform sampler)
+0:27              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -167,7 +177,7 @@
 0:28          textureGradOffset (global 4-component vector of int)
 0:28            Construct combined texture-sampler (temp isampler1DArray)
 0:28              'g_tTex1di4' (uniform itexture1DArray)
-0:28              'g_sSamp' (uniform sampler)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -183,7 +193,7 @@
 0:29          textureGradOffset (global 4-component vector of uint)
 0:29            Construct combined texture-sampler (temp usampler1DArray)
 0:29              'g_tTex1du4' (uniform utexture1DArray)
-0:29              'g_sSamp' (uniform sampler)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -199,7 +209,7 @@
 0:31          textureGradOffset (global 4-component vector of float)
 0:31            Construct combined texture-sampler (temp sampler2DArray)
 0:31              'g_tTex2df4' (uniform texture2DArray)
-0:31              'g_sSamp' (uniform sampler)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -219,7 +229,7 @@
 0:32          textureGradOffset (global 4-component vector of int)
 0:32            Construct combined texture-sampler (temp isampler2DArray)
 0:32              'g_tTex2di4' (uniform itexture2DArray)
-0:32              'g_sSamp' (uniform sampler)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -239,7 +249,7 @@
 0:33          textureGradOffset (global 4-component vector of uint)
 0:33            Construct combined texture-sampler (temp usampler2DArray)
 0:33              'g_tTex2du4' (uniform utexture2DArray)
-0:33              'g_sSamp' (uniform sampler)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?             Constant:
 0:?               0.100000
 0:?               0.200000
@@ -253,6 +263,16 @@
 0:?             Constant:
 0:?               1 (const int)
 0:?               0 (const int)
+0:35      move second child to first child (temp 4-component vector of float)
+0:35        Color: direct index for structure (temp 4-component vector of float)
+0:35          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:35          Constant:
+0:35            0 (const int)
+0:35        Constant:
+0:35          1.000000
+0:35          1.000000
+0:35          1.000000
+0:35          1.000000
 0:36      move second child to first child (temp float)
 0:36        Depth: direct index for structure (temp float FragDepth)
 0:36          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
@@ -263,9 +283,9 @@
 0:38      Branch: Return with expression
 0:38        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
 0:?   Linker Objects
-0:?     'g_sSamp' (uniform sampler)
-0:?     'g_tTex1df4a' (uniform texture1DArray)
-0:?     'g_tTex1df4' (uniform texture1DArray)
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
 0:?     'g_tTex1di4' (uniform itexture1DArray)
 0:?     'g_tTex1du4' (uniform utexture1DArray)
 0:?     'g_tTex2df4' (uniform texture2DArray)
@@ -277,7 +297,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 104
+// Id's are bound by 106
 
                               Capability Shader
                               Capability Sampled1D
@@ -305,22 +325,25 @@
                               MemberName 86(PS_OUTPUT) 0  "Color"
                               MemberName 86(PS_OUTPUT) 1  "Depth"
                               Name 88  "psout"
-                              Name 94  "g_tTex1df4a"
-                              Name 97  "g_tTexcdf4"
-                              Name 100  "g_tTexcdi4"
-                              Name 103  "g_tTexcdu4"
+                              Name 96  "g_tTex1df4a"
+                              Name 99  "g_tTexcdf4"
+                              Name 102  "g_tTexcdi4"
+                              Name 105  "g_tTexcdu4"
                               Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
                               Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
                               Decorate 34(g_tTex1di4) DescriptorSet 0
                               Decorate 46(g_tTex1du4) DescriptorSet 0
                               Decorate 55(g_tTex2df4) DescriptorSet 0
                               Decorate 71(g_tTex2di4) DescriptorSet 0
                               Decorate 80(g_tTex2du4) DescriptorSet 0
                               MemberDecorate 86(PS_OUTPUT) 1 BuiltIn FragDepth
-                              Decorate 94(g_tTex1df4a) DescriptorSet 0
-                              Decorate 97(g_tTexcdf4) DescriptorSet 0
-                              Decorate 100(g_tTexcdi4) DescriptorSet 0
-                              Decorate 103(g_tTexcdu4) DescriptorSet 0
+                              Decorate 96(g_tTex1df4a) DescriptorSet 0
+                              Decorate 96(g_tTex1df4a) Binding 1
+                              Decorate 99(g_tTexcdf4) DescriptorSet 0
+                              Decorate 102(g_tTexcdi4) DescriptorSet 0
+                              Decorate 105(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -376,17 +399,18 @@
    86(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
               87:             TypePointer Function 86(PS_OUTPUT)
               89:    6(float) Constant 1065353216
-              90:             TypePointer Function 6(float)
- 94(g_tTex1df4a):     11(ptr) Variable UniformConstant
-              95:             TypeImage 6(float) Cube array sampled format:Unknown
-              96:             TypePointer UniformConstant 95
-  97(g_tTexcdf4):     96(ptr) Variable UniformConstant
-              98:             TypeImage 26(int) Cube array sampled format:Unknown
-              99:             TypePointer UniformConstant 98
- 100(g_tTexcdi4):     99(ptr) Variable UniformConstant
-             101:             TypeImage 40(int) Cube array sampled format:Unknown
-             102:             TypePointer UniformConstant 101
- 103(g_tTexcdu4):    102(ptr) Variable UniformConstant
+              90:    7(fvec4) ConstantComposite 89 89 89 89
+              92:             TypePointer Function 6(float)
+ 96(g_tTex1df4a):     11(ptr) Variable UniformConstant
+              97:             TypeImage 6(float) Cube array sampled format:Unknown
+              98:             TypePointer UniformConstant 97
+  99(g_tTexcdf4):     98(ptr) Variable UniformConstant
+             100:             TypeImage 26(int) Cube array sampled format:Unknown
+             101:             TypePointer UniformConstant 100
+ 102(g_tTexcdi4):    101(ptr) Variable UniformConstant
+             103:             TypeImage 40(int) Cube array sampled format:Unknown
+             104:             TypePointer UniformConstant 103
+ 105(g_tTexcdu4):    104(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
       9(txval10):      8(ptr) Variable Function
@@ -426,8 +450,10 @@
               84:          83 SampledImage 81 82
               85:   41(ivec4) ImageSampleExplicitLod 84 62 Grad ConstOffset 63 63 66
                               Store 77(txval22) 85
-              91:     90(ptr) AccessChain 88(psout) 27
-                              Store 91 89
-              92:86(PS_OUTPUT) Load 88(psout)
-                              ReturnValue 92
+              91:      8(ptr) AccessChain 88(psout) 65
+                              Store 91 90
+              93:     92(ptr) AccessChain 88(psout) 27
+                              Store 93 89
+              94:86(PS_OUTPUT) Load 88(psout)
+                              ReturnValue 94
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
new file mode 100644
index 0000000..dd042de
--- /dev/null
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -0,0 +1,510 @@
+hlsl.samplelevel.array.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:44  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler1DArray)
+0:27              'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:27            Constant:
+0:27              0.750000
+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            Construct combined texture-sampler (temp isampler1DArray)
+0:28              'g_tTex1di4a' (uniform itexture1DArray)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.200000
+0:?               0.300000
+0:28            Constant:
+0:28              0.750000
+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            Construct combined texture-sampler (temp usampler1DArray)
+0:29              'g_tTex1du4a' (uniform utexture1DArray)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:29            Constant:
+0:29              0.750000
+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            Construct combined texture-sampler (temp sampler2DArray)
+0:31              'g_tTex2df4a' (uniform texture2DArray)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:31            Constant:
+0:31              0.750000
+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            Construct combined texture-sampler (temp isampler2DArray)
+0:32              'g_tTex2di4a' (uniform itexture2DArray)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?               0.500000
+0:32            Constant:
+0:32              0.750000
+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            Construct combined texture-sampler (temp usampler2DArray)
+0:33              'g_tTex2du4a' (uniform utexture2DArray)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+0:33            Constant:
+0:33              0.750000
+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            Construct combined texture-sampler (temp samplerCubeArray)
+0:35              'g_tTexcdf4a' (uniform textureCubeArray)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:?               0.400000
+0:35            Constant:
+0:35              0.750000
+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            Construct combined texture-sampler (temp isamplerCubeArray)
+0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+0:36            Constant:
+0:36              0.750000
+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            Construct combined texture-sampler (temp usamplerCubeArray)
+0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:?               1.000000
+0:37            Constant:
+0:37              0.750000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:40      move second child to first child (temp float)
+0:40        Depth: direct index for structure (temp float FragDepth)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            1 (const int)
+0:40        Constant:
+0:40          1.000000
+0:42      Branch: Return with expression
+0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) 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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:44  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler1DArray)
+0:27              'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:27            Constant:
+0:27              0.750000
+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            Construct combined texture-sampler (temp isampler1DArray)
+0:28              'g_tTex1di4a' (uniform itexture1DArray)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.200000
+0:?               0.300000
+0:28            Constant:
+0:28              0.750000
+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            Construct combined texture-sampler (temp usampler1DArray)
+0:29              'g_tTex1du4a' (uniform utexture1DArray)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:29            Constant:
+0:29              0.750000
+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            Construct combined texture-sampler (temp sampler2DArray)
+0:31              'g_tTex2df4a' (uniform texture2DArray)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:31            Constant:
+0:31              0.750000
+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            Construct combined texture-sampler (temp isampler2DArray)
+0:32              'g_tTex2di4a' (uniform itexture2DArray)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?               0.500000
+0:32            Constant:
+0:32              0.750000
+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            Construct combined texture-sampler (temp usampler2DArray)
+0:33              'g_tTex2du4a' (uniform utexture2DArray)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+0:33            Constant:
+0:33              0.750000
+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            Construct combined texture-sampler (temp samplerCubeArray)
+0:35              'g_tTexcdf4a' (uniform textureCubeArray)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:?               0.400000
+0:35            Constant:
+0:35              0.750000
+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            Construct combined texture-sampler (temp isamplerCubeArray)
+0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+0:36            Constant:
+0:36              0.750000
+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            Construct combined texture-sampler (temp usamplerCubeArray)
+0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:?               1.000000
+0:37            Constant:
+0:37              0.750000
+0:39      move second child to first child (temp 4-component vector of float)
+0:39        Color: direct index for structure (temp 4-component vector of float)
+0:39          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:39          Constant:
+0:39            0 (const int)
+0:39        Constant:
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:39          1.000000
+0:40      move second child to first child (temp float)
+0:40        Depth: direct index for structure (temp float FragDepth)
+0:40          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:40          Constant:
+0:40            1 (const int)
+0:40        Constant:
+0:40          1.000000
+0:42      Branch: Return with expression
+0:42        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) 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:?     'g_tTexcdf4a' (uniform textureCubeArray)
+0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
+0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 133
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval10"
+                              Name 12  "g_tTex1df4a"
+                              Name 16  "g_sSamp"
+                              Name 29  "txval11"
+                              Name 32  "g_tTex1di4a"
+                              Name 43  "txval12"
+                              Name 46  "g_tTex1du4a"
+                              Name 54  "txval20"
+                              Name 57  "g_tTex2df4a"
+                              Name 65  "txval21"
+                              Name 68  "g_tTex2di4a"
+                              Name 76  "txval22"
+                              Name 79  "g_tTex2du4a"
+                              Name 88  "txval40"
+                              Name 91  "g_tTexcdf4a"
+                              Name 98  "txval41"
+                              Name 101  "g_tTexcdi4a"
+                              Name 108  "txval42"
+                              Name 111  "g_tTexcdu4a"
+                              Name 121  "PS_OUTPUT"
+                              MemberName 121(PS_OUTPUT) 0  "Color"
+                              MemberName 121(PS_OUTPUT) 1  "Depth"
+                              Name 123  "psout"
+                              Name 132  "g_tTex1df4"
+                              Decorate 12(g_tTex1df4a) DescriptorSet 0
+                              Decorate 12(g_tTex1df4a) Binding 1
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 32(g_tTex1di4a) DescriptorSet 0
+                              Decorate 46(g_tTex1du4a) DescriptorSet 0
+                              Decorate 57(g_tTex2df4a) DescriptorSet 0
+                              Decorate 68(g_tTex2di4a) DescriptorSet 0
+                              Decorate 79(g_tTex2du4a) DescriptorSet 0
+                              Decorate 91(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 101(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 111(g_tTexcdu4a) DescriptorSet 0
+                              MemberDecorate 121(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 132(g_tTex1df4) DescriptorSet 0
+                              Decorate 132(g_tTex1df4) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 1D array sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+ 12(g_tTex1df4a):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:   20(fvec2) ConstantComposite 21 22
+              24:    6(float) Constant 1061158912
+              26:             TypeInt 32 1
+              27:             TypeVector 26(int) 4
+              28:             TypePointer Function 27(ivec4)
+              30:             TypeImage 26(int) 1D array sampled format:Unknown
+              31:             TypePointer UniformConstant 30
+ 32(g_tTex1di4a):     31(ptr) Variable UniformConstant
+              35:             TypeSampledImage 30
+              37:    6(float) Constant 1050253722
+              38:   20(fvec2) ConstantComposite 22 37
+              40:             TypeInt 32 0
+              41:             TypeVector 40(int) 4
+              42:             TypePointer Function 41(ivec4)
+              44:             TypeImage 40(int) 1D array sampled format:Unknown
+              45:             TypePointer UniformConstant 44
+ 46(g_tTex1du4a):     45(ptr) Variable UniformConstant
+              49:             TypeSampledImage 44
+              51:    6(float) Constant 1053609165
+              52:   20(fvec2) ConstantComposite 37 51
+              55:             TypeImage 6(float) 2D array sampled format:Unknown
+              56:             TypePointer UniformConstant 55
+ 57(g_tTex2df4a):     56(ptr) Variable UniformConstant
+              60:             TypeSampledImage 55
+              62:             TypeVector 6(float) 3
+              63:   62(fvec3) ConstantComposite 21 22 37
+              66:             TypeImage 26(int) 2D array sampled format:Unknown
+              67:             TypePointer UniformConstant 66
+ 68(g_tTex2di4a):     67(ptr) Variable UniformConstant
+              71:             TypeSampledImage 66
+              73:    6(float) Constant 1056964608
+              74:   62(fvec3) ConstantComposite 37 51 73
+              77:             TypeImage 40(int) 2D array sampled format:Unknown
+              78:             TypePointer UniformConstant 77
+ 79(g_tTex2du4a):     78(ptr) Variable UniformConstant
+              82:             TypeSampledImage 77
+              84:    6(float) Constant 1058642330
+              85:    6(float) Constant 1060320051
+              86:   62(fvec3) ConstantComposite 73 84 85
+              89:             TypeImage 6(float) Cube array sampled format:Unknown
+              90:             TypePointer UniformConstant 89
+ 91(g_tTexcdf4a):     90(ptr) Variable UniformConstant
+              94:             TypeSampledImage 89
+              96:    7(fvec4) ConstantComposite 21 22 37 51
+              99:             TypeImage 26(int) Cube array sampled format:Unknown
+             100:             TypePointer UniformConstant 99
+101(g_tTexcdi4a):    100(ptr) Variable UniformConstant
+             104:             TypeSampledImage 99
+             106:    7(fvec4) ConstantComposite 51 73 84 85
+             109:             TypeImage 40(int) Cube array sampled format:Unknown
+             110:             TypePointer UniformConstant 109
+111(g_tTexcdu4a):    110(ptr) Variable UniformConstant
+             114:             TypeSampledImage 109
+             116:    6(float) Constant 1061997773
+             117:    6(float) Constant 1063675494
+             118:    6(float) Constant 1065353216
+             119:    7(fvec4) ConstantComposite 85 116 117 118
+  121(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+             122:             TypePointer Function 121(PS_OUTPUT)
+             124:     26(int) Constant 0
+             125:    7(fvec4) ConstantComposite 118 118 118 118
+             127:     26(int) Constant 1
+             128:             TypePointer Function 6(float)
+ 132(g_tTex1df4):     11(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval10):      8(ptr) Variable Function
+     29(txval11):     28(ptr) Variable Function
+     43(txval12):     42(ptr) Variable Function
+     54(txval20):      8(ptr) Variable Function
+     65(txval21):     28(ptr) Variable Function
+     76(txval22):     42(ptr) Variable Function
+     88(txval40):      8(ptr) Variable Function
+     98(txval41):     28(ptr) Variable Function
+    108(txval42):     42(ptr) Variable Function
+      123(psout):    122(ptr) Variable Function
+              13:          10 Load 12(g_tTex1df4a)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              25:    7(fvec4) ImageSampleExplicitLod 19 23 Lod 24
+                              Store 9(txval10) 25
+              33:          30 Load 32(g_tTex1di4a)
+              34:          14 Load 16(g_sSamp)
+              36:          35 SampledImage 33 34
+              39:   27(ivec4) ImageSampleExplicitLod 36 38 Lod 24
+                              Store 29(txval11) 39
+              47:          44 Load 46(g_tTex1du4a)
+              48:          14 Load 16(g_sSamp)
+              50:          49 SampledImage 47 48
+              53:   41(ivec4) ImageSampleExplicitLod 50 52 Lod 24
+                              Store 43(txval12) 53
+              58:          55 Load 57(g_tTex2df4a)
+              59:          14 Load 16(g_sSamp)
+              61:          60 SampledImage 58 59
+              64:    7(fvec4) ImageSampleExplicitLod 61 63 Lod 24
+                              Store 54(txval20) 64
+              69:          66 Load 68(g_tTex2di4a)
+              70:          14 Load 16(g_sSamp)
+              72:          71 SampledImage 69 70
+              75:   27(ivec4) ImageSampleExplicitLod 72 74 Lod 24
+                              Store 65(txval21) 75
+              80:          77 Load 79(g_tTex2du4a)
+              81:          14 Load 16(g_sSamp)
+              83:          82 SampledImage 80 81
+              87:   41(ivec4) ImageSampleExplicitLod 83 86 Lod 24
+                              Store 76(txval22) 87
+              92:          89 Load 91(g_tTexcdf4a)
+              93:          14 Load 16(g_sSamp)
+              95:          94 SampledImage 92 93
+              97:    7(fvec4) ImageSampleExplicitLod 95 96 Lod 24
+                              Store 88(txval40) 97
+             102:          99 Load 101(g_tTexcdi4a)
+             103:          14 Load 16(g_sSamp)
+             105:         104 SampledImage 102 103
+             107:   27(ivec4) ImageSampleExplicitLod 105 106 Lod 24
+                              Store 98(txval41) 107
+             112:         109 Load 111(g_tTexcdu4a)
+             113:          14 Load 16(g_sSamp)
+             115:         114 SampledImage 112 113
+             120:   41(ivec4) ImageSampleExplicitLod 115 119 Lod 24
+                              Store 108(txval42) 120
+             126:      8(ptr) AccessChain 123(psout) 124
+                              Store 126 125
+             129:    128(ptr) AccessChain 123(psout) 127
+                              Store 129 118
+             130:121(PS_OUTPUT) Load 123(psout)
+                              ReturnValue 130
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
new file mode 100644
index 0000000..52c635d
--- /dev/null
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -0,0 +1,616 @@
+hlsl.samplelevel.basic.dx10.frag
+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 FragDepth 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            Construct combined texture-sampler (temp sampler1D)
+0:32              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:32            Constant:
+0:32              0.100000
+0:32            Constant:
+0:32              0.750000
+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            Construct combined texture-sampler (temp isampler1D)
+0:33              'g_tTex1di4' (uniform itexture1D)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:33            Constant:
+0:33              0.200000
+0:33            Constant:
+0:33              0.750000
+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            Construct combined texture-sampler (temp usampler1D)
+0:34              'g_tTex1du4' (uniform utexture1D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:34            Constant:
+0:34              0.300000
+0:34            Constant:
+0:34              0.750000
+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            Construct combined texture-sampler (temp sampler2D)
+0:36              'g_tTex2df4' (uniform texture2D)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:36            Constant:
+0:36              0.750000
+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            Construct combined texture-sampler (temp isampler2D)
+0:37              'g_tTex2di4' (uniform itexture2D)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:37            Constant:
+0:37              0.750000
+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            Construct combined texture-sampler (temp usampler2D)
+0:38              'g_tTex2du4' (uniform utexture2D)
+0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:38            Constant:
+0:38              0.750000
+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            Construct combined texture-sampler (temp sampler3D)
+0:40              'g_tTex3df4' (uniform texture3D)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:40            Constant:
+0:40              0.750000
+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            Construct combined texture-sampler (temp isampler3D)
+0:41              'g_tTex3di4' (uniform itexture3D)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:41            Constant:
+0:41              0.750000
+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            Construct combined texture-sampler (temp usampler3D)
+0:42              'g_tTex3du4' (uniform utexture3D)
+0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:42            Constant:
+0:42              0.750000
+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            Construct combined texture-sampler (temp samplerCube)
+0:44              'g_tTexcdf4' (uniform textureCube)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:44            Constant:
+0:44              0.750000
+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            Construct combined texture-sampler (temp isamplerCube)
+0:45              'g_tTexcdi4' (uniform itextureCube)
+0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:45            Constant:
+0:45              0.750000
+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            Construct combined texture-sampler (temp usamplerCube)
+0:46              'g_tTexcdu4' (uniform utextureCube)
+0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:46            Constant:
+0:46              0.750000
+0:48      move second child to first child (temp 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, temp float FragDepth Depth})
+0:48          Constant:
+0:48            0 (const int)
+0:48        Constant:
+0:48          1.000000
+0:48          1.000000
+0:48          1.000000
+0:48          1.000000
+0:49      move second child to first child (temp float)
+0:49        Depth: direct index for structure (temp float FragDepth)
+0:49          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:49          Constant:
+0:49            1 (const int)
+0:49        Constant:
+0:49          1.000000
+0:51      Branch: Return with expression
+0:51        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+
+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 FragDepth 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            Construct combined texture-sampler (temp sampler1D)
+0:32              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:32            Constant:
+0:32              0.100000
+0:32            Constant:
+0:32              0.750000
+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            Construct combined texture-sampler (temp isampler1D)
+0:33              'g_tTex1di4' (uniform itexture1D)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:33            Constant:
+0:33              0.200000
+0:33            Constant:
+0:33              0.750000
+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            Construct combined texture-sampler (temp usampler1D)
+0:34              'g_tTex1du4' (uniform utexture1D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:34            Constant:
+0:34              0.300000
+0:34            Constant:
+0:34              0.750000
+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            Construct combined texture-sampler (temp sampler2D)
+0:36              'g_tTex2df4' (uniform texture2D)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:36            Constant:
+0:36              0.750000
+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            Construct combined texture-sampler (temp isampler2D)
+0:37              'g_tTex2di4' (uniform itexture2D)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:37            Constant:
+0:37              0.750000
+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            Construct combined texture-sampler (temp usampler2D)
+0:38              'g_tTex2du4' (uniform utexture2D)
+0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:38            Constant:
+0:38              0.750000
+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            Construct combined texture-sampler (temp sampler3D)
+0:40              'g_tTex3df4' (uniform texture3D)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:40            Constant:
+0:40              0.750000
+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            Construct combined texture-sampler (temp isampler3D)
+0:41              'g_tTex3di4' (uniform itexture3D)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:41            Constant:
+0:41              0.750000
+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            Construct combined texture-sampler (temp usampler3D)
+0:42              'g_tTex3du4' (uniform utexture3D)
+0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:42            Constant:
+0:42              0.750000
+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            Construct combined texture-sampler (temp samplerCube)
+0:44              'g_tTexcdf4' (uniform textureCube)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:44            Constant:
+0:44              0.750000
+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            Construct combined texture-sampler (temp isamplerCube)
+0:45              'g_tTexcdi4' (uniform itextureCube)
+0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:45            Constant:
+0:45              0.750000
+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            Construct combined texture-sampler (temp usamplerCube)
+0:46              'g_tTexcdu4' (uniform utextureCube)
+0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:46            Constant:
+0:46              0.750000
+0:48      move second child to first child (temp 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, temp float FragDepth Depth})
+0:48          Constant:
+0:48            0 (const int)
+0:48        Constant:
+0:48          1.000000
+0:48          1.000000
+0:48          1.000000
+0:48          1.000000
+0:49      move second child to first child (temp float)
+0:49        Depth: direct index for structure (temp float FragDepth)
+0:49          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:49          Constant:
+0:49            1 (const int)
+0:49        Constant:
+0:49          1.000000
+0:51      Branch: Return with expression
+0:51        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_sSamp2d' (uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 158
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval10"
+                              Name 12  "g_tTex1df4"
+                              Name 16  "g_sSamp"
+                              Name 26  "txval11"
+                              Name 29  "g_tTex1di4"
+                              Name 39  "txval12"
+                              Name 42  "g_tTex1du4"
+                              Name 49  "txval20"
+                              Name 52  "g_tTex2df4"
+                              Name 60  "txval21"
+                              Name 63  "g_tTex2di4"
+                              Name 71  "txval22"
+                              Name 74  "g_tTex2du4"
+                              Name 83  "txval30"
+                              Name 86  "g_tTex3df4"
+                              Name 94  "txval31"
+                              Name 97  "g_tTex3di4"
+                              Name 104  "txval32"
+                              Name 107  "g_tTex3du4"
+                              Name 117  "txval40"
+                              Name 120  "g_tTexcdf4"
+                              Name 126  "txval41"
+                              Name 129  "g_tTexcdi4"
+                              Name 135  "txval42"
+                              Name 138  "g_tTexcdu4"
+                              Name 144  "PS_OUTPUT"
+                              MemberName 144(PS_OUTPUT) 0  "Color"
+                              MemberName 144(PS_OUTPUT) 1  "Depth"
+                              Name 146  "psout"
+                              Name 156  "g_sSamp2d"
+                              Name 157  "g_tTex1df4a"
+                              Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 29(g_tTex1di4) DescriptorSet 0
+                              Decorate 42(g_tTex1du4) DescriptorSet 0
+                              Decorate 52(g_tTex2df4) DescriptorSet 0
+                              Decorate 63(g_tTex2di4) DescriptorSet 0
+                              Decorate 74(g_tTex2du4) DescriptorSet 0
+                              Decorate 86(g_tTex3df4) DescriptorSet 0
+                              Decorate 97(g_tTex3di4) DescriptorSet 0
+                              Decorate 107(g_tTex3du4) DescriptorSet 0
+                              Decorate 120(g_tTexcdf4) DescriptorSet 0
+                              Decorate 129(g_tTexcdi4) DescriptorSet 0
+                              Decorate 138(g_tTexcdu4) DescriptorSet 0
+                              MemberDecorate 144(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 156(g_sSamp2d) DescriptorSet 0
+                              Decorate 157(g_tTex1df4a) DescriptorSet 0
+                              Decorate 157(g_tTex1df4a) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 1D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex1df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:    6(float) Constant 1036831949
+              21:    6(float) Constant 1061158912
+              23:             TypeInt 32 1
+              24:             TypeVector 23(int) 4
+              25:             TypePointer Function 24(ivec4)
+              27:             TypeImage 23(int) 1D sampled format:Unknown
+              28:             TypePointer UniformConstant 27
+  29(g_tTex1di4):     28(ptr) Variable UniformConstant
+              32:             TypeSampledImage 27
+              34:    6(float) Constant 1045220557
+              36:             TypeInt 32 0
+              37:             TypeVector 36(int) 4
+              38:             TypePointer Function 37(ivec4)
+              40:             TypeImage 36(int) 1D sampled format:Unknown
+              41:             TypePointer UniformConstant 40
+  42(g_tTex1du4):     41(ptr) Variable UniformConstant
+              45:             TypeSampledImage 40
+              47:    6(float) Constant 1050253722
+              50:             TypeImage 6(float) 2D sampled format:Unknown
+              51:             TypePointer UniformConstant 50
+  52(g_tTex2df4):     51(ptr) Variable UniformConstant
+              55:             TypeSampledImage 50
+              57:             TypeVector 6(float) 2
+              58:   57(fvec2) ConstantComposite 20 34
+              61:             TypeImage 23(int) 2D sampled format:Unknown
+              62:             TypePointer UniformConstant 61
+  63(g_tTex2di4):     62(ptr) Variable UniformConstant
+              66:             TypeSampledImage 61
+              68:    6(float) Constant 1053609165
+              69:   57(fvec2) ConstantComposite 47 68
+              72:             TypeImage 36(int) 2D sampled format:Unknown
+              73:             TypePointer UniformConstant 72
+  74(g_tTex2du4):     73(ptr) Variable UniformConstant
+              77:             TypeSampledImage 72
+              79:    6(float) Constant 1056964608
+              80:    6(float) Constant 1058642330
+              81:   57(fvec2) ConstantComposite 79 80
+              84:             TypeImage 6(float) 3D sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+  86(g_tTex3df4):     85(ptr) Variable UniformConstant
+              89:             TypeSampledImage 84
+              91:             TypeVector 6(float) 3
+              92:   91(fvec3) ConstantComposite 20 34 47
+              95:             TypeImage 23(int) 3D sampled format:Unknown
+              96:             TypePointer UniformConstant 95
+  97(g_tTex3di4):     96(ptr) Variable UniformConstant
+             100:             TypeSampledImage 95
+             102:   91(fvec3) ConstantComposite 68 79 80
+             105:             TypeImage 36(int) 3D sampled format:Unknown
+             106:             TypePointer UniformConstant 105
+ 107(g_tTex3du4):    106(ptr) Variable UniformConstant
+             110:             TypeSampledImage 105
+             112:    6(float) Constant 1060320051
+             113:    6(float) Constant 1061997773
+             114:    6(float) Constant 1063675494
+             115:   91(fvec3) ConstantComposite 112 113 114
+             118:             TypeImage 6(float) Cube sampled format:Unknown
+             119:             TypePointer UniformConstant 118
+ 120(g_tTexcdf4):    119(ptr) Variable UniformConstant
+             123:             TypeSampledImage 118
+             127:             TypeImage 23(int) Cube sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+ 129(g_tTexcdi4):    128(ptr) Variable UniformConstant
+             132:             TypeSampledImage 127
+             136:             TypeImage 36(int) Cube sampled format:Unknown
+             137:             TypePointer UniformConstant 136
+ 138(g_tTexcdu4):    137(ptr) Variable UniformConstant
+             141:             TypeSampledImage 136
+  144(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+             145:             TypePointer Function 144(PS_OUTPUT)
+             147:     23(int) Constant 0
+             148:    6(float) Constant 1065353216
+             149:    7(fvec4) ConstantComposite 148 148 148 148
+             151:     23(int) Constant 1
+             152:             TypePointer Function 6(float)
+  156(g_sSamp2d):     15(ptr) Variable UniformConstant
+157(g_tTex1df4a):     11(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval10):      8(ptr) Variable Function
+     26(txval11):     25(ptr) Variable Function
+     39(txval12):     38(ptr) Variable Function
+     49(txval20):      8(ptr) Variable Function
+     60(txval21):     25(ptr) Variable Function
+     71(txval22):     38(ptr) Variable Function
+     83(txval30):      8(ptr) Variable Function
+     94(txval31):     25(ptr) Variable Function
+    104(txval32):     38(ptr) Variable Function
+    117(txval40):      8(ptr) Variable Function
+    126(txval41):     25(ptr) Variable Function
+    135(txval42):     38(ptr) Variable Function
+      146(psout):    145(ptr) Variable Function
+              13:          10 Load 12(g_tTex1df4)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              22:    7(fvec4) ImageSampleExplicitLod 19 20 Lod 21
+                              Store 9(txval10) 22
+              30:          27 Load 29(g_tTex1di4)
+              31:          14 Load 16(g_sSamp)
+              33:          32 SampledImage 30 31
+              35:   24(ivec4) ImageSampleExplicitLod 33 34 Lod 21
+                              Store 26(txval11) 35
+              43:          40 Load 42(g_tTex1du4)
+              44:          14 Load 16(g_sSamp)
+              46:          45 SampledImage 43 44
+              48:   37(ivec4) ImageSampleExplicitLod 46 47 Lod 21
+                              Store 39(txval12) 48
+              53:          50 Load 52(g_tTex2df4)
+              54:          14 Load 16(g_sSamp)
+              56:          55 SampledImage 53 54
+              59:    7(fvec4) ImageSampleExplicitLod 56 58 Lod 21
+                              Store 49(txval20) 59
+              64:          61 Load 63(g_tTex2di4)
+              65:          14 Load 16(g_sSamp)
+              67:          66 SampledImage 64 65
+              70:   24(ivec4) ImageSampleExplicitLod 67 69 Lod 21
+                              Store 60(txval21) 70
+              75:          72 Load 74(g_tTex2du4)
+              76:          14 Load 16(g_sSamp)
+              78:          77 SampledImage 75 76
+              82:   37(ivec4) ImageSampleExplicitLod 78 81 Lod 21
+                              Store 71(txval22) 82
+              87:          84 Load 86(g_tTex3df4)
+              88:          14 Load 16(g_sSamp)
+              90:          89 SampledImage 87 88
+              93:    7(fvec4) ImageSampleExplicitLod 90 92 Lod 21
+                              Store 83(txval30) 93
+              98:          95 Load 97(g_tTex3di4)
+              99:          14 Load 16(g_sSamp)
+             101:         100 SampledImage 98 99
+             103:   24(ivec4) ImageSampleExplicitLod 101 102 Lod 21
+                              Store 94(txval31) 103
+             108:         105 Load 107(g_tTex3du4)
+             109:          14 Load 16(g_sSamp)
+             111:         110 SampledImage 108 109
+             116:   37(ivec4) ImageSampleExplicitLod 111 115 Lod 21
+                              Store 104(txval32) 116
+             121:         118 Load 120(g_tTexcdf4)
+             122:          14 Load 16(g_sSamp)
+             124:         123 SampledImage 121 122
+             125:    7(fvec4) ImageSampleExplicitLod 124 92 Lod 21
+                              Store 117(txval40) 125
+             130:         127 Load 129(g_tTexcdi4)
+             131:          14 Load 16(g_sSamp)
+             133:         132 SampledImage 130 131
+             134:   24(ivec4) ImageSampleExplicitLod 133 102 Lod 21
+                              Store 126(txval41) 134
+             139:         136 Load 138(g_tTexcdu4)
+             140:          14 Load 16(g_sSamp)
+             142:         141 SampledImage 139 140
+             143:   37(ivec4) ImageSampleExplicitLod 142 115 Lod 21
+                              Store 135(txval42) 143
+             150:      8(ptr) AccessChain 146(psout) 147
+                              Store 150 149
+             153:    152(ptr) AccessChain 146(psout) 151
+                              Store 153 148
+             154:144(PS_OUTPUT) Load 146(psout)
+                              ReturnValue 154
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
new file mode 100644
index 0000000..4bef16d
--- /dev/null
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -0,0 +1,589 @@
+hlsl.samplelevel.basic.dx10.vert
+Shader version: 450
+0:? Sequence
+0:50  Function Definition: main( (global structure{temp 4-component vector of float FragCoord 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            Construct combined texture-sampler (temp sampler1D)
+0:30              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:30            Constant:
+0:30              0.100000
+0:30            Constant:
+0:30              0.750000
+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            Construct combined texture-sampler (temp isampler1D)
+0:31              'g_tTex1di4' (uniform itexture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:31            Constant:
+0:31              0.200000
+0:31            Constant:
+0:31              0.750000
+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            Construct combined texture-sampler (temp usampler1D)
+0:32              'g_tTex1du4' (uniform utexture1D)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:32            Constant:
+0:32              0.300000
+0:32            Constant:
+0:32              0.750000
+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            Construct combined texture-sampler (temp sampler2D)
+0:34              'g_tTex2df4' (uniform texture2D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:34            Constant:
+0:34              0.750000
+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            Construct combined texture-sampler (temp isampler2D)
+0:35              'g_tTex2di4' (uniform itexture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:35            Constant:
+0:35              0.750000
+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            Construct combined texture-sampler (temp usampler2D)
+0:36              'g_tTex2du4' (uniform utexture2D)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:36            Constant:
+0:36              0.750000
+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            Construct combined texture-sampler (temp sampler3D)
+0:38              'g_tTex3df4' (uniform texture3D)
+0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:38            Constant:
+0:38              0.750000
+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            Construct combined texture-sampler (temp isampler3D)
+0:39              'g_tTex3di4' (uniform itexture3D)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:39            Constant:
+0:39              0.750000
+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            Construct combined texture-sampler (temp usampler3D)
+0:40              'g_tTex3du4' (uniform utexture3D)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:40            Constant:
+0:40              0.750000
+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            Construct combined texture-sampler (temp samplerCube)
+0:42              'g_tTexcdf4' (uniform textureCube)
+0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:42            Constant:
+0:42              0.750000
+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            Construct combined texture-sampler (temp isamplerCube)
+0:43              'g_tTexcdi4' (uniform itextureCube)
+0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:43            Constant:
+0:43              0.750000
+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            Construct combined texture-sampler (temp usamplerCube)
+0:44              'g_tTexcdu4' (uniform utextureCube)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:44            Constant:
+0:44              0.750000
+0:46      move second child to first child (temp 4-component vector of float)
+0:46        Pos: direct index for structure (temp 4-component vector of float FragCoord)
+0:46          'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:46          Constant:
+0:46            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:48      Branch: Return with expression
+0:48        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+0:? Sequence
+0:50  Function Definition: main( (global structure{temp 4-component vector of float FragCoord 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            Construct combined texture-sampler (temp sampler1D)
+0:30              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:30            Constant:
+0:30              0.100000
+0:30            Constant:
+0:30              0.750000
+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            Construct combined texture-sampler (temp isampler1D)
+0:31              'g_tTex1di4' (uniform itexture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:31            Constant:
+0:31              0.200000
+0:31            Constant:
+0:31              0.750000
+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            Construct combined texture-sampler (temp usampler1D)
+0:32              'g_tTex1du4' (uniform utexture1D)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:32            Constant:
+0:32              0.300000
+0:32            Constant:
+0:32              0.750000
+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            Construct combined texture-sampler (temp sampler2D)
+0:34              'g_tTex2df4' (uniform texture2D)
+0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:34            Constant:
+0:34              0.750000
+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            Construct combined texture-sampler (temp isampler2D)
+0:35              'g_tTex2di4' (uniform itexture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:35            Constant:
+0:35              0.750000
+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            Construct combined texture-sampler (temp usampler2D)
+0:36              'g_tTex2du4' (uniform utexture2D)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:36            Constant:
+0:36              0.750000
+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            Construct combined texture-sampler (temp sampler3D)
+0:38              'g_tTex3df4' (uniform texture3D)
+0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:38            Constant:
+0:38              0.750000
+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            Construct combined texture-sampler (temp isampler3D)
+0:39              'g_tTex3di4' (uniform itexture3D)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:39            Constant:
+0:39              0.750000
+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            Construct combined texture-sampler (temp usampler3D)
+0:40              'g_tTex3du4' (uniform utexture3D)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:40            Constant:
+0:40              0.750000
+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            Construct combined texture-sampler (temp samplerCube)
+0:42              'g_tTexcdf4' (uniform textureCube)
+0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:42            Constant:
+0:42              0.750000
+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            Construct combined texture-sampler (temp isamplerCube)
+0:43              'g_tTexcdi4' (uniform itextureCube)
+0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:43            Constant:
+0:43              0.750000
+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            Construct combined texture-sampler (temp usamplerCube)
+0:44              'g_tTexcdu4' (uniform utextureCube)
+0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:44            Constant:
+0:44              0.750000
+0:46      move second child to first child (temp 4-component vector of float)
+0:46        Pos: direct index for structure (temp 4-component vector of float FragCoord)
+0:46          'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:46          Constant:
+0:46            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:48      Branch: Return with expression
+0:48        'vsout' (temp structure{temp 4-component vector of float FragCoord Pos})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 154
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main"
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval10"
+                              Name 12  "g_tTex1df4"
+                              Name 16  "g_sSamp"
+                              Name 26  "txval11"
+                              Name 29  "g_tTex1di4"
+                              Name 39  "txval12"
+                              Name 42  "g_tTex1du4"
+                              Name 49  "txval20"
+                              Name 52  "g_tTex2df4"
+                              Name 60  "txval21"
+                              Name 63  "g_tTex2di4"
+                              Name 71  "txval22"
+                              Name 74  "g_tTex2du4"
+                              Name 83  "txval30"
+                              Name 86  "g_tTex3df4"
+                              Name 94  "txval31"
+                              Name 97  "g_tTex3di4"
+                              Name 104  "txval32"
+                              Name 107  "g_tTex3du4"
+                              Name 117  "txval40"
+                              Name 120  "g_tTexcdf4"
+                              Name 126  "txval41"
+                              Name 129  "g_tTexcdi4"
+                              Name 135  "txval42"
+                              Name 138  "g_tTexcdu4"
+                              Name 144  "VS_OUTPUT"
+                              MemberName 144(VS_OUTPUT) 0  "Pos"
+                              Name 146  "vsout"
+                              Name 153  "g_tTex1df4a"
+                              Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 29(g_tTex1di4) DescriptorSet 0
+                              Decorate 42(g_tTex1du4) DescriptorSet 0
+                              Decorate 52(g_tTex2df4) DescriptorSet 0
+                              Decorate 63(g_tTex2di4) DescriptorSet 0
+                              Decorate 74(g_tTex2du4) DescriptorSet 0
+                              Decorate 86(g_tTex3df4) DescriptorSet 0
+                              Decorate 97(g_tTex3di4) DescriptorSet 0
+                              Decorate 107(g_tTex3du4) DescriptorSet 0
+                              Decorate 120(g_tTexcdf4) DescriptorSet 0
+                              Decorate 129(g_tTexcdi4) DescriptorSet 0
+                              Decorate 138(g_tTexcdu4) DescriptorSet 0
+                              MemberDecorate 144(VS_OUTPUT) 0 BuiltIn FragCoord
+                              Decorate 153(g_tTex1df4a) DescriptorSet 0
+                              Decorate 153(g_tTex1df4a) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 1D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex1df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:    6(float) Constant 1036831949
+              21:    6(float) Constant 1061158912
+              23:             TypeInt 32 1
+              24:             TypeVector 23(int) 4
+              25:             TypePointer Function 24(ivec4)
+              27:             TypeImage 23(int) 1D sampled format:Unknown
+              28:             TypePointer UniformConstant 27
+  29(g_tTex1di4):     28(ptr) Variable UniformConstant
+              32:             TypeSampledImage 27
+              34:    6(float) Constant 1045220557
+              36:             TypeInt 32 0
+              37:             TypeVector 36(int) 4
+              38:             TypePointer Function 37(ivec4)
+              40:             TypeImage 36(int) 1D sampled format:Unknown
+              41:             TypePointer UniformConstant 40
+  42(g_tTex1du4):     41(ptr) Variable UniformConstant
+              45:             TypeSampledImage 40
+              47:    6(float) Constant 1050253722
+              50:             TypeImage 6(float) 2D sampled format:Unknown
+              51:             TypePointer UniformConstant 50
+  52(g_tTex2df4):     51(ptr) Variable UniformConstant
+              55:             TypeSampledImage 50
+              57:             TypeVector 6(float) 2
+              58:   57(fvec2) ConstantComposite 20 34
+              61:             TypeImage 23(int) 2D sampled format:Unknown
+              62:             TypePointer UniformConstant 61
+  63(g_tTex2di4):     62(ptr) Variable UniformConstant
+              66:             TypeSampledImage 61
+              68:    6(float) Constant 1053609165
+              69:   57(fvec2) ConstantComposite 47 68
+              72:             TypeImage 36(int) 2D sampled format:Unknown
+              73:             TypePointer UniformConstant 72
+  74(g_tTex2du4):     73(ptr) Variable UniformConstant
+              77:             TypeSampledImage 72
+              79:    6(float) Constant 1056964608
+              80:    6(float) Constant 1058642330
+              81:   57(fvec2) ConstantComposite 79 80
+              84:             TypeImage 6(float) 3D sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+  86(g_tTex3df4):     85(ptr) Variable UniformConstant
+              89:             TypeSampledImage 84
+              91:             TypeVector 6(float) 3
+              92:   91(fvec3) ConstantComposite 20 34 47
+              95:             TypeImage 23(int) 3D sampled format:Unknown
+              96:             TypePointer UniformConstant 95
+  97(g_tTex3di4):     96(ptr) Variable UniformConstant
+             100:             TypeSampledImage 95
+             102:   91(fvec3) ConstantComposite 68 79 80
+             105:             TypeImage 36(int) 3D sampled format:Unknown
+             106:             TypePointer UniformConstant 105
+ 107(g_tTex3du4):    106(ptr) Variable UniformConstant
+             110:             TypeSampledImage 105
+             112:    6(float) Constant 1060320051
+             113:    6(float) Constant 1061997773
+             114:    6(float) Constant 1063675494
+             115:   91(fvec3) ConstantComposite 112 113 114
+             118:             TypeImage 6(float) Cube sampled format:Unknown
+             119:             TypePointer UniformConstant 118
+ 120(g_tTexcdf4):    119(ptr) Variable UniformConstant
+             123:             TypeSampledImage 118
+             127:             TypeImage 23(int) Cube sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+ 129(g_tTexcdi4):    128(ptr) Variable UniformConstant
+             132:             TypeSampledImage 127
+             136:             TypeImage 36(int) Cube sampled format:Unknown
+             137:             TypePointer UniformConstant 136
+ 138(g_tTexcdu4):    137(ptr) Variable UniformConstant
+             141:             TypeSampledImage 136
+  144(VS_OUTPUT):             TypeStruct 7(fvec4)
+             145:             TypePointer Function 144(VS_OUTPUT)
+             147:     23(int) Constant 0
+             148:    6(float) Constant 0
+             149:    7(fvec4) ConstantComposite 148 148 148 148
+153(g_tTex1df4a):     11(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval10):      8(ptr) Variable Function
+     26(txval11):     25(ptr) Variable Function
+     39(txval12):     38(ptr) Variable Function
+     49(txval20):      8(ptr) Variable Function
+     60(txval21):     25(ptr) Variable Function
+     71(txval22):     38(ptr) Variable Function
+     83(txval30):      8(ptr) Variable Function
+     94(txval31):     25(ptr) Variable Function
+    104(txval32):     38(ptr) Variable Function
+    117(txval40):      8(ptr) Variable Function
+    126(txval41):     25(ptr) Variable Function
+    135(txval42):     38(ptr) Variable Function
+      146(vsout):    145(ptr) Variable Function
+              13:          10 Load 12(g_tTex1df4)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              22:    7(fvec4) ImageSampleExplicitLod 19 20 Lod 21
+                              Store 9(txval10) 22
+              30:          27 Load 29(g_tTex1di4)
+              31:          14 Load 16(g_sSamp)
+              33:          32 SampledImage 30 31
+              35:   24(ivec4) ImageSampleExplicitLod 33 34 Lod 21
+                              Store 26(txval11) 35
+              43:          40 Load 42(g_tTex1du4)
+              44:          14 Load 16(g_sSamp)
+              46:          45 SampledImage 43 44
+              48:   37(ivec4) ImageSampleExplicitLod 46 47 Lod 21
+                              Store 39(txval12) 48
+              53:          50 Load 52(g_tTex2df4)
+              54:          14 Load 16(g_sSamp)
+              56:          55 SampledImage 53 54
+              59:    7(fvec4) ImageSampleExplicitLod 56 58 Lod 21
+                              Store 49(txval20) 59
+              64:          61 Load 63(g_tTex2di4)
+              65:          14 Load 16(g_sSamp)
+              67:          66 SampledImage 64 65
+              70:   24(ivec4) ImageSampleExplicitLod 67 69 Lod 21
+                              Store 60(txval21) 70
+              75:          72 Load 74(g_tTex2du4)
+              76:          14 Load 16(g_sSamp)
+              78:          77 SampledImage 75 76
+              82:   37(ivec4) ImageSampleExplicitLod 78 81 Lod 21
+                              Store 71(txval22) 82
+              87:          84 Load 86(g_tTex3df4)
+              88:          14 Load 16(g_sSamp)
+              90:          89 SampledImage 87 88
+              93:    7(fvec4) ImageSampleExplicitLod 90 92 Lod 21
+                              Store 83(txval30) 93
+              98:          95 Load 97(g_tTex3di4)
+              99:          14 Load 16(g_sSamp)
+             101:         100 SampledImage 98 99
+             103:   24(ivec4) ImageSampleExplicitLod 101 102 Lod 21
+                              Store 94(txval31) 103
+             108:         105 Load 107(g_tTex3du4)
+             109:          14 Load 16(g_sSamp)
+             111:         110 SampledImage 108 109
+             116:   37(ivec4) ImageSampleExplicitLod 111 115 Lod 21
+                              Store 104(txval32) 116
+             121:         118 Load 120(g_tTexcdf4)
+             122:          14 Load 16(g_sSamp)
+             124:         123 SampledImage 121 122
+             125:    7(fvec4) ImageSampleExplicitLod 124 92 Lod 21
+                              Store 117(txval40) 125
+             130:         127 Load 129(g_tTexcdi4)
+             131:          14 Load 16(g_sSamp)
+             133:         132 SampledImage 130 131
+             134:   24(ivec4) ImageSampleExplicitLod 133 102 Lod 21
+                              Store 126(txval41) 134
+             139:         136 Load 138(g_tTexcdu4)
+             140:          14 Load 16(g_sSamp)
+             142:         141 SampledImage 139 140
+             143:   37(ivec4) ImageSampleExplicitLod 142 115 Lod 21
+                              Store 135(txval42) 143
+             150:      8(ptr) AccessChain 146(vsout) 147
+                              Store 150 149
+             151:144(VS_OUTPUT) Load 146(vsout)
+                              ReturnValue 151
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
new file mode 100644
index 0000000..4f7a1a0
--- /dev/null
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -0,0 +1,572 @@
+hlsl.samplelevel.offset.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:50  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler1D)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:31            Constant:
+0:31              0.100000
+0:31            Constant:
+0:31              0.750000
+0:31            Constant:
+0:31              1 (const int)
+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            Construct combined texture-sampler (temp isampler1D)
+0:32              'g_tTex1di4' (uniform itexture1D)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:32            Constant:
+0:32              0.200000
+0:32            Constant:
+0:32              0.750000
+0:32            Constant:
+0:32              1 (const int)
+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            Construct combined texture-sampler (temp usampler1D)
+0:33              'g_tTex1du4' (uniform utexture1D)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:33            Constant:
+0:33              0.300000
+0:33            Constant:
+0:33              0.750000
+0:33            Constant:
+0:33              1 (const int)
+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            Construct combined texture-sampler (temp sampler2D)
+0:35              'g_tTex2df4' (uniform texture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:35            Constant:
+0:35              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp isampler2D)
+0:36              'g_tTex2di4' (uniform itexture2D)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:36            Constant:
+0:36              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp usampler2D)
+0:37              'g_tTex2du4' (uniform utexture2D)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:37            Constant:
+0:37              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               -1 (const int)
+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            Construct combined texture-sampler (temp sampler3D)
+0:39              'g_tTex3df4' (uniform texture3D)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:39            Constant:
+0:39              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp isampler3D)
+0:40              'g_tTex3di4' (uniform itexture3D)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:40            Constant:
+0:40              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               1 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp usampler3D)
+0:41              'g_tTex3du4' (uniform utexture3D)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:41            Constant:
+0:41              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+0:?               -1 (const int)
+0:45      move second child to first child (temp 4-component vector of float)
+0:45        Color: direct index for structure (temp 4-component vector of float)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            0 (const int)
+0:45        Constant:
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:46      move second child to first child (temp float)
+0:46        Depth: direct index for structure (temp float FragDepth)
+0:46          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:46          Constant:
+0:46            1 (const int)
+0:46        Constant:
+0:46          1.000000
+0:48      Branch: Return with expression
+0:48        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:50  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth 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            Construct combined texture-sampler (temp sampler1D)
+0:31              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:31            Constant:
+0:31              0.100000
+0:31            Constant:
+0:31              0.750000
+0:31            Constant:
+0:31              1 (const int)
+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            Construct combined texture-sampler (temp isampler1D)
+0:32              'g_tTex1di4' (uniform itexture1D)
+0:32              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:32            Constant:
+0:32              0.200000
+0:32            Constant:
+0:32              0.750000
+0:32            Constant:
+0:32              1 (const int)
+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            Construct combined texture-sampler (temp usampler1D)
+0:33              'g_tTex1du4' (uniform utexture1D)
+0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:33            Constant:
+0:33              0.300000
+0:33            Constant:
+0:33              0.750000
+0:33            Constant:
+0:33              1 (const int)
+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            Construct combined texture-sampler (temp sampler2D)
+0:35              'g_tTex2df4' (uniform texture2D)
+0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:35            Constant:
+0:35              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp isampler2D)
+0:36              'g_tTex2di4' (uniform itexture2D)
+0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:36            Constant:
+0:36              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp usampler2D)
+0:37              'g_tTex2du4' (uniform utexture2D)
+0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:37            Constant:
+0:37              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               -1 (const int)
+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            Construct combined texture-sampler (temp sampler3D)
+0:39              'g_tTex3df4' (uniform texture3D)
+0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:39            Constant:
+0:39              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp isampler3D)
+0:40              'g_tTex3di4' (uniform itexture3D)
+0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.400000
+0:?               0.500000
+0:?               0.600000
+0:40            Constant:
+0:40              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               1 (const int)
+0:?               1 (const int)
+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            Construct combined texture-sampler (temp usampler3D)
+0:41              'g_tTex3du4' (uniform utexture3D)
+0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.700000
+0:?               0.800000
+0:?               0.900000
+0:41            Constant:
+0:41              0.750000
+0:?             Constant:
+0:?               1 (const int)
+0:?               0 (const int)
+0:?               -1 (const int)
+0:45      move second child to first child (temp 4-component vector of float)
+0:45        Color: direct index for structure (temp 4-component vector of float)
+0:45          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:45          Constant:
+0:45            0 (const int)
+0:45        Constant:
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:45          1.000000
+0:46      move second child to first child (temp float)
+0:46        Depth: direct index for structure (temp float FragDepth)
+0:46          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:46          Constant:
+0:46            1 (const int)
+0:46        Constant:
+0:46          1.000000
+0:48      Branch: Return with expression
+0:48        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+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_tTexcdf4' (uniform textureCube)
+0:?     'g_tTexcdi4' (uniform itextureCube)
+0:?     'g_tTexcdu4' (uniform utextureCube)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 148
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval10"
+                              Name 12  "g_tTex1df4"
+                              Name 16  "g_sSamp"
+                              Name 27  "txval11"
+                              Name 30  "g_tTex1di4"
+                              Name 40  "txval12"
+                              Name 43  "g_tTex1du4"
+                              Name 50  "txval20"
+                              Name 53  "g_tTex2df4"
+                              Name 64  "txval21"
+                              Name 67  "g_tTex2di4"
+                              Name 76  "txval22"
+                              Name 79  "g_tTex2du4"
+                              Name 90  "txval30"
+                              Name 93  "g_tTex3df4"
+                              Name 103  "txval31"
+                              Name 106  "g_tTex3di4"
+                              Name 114  "txval32"
+                              Name 117  "g_tTex3du4"
+                              Name 128  "PS_OUTPUT"
+                              MemberName 128(PS_OUTPUT) 0  "Color"
+                              MemberName 128(PS_OUTPUT) 1  "Depth"
+                              Name 130  "psout"
+                              Name 138  "g_tTex1df4a"
+                              Name 141  "g_tTexcdf4"
+                              Name 144  "g_tTexcdi4"
+                              Name 147  "g_tTexcdu4"
+                              Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 30(g_tTex1di4) DescriptorSet 0
+                              Decorate 43(g_tTex1du4) DescriptorSet 0
+                              Decorate 53(g_tTex2df4) DescriptorSet 0
+                              Decorate 67(g_tTex2di4) DescriptorSet 0
+                              Decorate 79(g_tTex2du4) DescriptorSet 0
+                              Decorate 93(g_tTex3df4) DescriptorSet 0
+                              Decorate 106(g_tTex3di4) DescriptorSet 0
+                              Decorate 117(g_tTex3du4) DescriptorSet 0
+                              MemberDecorate 128(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 138(g_tTex1df4a) DescriptorSet 0
+                              Decorate 138(g_tTex1df4a) Binding 1
+                              Decorate 141(g_tTexcdf4) DescriptorSet 0
+                              Decorate 144(g_tTexcdi4) DescriptorSet 0
+                              Decorate 147(g_tTexcdu4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 1D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex1df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:    6(float) Constant 1036831949
+              21:    6(float) Constant 1061158912
+              22:             TypeInt 32 1
+              23:     22(int) Constant 1
+              25:             TypeVector 22(int) 4
+              26:             TypePointer Function 25(ivec4)
+              28:             TypeImage 22(int) 1D sampled format:Unknown
+              29:             TypePointer UniformConstant 28
+  30(g_tTex1di4):     29(ptr) Variable UniformConstant
+              33:             TypeSampledImage 28
+              35:    6(float) Constant 1045220557
+              37:             TypeInt 32 0
+              38:             TypeVector 37(int) 4
+              39:             TypePointer Function 38(ivec4)
+              41:             TypeImage 37(int) 1D sampled format:Unknown
+              42:             TypePointer UniformConstant 41
+  43(g_tTex1du4):     42(ptr) Variable UniformConstant
+              46:             TypeSampledImage 41
+              48:    6(float) Constant 1050253722
+              51:             TypeImage 6(float) 2D sampled format:Unknown
+              52:             TypePointer UniformConstant 51
+  53(g_tTex2df4):     52(ptr) Variable UniformConstant
+              56:             TypeSampledImage 51
+              58:             TypeVector 6(float) 2
+              59:   58(fvec2) ConstantComposite 20 35
+              60:             TypeVector 22(int) 2
+              61:     22(int) Constant 0
+              62:   60(ivec2) ConstantComposite 23 61
+              65:             TypeImage 22(int) 2D sampled format:Unknown
+              66:             TypePointer UniformConstant 65
+  67(g_tTex2di4):     66(ptr) Variable UniformConstant
+              70:             TypeSampledImage 65
+              72:    6(float) Constant 1053609165
+              73:   58(fvec2) ConstantComposite 48 72
+              74:   60(ivec2) ConstantComposite 23 23
+              77:             TypeImage 37(int) 2D sampled format:Unknown
+              78:             TypePointer UniformConstant 77
+  79(g_tTex2du4):     78(ptr) Variable UniformConstant
+              82:             TypeSampledImage 77
+              84:    6(float) Constant 1056964608
+              85:    6(float) Constant 1058642330
+              86:   58(fvec2) ConstantComposite 84 85
+              87:     22(int) Constant 4294967295
+              88:   60(ivec2) ConstantComposite 23 87
+              91:             TypeImage 6(float) 3D sampled format:Unknown
+              92:             TypePointer UniformConstant 91
+  93(g_tTex3df4):     92(ptr) Variable UniformConstant
+              96:             TypeSampledImage 91
+              98:             TypeVector 6(float) 3
+              99:   98(fvec3) ConstantComposite 20 35 48
+             100:             TypeVector 22(int) 3
+             101:  100(ivec3) ConstantComposite 23 61 23
+             104:             TypeImage 22(int) 3D sampled format:Unknown
+             105:             TypePointer UniformConstant 104
+ 106(g_tTex3di4):    105(ptr) Variable UniformConstant
+             109:             TypeSampledImage 104
+             111:   98(fvec3) ConstantComposite 72 84 85
+             112:  100(ivec3) ConstantComposite 23 23 23
+             115:             TypeImage 37(int) 3D sampled format:Unknown
+             116:             TypePointer UniformConstant 115
+ 117(g_tTex3du4):    116(ptr) Variable UniformConstant
+             120:             TypeSampledImage 115
+             122:    6(float) Constant 1060320051
+             123:    6(float) Constant 1061997773
+             124:    6(float) Constant 1063675494
+             125:   98(fvec3) ConstantComposite 122 123 124
+             126:  100(ivec3) ConstantComposite 23 61 87
+  128(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+             129:             TypePointer Function 128(PS_OUTPUT)
+             131:    6(float) Constant 1065353216
+             132:    7(fvec4) ConstantComposite 131 131 131 131
+             134:             TypePointer Function 6(float)
+138(g_tTex1df4a):     11(ptr) Variable UniformConstant
+             139:             TypeImage 6(float) Cube sampled format:Unknown
+             140:             TypePointer UniformConstant 139
+ 141(g_tTexcdf4):    140(ptr) Variable UniformConstant
+             142:             TypeImage 22(int) Cube sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+ 144(g_tTexcdi4):    143(ptr) Variable UniformConstant
+             145:             TypeImage 37(int) Cube sampled format:Unknown
+             146:             TypePointer UniformConstant 145
+ 147(g_tTexcdu4):    146(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval10):      8(ptr) Variable Function
+     27(txval11):     26(ptr) Variable Function
+     40(txval12):     39(ptr) Variable Function
+     50(txval20):      8(ptr) Variable Function
+     64(txval21):     26(ptr) Variable Function
+     76(txval22):     39(ptr) Variable Function
+     90(txval30):      8(ptr) Variable Function
+    103(txval31):     26(ptr) Variable Function
+    114(txval32):     39(ptr) Variable Function
+      130(psout):    129(ptr) Variable Function
+              13:          10 Load 12(g_tTex1df4)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              24:    7(fvec4) ImageSampleExplicitLod 19 20 Lod ConstOffset 21 23
+                              Store 9(txval10) 24
+              31:          28 Load 30(g_tTex1di4)
+              32:          14 Load 16(g_sSamp)
+              34:          33 SampledImage 31 32
+              36:   25(ivec4) ImageSampleExplicitLod 34 35 Lod ConstOffset 21 23
+                              Store 27(txval11) 36
+              44:          41 Load 43(g_tTex1du4)
+              45:          14 Load 16(g_sSamp)
+              47:          46 SampledImage 44 45
+              49:   38(ivec4) ImageSampleExplicitLod 47 48 Lod ConstOffset 21 23
+                              Store 40(txval12) 49
+              54:          51 Load 53(g_tTex2df4)
+              55:          14 Load 16(g_sSamp)
+              57:          56 SampledImage 54 55
+              63:    7(fvec4) ImageSampleExplicitLod 57 59 Lod ConstOffset 21 62
+                              Store 50(txval20) 63
+              68:          65 Load 67(g_tTex2di4)
+              69:          14 Load 16(g_sSamp)
+              71:          70 SampledImage 68 69
+              75:   25(ivec4) ImageSampleExplicitLod 71 73 Lod ConstOffset 21 74
+                              Store 64(txval21) 75
+              80:          77 Load 79(g_tTex2du4)
+              81:          14 Load 16(g_sSamp)
+              83:          82 SampledImage 80 81
+              89:   38(ivec4) ImageSampleExplicitLod 83 86 Lod ConstOffset 21 88
+                              Store 76(txval22) 89
+              94:          91 Load 93(g_tTex3df4)
+              95:          14 Load 16(g_sSamp)
+              97:          96 SampledImage 94 95
+             102:    7(fvec4) ImageSampleExplicitLod 97 99 Lod ConstOffset 21 101
+                              Store 90(txval30) 102
+             107:         104 Load 106(g_tTex3di4)
+             108:          14 Load 16(g_sSamp)
+             110:         109 SampledImage 107 108
+             113:   25(ivec4) ImageSampleExplicitLod 110 111 Lod ConstOffset 21 112
+                              Store 103(txval31) 113
+             118:         115 Load 117(g_tTex3du4)
+             119:          14 Load 16(g_sSamp)
+             121:         120 SampledImage 118 119
+             127:   38(ivec4) ImageSampleExplicitLod 121 125 Lod ConstOffset 21 126
+                              Store 114(txval32) 127
+             133:      8(ptr) AccessChain 130(psout) 61
+                              Store 133 132
+             135:    134(ptr) AccessChain 130(psout) 23
+                              Store 135 131
+             136:128(PS_OUTPUT) Load 130(psout)
+                              ReturnValue 136
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
new file mode 100644
index 0000000..0d18428
--- /dev/null
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -0,0 +1,409 @@
+hlsl.samplelevel.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 FragDepth 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            Construct combined texture-sampler (temp sampler1DArray)
+0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:23            Constant:
+0:23              0.750000
+0:23            Constant:
+0:23              0 (const int)
+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            Construct combined texture-sampler (temp isampler1DArray)
+0:24              'g_tTex1di4' (uniform itexture1DArray)
+0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.200000
+0:?               0.300000
+0:24            Constant:
+0:24              0.750000
+0:24            Constant:
+0:24              1 (const int)
+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            Construct combined texture-sampler (temp usampler1DArray)
+0:25              'g_tTex1du4' (uniform utexture1DArray)
+0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:25            Constant:
+0:25              0.750000
+0:25            Constant:
+0:25              2 (const int)
+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            Construct combined texture-sampler (temp sampler2DArray)
+0:27              'g_tTex2df4' (uniform texture2DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:27            Constant:
+0:27              0.750000
+0:?             Constant:
+0:?               0 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp isampler2DArray)
+0:28              'g_tTex2di4' (uniform itexture2DArray)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?               0.500000
+0:28            Constant:
+0:28              0.750000
+0:?             Constant:
+0:?               0 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp usampler2DArray)
+0:29              'g_tTex2du4' (uniform utexture2DArray)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+0:29            Constant:
+0:29              0.750000
+0:?             Constant:
+0:?               0 (const int)
+0:?               1 (const int)
+0:33      move second child to first child (temp 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, temp float FragDepth Depth})
+0:33          Constant:
+0:33            0 (const int)
+0:33        Constant:
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
+0:34      move second child to first child (temp float)
+0:34        Depth: direct index for structure (temp float FragDepth)
+0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:34          Constant:
+0:34            1 (const int)
+0:34        Constant:
+0:34          1.000000
+0:36      Branch: Return with expression
+0:36        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:?     'g_tTex1di4' (uniform itexture1DArray)
+0:?     'g_tTex1du4' (uniform utexture1DArray)
+0:?     'g_tTex2df4' (uniform texture2DArray)
+0:?     'g_tTex2di4' (uniform itexture2DArray)
+0:?     'g_tTex2du4' (uniform utexture2DArray)
+
+
+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 FragDepth 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            Construct combined texture-sampler (temp sampler1DArray)
+0:23              'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:23              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:23            Constant:
+0:23              0.750000
+0:23            Constant:
+0:23              0 (const int)
+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            Construct combined texture-sampler (temp isampler1DArray)
+0:24              'g_tTex1di4' (uniform itexture1DArray)
+0:24              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.200000
+0:?               0.300000
+0:24            Constant:
+0:24              0.750000
+0:24            Constant:
+0:24              1 (const int)
+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            Construct combined texture-sampler (temp usampler1DArray)
+0:25              'g_tTex1du4' (uniform utexture1DArray)
+0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:25            Constant:
+0:25              0.750000
+0:25            Constant:
+0:25              2 (const int)
+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            Construct combined texture-sampler (temp sampler2DArray)
+0:27              'g_tTex2df4' (uniform texture2DArray)
+0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.100000
+0:?               0.200000
+0:?               0.300000
+0:27            Constant:
+0:27              0.750000
+0:?             Constant:
+0:?               0 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp isampler2DArray)
+0:28              'g_tTex2di4' (uniform itexture2DArray)
+0:28              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.300000
+0:?               0.400000
+0:?               0.500000
+0:28            Constant:
+0:28              0.750000
+0:?             Constant:
+0:?               0 (const int)
+0:?               0 (const int)
+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            Construct combined texture-sampler (temp usampler2DArray)
+0:29              'g_tTex2du4' (uniform utexture2DArray)
+0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?             Constant:
+0:?               0.500000
+0:?               0.600000
+0:?               0.700000
+0:29            Constant:
+0:29              0.750000
+0:?             Constant:
+0:?               0 (const int)
+0:?               1 (const int)
+0:33      move second child to first child (temp 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, temp float FragDepth Depth})
+0:33          Constant:
+0:33            0 (const int)
+0:33        Constant:
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
+0:33          1.000000
+0:34      move second child to first child (temp float)
+0:34        Depth: direct index for structure (temp float FragDepth)
+0:34          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:34          Constant:
+0:34            1 (const int)
+0:34        Constant:
+0:34          1.000000
+0:36      Branch: Return with expression
+0:36        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
+0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
+0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
+0:?     'g_tTex1di4' (uniform itexture1DArray)
+0:?     'g_tTex1du4' (uniform utexture1DArray)
+0:?     'g_tTex2df4' (uniform texture2DArray)
+0:?     'g_tTex2di4' (uniform itexture2DArray)
+0:?     'g_tTex2du4' (uniform utexture2DArray)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 105
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 9  "txval10"
+                              Name 12  "g_tTex1df4"
+                              Name 16  "g_sSamp"
+                              Name 30  "txval11"
+                              Name 33  "g_tTex1di4"
+                              Name 45  "txval12"
+                              Name 48  "g_tTex1du4"
+                              Name 57  "txval20"
+                              Name 60  "g_tTex2df4"
+                              Name 70  "txval21"
+                              Name 73  "g_tTex2di4"
+                              Name 81  "txval22"
+                              Name 84  "g_tTex2du4"
+                              Name 94  "PS_OUTPUT"
+                              MemberName 94(PS_OUTPUT) 0  "Color"
+                              MemberName 94(PS_OUTPUT) 1  "Depth"
+                              Name 96  "psout"
+                              Name 104  "g_tTex1df4a"
+                              Decorate 12(g_tTex1df4) DescriptorSet 0
+                              Decorate 12(g_tTex1df4) Binding 0
+                              Decorate 16(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_sSamp) Binding 0
+                              Decorate 33(g_tTex1di4) DescriptorSet 0
+                              Decorate 48(g_tTex1du4) DescriptorSet 0
+                              Decorate 60(g_tTex2df4) DescriptorSet 0
+                              Decorate 73(g_tTex2di4) DescriptorSet 0
+                              Decorate 84(g_tTex2du4) DescriptorSet 0
+                              MemberDecorate 94(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 104(g_tTex1df4a) DescriptorSet 0
+                              Decorate 104(g_tTex1df4a) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 1D array sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+  12(g_tTex1df4):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+     16(g_sSamp):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeVector 6(float) 2
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1045220557
+              23:   20(fvec2) ConstantComposite 21 22
+              24:    6(float) Constant 1061158912
+              25:             TypeInt 32 1
+              26:     25(int) Constant 0
+              28:             TypeVector 25(int) 4
+              29:             TypePointer Function 28(ivec4)
+              31:             TypeImage 25(int) 1D array sampled format:Unknown
+              32:             TypePointer UniformConstant 31
+  33(g_tTex1di4):     32(ptr) Variable UniformConstant
+              36:             TypeSampledImage 31
+              38:    6(float) Constant 1050253722
+              39:   20(fvec2) ConstantComposite 22 38
+              40:     25(int) Constant 1
+              42:             TypeInt 32 0
+              43:             TypeVector 42(int) 4
+              44:             TypePointer Function 43(ivec4)
+              46:             TypeImage 42(int) 1D array sampled format:Unknown
+              47:             TypePointer UniformConstant 46
+  48(g_tTex1du4):     47(ptr) Variable UniformConstant
+              51:             TypeSampledImage 46
+              53:    6(float) Constant 1053609165
+              54:   20(fvec2) ConstantComposite 38 53
+              55:     25(int) Constant 2
+              58:             TypeImage 6(float) 2D array sampled format:Unknown
+              59:             TypePointer UniformConstant 58
+  60(g_tTex2df4):     59(ptr) Variable UniformConstant
+              63:             TypeSampledImage 58
+              65:             TypeVector 6(float) 3
+              66:   65(fvec3) ConstantComposite 21 22 38
+              67:             TypeVector 25(int) 2
+              68:   67(ivec2) ConstantComposite 26 26
+              71:             TypeImage 25(int) 2D array sampled format:Unknown
+              72:             TypePointer UniformConstant 71
+  73(g_tTex2di4):     72(ptr) Variable UniformConstant
+              76:             TypeSampledImage 71
+              78:    6(float) Constant 1056964608
+              79:   65(fvec3) ConstantComposite 38 53 78
+              82:             TypeImage 42(int) 2D array sampled format:Unknown
+              83:             TypePointer UniformConstant 82
+  84(g_tTex2du4):     83(ptr) Variable UniformConstant
+              87:             TypeSampledImage 82
+              89:    6(float) Constant 1058642330
+              90:    6(float) Constant 1060320051
+              91:   65(fvec3) ConstantComposite 78 89 90
+              92:   67(ivec2) ConstantComposite 26 40
+   94(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+              95:             TypePointer Function 94(PS_OUTPUT)
+              97:    6(float) Constant 1065353216
+              98:    7(fvec4) ConstantComposite 97 97 97 97
+             100:             TypePointer Function 6(float)
+104(g_tTex1df4a):     11(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      9(txval10):      8(ptr) Variable Function
+     30(txval11):     29(ptr) Variable Function
+     45(txval12):     44(ptr) Variable Function
+     57(txval20):      8(ptr) Variable Function
+     70(txval21):     29(ptr) Variable Function
+     81(txval22):     44(ptr) Variable Function
+       96(psout):     95(ptr) Variable Function
+              13:          10 Load 12(g_tTex1df4)
+              17:          14 Load 16(g_sSamp)
+              19:          18 SampledImage 13 17
+              27:    7(fvec4) ImageSampleExplicitLod 19 23 Lod ConstOffset 24 26
+                              Store 9(txval10) 27
+              34:          31 Load 33(g_tTex1di4)
+              35:          14 Load 16(g_sSamp)
+              37:          36 SampledImage 34 35
+              41:   28(ivec4) ImageSampleExplicitLod 37 39 Lod ConstOffset 24 40
+                              Store 30(txval11) 41
+              49:          46 Load 48(g_tTex1du4)
+              50:          14 Load 16(g_sSamp)
+              52:          51 SampledImage 49 50
+              56:   43(ivec4) ImageSampleExplicitLod 52 54 Lod ConstOffset 24 55
+                              Store 45(txval12) 56
+              61:          58 Load 60(g_tTex2df4)
+              62:          14 Load 16(g_sSamp)
+              64:          63 SampledImage 61 62
+              69:    7(fvec4) ImageSampleExplicitLod 64 66 Lod ConstOffset 24 68
+                              Store 57(txval20) 69
+              74:          71 Load 73(g_tTex2di4)
+              75:          14 Load 16(g_sSamp)
+              77:          76 SampledImage 74 75
+              80:   28(ivec4) ImageSampleExplicitLod 77 79 Lod ConstOffset 24 68
+                              Store 70(txval21) 80
+              85:          82 Load 84(g_tTex2du4)
+              86:          14 Load 16(g_sSamp)
+              88:          87 SampledImage 85 86
+              93:   43(ivec4) ImageSampleExplicitLod 88 91 Lod ConstOffset 24 92
+                              Store 81(txval22) 93
+              99:      8(ptr) AccessChain 96(psout) 26
+                              Store 99 98
+             101:    100(ptr) AccessChain 96(psout) 40
+                              Store 101 97
+             102:94(PS_OUTPUT) Load 96(psout)
+                              ReturnValue 102
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.semicolons.frag.out b/Test/baseResults/hlsl.semicolons.frag.out
new file mode 100644
index 0000000..78a3a5a
--- /dev/null
+++ b/Test/baseResults/hlsl.semicolons.frag.out
@@ -0,0 +1,96 @@
+hlsl.semicolons.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Function Definition: MyFunc( (global void)
+0:2    Function Parameters: 
+0:8  Function Definition: MyFunc2( (global void)
+0:8    Function Parameters: 
+0:18  Function Definition: main( (global 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)
+0:16        color: direct index for structure (temp 4-component vector of float)
+0:16          'ps_output' (temp structure{temp 4-component vector of float color})
+0:16          Constant:
+0:16            0 (const int)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      Branch: Return with expression
+0:17        'ps_output' (temp structure{temp 4-component vector of float color})
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Function Definition: MyFunc( (global void)
+0:2    Function Parameters: 
+0:8  Function Definition: MyFunc2( (global void)
+0:8    Function Parameters: 
+0:18  Function Definition: main( (global 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)
+0:16        color: direct index for structure (temp 4-component vector of float)
+0:16          'ps_output' (temp structure{temp 4-component vector of float color})
+0:16          Constant:
+0:16            0 (const int)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      Branch: Return with expression
+0:17        'ps_output' (temp structure{temp 4-component vector of float color})
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 23
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 6  "MyFunc("
+                              Name 8  "MyFunc2("
+                              Name 12  "PS_OUTPUT"
+                              MemberName 12(PS_OUTPUT) 0  "color"
+                              Name 14  "ps_output"
+               2:             TypeVoid
+               3:             TypeFunction 2
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+   12(PS_OUTPUT):             TypeStruct 11(fvec4)
+              13:             TypePointer Function 12(PS_OUTPUT)
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:   10(float) Constant 1065353216
+              18:   11(fvec4) ConstantComposite 17 17 17 17
+              19:             TypePointer Function 11(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+   14(ps_output):     13(ptr) Variable Function
+              20:     19(ptr) AccessChain 14(ps_output) 16
+                              Store 20 18
+              21:12(PS_OUTPUT) Load 14(ps_output)
+                              ReturnValue 21
+                              FunctionEnd
+      6(MyFunc():           2 Function None 3
+               7:             Label
+                              Return
+                              FunctionEnd
+     8(MyFunc2():           2 Function None 3
+               9:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
new file mode 100755
index 0000000..e9b7389
--- /dev/null
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -0,0 +1,152 @@
+hlsl.shapeConv.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:14  Function Definition: PixelShaderFunction(vf4;f1; (global 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input' (in 4-component vector of float)
+0:2      'f' (in float)
+0:?     Sequence
+0:4      move second child to first child (temp 4-component vector of float)
+0:4        'v' (temp 4-component vector of float)
+0:4        Constant:
+0:4          1.000000
+0:4          1.000000
+0:4          1.000000
+0:4          1.000000
+0:5      move second child to first child (temp 4-component vector of float)
+0:5        'v' (temp 4-component vector of float)
+0:5        Constant:
+0:5          2.000000
+0:5          2.000000
+0:5          2.000000
+0:5          2.000000
+0:6      move second child to first child (temp 4-component vector of float)
+0:6        'v' (temp 4-component vector of float)
+0:6        Construct vec4 (temp 4-component vector of float)
+0:6          'f' (in float)
+0:8      move second child to first child (temp 3-component vector of float)
+0:8        'u' (temp 3-component vector of float)
+0:8        Constant:
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:9      move second child to first child (temp 3-component vector of float)
+0:9        'u' (temp 3-component vector of float)
+0:9        Constant:
+0:9          2.000000
+0:9          2.000000
+0:9          2.000000
+0:10      move second child to first child (temp 3-component vector of float)
+0:10        'u' (temp 3-component vector of float)
+0:10        Construct vec3 (temp 3-component vector of float)
+0:10          Construct float (temp float)
+0:10            'f' (in float)
+0:12      Branch: Return with expression
+0:12        'input' (in 4-component vector of float)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:14  Function Definition: PixelShaderFunction(vf4;f1; (global 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input' (in 4-component vector of float)
+0:2      'f' (in float)
+0:?     Sequence
+0:4      move second child to first child (temp 4-component vector of float)
+0:4        'v' (temp 4-component vector of float)
+0:4        Constant:
+0:4          1.000000
+0:4          1.000000
+0:4          1.000000
+0:4          1.000000
+0:5      move second child to first child (temp 4-component vector of float)
+0:5        'v' (temp 4-component vector of float)
+0:5        Constant:
+0:5          2.000000
+0:5          2.000000
+0:5          2.000000
+0:5          2.000000
+0:6      move second child to first child (temp 4-component vector of float)
+0:6        'v' (temp 4-component vector of float)
+0:6        Construct vec4 (temp 4-component vector of float)
+0:6          'f' (in float)
+0:8      move second child to first child (temp 3-component vector of float)
+0:8        'u' (temp 3-component vector of float)
+0:8        Constant:
+0:8          1.000000
+0:8          1.000000
+0:8          1.000000
+0:9      move second child to first child (temp 3-component vector of float)
+0:9        'u' (temp 3-component vector of float)
+0:9        Constant:
+0:9          2.000000
+0:9          2.000000
+0:9          2.000000
+0:10      move second child to first child (temp 3-component vector of float)
+0:10        'u' (temp 3-component vector of float)
+0:10        Construct vec3 (temp 3-component vector of float)
+0:10          Construct float (temp float)
+0:10            'f' (in float)
+0:12      Branch: Return with expression
+0:12        'input' (in 4-component vector of float)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 32
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 13  "PixelShaderFunction(vf4;f1;"
+                              Name 11  "input"
+                              Name 12  "f"
+                              Name 15  "v"
+                              Name 24  "u"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypePointer Function 6(float)
+              10:             TypeFunction 7(fvec4) 8(ptr) 9(ptr)
+              16:    6(float) Constant 1065353216
+              17:    7(fvec4) ConstantComposite 16 16 16 16
+              18:    6(float) Constant 1073741824
+              19:    7(fvec4) ConstantComposite 18 18 18 18
+              22:             TypeVector 6(float) 3
+              23:             TypePointer Function 22(fvec3)
+              25:   22(fvec3) ConstantComposite 16 16 16
+              26:   22(fvec3) ConstantComposite 18 18 18
+         4(main):           2 Function None 3
+               5:             Label
+                              FunctionEnd
+13(PixelShaderFunction(vf4;f1;):    7(fvec4) Function None 10
+       11(input):      8(ptr) FunctionParameter
+           12(f):      9(ptr) FunctionParameter
+              14:             Label
+           15(v):      8(ptr) Variable Function
+           24(u):     23(ptr) Variable Function
+                              Store 15(v) 17
+                              Store 15(v) 19
+              20:    6(float) Load 12(f)
+              21:    7(fvec4) CompositeConstruct 20 20 20 20
+                              Store 15(v) 21
+                              Store 24(u) 25
+                              Store 24(u) 26
+              27:    6(float) Load 12(f)
+              28:   22(fvec3) CompositeConstruct 27 27 27
+                              Store 24(u) 28
+              29:    7(fvec4) Load 11(input)
+                              ReturnValue 29
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index a70bba6..02eed4e 100755
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -1,29 +1,35 @@
 hlsl.struct.frag
+WARNING: 0:26: 'register' : ignoring shader_profile 
+WARNING: 0:27: 'register' : ignoring shader_profile 
+WARNING: 0:30: 'register' : ignoring shader_profile 
+
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:40  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
-0:31    Function Parameters: 
-0:31      'input' (in 4-component vector of float)
+0:43  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:34    Function Parameters: 
+0:34      'input' (in 4-component vector of float)
 0:?     Sequence
-0:36      Compare Equal (temp bool)
-0:36        's3' (temp structure{temp 3-component vector of bool b3})
-0:36        's3' (temp structure{temp 3-component vector of bool b3})
-0:37      move second child to first child (temp 4-component vector of float)
-0:37        i: direct index for structure (temp 4-component vector of float)
-0:37          's2' (global structure{temp 4-component vector of float i})
-0:37          Constant:
-0:37            0 (const int)
-0:37        ff4: direct index for structure (temp 4-component vector of float FragCoord)
-0:37          's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
-0:37          Constant:
-0:37            7 (const int)
-0:39      Branch: Return with expression
-0:39        'input' (in 4-component vector of float)
+0:39      Compare Equal (temp bool)
+0:39        's3' (temp structure{temp 3-component vector of bool b3})
+0:39        's3' (temp structure{temp 3-component vector of bool b3})
+0:40      move second child to first child (temp 4-component vector of float)
+0:40        i: direct index for structure (temp 4-component vector of float)
+0:40          's2' (global structure{temp 4-component vector of float i})
+0:40          Constant:
+0:40            0 (const int)
+0:40        ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord)
+0:40          's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
+0:40          Constant:
+0:40            7 (const int)
+0:42      Branch: Return with expression
+0:42        'input' (in 4-component vector of float)
 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:?     's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
+0:?     's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
+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)
 
 
 Linked fragment stage:
@@ -32,32 +38,34 @@
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:40  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
-0:31    Function Parameters: 
-0:31      'input' (in 4-component vector of float)
+0:43  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:34    Function Parameters: 
+0:34      'input' (in 4-component vector of float)
 0:?     Sequence
-0:36      Compare Equal (temp bool)
-0:36        's3' (temp structure{temp 3-component vector of bool b3})
-0:36        's3' (temp structure{temp 3-component vector of bool b3})
-0:37      move second child to first child (temp 4-component vector of float)
-0:37        i: direct index for structure (temp 4-component vector of float)
-0:37          's2' (global structure{temp 4-component vector of float i})
-0:37          Constant:
-0:37            0 (const int)
-0:37        ff4: direct index for structure (temp 4-component vector of float FragCoord)
-0:37          's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
-0:37          Constant:
-0:37            7 (const int)
-0:39      Branch: Return with expression
-0:39        'input' (in 4-component vector of float)
+0:39      Compare Equal (temp bool)
+0:39        's3' (temp structure{temp 3-component vector of bool b3})
+0:39        's3' (temp structure{temp 3-component vector of bool b3})
+0:40      move second child to first child (temp 4-component vector of float)
+0:40        i: direct index for structure (temp 4-component vector of float)
+0:40          's2' (global structure{temp 4-component vector of float i})
+0:40          Constant:
+0:40            0 (const int)
+0:40        ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord)
+0:40          's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
+0:40          Constant:
+0:40            7 (const int)
+0:42      Branch: Return with expression
+0:42        'input' (in 4-component vector of float)
 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:?     's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
+0:?     's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
+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)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 40
+// Id's are bound by 44
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -89,8 +97,14 @@
                               MemberName 37(myS) 2  "a"
                               MemberName 37(myS) 3  "d"
                               Name 39  "s1"
+                              Name 42  "ff5"
+                              Name 43  "ff6"
                               MemberDecorate 25 4 BuiltIn FrontFacing
                               MemberDecorate 25 7 BuiltIn FragCoord
+                              Decorate 42(ff5) Offset 20
+                              Decorate 42(ff5) Binding 5
+                              Decorate 43(ff6) Offset 36
+                              Decorate 43(ff6) Binding 8
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeBool
@@ -115,6 +129,10 @@
          37(myS):             TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
               38:             TypePointer Private 37(myS)
           39(s1):     38(ptr) Variable Private
+              40:             TypeVector 17(float) 3
+              41:             TypePointer Private 40(fvec3)
+         42(ff5):     41(ptr) Variable Private
+         43(ff6):     41(ptr) Variable Private
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
           10(s3):      9(ptr) Variable Function
diff --git a/Test/baseResults/numeral.frag.out b/Test/baseResults/numeral.frag.out
index 6f5595c..e5b2041 100644
--- a/Test/baseResults/numeral.frag.out
+++ b/Test/baseResults/numeral.frag.out
@@ -7,8 +7,8 @@
 ERROR: 0:18: '' : octal literal too big 
 ERROR: 0:23: '' : octal literal digit too large 
 ERROR: 0:24: '' : octal literal digit too large 
-ERROR: 0:49: '' : bad digit in hexidecimal literal 
-ERROR: 0:50: '' : hexidecimal literal too big 
+ERROR: 0:49: '' : bad digit in hexadecimal literal 
+ERROR: 0:50: '' : hexadecimal literal too big 
 ERROR: 0:88: '' : float literal needs a decimal point or exponent 
 ERROR: 0:98: '' : numeric literal too big 
 ERROR: 0:101: '' : numeric literal too big 
diff --git a/Test/baseResults/pointCoord.frag.out b/Test/baseResults/pointCoord.frag.out
index 633d8b9..5d53aea 100644
--- a/Test/baseResults/pointCoord.frag.out
+++ b/Test/baseResults/pointCoord.frag.out
@@ -14,7 +14,7 @@
 0:9        true case
 0:10        move second child to first child (temp highp 4-component vector of float)
 0:10          'color' (temp highp 4-component vector of float)
-0:10          texture (global lowp 4-component vector of float)
+0:10          texture (global lowp 4-component vector of float, operation at mediump)
 0:10            'sampler' (uniform lowp sampler2D)
 0:10            'gl_PointCoord' (gl_PointCoord mediump 2-component vector of float PointCoord)
 0:9        false case
@@ -50,7 +50,7 @@
 0:9        true case
 0:10        move second child to first child (temp highp 4-component vector of float)
 0:10          'color' (temp highp 4-component vector of float)
-0:10          texture (global lowp 4-component vector of float)
+0:10          texture (global lowp 4-component vector of float, operation at mediump)
 0:10            'sampler' (uniform lowp sampler2D)
 0:10            'gl_PointCoord' (gl_PointCoord mediump 2-component vector of float PointCoord)
 0:9        false case
diff --git a/Test/baseResults/preprocessor.simple.vert.out b/Test/baseResults/preprocessor.simple.vert.out
index 8737bc8..8cbabda 100644
--- a/Test/baseResults/preprocessor.simple.vert.out
+++ b/Test/baseResults/preprocessor.simple.vert.out
@@ -19,5 +19,12 @@
   gl_Position = vec4(1);
   gl_Position = vec4(1, 2);
   gl_Position = vec4(fn(3));
+  []. ++ --
+  + - * % / - ! ~
+  << >> < > <= >=
+  == !=
+  & ^ | && ^^ || ? :
+  += -= *= /= %= <<= >>= &= |= ^=
+  1.2 2E10 5u - 5 lf
 }
 
diff --git a/Test/baseResults/specExamples.frag.out b/Test/baseResults/specExamples.frag.out
index 464a279..848839c 100644
--- a/Test/baseResults/specExamples.frag.out
+++ b/Test/baseResults/specExamples.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: '=' :  cannot convert from 'const uint' to 'global int'
 ERROR: 0:20: '' : numeric literal too big 
-ERROR: 0:21: '' : hexidecimal literal too big 
+ERROR: 0:21: '' : hexadecimal literal too big 
 ERROR: 0:37: 'view' : redefinition 
 ERROR: 0:63: 'invariant' : can only apply to an output 
 ERROR: 0:68: 'lightPosition' : redefinition 
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
new file mode 100755
index 0000000..6b92206
--- /dev/null
+++ b/Test/baseResults/spv.swizzleInversion.frag.out
@@ -0,0 +1,81 @@
+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
+
+                              Capability Shader
+                              Capability InterpolationFunction
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 12 37
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "v43"
+                              Name 12  "in4"
+                              Name 17  "v42"
+                              Name 23  "v44"
+                              Name 29  "v41"
+                              Name 35  "v33"
+                              Name 37  "in3"
+                              Name 40  "v32"
+                              Name 43  "v31"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 3
+               8:             TypePointer Function 7(fvec3)
+              10:             TypeVector 6(float) 4
+              11:             TypePointer Input 10(fvec4)
+         12(in4):     11(ptr) Variable Input
+              15:             TypeVector 6(float) 2
+              16:             TypePointer Function 15(fvec2)
+              18:             TypeInt 32 1
+              19:     18(int) Constant 1
+              22:             TypePointer Function 10(fvec4)
+              24:    6(float) Constant 1073741824
+              25:   15(fvec2) ConstantComposite 24 24
+              28:             TypePointer Function 6(float)
+              30:             TypeInt 32 0
+              31:     30(int) Constant 1
+              32:             TypePointer Input 6(float)
+              36:             TypePointer Input 7(fvec3)
+         37(in3):     36(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+          9(v43):      8(ptr) Variable Function
+         17(v42):     16(ptr) Variable Function
+         23(v44):     22(ptr) Variable Function
+         29(v41):     28(ptr) Variable Function
+         35(v33):      8(ptr) Variable Function
+         40(v32):     16(ptr) Variable Function
+         43(v31):     28(ptr) Variable Function
+              13:   10(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 12(in4)
+              14:    7(fvec3) VectorShuffle 13 13 3 2 0
+                              Store 9(v43) 14
+              20:   10(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 12(in4) 19
+              21:   15(fvec2) VectorShuffle 20 20 2 0
+                              Store 17(v42) 21
+              26:   10(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 12(in4) 25
+              27:   10(fvec4) VectorShuffle 26 26 2 1 0 3
+                              Store 23(v44) 27
+              33:     32(ptr) AccessChain 12(in4) 31
+              34:    6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 33 25
+                              Store 29(v41) 34
+              38:    7(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 37(in3)
+              39:    7(fvec3) VectorShuffle 38 38 1 2 0
+                              Store 35(v33) 39
+              41:    7(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 37(in3) 19
+              42:   15(fvec2) VectorShuffle 41 41 2 0
+                              Store 40(v32) 42
+              44:     32(ptr) AccessChain 12(in4) 31
+              45:    6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 44 25
+                              Store 43(v31) 45
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/tokenLength.vert.out b/Test/baseResults/tokenLength.vert.out
index 26dabf0..11bdd4b 100644
--- a/Test/baseResults/tokenLength.vert.out
+++ b/Test/baseResults/tokenLength.vert.out
@@ -2,10 +2,10 @@
 ERROR: 0:9: '' : numeric literal too big 
 ERROR: 0:10: '' : numeric literal too big 
 ERROR: 0:13: '' : octal literal too big 
-ERROR: 0:14: '' : hexidecimal literal too big 
+ERROR: 0:14: '' : hexadecimal literal too big 
 ERROR: 0:23: '' : float literal too long 
 ERROR: 0:32: '' : name too long 
-ERROR: 0:33: '' : hexidecimal literal too big 
+ERROR: 0:33: '' : hexadecimal literal too big 
 ERROR: 0:34: '' : numeric literal too long 
 ERROR: 0:34: '' : octal literal too big 
 ERROR: 0:35: '' : numeric literal too long 
diff --git a/Test/baseResults/uint.frag.out b/Test/baseResults/uint.frag.out
index dbe9578..1ee2825 100644
--- a/Test/baseResults/uint.frag.out
+++ b/Test/baseResults/uint.frag.out
@@ -113,7 +113,7 @@
 0:55        true case
 0:56        move second child to first child (temp mediump 4-component vector of uint)
 0:56          'c' (out mediump 4-component vector of uint)
-0:56          texture (global lowp 4-component vector of uint)
+0:56          texture (global lowp 4-component vector of uint, operation at highp)
 0:56            'usampler' (uniform lowp usampler2D)
 0:56            'tc' (smooth in highp 2-component vector of float)
 0:57      Test condition and select (temp void)
@@ -124,7 +124,7 @@
 0:57        true case
 0:58        move second child to first child (temp mediump 4-component vector of uint)
 0:58          'c' (out mediump 4-component vector of uint)
-0:58          texture (global lowp 4-component vector of uint)
+0:58          texture (global lowp 4-component vector of uint, operation at highp)
 0:58            'usampler' (uniform lowp usampler2D)
 0:58            add (temp highp 2-component vector of float)
 0:58              'tc' (smooth in highp 2-component vector of float)
@@ -139,7 +139,7 @@
 0:59        true case
 0:60        move second child to first child (temp mediump 4-component vector of uint)
 0:60          'c' (out mediump 4-component vector of uint)
-0:60          texture (global lowp 4-component vector of uint)
+0:60          texture (global lowp 4-component vector of uint, operation at highp)
 0:60            'usampler' (uniform lowp usampler2D)
 0:60            subtract (temp highp 2-component vector of float)
 0:60              'tc' (smooth in highp 2-component vector of float)
@@ -412,7 +412,7 @@
 0:55        true case
 0:56        move second child to first child (temp mediump 4-component vector of uint)
 0:56          'c' (out mediump 4-component vector of uint)
-0:56          texture (global lowp 4-component vector of uint)
+0:56          texture (global lowp 4-component vector of uint, operation at highp)
 0:56            'usampler' (uniform lowp usampler2D)
 0:56            'tc' (smooth in highp 2-component vector of float)
 0:57      Test condition and select (temp void)
@@ -423,7 +423,7 @@
 0:57        true case
 0:58        move second child to first child (temp mediump 4-component vector of uint)
 0:58          'c' (out mediump 4-component vector of uint)
-0:58          texture (global lowp 4-component vector of uint)
+0:58          texture (global lowp 4-component vector of uint, operation at highp)
 0:58            'usampler' (uniform lowp usampler2D)
 0:58            add (temp highp 2-component vector of float)
 0:58              'tc' (smooth in highp 2-component vector of float)
@@ -438,7 +438,7 @@
 0:59        true case
 0:60        move second child to first child (temp mediump 4-component vector of uint)
 0:60          'c' (out mediump 4-component vector of uint)
-0:60          texture (global lowp 4-component vector of uint)
+0:60          texture (global lowp 4-component vector of uint, operation at highp)
 0:60            'usampler' (uniform lowp usampler2D)
 0:60            subtract (temp highp 2-component vector of float)
 0:60              'tc' (smooth in highp 2-component vector of float)
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index fe8b045..0132759 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -33,7 +33,12 @@
 ERROR: 0:69: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan 
 ERROR: 0:73: 'texture' : no matching overloaded function found 
 ERROR: 0:74: 'imageStore' : no matching overloaded function found 
-ERROR: 33 compilation errors.  No code generated.
+ERROR: 0:91: 'call argument' : sampler constructor must appear at point of use 
+ERROR: 0:92: 'call argument' : sampler constructor must appear at point of use 
+ERROR: 0:93: ',' : sampler constructor must appear at point of use 
+ERROR: 0:94: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type 'temp sampler2D' and a right operand of type 'temp sampler2D' (or there is no acceptable conversion)
+ERROR: 0:94: 'call argument' : sampler constructor must appear at point of use 
+ERROR: 38 compilation errors.  No code generated.
 
 
 
diff --git a/Test/cppBad.vert b/Test/cppBad.vert
new file mode 100644
index 0000000..49600f9
--- /dev/null
+++ b/Test/cppBad.vert
@@ -0,0 +1,5 @@
+#define m#0#

+#if m

+

+#define n()

+int n"
\ No newline at end of file
diff --git a/Test/hlsl.buffer.frag b/Test/hlsl.buffer.frag
new file mode 100644
index 0000000..e01e4fc
--- /dev/null
+++ b/Test/hlsl.buffer.frag
@@ -0,0 +1,28 @@
+cbuffer {
+    float4 v1;
+};
+
+tbuffer {
+    float4 v2;
+};
+
+cbuffer cbufName : register(b2) {
+    float4 v3;
+    int i3 : packoffset(c1.y);
+};
+
+tbuffer tbufName : register(b8) {
+    float4 v4 : packoffset(c1);
+    int i4    : packoffset(c3);
+    float f1  : packoffset(c3.w);
+    float f3  : packoffset(c4.x);
+    float f4  : packoffset(c4.y);
+    float f5  : packoffset(c4.z);
+    float f6  : packoffset(c);
+    float f7;
+};
+
+float4 PixelShaderFunction(float4 input) : COLOR0
+{
+    return input + v1 + v2 + v3 + v4;
+}
diff --git a/Test/hlsl.calculatelod.dx10.frag b/Test/hlsl.calculatelod.dx10.frag
new file mode 100644
index 0000000..0fb7607
--- /dev/null
+++ b/Test/hlsl.calculatelod.dx10.frag
@@ -0,0 +1,44 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1DArray          g_tTex1df4a : register(t1);
+
+uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // LOD queries do not pass array level in coordinate.
+   float txval10 = g_tTex1df4a . CalculateLevelOfDetail(g_sSamp, 0.1);
+   float txval11 = g_tTex1di4a . CalculateLevelOfDetail(g_sSamp, 0.2);
+   float txval12 = g_tTex1du4a . CalculateLevelOfDetail(g_sSamp, 0.3);
+
+   float txval20 = g_tTex2df4a . CalculateLevelOfDetail(g_sSamp, float2(0.1, 0.2));
+   float txval21 = g_tTex2di4a . CalculateLevelOfDetail(g_sSamp, float2(0.3, 0.4));
+   float txval22 = g_tTex2du4a . CalculateLevelOfDetail(g_sSamp, float2(0.5, 0.6));
+
+   float txval40 = g_tTexcdf4a . CalculateLevelOfDetail(g_sSamp, float3(0.1, 0.2, 0.3));
+   float txval41 = g_tTexcdi4a . CalculateLevelOfDetail(g_sSamp, float3(0.4, 0.5, 0.6));
+   float txval42 = g_tTexcdu4a . CalculateLevelOfDetail(g_sSamp, float3(0.7, 0.8, 0.9));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.calculatelodunclamped.dx10.frag b/Test/hlsl.calculatelodunclamped.dx10.frag
new file mode 100644
index 0000000..4c79aed
--- /dev/null
+++ b/Test/hlsl.calculatelodunclamped.dx10.frag
@@ -0,0 +1,44 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1DArray          g_tTex1df4a : register(t1);
+
+uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // LOD queries do not pass array level in coordinate.
+   float txval10 = g_tTex1df4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.1);
+   float txval11 = g_tTex1di4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.2);
+   float txval12 = g_tTex1du4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.3);
+
+   float txval20 = g_tTex2df4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.1, 0.2));
+   float txval21 = g_tTex2di4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.3, 0.4));
+   float txval22 = g_tTex2du4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.5, 0.6));
+
+   float txval40 = g_tTexcdf4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.1, 0.2, 0.3));
+   float txval41 = g_tTexcdi4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.4, 0.5, 0.6));
+   float txval42 = g_tTexcdu4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.7, 0.8, 0.9));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.conditional.frag b/Test/hlsl.conditional.frag
new file mode 100644
index 0000000..128c593
--- /dev/null
+++ b/Test/hlsl.conditional.frag
@@ -0,0 +1,16 @@
+float4 PixelShaderFunction(float4 input) : COLOR0
+{
+    int a = 1 < 2 ? 3 < 4 ? 5 : 6 : 7;
+    int b = 1 < 2 ? 3 > 4 ? 5 : 6 : 7;
+    int c = 1 > 2 ? 3 > 4 ? 5 : 6 : 7;
+    int d = 1 > 2 ? 3 < 4 ? 5 : 6 : 7;
+    float4 ret = a * input + 
+                 b * input +
+                 c * input +
+                 d * input;
+    int e;
+    e = a = b ? c = d : 10, b = a ? d = c : 11;
+    float4 f;
+    f = ret.x < input.y ? c * input : d * input;
+    return e * ret + f;
+}
diff --git a/Test/hlsl.constructexpr.frag b/Test/hlsl.constructexpr.frag
new file mode 100644
index 0000000..7048f62
--- /dev/null
+++ b/Test/hlsl.constructexpr.frag
@@ -0,0 +1,17 @@
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    // Evaluates to a sequence: 3, 4, 5, 6, 7, 8, and a float2(9,10), float2(11,12) sequence
+    (int(3));
+    (int(3) + int(1));
+    (int(3) + int(1) + int(1));
+    (((int(6))));
+    (int(7.0));
+    ((int((2)) ? 8 : 8));
+    (float2(9, 10), float2(11, 12));
+
+    PS_OUTPUT ps_output;
+    ps_output.color = 1.0;
+    return ps_output;
+}
diff --git a/Test/hlsl.float4.frag b/Test/hlsl.float4.frag
index df87122..5ae70db 100644
--- a/Test/hlsl.float4.frag
+++ b/Test/hlsl.float4.frag
@@ -2,8 +2,8 @@
 
 bool ff1 : SV_IsFrontFace;
 float4 ff2 : packoffset(c0.y);
-float4 ff3 : packoffset(c0.y) : register(ps_5_0, s[0]) ;
-float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s[0]) <int bambam=30;> ;
+float4 ff3 : packoffset(c0.y) : register(ps_5_0, s0) ;
+float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s1) <int bambam=30;> ;
 
 float4 ShaderFunction(float4 input) : COLOR0
 {
diff --git a/Test/hlsl.gather.array.dx10.frag b/Test/hlsl.gather.array.dx10.frag
new file mode 100644
index 0000000..788c333
--- /dev/null
+++ b/Test/hlsl.gather.array.dx10.frag
@@ -0,0 +1,43 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1DArray          g_tTex1df4a : register(t1);
+
+uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // No 1D gathers
+
+   float4 txval20 = g_tTex2df4a . Gather(g_sSamp, float3(0.1, 0.2, 0.3));
+   int4   txval21 = g_tTex2di4a . Gather(g_sSamp, float3(0.3, 0.4, 0.5));
+   uint4  txval22 = g_tTex2du4a . Gather(g_sSamp, float3(0.5, 0.6, 0.7));
+
+   // no 3D gathers
+
+   float4 txval40 = g_tTexcdf4a . Gather(g_sSamp, float4(0.1, 0.2, 0.3, 0.4));
+   int4   txval41 = g_tTexcdi4a . Gather(g_sSamp, float4(0.4, 0.5, 0.6, 0.7));
+   uint4  txval42 = g_tTexcdu4a . Gather(g_sSamp, float4(0.7, 0.8, 0.9, 1.0));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gather.basic.dx10.frag b/Test/hlsl.gather.basic.dx10.frag
new file mode 100644
index 0000000..be0cd31
--- /dev/null
+++ b/Test/hlsl.gather.basic.dx10.frag
@@ -0,0 +1,48 @@
+SamplerState       g_sSamp : register(s0);
+uniform sampler2D          g_sSamp2d;
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // no 1D gathers
+
+   float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2));
+   int4   txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4));
+   uint4  txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6));
+
+   // no 3D gathers
+
+   float4 txval40 = g_tTexcdf4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3));
+   int4   txval41 = g_tTexcdi4 . Gather(g_sSamp, float3(0.4, 0.5, 0.6));
+   uint4  txval42 = g_tTexcdu4 . Gather(g_sSamp, float3(0.7, 0.8, 0.9));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gather.basic.dx10.vert b/Test/hlsl.gather.basic.dx10.vert
new file mode 100644
index 0000000..4996f18
--- /dev/null
+++ b/Test/hlsl.gather.basic.dx10.vert
@@ -0,0 +1,46 @@
+SamplerState       g_sSamp : register(s0);
+uniform sampler2D          g_sSamp2d;
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct VS_OUTPUT
+{
+    float4 Pos : SV_Position;
+};
+
+VS_OUTPUT main()
+{
+   VS_OUTPUT vsout;
+
+   // no 1D gathers
+
+   float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2));
+   int4   txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4));
+   uint4  txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6));
+
+   // no 3D gathers
+
+   float4 txval40 = g_tTexcdf4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3));
+   int4   txval41 = g_tTexcdi4 . Gather(g_sSamp, float3(0.4, 0.5, 0.6));
+   uint4  txval42 = g_tTexcdu4 . Gather(g_sSamp, float3(0.7, 0.8, 0.9));
+
+   vsout.Pos = float4(0,0,0,0);
+
+   return vsout;
+}
diff --git a/Test/hlsl.gather.offset.dx10.frag b/Test/hlsl.gather.offset.dx10.frag
new file mode 100644
index 0000000..4d095c0
--- /dev/null
+++ b/Test/hlsl.gather.offset.dx10.frag
@@ -0,0 +1,44 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // no 1D Gathers
+
+   float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2), int2(1,0));
+   int4   txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4), int2(1,1));
+   uint4  txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6), int2(1,-1));
+
+   // no 3D gathers
+   // No Cube offset gathers
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gather.offsetarray.dx10.frag b/Test/hlsl.gather.offsetarray.dx10.frag
new file mode 100644
index 0000000..5cc9252
--- /dev/null
+++ b/Test/hlsl.gather.offsetarray.dx10.frag
@@ -0,0 +1,36 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1DArray          g_tTex1df4a : register(t1);
+
+uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
+Texture1DArray <int4>   g_tTex1di4;
+Texture1DArray <uint4>  g_tTex1du4;
+
+Texture2DArray <float4> g_tTex2df4;
+Texture2DArray <int4>   g_tTex2di4;
+Texture2DArray <uint4>  g_tTex2du4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // No 1D gathers
+
+   float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3), int2(1,0));
+   int4   txval21 = g_tTex2di4 . Gather(g_sSamp, float3(0.3, 0.4, 0.4), int2(1,1));
+   uint4  txval22 = g_tTex2du4 . Gather(g_sSamp, float3(0.5, 0.6, 0.7), int2(1,-1));
+
+   // No 3D gathers
+   // No Cube offset gathers
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gatherRGBA.array.dx10.frag b/Test/hlsl.gatherRGBA.array.dx10.frag
new file mode 100644
index 0000000..279b6d6
--- /dev/null
+++ b/Test/hlsl.gatherRGBA.array.dx10.frag
@@ -0,0 +1,71 @@
+SamplerState       g_sSamp : register(s0);
+uniform sampler2D          g_sSamp2d;
+
+uniform Texture1DArray <float4> g_tTex1df4a : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform float  c1;
+uniform float2 c2;
+uniform float3 c3;
+uniform float4 c4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // no 1D gathers
+
+   float4 txval00 = g_tTex2df4a . GatherRed(g_sSamp, c3);
+   int4   txval01 = g_tTex2di4a . GatherRed(g_sSamp, c3);
+   uint4  txval02 = g_tTex2du4a . GatherRed(g_sSamp, c3);
+
+   float4 txval10 = g_tTex2df4a . GatherGreen(g_sSamp, c3);
+   int4   txval11 = g_tTex2di4a . GatherGreen(g_sSamp, c3);
+   uint4  txval12 = g_tTex2du4a . GatherGreen(g_sSamp, c3);
+
+   float4 txval20 = g_tTex2df4a . GatherBlue(g_sSamp, c3);
+   int4   txval21 = g_tTex2di4a . GatherBlue(g_sSamp, c3);
+   uint4  txval22 = g_tTex2du4a . GatherBlue(g_sSamp, c3);
+
+   float4 txval30 = g_tTex2df4a . GatherAlpha(g_sSamp, c3);
+   int4   txval31 = g_tTex2di4a . GatherAlpha(g_sSamp, c3);
+   uint4  txval32 = g_tTex2du4a . GatherAlpha(g_sSamp, c3);
+
+   // no 3D gathers
+
+   float4 txval40 = g_tTexcdf4a . GatherRed(g_sSamp, c4);
+   int4   txval41 = g_tTexcdi4a . GatherRed(g_sSamp, c4);
+   uint4  txval42 = g_tTexcdu4a . GatherRed(g_sSamp, c4);
+
+   float4 txval50 = g_tTexcdf4a . GatherGreen(g_sSamp, c4);
+   int4   txval51 = g_tTexcdi4a . GatherGreen(g_sSamp, c4);
+   uint4  txval52 = g_tTexcdu4a . GatherGreen(g_sSamp, c4);
+
+   float4 txval60 = g_tTexcdf4a . GatherBlue(g_sSamp, c4);
+   int4   txval61 = g_tTexcdi4a . GatherBlue(g_sSamp, c4);
+   uint4  txval62 = g_tTexcdu4a . GatherBlue(g_sSamp, c4);
+
+   float4 txval70 = g_tTexcdf4a . GatherAlpha(g_sSamp, c4);
+   int4   txval71 = g_tTexcdi4a . GatherAlpha(g_sSamp, c4);
+   uint4  txval72 = g_tTexcdu4a . GatherAlpha(g_sSamp, c4);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gatherRGBA.basic.dx10.frag b/Test/hlsl.gatherRGBA.basic.dx10.frag
new file mode 100644
index 0000000..17fae19
--- /dev/null
+++ b/Test/hlsl.gatherRGBA.basic.dx10.frag
@@ -0,0 +1,77 @@
+SamplerState       g_sSamp : register(s0);
+uniform sampler2D          g_sSamp2d;
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform float  c1;
+uniform float2 c2;
+uniform float3 c3;
+uniform float4 c4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // no 1D gathers
+
+   float4 txval00 = g_tTex2df4 . GatherRed(g_sSamp, c2);
+   int4   txval01 = g_tTex2di4 . GatherRed(g_sSamp, c2);
+   uint4  txval02 = g_tTex2du4 . GatherRed(g_sSamp, c2);
+
+   float4 txval10 = g_tTex2df4 . GatherGreen(g_sSamp, c2);
+   int4   txval11 = g_tTex2di4 . GatherGreen(g_sSamp, c2);
+   uint4  txval12 = g_tTex2du4 . GatherGreen(g_sSamp, c2);
+
+   float4 txval20 = g_tTex2df4 . GatherBlue(g_sSamp, c2);
+   int4   txval21 = g_tTex2di4 . GatherBlue(g_sSamp, c2);
+   uint4  txval22 = g_tTex2du4 . GatherBlue(g_sSamp, c2);
+
+   float4 txval30 = g_tTex2df4 . GatherAlpha(g_sSamp, c2);
+   int4   txval31 = g_tTex2di4 . GatherAlpha(g_sSamp, c2);
+   uint4  txval32 = g_tTex2du4 . GatherAlpha(g_sSamp, c2);
+
+   // no 3D gathers
+
+   float4 txval40 = g_tTexcdf4 . GatherRed(g_sSamp, c3);
+   int4   txval41 = g_tTexcdi4 . GatherRed(g_sSamp, c3);
+   uint4  txval42 = g_tTexcdu4 . GatherRed(g_sSamp, c3);
+
+   float4 txval50 = g_tTexcdf4 . GatherGreen(g_sSamp, c3);
+   int4   txval51 = g_tTexcdi4 . GatherGreen(g_sSamp, c3);
+   uint4  txval52 = g_tTexcdu4 . GatherGreen(g_sSamp, c3);
+
+   float4 txval60 = g_tTexcdf4 . GatherBlue(g_sSamp, c3);
+   int4   txval61 = g_tTexcdi4 . GatherBlue(g_sSamp, c3);
+   uint4  txval62 = g_tTexcdu4 . GatherBlue(g_sSamp, c3);
+
+   float4 txval70 = g_tTexcdf4 . GatherAlpha(g_sSamp, c3);
+   int4   txval71 = g_tTexcdi4 . GatherAlpha(g_sSamp, c3);
+   uint4  txval72 = g_tTexcdu4 . GatherAlpha(g_sSamp, c3);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gatherRGBA.offset.dx10.frag b/Test/hlsl.gatherRGBA.offset.dx10.frag
new file mode 100644
index 0000000..a8909b4
--- /dev/null
+++ b/Test/hlsl.gatherRGBA.offset.dx10.frag
@@ -0,0 +1,116 @@
+SamplerState       g_sSamp : register(s0);
+uniform sampler2D          g_sSamp2d;
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform float  c1;
+uniform float2 c2;
+uniform float3 c3;
+uniform float4 c4;
+
+uniform int  o1;
+uniform int2 o2;
+uniform int3 o3;
+uniform int4 o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   uint status;
+
+   // no 1D gathers
+
+   float4 txval001 = g_tTex2df4 . GatherRed(g_sSamp, c2, o2);
+   int4   txval011 = g_tTex2di4 . GatherRed(g_sSamp, c2, o2);
+   uint4  txval021 = g_tTex2du4 . GatherRed(g_sSamp, c2, o2);
+
+   float4 txval004 = g_tTex2df4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2);
+   int4   txval014 = g_tTex2di4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2);
+   uint4  txval024 = g_tTex2du4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2);
+   
+   // float4 txval00s = g_tTex2df4 . GatherRed(g_sSamp, c2, o2, status);
+   // int4   txval01s = g_tTex2di4 . GatherRed(g_sSamp, c2, o2, status);
+   // uint4  txval02s = g_tTex2du4 . GatherRed(g_sSamp, c2, o2, status);
+
+   // float4 txval004s = g_tTex2df4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2, status);
+   // int4   txval014s = g_tTex2di4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2, status);
+   // uint4  txval024s = g_tTex2du4 . GatherRed(g_sSamp, c2, o2, o2, o2, o2, status);
+
+   float4 txval101 = g_tTex2df4 . GatherGreen(g_sSamp, c2, o2);
+   int4   txval111 = g_tTex2di4 . GatherGreen(g_sSamp, c2, o2);
+   uint4  txval121 = g_tTex2du4 . GatherGreen(g_sSamp, c2, o2);
+
+   float4 txval104 = g_tTex2df4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2);
+   int4   txval114 = g_tTex2di4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2);
+   uint4  txval124 = g_tTex2du4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2);
+
+   // float4 txval10s = g_tTex2df4 . GatherGreen(g_sSamp, c2, o2, status);
+   // int4   txval11s = g_tTex2di4 . GatherGreen(g_sSamp, c2, o2, status);
+   // uint4  txval12s = g_tTex2du4 . GatherGreen(g_sSamp, c2, o2, status);
+
+   // float4 txval104 = g_tTex2df4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2, status);
+   // int4   txval114 = g_tTex2di4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2, status);
+   // uint4  txval124 = g_tTex2du4 . GatherGreen(g_sSamp, c2, o2, o2, o2, o2, status);
+
+   float4 txval201 = g_tTex2df4 . GatherBlue(g_sSamp, c2, o2);
+   int4   txval211 = g_tTex2di4 . GatherBlue(g_sSamp, c2, o2);
+   uint4  txval221 = g_tTex2du4 . GatherBlue(g_sSamp, c2, o2);
+
+   float4 txval204 = g_tTex2df4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2);
+   int4   txval214 = g_tTex2di4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2);
+   uint4  txval224 = g_tTex2du4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2);
+
+   // float4 txval204s = g_tTex2df4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2, status);
+   // int4   txval214s = g_tTex2di4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2, status);
+   // uint4  txval224s = g_tTex2du4 . GatherBlue(g_sSamp, c2, o2, o2, o2, o2, status);
+
+   // float4 txval20s = g_tTex2df4 . GatherBlue(g_sSamp, c2, o2, status);
+   // int4   txval21s = g_tTex2di4 . GatherBlue(g_sSamp, c2, o2, status);
+   // uint4  txval22s = g_tTex2du4 . GatherBlue(g_sSamp, c2, o2, status);
+
+   float4 txval301 = g_tTex2df4 . GatherAlpha(g_sSamp, c2, o2);
+   int4   txval311 = g_tTex2di4 . GatherAlpha(g_sSamp, c2, o2);
+   uint4  txval321 = g_tTex2du4 . GatherAlpha(g_sSamp, c2, o2);
+
+   float4 txval304 = g_tTex2df4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2);
+   int4   txval314 = g_tTex2di4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2);
+   uint4  txval324 = g_tTex2du4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2);
+
+   // float4 txval304s = g_tTex2df4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2, status);
+   // int4   txval314s = g_tTex2di4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2, status);
+   // uint4  txval324s = g_tTex2du4 . GatherAlpha(g_sSamp, c2, o2, o2, o2, o2, status);
+
+   // float4 txval30s = g_tTex2df4 . GatherAlpha(g_sSamp, c2, o2, status);
+   // int4   txval31s = g_tTex2di4 . GatherAlpha(g_sSamp, c2, o2, status);
+   // uint4  txval32s = g_tTex2du4 . GatherAlpha(g_sSamp, c2, o2, status);
+
+   // no 3D gathers with offset
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gatherRGBA.offsetarray.dx10.frag b/Test/hlsl.gatherRGBA.offsetarray.dx10.frag
new file mode 100644
index 0000000..ca32f56
--- /dev/null
+++ b/Test/hlsl.gatherRGBA.offsetarray.dx10.frag
@@ -0,0 +1,110 @@
+SamplerState       g_sSamp : register(s0);
+uniform sampler2D          g_sSamp2d;
+
+uniform Texture1DArray <float4> g_tTex1df4a : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform float  c1;
+uniform float2 c2;
+uniform float3 c3;
+uniform float4 c4;
+
+uniform int  o1;
+uniform int2 o2;
+uniform int3 o3;
+uniform int4 o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   uint status;
+
+   // no 1D gathers
+
+   float4 txval001 = g_tTex2df4a . GatherRed(g_sSamp, c3, o2);
+   int4   txval011 = g_tTex2di4a . GatherRed(g_sSamp, c3, o2);
+   uint4  txval021 = g_tTex2du4a . GatherRed(g_sSamp, c3, o2);
+
+   float4 txval004 = g_tTex2df4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2);
+   int4   txval014 = g_tTex2di4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2);
+   uint4  txval024 = g_tTex2du4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2);
+   
+   // float4 txval00s = g_tTex2df4a . GatherRed(g_sSamp, c3, o2, status);
+   // int4   txval01s = g_tTex2di4a . GatherRed(g_sSamp, c3, o2, status);
+   // uint4  txval02s = g_tTex2du4a . GatherRed(g_sSamp, c3, o2, status);
+
+   // float4 txval004s = g_tTex2df4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2, status);
+   // int4   txval014s = g_tTex2di4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2, status);
+   // uint4  txval024s = g_tTex2du4a . GatherRed(g_sSamp, c3, o2, o2, o2, o2, status);
+
+   float4 txval101 = g_tTex2df4a . GatherGreen(g_sSamp, c3, o2);
+   int4   txval111 = g_tTex2di4a . GatherGreen(g_sSamp, c3, o2);
+   uint4  txval121 = g_tTex2du4a . GatherGreen(g_sSamp, c3, o2);
+
+   float4 txval104 = g_tTex2df4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2);
+   int4   txval114 = g_tTex2di4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2);
+   uint4  txval124 = g_tTex2du4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2);
+
+   // float4 txval10s = g_tTex2df4a . GatherGreen(g_sSamp, c3, o2, status);
+   // int4   txval11s = g_tTex2di4a . GatherGreen(g_sSamp, c3, o2, status);
+   // uint4  txval12s = g_tTex2du4a . GatherGreen(g_sSamp, c3, o2, status);
+
+   // float4 txval104 = g_tTex2df4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2, status);
+   // int4   txval114 = g_tTex2di4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2, status);
+   // uint4  txval124 = g_tTex2du4a . GatherGreen(g_sSamp, c3, o2, o2, o2, o2, status);
+
+   float4 txval201 = g_tTex2df4a . GatherBlue(g_sSamp, c3, o2);
+   int4   txval211 = g_tTex2di4a . GatherBlue(g_sSamp, c3, o2);
+   uint4  txval221 = g_tTex2du4a . GatherBlue(g_sSamp, c3, o2);
+
+   float4 txval204 = g_tTex2df4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2);
+   int4   txval214 = g_tTex2di4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2);
+   uint4  txval224 = g_tTex2du4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2);
+
+   // float4 txval204s = g_tTex2df4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2, status);
+   // int4   txval214s = g_tTex2di4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2, status);
+   // uint4  txval224s = g_tTex2du4a . GatherBlue(g_sSamp, c3, o2, o2, o2, o2, status);
+
+   // float4 txval20s = g_tTex2df4a . GatherBlue(g_sSamp, c3, o2, status);
+   // int4   txval21s = g_tTex2di4a . GatherBlue(g_sSamp, c3, o2, status);
+   // uint4  txval22s = g_tTex2du4a . GatherBlue(g_sSamp, c3, o2, status);
+
+   float4 txval301 = g_tTex2df4a . GatherAlpha(g_sSamp, c3, o2);
+   int4   txval311 = g_tTex2di4a . GatherAlpha(g_sSamp, c3, o2);
+   uint4  txval321 = g_tTex2du4a . GatherAlpha(g_sSamp, c3, o2);
+
+   float4 txval304 = g_tTex2df4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2);
+   int4   txval314 = g_tTex2di4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2);
+   uint4  txval324 = g_tTex2du4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2);
+
+   // float4 txval304s = g_tTex2df4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2, status);
+   // int4   txval314s = g_tTex2di4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2, status);
+   // uint4  txval324s = g_tTex2du4a . GatherAlpha(g_sSamp, c3, o2, o2, o2, o2, status);
+
+   // float4 txval30s = g_tTex2df4a . GatherAlpha(g_sSamp, c3, o2, status);
+   // int4   txval31s = g_tTex2di4a . GatherAlpha(g_sSamp, c3, o2, status);
+   // uint4  txval32s = g_tTex2du4a . GatherAlpha(g_sSamp, c3, o2, status);
+
+   // no 3D gathers with offset
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gathercmpRGBA.array.dx10.frag b/Test/hlsl.gathercmpRGBA.array.dx10.frag
new file mode 100644
index 0000000..4ed7f4b
--- /dev/null
+++ b/Test/hlsl.gathercmpRGBA.array.dx10.frag
@@ -0,0 +1,70 @@
+SamplerComparisonState  g_sSampCmp : register(s0);
+
+uniform Texture1DArray <float4> g_tTex1df4a : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform float  c1;
+uniform float2 c2;
+uniform float3 c3;
+uniform float4 c4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // no 1D gathers
+
+   float4 txval00 = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, .75);
+   int4   txval01 = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, .75);
+   uint4  txval02 = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, .75);
+
+   float4 txval10 = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, .75);
+   int4   txval11 = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, .75);
+   uint4  txval12 = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, .75);
+
+   float4 txval20 = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, .75);
+   int4   txval21 = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, .75);
+   uint4  txval22 = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, .75);
+
+   float4 txval30 = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, .75);
+   int4   txval31 = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, .75);
+   uint4  txval32 = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, .75);
+
+   // no 3D gathers
+
+   float4 txval40 = g_tTexcdf4a . GatherCmpRed(g_sSampCmp, c4, .75);
+   int4   txval41 = g_tTexcdi4a . GatherCmpRed(g_sSampCmp, c4, .75);
+   uint4  txval42 = g_tTexcdu4a . GatherCmpRed(g_sSampCmp, c4, .75);
+
+   float4 txval50 = g_tTexcdf4a . GatherCmpGreen(g_sSampCmp, c4, .75);
+   int4   txval51 = g_tTexcdi4a . GatherCmpGreen(g_sSampCmp, c4, .75);
+   uint4  txval52 = g_tTexcdu4a . GatherCmpGreen(g_sSampCmp, c4, .75);
+
+   float4 txval60 = g_tTexcdf4a . GatherCmpBlue(g_sSampCmp, c4, .75);
+   int4   txval61 = g_tTexcdi4a . GatherCmpBlue(g_sSampCmp, c4, .75);
+   uint4  txval62 = g_tTexcdu4a . GatherCmpBlue(g_sSampCmp, c4, .75);
+
+   float4 txval70 = g_tTexcdf4a . GatherCmpAlpha(g_sSampCmp, c4, .75);
+   int4   txval71 = g_tTexcdi4a . GatherCmpAlpha(g_sSampCmp, c4, .75);
+   uint4  txval72 = g_tTexcdu4a . GatherCmpAlpha(g_sSampCmp, c4, .75);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gathercmpRGBA.basic.dx10.frag b/Test/hlsl.gathercmpRGBA.basic.dx10.frag
new file mode 100644
index 0000000..9dc1631
--- /dev/null
+++ b/Test/hlsl.gathercmpRGBA.basic.dx10.frag
@@ -0,0 +1,76 @@
+SamplerComparisonState     g_sSampCmp : register(s0);
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform float  c1;
+uniform float2 c2;
+uniform float3 c3;
+uniform float4 c4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // no 1D gathers
+
+   float4 txval00 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75);
+   int4   txval01 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75);
+   uint4  txval02 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75);
+
+   float4 txval10 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75);
+   int4   txval11 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75);
+   uint4  txval12 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75);
+
+   float4 txval20 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75);
+   int4   txval21 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75);
+   uint4  txval22 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75);
+
+   float4 txval30 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75);
+   int4   txval31 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75);
+   uint4  txval32 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75);
+
+   // no 3D gathers
+
+   float4 txval40 = g_tTexcdf4 . GatherCmpRed(g_sSampCmp, c3, 0.75);
+   int4   txval41 = g_tTexcdi4 . GatherCmpRed(g_sSampCmp, c3, 0.75);
+   uint4  txval42 = g_tTexcdu4 . GatherCmpRed(g_sSampCmp, c3, 0.75);
+
+   float4 txval50 = g_tTexcdf4 . GatherCmpGreen(g_sSampCmp, c3, 0.75);
+   int4   txval51 = g_tTexcdi4 . GatherCmpGreen(g_sSampCmp, c3, 0.75);
+   uint4  txval52 = g_tTexcdu4 . GatherCmpGreen(g_sSampCmp, c3, 0.75);
+
+   float4 txval60 = g_tTexcdf4 . GatherCmpBlue(g_sSampCmp, c3, 0.75);
+   int4   txval61 = g_tTexcdi4 . GatherCmpBlue(g_sSampCmp, c3, 0.75);
+   uint4  txval62 = g_tTexcdu4 . GatherCmpBlue(g_sSampCmp, c3, 0.75);
+
+   float4 txval70 = g_tTexcdf4 . GatherCmpAlpha(g_sSampCmp, c3, 0.75);
+   int4   txval71 = g_tTexcdi4 . GatherCmpAlpha(g_sSampCmp, c3, 0.75);
+   uint4  txval72 = g_tTexcdu4 . GatherCmpAlpha(g_sSampCmp, c3, 0.75);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gathercmpRGBA.offset.dx10.frag b/Test/hlsl.gathercmpRGBA.offset.dx10.frag
new file mode 100644
index 0000000..3a6fbb7
--- /dev/null
+++ b/Test/hlsl.gathercmpRGBA.offset.dx10.frag
@@ -0,0 +1,115 @@
+SamplerComparisonState g_sSampCmp : register(s0);
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform float  c1;
+uniform float2 c2;
+uniform float3 c3;
+uniform float4 c4;
+
+uniform int  o1;
+uniform int2 o2;
+uniform int3 o3;
+uniform int4 o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   uint status;
+
+   // no 1D gathers
+
+   float4 txval001 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2);
+   int4   txval011 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2);
+   uint4  txval021 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2);
+
+   float4 txval004 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   int4   txval014 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   uint4  txval024 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   
+   // float4 txval00s = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, status);
+   // int4   txval01s = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, status);
+   // uint4  txval02s = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, status);
+
+   // float4 txval004s = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+   // int4   txval014s = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+   // uint4  txval024s = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+
+   float4 txval101 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2);
+   int4   txval111 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2);
+   uint4  txval121 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2);
+
+   float4 txval104 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   int4   txval114 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   uint4  txval124 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+
+   // float4 txval10s = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, status);
+   // int4   txval11s = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, status);
+   // uint4  txval12s = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, status);
+
+   // float4 txval104 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+   // int4   txval114 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+   // uint4  txval124 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+
+   float4 txval201 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2);
+   int4   txval211 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2);
+   uint4  txval221 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2);
+
+   float4 txval204 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   int4   txval214 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   uint4  txval224 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+
+   // float4 txval204s = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+   // int4   txval214s = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+   // uint4  txval224s = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+
+   // float4 txval20s = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, status);
+   // int4   txval21s = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, status);
+   // uint4  txval22s = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, status);
+
+   float4 txval301 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2);
+   int4   txval311 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2);
+   uint4  txval321 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2);
+
+   float4 txval304 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   int4   txval314 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+   uint4  txval324 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+
+   // float4 txval304s = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+   // int4   txval314s = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+   // uint4  txval324s = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
+
+   // float4 txval30s = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, status);
+   // int4   txval31s = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, status);
+   // uint4  txval32s = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, status);
+
+   // no 3D gathers with offset
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag b/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag
new file mode 100644
index 0000000..11131bc
--- /dev/null
+++ b/Test/hlsl.gathercmpRGBA.offsetarray.dx10.frag
@@ -0,0 +1,109 @@
+SamplerComparisonState g_sSampCmp : register(s0);
+
+uniform Texture1DArray <float4> g_tTex1df4a : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+uniform float  c1;
+uniform float2 c2;
+uniform float3 c3;
+uniform float4 c4;
+
+uniform int  o1;
+uniform int2 o2;
+uniform int3 o3;
+uniform int4 o4;
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   uint status;
+
+   // no 1D gathers
+
+   float4 txval001 = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2);
+   int4   txval011 = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2);
+   uint4  txval021 = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2);
+
+   float4 txval004 = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   int4   txval014 = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   uint4  txval024 = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   
+   // float4 txval00s = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, status);
+   // int4   txval01s = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, status);
+   // uint4  txval02s = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, status);
+
+   // float4 txval004s = g_tTex2df4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+   // int4   txval014s = g_tTex2di4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+   // uint4  txval024s = g_tTex2du4a . GatherCmpRed(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+
+   float4 txval101 = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2);
+   int4   txval111 = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2);
+   uint4  txval121 = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2);
+
+   float4 txval104 = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   int4   txval114 = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   uint4  txval124 = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+
+   // float4 txval10s = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, status);
+   // int4   txval11s = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, status);
+   // uint4  txval12s = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, status);
+
+   // float4 txval104 = g_tTex2df4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+   // int4   txval114 = g_tTex2di4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+   // uint4  txval124 = g_tTex2du4a . GatherCmpGreen(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+
+   float4 txval201 = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2);
+   int4   txval211 = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2);
+   uint4  txval221 = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2);
+
+   float4 txval204 = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   int4   txval214 = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   uint4  txval224 = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+
+   // float4 txval204s = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+   // int4   txval214s = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+   // uint4  txval224s = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+
+   // float4 txval20s = g_tTex2df4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, status);
+   // int4   txval21s = g_tTex2di4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, status);
+   // uint4  txval22s = g_tTex2du4a . GatherCmpBlue(g_sSampCmp, c3, 0.75, o2, status);
+
+   float4 txval301 = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2);
+   int4   txval311 = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2);
+   uint4  txval321 = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2);
+
+   float4 txval304 = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   int4   txval314 = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+   uint4  txval324 = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2);
+
+   // float4 txval304s = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+   // int4   txval314s = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+   // uint4  txval324s = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, o2, o2, o2, status);
+
+   // float4 txval30s = g_tTex2df4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, status);
+   // int4   txval31s = g_tTex2di4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, status);
+   // uint4  txval32s = g_tTex2du4a . GatherCmpAlpha(g_sSampCmp, c3, 0.75, o2, status);
+
+   // no 3D gathers with offset
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.getdimensions.dx10.frag b/Test/hlsl.getdimensions.dx10.frag
index 1adc5e4..bd9cc3b 100644
--- a/Test/hlsl.getdimensions.dx10.frag
+++ b/Test/hlsl.getdimensions.dx10.frag
@@ -28,6 +28,14 @@
 TextureCubeArray <int4>   g_tTexcdi4a;
 TextureCubeArray <uint4>  g_tTexcdu4a;
 
+Texture2DMS <float4> g_tTex2dmsf4;
+Texture2DMS <int4>   g_tTex2dmsi4;
+Texture2DMS <uint4>  g_tTex2dmsu4;
+
+Texture2DMSArray <float4> g_tTex2dmsf4a;
+Texture2DMSArray <int4>   g_tTex2dmsi4a;
+Texture2DMSArray <uint4>  g_tTex2dmsu4a;
+
 struct PS_OUTPUT
 {
     float4 Color : SV_Target0;
@@ -137,6 +145,23 @@
    g_tTexcdu4a . GetDimensions(WidthU, HeightU, ElementsU);
    g_tTexcdu4a . GetDimensions(6, WidthU, HeightU, ElementsU, NumberOfLevelsU);
 
+   // 2DMS, float tx, uint params
+   g_tTex2dmsf4 . GetDimensions(WidthU, HeightU, NumberOfSamplesU);
+
+   // 2DMS, int tx, uint params
+   g_tTex2dmsi4 . GetDimensions(WidthU, HeightU, NumberOfSamplesU);
+
+   // 2DMS, uint tx, uint params
+   g_tTex2dmsu4 . GetDimensions(WidthU, HeightU, NumberOfSamplesU);
+
+   // 2DMSArray, float tx, uint params
+   g_tTex2dmsf4a . GetDimensions(WidthU, HeightU, ElementsU, NumberOfSamplesU);
+
+   // 2DMSArray, int tx, uint params
+   g_tTex2dmsi4a . GetDimensions(WidthU, HeightU, ElementsU, NumberOfSamplesU);
+
+   // 2DMSArray, uint tx, uint params
+   g_tTex2dmsu4a . GetDimensions(WidthU, HeightU, ElementsU, NumberOfSamplesU);
 
    // TODO: ***************************************************
    // Change this to 1 to enable float overloads when the HLSL
@@ -228,6 +253,24 @@
    // Cubearray, uint, float params
    g_tTexcdu4a . GetDimensions(WidthF, HeightF, ElementsF);
    g_tTexcdu4a . GetDimensions(6, WidthF, HeightF, ElementsF, NumberOfLevelsF);
+
+   // 2DMS, float tx, uint params
+   g_tTex2dmsf4 . GetDimensions(WidthF, HeightF, NumberOfSamplesF);
+
+   // 2DMS, int tx, uint params
+   g_tTex2dmsi4 . GetDimensions(WidthF, HeightF, NumberOfSamplesF);
+
+   // 2DMS, uint tx, uint params
+   g_tTex2dmsu4 . GetDimensions(WidthF, HeightF, NumberOfSamplesF);
+
+   // 2DMSArray, float tx, uint params
+   g_tTex2dmsf4a . GetDimensions(WidthF, HeightF, ElementsF, NumberOfSamplesF);
+
+   // 2DMSArray, int tx, uint params
+   g_tTex2dmsi4a . GetDimensions(WidthF, HeightF, ElementsF, NumberOfSamplesF);
+
+   // 2DMSArray, uint tx, uint params
+   g_tTex2dmsu4a . GetDimensions(WidthF, HeightF, ElementsF, NumberOfSamplesF);
 #endif // OVERLOAD_FIX
 
    psout.Color = 1.0;
diff --git a/Test/hlsl.getsampleposition.dx10.frag b/Test/hlsl.getsampleposition.dx10.frag
new file mode 100644
index 0000000..a7a93b3
--- /dev/null
+++ b/Test/hlsl.getsampleposition.dx10.frag
@@ -0,0 +1,23 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture2DMS      <float4>  g_tTex2dmsf4;
+Texture2DMSArray <float4>  g_tTex2dmsf4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   float2 r00 = g_tTex2dmsf4.GetSamplePosition(1);
+   float2 r01 = g_tTex2dmsf4a.GetSamplePosition(2);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.init.frag b/Test/hlsl.init.frag
index 5acf55d..c233d12 100644
--- a/Test/hlsl.init.frag
+++ b/Test/hlsl.init.frag
@@ -4,6 +4,18 @@
 float a3, b3 = 0.3;
 float a4, b4 = 0.4, c4;
 float a5 = 0.5, b5, c5 = 1.5;
+

+struct Single1 { int f; };

+Single1 single1 = { 10 };

+

+struct Single2 { uint2 v; };

+Single2 single2 = { { 1, 2 } };

+

+struct Single3 { Single1 s1; };

+Single3 single3 = { { 3 } };

+

+struct Single4 { Single2 s1; };

+Single4 single4 = { { { 4u, 5u } } };

 
 float4 ShaderFunction(float4 input) : COLOR0
 {
diff --git a/Test/hlsl.init2.frag b/Test/hlsl.init2.frag
new file mode 100644
index 0000000..789f1a0
--- /dev/null
+++ b/Test/hlsl.init2.frag
@@ -0,0 +1,32 @@
+
+void Test1()
+{
+    struct mystruct { float2 a; };
+    mystruct test1 = {
+        { 1, 2, },          // test trailing commas in list
+    };
+
+    mystruct test2 = {
+        float2(3, 4),
+    };
+
+    // mystruct test3 = {
+    //     { { 5, 6, } },   // TODO: test unneeded levels
+    // };
+
+    float test4 = { 7, } ;   // test scalar initialization
+
+    struct mystruct2 { float a; float b; float c; };
+    mystruct2 test5 = { {8,}, {9,}, {10}, };
+}
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    Test1();
+
+    PS_OUTPUT ps_output;
+    ps_output.color = 1.0;
+    return ps_output;
+}
diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag
index dd417a1..b55c242 100644
--- a/Test/hlsl.intrinsics.frag
+++ b/Test/hlsl.intrinsics.frag
@@ -223,6 +223,7 @@
     bool3 r041 = isnan(inF0);
     float3 r042 = ldexp(inF0, inF1);
     float3 r039a = lerp(inF0, inF1, inF2);
+    float3 r039b = lerp(inF0, inF1, 0.3); // test vec,vec,scalar lerp
     float r043 = length(inF0);
     float3 r044 = log(inF0);
     float3 r045 = log10(inF0);
diff --git a/Test/hlsl.load.2dms.dx10.frag b/Test/hlsl.load.2dms.dx10.frag
new file mode 100644
index 0000000..29974f5
--- /dev/null
+++ b/Test/hlsl.load.2dms.dx10.frag
@@ -0,0 +1,56 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture2DMS <float4> g_tTex2dmsf4;
+Texture2DMS <int4>   g_tTex2dmsi4;
+Texture2DMS <uint4>  g_tTex2dmsu4;
+
+Texture2DMSArray <float4> g_tTex2dmsf4a;
+Texture2DMSArray <int4>   g_tTex2dmsi4a;
+Texture2DMSArray <uint4>  g_tTex2dmsu4a;
+
+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;
+
+   // 2DMS, no offset
+   g_tTex2dmsf4.Load(c2, 3);
+   g_tTex2dmsi4.Load(c2, 3);
+   g_tTex2dmsu4.Load(c2, 3);
+
+   // 2DMS, offset
+   g_tTex2dmsf4.Load(c2, 3, o2);
+   g_tTex2dmsi4.Load(c2, 3, o2);
+   g_tTex2dmsu4.Load(c2, 3, o2);
+
+   // 2DMSArray, no offset
+   g_tTex2dmsf4a.Load(c3, 3);
+   g_tTex2dmsi4a.Load(c3, 3);
+   g_tTex2dmsu4a.Load(c3, 3);
+
+   // 2DMSArray, offset
+   g_tTex2dmsf4a.Load(c3, 3, o2);
+   g_tTex2dmsi4a.Load(c3, 3, o2);
+   g_tTex2dmsu4a.Load(c3, 3, o2);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
+
diff --git a/Test/hlsl.load.array.dx10.frag b/Test/hlsl.load.array.dx10.frag
new file mode 100644
index 0000000..253de3e
--- /dev/null
+++ b/Test/hlsl.load.array.dx10.frag
@@ -0,0 +1,71 @@
+SamplerState       g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+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;
+
+   // 1DArray
+   g_tTex1df4a.Load(c3);
+   g_tTex1di4a.Load(c3);
+   g_tTex1du4a.Load(c3);
+
+   // 2DArray
+   g_tTex2df4a.Load(c4);
+   g_tTex2di4a.Load(c4);
+   g_tTex2du4a.Load(c4);
+
+   // Offset has no Cube or CubeArray forms
+
+   // TODO:
+   // Load, SampleIndex
+   // Load, SampleIndex, Offset
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.load.basic.dx10.frag b/Test/hlsl.load.basic.dx10.frag
new file mode 100644
index 0000000..abb594e
--- /dev/null
+++ b/Test/hlsl.load.basic.dx10.frag
@@ -0,0 +1,76 @@
+SamplerState       g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+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(c2);
+   g_tTex1di4.Load(c2);
+   g_tTex1du4.Load(c2);
+
+   // 2D
+   g_tTex2df4.Load(c3);
+   g_tTex2di4.Load(c3);
+   g_tTex2du4.Load(c3);
+
+   // 3D
+   g_tTex3df4.Load(c4);
+   g_tTex3di4.Load(c4);
+   g_tTex3du4.Load(c4);
+
+   // Offset has no Cube or CubeArray forms
+
+   // TODO:
+   // Load, SampleIndex
+   // Load, SampleIndex, Offset
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.load.basic.dx10.vert b/Test/hlsl.load.basic.dx10.vert
new file mode 100644
index 0000000..750b984
--- /dev/null
+++ b/Test/hlsl.load.basic.dx10.vert
@@ -0,0 +1,70 @@
+SamplerState       g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct VS_OUTPUT
+{
+    float4 Pos : SV_Position;
+};
+
+uniform int   c1;
+uniform int2  c2;
+uniform int3  c3;
+uniform int4  c4;
+
+uniform int   o1;
+uniform int2  o2;
+uniform int3  o3;
+uniform int4  o4;
+
+VS_OUTPUT main()
+{
+   VS_OUTPUT vsout;
+
+   // 1D
+   g_tTex1df4.Load(c2);
+   g_tTex1di4.Load(c2);
+   g_tTex1du4.Load(c2);
+
+   // 2D
+   g_tTex2df4.Load(c3);
+   g_tTex2di4.Load(c3);
+   g_tTex2du4.Load(c3);
+
+   // 3D
+   g_tTex3df4.Load(c4);
+   g_tTex3di4.Load(c4);
+   g_tTex3du4.Load(c4);
+
+   // Offset has no Cube or CubeArray forms
+
+   vsout.Pos = float4(0,0,0,0);
+
+   return vsout;
+}
diff --git a/Test/hlsl.load.buffer.dx10.frag b/Test/hlsl.load.buffer.dx10.frag
new file mode 100644
index 0000000..60a61df
--- /dev/null
+++ b/Test/hlsl.load.buffer.dx10.frag
@@ -0,0 +1,38 @@
+uniform Buffer <float4> g_tTexbf4_test : register(t0);
+
+Buffer          g_tTexbf4;  // default is float4
+Buffer <int4>   g_tTexbi4;
+Buffer <uint4>  g_tTexbu4;
+
+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
+   float4 r00 = g_tTexbf4.Load(c1);
+   int4   r01 = g_tTexbi4.Load(c1);
+   uint4  r02 = g_tTexbu4.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.offset.dx10.frag b/Test/hlsl.load.offset.dx10.frag
new file mode 100644
index 0000000..bc946ee
--- /dev/null
+++ b/Test/hlsl.load.offset.dx10.frag
@@ -0,0 +1,76 @@
+SamplerState       g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+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(c2, o1);
+   g_tTex1di4.Load(c2, o1);
+   g_tTex1du4.Load(c2, o1);
+
+   // 2D
+   g_tTex2df4.Load(c3, o2);
+   g_tTex2di4.Load(c3, o2);
+   g_tTex2du4.Load(c3, o2);
+
+   // 3D
+   g_tTex3df4.Load(c4, o3);
+   g_tTex3di4.Load(c4, o3);
+   g_tTex3du4.Load(c4, o3);
+
+   // Offset has no Cube or CubeArray forms
+
+   // TODO:
+   // Load, SampleIndex
+   // Load, SampleIndex, Offset
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.load.offsetarray.dx10.frag b/Test/hlsl.load.offsetarray.dx10.frag
new file mode 100644
index 0000000..12b6a9e
--- /dev/null
+++ b/Test/hlsl.load.offsetarray.dx10.frag
@@ -0,0 +1,69 @@
+SamplerState       g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+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;
+
+   // 1DArray
+   g_tTex1df4a.Load(c3, o1);
+   g_tTex1di4a.Load(c3, o1);
+   g_tTex1du4a.Load(c3, o1);
+
+   // 2DArray
+   g_tTex2df4a.Load(c4, o2);
+   g_tTex2di4a.Load(c4, o2);
+   g_tTex2du4a.Load(c4, o2);
+
+   // TODO:
+   // Load, SampleIndex
+   // Load, SampleIndex, Offset
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.numericsuffixes.frag b/Test/hlsl.numericsuffixes.frag
new file mode 100644
index 0000000..60b2572
--- /dev/null
+++ b/Test/hlsl.numericsuffixes.frag
@@ -0,0 +1,20 @@
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    // Test numeric suffixes
+    float r00 = 1.0f;    // float
+    uint  r01 = 1u;      // lower uint
+    uint  r02 = 2U;      // upper uint
+    uint  r03 = 0xabcu;  // lower hex uint
+    uint  r04 = 0xABCU;  // upper hex uint (upper 0X is not accepted)
+    int   r05 = 5l;      // lower long int
+    int   r06 = 6L;      // upper long int
+    int   r07 = 071;     // octal
+    uint  r08 = 072u;    // unsigned octal
+
+    PS_OUTPUT ps_output;
+    ps_output.color = r07; // gets 71 octal = 57 decimal
+    return ps_output;
+}
diff --git a/Test/hlsl.pp.line.frag b/Test/hlsl.pp.line.frag
new file mode 100644
index 0000000..6f0273d
--- /dev/null
+++ b/Test/hlsl.pp.line.frag
@@ -0,0 +1,24 @@
+
+#line 1
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+#line 2
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+#line 123 "SomeFile.frag"
+
+   int thisLineIs = __LINE__;  // gets 124
+
+   psout.Color = float4(thisLineIs, 0, 0, 1);
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.precedence.frag b/Test/hlsl.precedence.frag
index eae0435..6ed7173 100644
--- a/Test/hlsl.precedence.frag
+++ b/Test/hlsl.precedence.frag
@@ -5,5 +5,5 @@
     float4 a4
     ) : COLOR0
 {
-    return a1 + a2 * a3 + a4;
+    return a1 + a2 * a3 + a4 + float4(a1.rgb * a2.rgb, a3.a);
 }
diff --git a/Test/hlsl.samplecmp.array.dx10.frag b/Test/hlsl.samplecmp.array.dx10.frag
new file mode 100644
index 0000000..f0e0a3d
--- /dev/null
+++ b/Test/hlsl.samplecmp.array.dx10.frag
@@ -0,0 +1,60 @@
+SamplerComparisonState g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1DArray
+   float r10 = g_tTex1df4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75);
+   float r12 = g_tTex1di4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75);
+   float r14 = g_tTex1du4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75);
+
+   // 2DArray
+   float r30 = g_tTex2df4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   float r32 = g_tTex2di4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   float r34 = g_tTex2du4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+
+   // CubeArray
+   float r60 = g_tTexcdf4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75);
+   float r62 = g_tTexcdi4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75);
+   float r64 = g_tTexcdu4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplecmp.basic.dx10.frag b/Test/hlsl.samplecmp.basic.dx10.frag
new file mode 100644
index 0000000..cb73e14
--- /dev/null
+++ b/Test/hlsl.samplecmp.basic.dx10.frag
@@ -0,0 +1,61 @@
+SamplerComparisonState g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   float r00 = g_tTex1df4 . SampleCmp(g_sSamp, 0.1, 0.75);
+   float r02 = g_tTex1di4 . SampleCmp(g_sSamp, 0.1, 0.75);
+   float r04 = g_tTex1du4 . SampleCmp(g_sSamp, 0.1, 0.75);
+
+   // 2D
+   float r20 = g_tTex2df4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75);
+   float r22 = g_tTex2di4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75);
+   float r24 = g_tTex2du4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75);
+
+   // *** There's no SampleCmp on 3D textures
+
+   float r50 = g_tTexcdf4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   float r52 = g_tTexcdi4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   float r54 = g_tTexcdu4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplecmp.offset.dx10.frag b/Test/hlsl.samplecmp.offset.dx10.frag
new file mode 100644
index 0000000..444dac8
--- /dev/null
+++ b/Test/hlsl.samplecmp.offset.dx10.frag
@@ -0,0 +1,66 @@
+SamplerComparisonState g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   float r01 = g_tTex1df4 . SampleCmp(g_sSamp, 0.1, 0.75, 2);
+   float r03 = g_tTex1di4 . SampleCmp(g_sSamp, 0.1, 0.75, 2);
+   float r05 = g_tTex1du4 . SampleCmp(g_sSamp, 0.1, 0.75, 2);
+
+   // 2D
+   float r21 = g_tTex2df4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3));
+   float r23 = g_tTex2di4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3));
+   float r25 = g_tTex2du4 . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3));
+
+   // *** There's no SampleCmp on 3D textures
+
+   // This page: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509696(v=vs.85).aspx
+   // claims offset is supported for cube textures, but FXC does not accept it, and that does
+   // not match other methods, so it may be a documentation bug.  Those lines are commented
+   // out below.
+   // Cube
+   // float r51 = g_tTexcdf4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int3(2,3,4));
+   // float r53 = g_tTexcdi4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int3(2,3,4));
+   // float r55 = g_tTexcdu4 . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int3(2,3,4));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplecmp.offsetarray.dx10.frag b/Test/hlsl.samplecmp.offsetarray.dx10.frag
new file mode 100644
index 0000000..319d5cd
--- /dev/null
+++ b/Test/hlsl.samplecmp.offsetarray.dx10.frag
@@ -0,0 +1,67 @@
+SamplerComparisonState g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1DArray
+   float r11 = g_tTex1df4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, 2);
+   float r13 = g_tTex1di4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, 2);
+   float r15 = g_tTex1du4a . SampleCmp(g_sSamp, float2(0.1, 0.2), 0.75, 2);
+
+   // 2DArray
+   float r31 = g_tTex2df4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+   float r33 = g_tTex2di4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+   float r35 = g_tTex2du4a . SampleCmp(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+
+   // *** There's no SampleCmp on 3D textures
+
+   // This page: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509696(v=vs.85).aspx
+   // claims offset is supported for cube textures, but FXC does not accept it, and that does
+   // not match other methods, so it may be a documentation bug.  Those lines are commented
+   // out below.
+
+   // CubeArray
+   // float r61 = g_tTexcdf4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4));
+   // float r63 = g_tTexcdi4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4));
+   // float r65 = g_tTexcdu4a . SampleCmp(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplecmplevelzero.array.dx10.frag b/Test/hlsl.samplecmplevelzero.array.dx10.frag
new file mode 100644
index 0000000..41b6a79
--- /dev/null
+++ b/Test/hlsl.samplecmplevelzero.array.dx10.frag
@@ -0,0 +1,60 @@
+SamplerComparisonState g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1DArray
+   float r10 = g_tTex1df4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75);
+   float r12 = g_tTex1di4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75);
+   float r14 = g_tTex1du4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75);
+
+   // 2DArray
+   float r30 = g_tTex2df4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   float r32 = g_tTex2di4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   float r34 = g_tTex2du4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+
+   // CubeArray
+   float r60 = g_tTexcdf4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75);
+   float r62 = g_tTexcdi4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75);
+   float r64 = g_tTexcdu4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplecmplevelzero.basic.dx10.frag b/Test/hlsl.samplecmplevelzero.basic.dx10.frag
new file mode 100644
index 0000000..841530a
--- /dev/null
+++ b/Test/hlsl.samplecmplevelzero.basic.dx10.frag
@@ -0,0 +1,61 @@
+SamplerComparisonState g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   float r00 = g_tTex1df4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75);
+   float r02 = g_tTex1di4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75);
+   float r04 = g_tTex1du4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75);
+
+   // 2D
+   float r20 = g_tTex2df4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75);
+   float r22 = g_tTex2di4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75);
+   float r24 = g_tTex2du4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75);
+
+   // *** There's no SampleCmpLevelZero on 3D textures
+
+   float r50 = g_tTexcdf4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   float r52 = g_tTexcdi4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   float r54 = g_tTexcdu4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplecmplevelzero.offset.dx10.frag b/Test/hlsl.samplecmplevelzero.offset.dx10.frag
new file mode 100644
index 0000000..290774e
--- /dev/null
+++ b/Test/hlsl.samplecmplevelzero.offset.dx10.frag
@@ -0,0 +1,66 @@
+SamplerComparisonState g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1D
+   float r01 = g_tTex1df4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75, 2);
+   float r03 = g_tTex1di4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75, 2);
+   float r05 = g_tTex1du4 . SampleCmpLevelZero(g_sSamp, 0.1, 0.75, 2);
+
+   // 2D
+   float r21 = g_tTex2df4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3));
+   float r23 = g_tTex2di4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3));
+   float r25 = g_tTex2du4 . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, int2(2,3));
+
+   // *** There's no SampleCmpLevelZero on 3D textures
+
+   // This page: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509696(v=vs.85).aspx
+   // claims offset is supported for cube textures, but FXC does not accept it, and that does
+   // not match other methods, so it may be a documentation bug.  Those lines are commented
+   // out below.
+   // Cube
+   // float r51 = g_tTexcdf4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+   // float r53 = g_tTexcdi4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+   // float r55 = g_tTexcdu4 . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplecmplevelzero.offsetarray.dx10.frag b/Test/hlsl.samplecmplevelzero.offsetarray.dx10.frag
new file mode 100644
index 0000000..b57502e
--- /dev/null
+++ b/Test/hlsl.samplecmplevelzero.offsetarray.dx10.frag
@@ -0,0 +1,67 @@
+SamplerComparisonState g_sSamp : register(s0);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // 1DArray
+   float r11 = g_tTex1df4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, 2);
+   float r13 = g_tTex1di4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, 2);
+   float r15 = g_tTex1du4a . SampleCmpLevelZero(g_sSamp, float2(0.1, 0.2), 0.75, 2);
+
+   // 2DArray
+   float r31 = g_tTex2df4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+   float r33 = g_tTex2di4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+   float r35 = g_tTex2du4a . SampleCmpLevelZero(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(2,3));
+
+   // *** There's no SampleCmpLevelZero on 3D textures
+
+   // This page: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509696(v=vs.85).aspx
+   // claims offset is supported for cube textures, but FXC does not accept it, and that does
+   // not match other methods, so it may be a documentation bug.  Those lines are commented
+   // out below.
+
+   // CubeArray
+   // float r61 = g_tTexcdf4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4));
+   // float r63 = g_tTexcdi4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4));
+   // float r65 = g_tTexcdu4a . SampleCmpLevelZero(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75, int3(2,3,4));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplelevel.array.dx10.frag b/Test/hlsl.samplelevel.array.dx10.frag
new file mode 100644
index 0000000..c52aeb2
--- /dev/null
+++ b/Test/hlsl.samplelevel.array.dx10.frag
@@ -0,0 +1,43 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1DArray          g_tTex1df4a : register(t1);
+
+uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   float4 txval10 = g_tTex1df4a . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75);
+   int4   txval11 = g_tTex1di4a . SampleLevel(g_sSamp, float2(0.2, 0.3), 0.75);
+   uint4  txval12 = g_tTex1du4a . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75);
+
+   float4 txval20 = g_tTex2df4a . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   int4   txval21 = g_tTex2di4a . SampleLevel(g_sSamp, float3(0.3, 0.4, 0.5), 0.75);
+   uint4  txval22 = g_tTex2du4a . SampleLevel(g_sSamp, float3(0.5, 0.6, 0.7), 0.75);
+
+   float4 txval40 = g_tTexcdf4a . SampleLevel(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75);
+   int4   txval41 = g_tTexcdi4a . SampleLevel(g_sSamp, float4(0.4, 0.5, 0.6, 0.7), 0.75);
+   uint4  txval42 = g_tTexcdu4a . SampleLevel(g_sSamp, float4(0.7, 0.8, 0.9, 1.0), 0.75);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplelevel.basic.dx10.frag b/Test/hlsl.samplelevel.basic.dx10.frag
new file mode 100644
index 0000000..fb363ae
--- /dev/null
+++ b/Test/hlsl.samplelevel.basic.dx10.frag
@@ -0,0 +1,52 @@
+SamplerState       g_sSamp : register(s0);
+uniform sampler2D          g_sSamp2d;
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, 0.1, 0.75);
+   int4   txval11 = g_tTex1di4 . SampleLevel(g_sSamp, 0.2, 0.75);
+   uint4  txval12 = g_tTex1du4 . SampleLevel(g_sSamp, 0.3, 0.75);
+
+   float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75);
+   int4   txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75);
+   uint4  txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float2(0.5, 0.6), 0.75);
+
+   float4 txval30 = g_tTex3df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   int4   txval31 = g_tTex3di4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75);
+   uint4  txval32 = g_tTex3du4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75);
+
+   float4 txval40 = g_tTexcdf4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   int4   txval41 = g_tTexcdi4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75);
+   uint4  txval42 = g_tTexcdu4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplelevel.basic.dx10.vert b/Test/hlsl.samplelevel.basic.dx10.vert
new file mode 100644
index 0000000..03febcf
--- /dev/null
+++ b/Test/hlsl.samplelevel.basic.dx10.vert
@@ -0,0 +1,49 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct VS_OUTPUT
+{
+    float4 Pos : SV_Position;
+};
+
+VS_OUTPUT main()
+{
+   VS_OUTPUT vsout;
+
+   float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, 0.1, 0.75);
+   int4   txval11 = g_tTex1di4 . SampleLevel(g_sSamp, 0.2, 0.75);
+   uint4  txval12 = g_tTex1du4 . SampleLevel(g_sSamp, 0.3, 0.75);
+
+   float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75);
+   int4   txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75);
+   uint4  txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float2(0.5, 0.6), 0.75);
+
+   float4 txval30 = g_tTex3df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   int4   txval31 = g_tTex3di4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75);
+   uint4  txval32 = g_tTex3du4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75);
+
+   float4 txval40 = g_tTexcdf4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75);
+   int4   txval41 = g_tTexcdi4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75);
+   uint4  txval42 = g_tTexcdu4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75);
+
+   vsout.Pos = float4(0,0,0,0);
+
+   return vsout;
+}
diff --git a/Test/hlsl.samplelevel.offset.dx10.frag b/Test/hlsl.samplelevel.offset.dx10.frag
new file mode 100644
index 0000000..1490611
--- /dev/null
+++ b/Test/hlsl.samplelevel.offset.dx10.frag
@@ -0,0 +1,49 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1D          g_tTex1df4a : register(t1);
+
+uniform 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;
+
+TextureCube <float4> g_tTexcdf4;
+TextureCube <int4>   g_tTexcdi4;
+TextureCube <uint4>  g_tTexcdu4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, 0.1, 0.75, 1);
+   int4   txval11 = g_tTex1di4 . SampleLevel(g_sSamp, 0.2, 0.75, 1);
+   uint4  txval12 = g_tTex1du4 . SampleLevel(g_sSamp, 0.3, 0.75, 1);
+
+   float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75, int2(1,0));
+   int4   txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75, int2(1,1));
+   uint4  txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float2(0.5, 0.6), 0.75, int2(1,-1));
+
+   float4 txval30 = g_tTex3df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int3(1,0,1));
+   int4   txval31 = g_tTex3di4 . SampleLevel(g_sSamp, float3(0.4, 0.5, 0.6), 0.75, int3(1,1,1));
+   uint4  txval32 = g_tTex3du4 . SampleLevel(g_sSamp, float3(0.7, 0.8, 0.9), 0.75, int3(1,0,-1));
+
+   // There are no offset forms of cube textures, so we do not test them.
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.samplelevel.offsetarray.dx10.frag b/Test/hlsl.samplelevel.offsetarray.dx10.frag
new file mode 100644
index 0000000..5c7bd71
--- /dev/null
+++ b/Test/hlsl.samplelevel.offsetarray.dx10.frag
@@ -0,0 +1,37 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1DArray          g_tTex1df4a : register(t1);
+
+uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
+Texture1DArray <int4>   g_tTex1di4;
+Texture1DArray <uint4>  g_tTex1du4;
+
+Texture2DArray <float4> g_tTex2df4;
+Texture2DArray <int4>   g_tTex2di4;
+Texture2DArray <uint4>  g_tTex2du4;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75, 0);
+   int4   txval11 = g_tTex1di4 . SampleLevel(g_sSamp, float2(0.2, 0.3), 0.75, 1);
+   uint4  txval12 = g_tTex1du4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75, 2);
+
+   float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75, int2(0,0));
+   int4   txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float3(0.3, 0.4, 0.5), 0.75, int2(0,0));
+   uint4  txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float3(0.5, 0.6, 0.7), 0.75, int2(0,1));
+
+   // No offset array forms for 3D or cube
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.semicolons.frag b/Test/hlsl.semicolons.frag
new file mode 100644
index 0000000..28fdedd
--- /dev/null
+++ b/Test/hlsl.semicolons.frag
@@ -0,0 +1,19 @@
+
+void MyFunc() { }
+
+;;;
+;
+; ; ;     // HLSL allows stray global scope semicolons.
+
+void MyFunc2() {;;;};
+
+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.shapeConv.frag b/Test/hlsl.shapeConv.frag
new file mode 100644
index 0000000..1e6dec6
--- /dev/null
+++ b/Test/hlsl.shapeConv.frag
@@ -0,0 +1,13 @@
+float4 PixelShaderFunction(float4 input, float f) : COLOR0
+{
+    float4 v;
+    v = 1;
+    v = 2.0;
+    v = f;
+    float3 u;
+    u = float(1);
+    u = float(2.0);
+    u = float(f);
+
+    return input;
+}
diff --git a/Test/hlsl.struct.frag b/Test/hlsl.struct.frag
index 25c803d..c76f334 100644
--- a/Test/hlsl.struct.frag
+++ b/Test/hlsl.struct.frag
@@ -23,10 +23,13 @@
     sample centroid float2 d;
     bool ff1 : SV_IsFrontFace;
     bool ff2 : packoffset(c0.y);
-    bool ff3 : packoffset(c0.y) : register(ps_5_0, s[0]) ;
-    float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s[0]) <int bambam=30;> ;
+    bool ff3 : packoffset(c0.y) : register(ps_5_0, s0) ;
+    float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s0) <int bambam=30;> ;
 } s4;
 
+float3 ff5 : packoffset(c1.y) : register(ps_5_0, s[5]);
+float3 ff6 : packoffset(c2.y) : register(s3[5]);
+
 float4 PixelShaderFunction(float4 input) : COLOR0
 {
     struct FS {
diff --git a/Test/preprocessor.simple.vert b/Test/preprocessor.simple.vert
index f4749f2..3522271 100644
--- a/Test/preprocessor.simple.vert
+++ b/Test/preprocessor.simple.vert
@@ -19,4 +19,11 @@
   gl_Position = vec4(Z);

   gl_Position = vec4(F);

   gl_Position = vec4(fn(3));

+  [] . ++ --

+  + - * % / - ! ~

+  << >> < > <= >=

+  == !=

+  & ^ | && ^^ || ? :

+  += -= *= /= %= <<= >>= &= |= ^=

+  1.2 2E10 5u -5lf

 }

diff --git a/Test/spv.swizzleInversion.frag b/Test/spv.swizzleInversion.frag
new file mode 100644
index 0000000..9dca62f
--- /dev/null
+++ b/Test/spv.swizzleInversion.frag
@@ -0,0 +1,16 @@
+#version 450

+

+in vec4 in4;

+in vec3 in3;

+

+void main()

+{

+    vec3 v43 = interpolateAtCentroid(in4.wzx);

+    vec2 v42 = interpolateAtSample(in4.zx, 1);

+    vec4 v44 = interpolateAtOffset(in4.zyxw, vec2(2.0));

+    float v41 = interpolateAtOffset(in4.y, vec2(2.0));

+

+    vec3 v33 = interpolateAtCentroid(in3.yzx);

+    vec2 v32 = interpolateAtSample(in3.zx, 1);

+    float v31 = interpolateAtOffset(in4.y, vec2(2.0));

+}

diff --git a/Test/vulkan.frag b/Test/vulkan.frag
index 0148507..fd9106c 100644
--- a/Test/vulkan.frag
+++ b/Test/vulkan.frag
@@ -72,4 +72,24 @@
 {

     texture(t2d, vec2(1.0));                 // ERROR, need a sampler, not a pure texture

     imageStore(t2d, ivec2(4, 5), vec4(1.2)); // ERROR, need an image, not a pure texture

-}
\ No newline at end of file
+}

+

+precision highp float;

+

+layout(location=0) in vec2 vTexCoord;

+layout(location=0) out vec4 FragColor;

+

+vec4 userTexture(mediump sampler2D samp, vec2 coord)

+{

+    return texture(samp, coord);

+}

+

+bool cond;

+

+void callUserTexture()

+{

+    userTexture(sampler2D(t2d,s), vTexCoord);                            // ERROR, not point of use

+    userTexture((sampler2D(t2d,s)), vTexCoord);                          // ERROR, not point of use

+    userTexture((sampler2D(t2d,s), sampler2D(t2d,s)), vTexCoord);        // ERROR, not point of use

+    userTexture(cond ? sampler2D(t2d,s) : sampler2D(t2d,s), vTexCoord);  // ERROR, no ?:, not point of use

+}

diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 2c27577..7e12c55 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -186,6 +186,15 @@
     EbvSamplePosition,
     EbvSampleMask,
     EbvHelperInvocation,
+#ifdef AMD_EXTENSIONS
+    EbvBaryCoordNoPersp,
+    EbvBaryCoordNoPerspCentroid,
+    EbvBaryCoordNoPerspSample,
+    EbvBaryCoordSmooth,
+    EbvBaryCoordSmoothCentroid,
+    EbvBaryCoordSmoothSample,
+    EbvBaryCoordPullModel,
+#endif
 
     EbvLast
 };
@@ -286,6 +295,15 @@
     case EbvSamplePosition:       return "SamplePosition";
     case EbvSampleMask:           return "SampleMaskIn";
     case EbvHelperInvocation:     return "HelperInvocation";
+#ifdef AMD_EXTENSIONS
+    case EbvBaryCoordNoPersp:           return "BaryCoordNoPersp";
+    case EbvBaryCoordNoPerspCentroid:   return "BaryCoordNoPerspCentroid";
+    case EbvBaryCoordNoPerspSample:     return "BaryCoordNoPerspSample";
+    case EbvBaryCoordSmooth:            return "BaryCoordSmooth";
+    case EbvBaryCoordSmoothCentroid:    return "BaryCoordSmoothCentroid";
+    case EbvBaryCoordSmoothSample:      return "BaryCoordSmoothSample";
+    case EbvBaryCoordPullModel:         return "BaryCoordPullModel";
+#endif
     default:                      return "unknown built-in variable";
     }
 }
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index efb78d4..4c04ae3 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -197,20 +197,25 @@
 //
 // Create a TString object from an integer.
 //
+#if defined _MSC_VER || defined MINGW_HAS_SECURE_API
 inline const TString String(const int i, const int base = 10)
 {
     char text[16];     // 32 bit ints are at most 10 digits in base 10
+    _itoa_s(i, text, sizeof(text), base);
+    return text;
+}
+#else
+inline const TString String(const int i, const int /*base*/ = 10)
+{
+    char text[16];     // 32 bit ints are at most 10 digits in base 10
     
-    #if defined _MSC_VER || defined MINGW_HAS_SECURE_API
-        _itoa_s(i, text, sizeof(text), base);
-    #else
-        // we assume base 10 for all cases
-        snprintf(text, sizeof(text), "%d", i);
-    #endif
+    // we assume base 10 for all cases
+    snprintf(text, sizeof(text), "%d", i);
 
     return text;
 }
-
+#endif
+    
 struct TSourceLoc {
     void init() { name = nullptr; string = 0; line = 0; column = 0; }
     // Returns the name if it exists. Otherwise, returns the string number.
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 39a9fff..1ea9f25 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -86,6 +86,7 @@
     bool isTexture()     const { return !sampler && !image; }
     bool isShadow()      const { return shadow; }
     bool isArrayed()     const { return arrayed; }
+    bool isMultiSample() const { return ms; }
 
     void clear()
     {
@@ -405,6 +406,9 @@
         smooth       = false;
         flat         = false;
         nopersp      = false;
+#ifdef AMD_EXTENSIONS
+        explicitInterp = false;
+#endif
         patch        = false;
         sample       = false;
         coherent     = false;
@@ -438,6 +442,9 @@
     bool smooth       : 1;
     bool flat         : 1;
     bool nopersp      : 1;
+#ifdef AMD_EXTENSIONS
+    bool explicitInterp : 1;
+#endif
     bool patch        : 1;
     bool sample       : 1;
     bool coherent     : 1;
@@ -453,7 +460,11 @@
     }
     bool isInterpolation() const
     {
+#ifdef AMD_EXTENSIONS
+        return flat || smooth || nopersp || explicitInterp;
+#else
         return flat || smooth || nopersp;
+#endif
     }
     bool isAuxiliary() const
     {
@@ -1518,6 +1529,10 @@
             p += snprintf(p, end - p, "flat ");
         if (qualifier.nopersp)
             p += snprintf(p, end - p, "noperspective ");
+#ifdef AMD_EXTENSIONS
+        if (qualifier.explicitInterp)
+            p += snprintf(p, end - p, "__explicitInterpAMD ");
+#endif
         if (qualifier.patch)
             p += snprintf(p, end - p, "patch ");
         if (qualifier.sample)
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index a74b96e..5166e3d 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -246,6 +246,12 @@
     EOpReflect,
     EOpRefract,
 
+#ifdef AMD_EXTENSIONS
+    EOpMin3,
+    EOpMax3,
+    EOpMid3,
+#endif
+
     EOpDPdx,            // Fragment only
     EOpDPdy,            // Fragment only
     EOpFwidth,          // Fragment only
@@ -260,6 +266,10 @@
     EOpInterpolateAtSample,   // Fragment only
     EOpInterpolateAtOffset,   // Fragment only
 
+#ifdef AMD_EXTENSIONS
+    EOpInterpolateAtVertex,
+#endif
+
     EOpMatrixTimesMatrix,
     EOpOuterProduct,
     EOpDeterminant,
@@ -291,6 +301,23 @@
     EOpAllInvocations,
     EOpAllInvocationsEqual,
 
+#ifdef AMD_EXTENSIONS
+    EOpMinInvocations,
+    EOpMaxInvocations,
+    EOpAddInvocations,
+    EOpMinInvocationsNonUniform,
+    EOpMaxInvocationsNonUniform,
+    EOpAddInvocationsNonUniform,
+    EOpSwizzleInvocations,
+    EOpSwizzleInvocationsMasked,
+    EOpWriteInvocation,
+    EOpMbcnt,
+
+    EOpCubeFaceIndex,
+    EOpCubeFaceCoord,
+    EOpTime,
+#endif
+
     EOpAtomicAdd,
     EOpAtomicMin,
     EOpAtomicMax,
@@ -434,6 +461,9 @@
     EOpTextureQueryLod,
     EOpTextureQueryLevels,
     EOpTextureQuerySamples,
+
+    EOpSamplingGuardBegin,
+
     EOpTexture,
     EOpTextureProj,
     EOpTextureLod,
@@ -476,7 +506,7 @@
     EOpSparseTextureGradOffsetClamp,
 
     EOpSparseTextureGuardEnd,
-
+    EOpSamplingGuardEnd,
     EOpTextureGuardEnd,
 
     //
@@ -538,6 +568,17 @@
     EOpMethodGather,                     // ...
     EOpMethodCalculateLevelOfDetail,     // ...
     EOpMethodCalculateLevelOfDetailUnclamped,     // ...
+
+    // SM5 texture methods
+    EOpMethodGatherRed,                  // These are covered under the above EOpMethodSample comment about
+    EOpMethodGatherGreen,                // translation to existing AST opcodes.  They exist temporarily
+    EOpMethodGatherBlue,                 // because HLSL arguments are slightly different.
+    EOpMethodGatherAlpha,                // ...
+    EOpMethodGatherCmp,                  // ...
+    EOpMethodGatherCmpRed,               // ...
+    EOpMethodGatherCmpGreen,             // ...
+    EOpMethodGatherCmpBlue,              // ...
+    EOpMethodGatherCmpAlpha,             // ...
 };
 
 class TIntermTraverser;
@@ -772,11 +813,27 @@
     virtual bool promote() { return true; }
     bool modifiesState() const;
     bool isConstructor() const;
-    bool isTexture() const { return op > EOpTextureGuardBegin && op < EOpTextureGuardEnd; }
-    bool isImage()   const { return op > EOpImageGuardBegin   && op < EOpImageGuardEnd; }
+    bool isTexture()  const { return op > EOpTextureGuardBegin  && op < EOpTextureGuardEnd; }
+    bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; }
+    bool isImage()    const { return op > EOpImageGuardBegin    && op < EOpImageGuardEnd; }
     bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; }
     bool isSparseImage()   const { return op == EOpSparseImageLoad; }
 
+    void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; }
+    TPrecisionQualifier getOperationPrecision() const { return operationPrecision != EpqNone ?
+                                                                                     operationPrecision :
+                                                                                     type.getQualifier().precision; }
+    TString getCompleteString() const
+    {
+        TString cs = type.getCompleteString();
+        if (getOperationPrecision() != type.getQualifier().precision) {
+            cs += ", operation at ";
+            cs += GetPrecisionQualifierString(getOperationPrecision());
+        }
+
+        return cs;
+    }
+
     // Crack the op into the individual dimensions of texturing operation.
     void crackTexture(TSampler sampler, TCrackedTextureOp& cracked) const
     {
@@ -908,9 +965,15 @@
     }
 
 protected:
-    TIntermOperator(TOperator o) : TIntermTyped(EbtFloat), op(o) {}
-    TIntermOperator(TOperator o, TType& t) : TIntermTyped(t), op(o) {}
+    TIntermOperator(TOperator o) : TIntermTyped(EbtFloat), op(o), operationPrecision(EpqNone) {}
+    TIntermOperator(TOperator o, TType& t) : TIntermTyped(t), op(o), operationPrecision(EpqNone) {}
     TOperator op;
+    // The result precision is in the inherited TType, and is usually meant to be both
+    // the operation precision and the result precision. However, some more complex things,
+    // like built-in function calls, distinguish between the two, in which case non-EqpNone
+    // 'operationPrecision' overrides the result precision as far as operation precision
+    // is concerned.
+    TPrecisionQualifier operationPrecision;
 };
 
 //
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index e338849..bcaf087 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 "SPIRV99.947"
-#define GLSLANG_DATE "15-Feb-2016"
+#define GLSLANG_REVISION "SPIRV99.1383"
+#define GLSLANG_DATE "04-Aug-2016"
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 871e788..0323c1b 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -801,10 +801,85 @@
             "bvec3 notEqual(u64vec3, u64vec3);"
             "bvec4 notEqual(u64vec4, u64vec4);"
 
+#ifdef AMD_EXTENSIONS
+            "int   findLSB(int64_t);"
+            "ivec2 findLSB(i64vec2);"
+            "ivec3 findLSB(i64vec3);"
+            "ivec4 findLSB(i64vec4);"
+
+            "int   findLSB(uint64_t);"
+            "ivec2 findLSB(u64vec2);"
+            "ivec3 findLSB(u64vec3);"
+            "ivec4 findLSB(u64vec4);"
+
+            "int   findMSB(int64_t);"
+            "ivec2 findMSB(i64vec2);"
+            "ivec3 findMSB(i64vec3);"
+            "ivec4 findMSB(i64vec4);"
+
+            "int   findMSB(uint64_t);"
+            "ivec2 findMSB(u64vec2);"
+            "ivec3 findMSB(u64vec3);"
+            "ivec4 findMSB(u64vec4);"
+#endif
             "\n"
         );
     }
 
+#ifdef AMD_EXTENSIONS
+    // GL_AMD_shader_trinary_minmax
+    if (profile != EEsProfile && version >= 430) {
+        commonBuiltins.append(
+            "float min3(float, float, float);"
+            "vec2  min3(vec2,  vec2,  vec2);"
+            "vec3  min3(vec3,  vec3,  vec3);"
+            "vec4  min3(vec4,  vec4,  vec4);"
+
+            "int   min3(int,   int,   int);"
+            "ivec2 min3(ivec2, ivec2, ivec2);"
+            "ivec3 min3(ivec3, ivec3, ivec3);"
+            "ivec4 min3(ivec4, ivec4, ivec4);"
+
+            "uint  min3(uint,  uint,  uint);"
+            "uvec2 min3(uvec2, uvec2, uvec2);"
+            "uvec3 min3(uvec3, uvec3, uvec3);"
+            "uvec4 min3(uvec4, uvec4, uvec4);"
+
+            "float max3(float, float, float);"
+            "vec2  max3(vec2,  vec2,  vec2);"
+            "vec3  max3(vec3,  vec3,  vec3);"
+            "vec4  max3(vec4,  vec4,  vec4);"
+
+            "int   max3(int,   int,   int);"
+            "ivec2 max3(ivec2, ivec2, ivec2);"
+            "ivec3 max3(ivec3, ivec3, ivec3);"
+            "ivec4 max3(ivec4, ivec4, ivec4);"
+
+            "uint  max3(uint,  uint,  uint);"
+            "uvec2 max3(uvec2, uvec2, uvec2);"
+            "uvec3 max3(uvec3, uvec3, uvec3);"
+            "uvec4 max3(uvec4, uvec4, uvec4);"
+
+            "float mid3(float, float, float);"
+            "vec2  mid3(vec2,  vec2,  vec2);"
+            "vec3  mid3(vec3,  vec3,  vec3);"
+            "vec4  mid3(vec4,  vec4,  vec4);"
+
+            "int   mid3(int,   int,   int);"
+            "ivec2 mid3(ivec2, ivec2, ivec2);"
+            "ivec3 mid3(ivec3, ivec3, ivec3);"
+            "ivec4 mid3(ivec4, ivec4, ivec4);"
+
+            "uint  mid3(uint,  uint,  uint);"
+            "uvec2 mid3(uvec2, uvec2, uvec2);"
+            "uvec3 mid3(uvec3, uvec3, uvec3);"
+            "uvec4 mid3(uvec4, uvec4, uvec4);"
+
+            "\n"
+        );
+    }
+#endif
+
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 430)) {
         commonBuiltins.append(
@@ -859,25 +934,25 @@
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 330)) {
         commonBuiltins.append(
-            "highp int   floatBitsToInt(highp float value);"
-            "highp ivec2 floatBitsToInt(highp vec2  value);"
-            "highp ivec3 floatBitsToInt(highp vec3  value);"
-            "highp ivec4 floatBitsToInt(highp vec4  value);"
-                     
-            "highp uint  floatBitsToUint(highp float value);"
-            "highp uvec2 floatBitsToUint(highp vec2  value);"
-            "highp uvec3 floatBitsToUint(highp vec3  value);"
-            "highp uvec4 floatBitsToUint(highp vec4  value);"
+            "int   floatBitsToInt(highp float value);"
+            "ivec2 floatBitsToInt(highp vec2  value);"
+            "ivec3 floatBitsToInt(highp vec3  value);"
+            "ivec4 floatBitsToInt(highp vec4  value);"
 
-            "highp float intBitsToFloat(highp int   value);"
-            "highp vec2  intBitsToFloat(highp ivec2 value);"
-            "highp vec3  intBitsToFloat(highp ivec3 value);"
-            "highp vec4  intBitsToFloat(highp ivec4 value);"
+            "uint  floatBitsToUint(highp float value);"
+            "uvec2 floatBitsToUint(highp vec2  value);"
+            "uvec3 floatBitsToUint(highp vec3  value);"
+            "uvec4 floatBitsToUint(highp vec4  value);"
 
-            "highp float uintBitsToFloat(highp uint  value);"
-            "highp vec2  uintBitsToFloat(highp uvec2 value);"
-            "highp vec3  uintBitsToFloat(highp uvec3 value);"
-            "highp vec4  uintBitsToFloat(highp uvec4 value);"
+            "float intBitsToFloat(highp int   value);"
+            "vec2  intBitsToFloat(highp ivec2 value);"
+            "vec3  intBitsToFloat(highp ivec3 value);"
+            "vec4  intBitsToFloat(highp ivec4 value);"
+
+            "float uintBitsToFloat(highp uint  value);"
+            "vec2  uintBitsToFloat(highp uvec2 value);"
+            "vec3  uintBitsToFloat(highp uvec3 value);"
+            "vec4  uintBitsToFloat(highp uvec4 value);"
 
             "\n");
     }
@@ -905,15 +980,15 @@
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 400)) {
         commonBuiltins.append(
-            "highp float frexp(highp float, out highp int);"
-            "highp vec2  frexp(highp vec2,  out highp ivec2);"
-            "highp vec3  frexp(highp vec3,  out highp ivec3);"
-            "highp vec4  frexp(highp vec4,  out highp ivec4);"
+            "float frexp(highp float, out highp int);"
+            "vec2  frexp(highp vec2,  out highp ivec2);"
+            "vec3  frexp(highp vec3,  out highp ivec3);"
+            "vec4  frexp(highp vec4,  out highp ivec4);"
 
-            "highp float ldexp(highp float, highp int);"
-            "highp vec2  ldexp(highp vec2,  highp ivec2);"
-            "highp vec3  ldexp(highp vec3,  highp ivec3);"
-            "highp vec4  ldexp(highp vec4,  highp ivec4);"
+            "float ldexp(highp float, highp int);"
+            "vec2  ldexp(highp vec2,  highp ivec2);"
+            "vec3  ldexp(highp vec3,  highp ivec3);"
+            "vec4  ldexp(highp vec4,  highp ivec4);"
 
             "\n");
     }
@@ -940,7 +1015,7 @@
         (profile != EEsProfile && version >= 400)) {
         commonBuiltins.append(
             "highp uint packUnorm2x16(vec2);"
-            "highp vec2 unpackUnorm2x16(highp uint);"
+                  "vec2 unpackUnorm2x16(highp uint);"
             "\n");
     }
 
@@ -949,18 +1024,37 @@
         commonBuiltins.append(
             "highp uint packSnorm2x16(vec2);"
             "      vec2 unpackSnorm2x16(highp uint);"
-            "highp uint packHalf2x16(mediump vec2);"
-            "      vec2 unpackHalf2x16(highp uint);"
+            "highp uint packHalf2x16(vec2);"
+            "\n");
+    }
+
+    if (profile == EEsProfile && version >= 300) {
+        commonBuiltins.append(
+            "mediump vec2 unpackHalf2x16(highp uint);"
+            "\n");
+    } else if (profile != EEsProfile && version >= 420) {
+        commonBuiltins.append(
+            "        vec2 unpackHalf2x16(highp uint);"
             "\n");
     }
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 400)) {
         commonBuiltins.append(
-            "highp   uint packSnorm4x8  (mediump vec4);"
-            "        vec4 unpackSnorm4x8(highp   uint);"
-            "highp   uint packUnorm4x8  (mediump vec4);"
-            "        vec4 unpackUnorm4x8(highp   uint);"
+            "highp uint packSnorm4x8(vec4);"
+            "highp uint packUnorm4x8(vec4);"
+            "\n");
+    }
+
+    if (profile == EEsProfile && version >= 310) {
+        commonBuiltins.append(
+            "mediump vec4 unpackSnorm4x8(highp uint);"
+            "mediump vec4 unpackUnorm4x8(highp uint);"
+            "\n");
+    } else if (profile != EEsProfile && version >= 400) {
+        commonBuiltins.append(
+                    "vec4 unpackSnorm4x8(highp uint);"
+                    "vec4 unpackUnorm4x8(highp uint);"
             "\n");
     }
 
@@ -1297,6 +1391,11 @@
             "uvec3 bitfieldInsert(uvec3 base, uvec3, int, int);"
             "uvec4 bitfieldInsert(uvec4 base, uvec4, int, int);"
 
+            "\n");
+    }
+
+    if (profile != EEsProfile && version >= 400) {
+        commonBuiltins.append(
             "  int findLSB(  int);"
             "ivec2 findLSB(ivec2);"
             "ivec3 findLSB(ivec3);"
@@ -1308,95 +1407,23 @@
             "ivec4 findLSB(uvec4);"
 
             "\n");
-    }
-
-    if (profile != EEsProfile && version >= 400) {
+    } else if (profile == EEsProfile && version >= 310) {
         commonBuiltins.append(
-            " uint uaddCarry( uint,  uint, out  uint carry);"
-            "uvec2 uaddCarry(uvec2, uvec2, out uvec2 carry);"
-            "uvec3 uaddCarry(uvec3, uvec3, out uvec3 carry);"
-            "uvec4 uaddCarry(uvec4, uvec4, out uvec4 carry);"
+            "lowp   int findLSB(  int);"
+            "lowp ivec2 findLSB(ivec2);"
+            "lowp ivec3 findLSB(ivec3);"
+            "lowp ivec4 findLSB(ivec4);"
 
-            " uint usubBorrow( uint,  uint, out  uint borrow);"
-            "uvec2 usubBorrow(uvec2, uvec2, out uvec2 borrow);"
-            "uvec3 usubBorrow(uvec3, uvec3, out uvec3 borrow);"
-            "uvec4 usubBorrow(uvec4, uvec4, out uvec4 borrow);"
-
-            "void umulExtended( uint,  uint, out  uint, out  uint lsb);"
-            "void umulExtended(uvec2, uvec2, out uvec2, out uvec2 lsb);"
-            "void umulExtended(uvec3, uvec3, out uvec3, out uvec3 lsb);"
-            "void umulExtended(uvec4, uvec4, out uvec4, out uvec4 lsb);"
-
-            "void imulExtended(  int,   int, out   int, out   int lsb);"
-            "void imulExtended(ivec2, ivec2, out ivec2, out ivec2 lsb);"
-            "void imulExtended(ivec3, ivec3, out ivec3, out ivec3 lsb);"
-            "void imulExtended(ivec4, ivec4, out ivec4, out ivec4 lsb);"
-
-            "  int bitfieldReverse(  int);"
-            "ivec2 bitfieldReverse(ivec2);"
-            "ivec3 bitfieldReverse(ivec3);"
-            "ivec4 bitfieldReverse(ivec4);"
-
-            " uint bitfieldReverse( uint);"
-            "uvec2 bitfieldReverse(uvec2);"
-            "uvec3 bitfieldReverse(uvec3);"
-            "uvec4 bitfieldReverse(uvec4);"
-
-            "  int bitCount(  int);"
-            "ivec2 bitCount(ivec2);"
-            "ivec3 bitCount(ivec3);"
-            "ivec4 bitCount(ivec4);"
-
-            "  int bitCount( uint);"
-            "ivec2 bitCount(uvec2);"
-            "ivec3 bitCount(uvec3);"
-            "ivec4 bitCount(uvec4);"
-
-            "  int findMSB(  int);"
-            "ivec2 findMSB(ivec2);"
-            "ivec3 findMSB(ivec3);"
-            "ivec4 findMSB(ivec4);"
-
-            "  int findMSB( uint);"
-            "ivec2 findMSB(uvec2);"
-            "ivec3 findMSB(uvec3);"
-            "ivec4 findMSB(uvec4);"
+            "lowp   int findLSB( uint);"
+            "lowp ivec2 findLSB(uvec2);"
+            "lowp ivec3 findLSB(uvec3);"
+            "lowp ivec4 findLSB(uvec4);"
 
             "\n");
     }
 
-    if (profile == EEsProfile && version >= 310) {
+    if (profile != EEsProfile && version >= 400) {
         commonBuiltins.append(
-            "highp  uint uaddCarry(highp  uint, highp  uint, out lowp  uint carry);"
-            "highp uvec2 uaddCarry(highp uvec2, highp uvec2, out lowp uvec2 carry);"
-            "highp uvec3 uaddCarry(highp uvec3, highp uvec3, out lowp uvec3 carry);"
-            "highp uvec4 uaddCarry(highp uvec4, highp uvec4, out lowp uvec4 carry);"
-
-            "highp  uint usubBorrow(highp  uint, highp  uint, out lowp  uint borrow);"
-            "highp uvec2 usubBorrow(highp uvec2, highp uvec2, out lowp uvec2 borrow);"
-            "highp uvec3 usubBorrow(highp uvec3, highp uvec3, out lowp uvec3 borrow);"
-            "highp uvec4 usubBorrow(highp uvec4, highp uvec4, out lowp uvec4 borrow);"
-
-            "void umulExtended(highp  uint, highp  uint, highp out  uint, out highp  uint lsb);"
-            "void umulExtended(highp uvec2, highp uvec2, highp out uvec2, out highp uvec2 lsb);"
-            "void umulExtended(highp uvec3, highp uvec3, highp out uvec3, out highp uvec3 lsb);"
-            "void umulExtended(highp uvec4, highp uvec4, highp out uvec4, out highp uvec4 lsb);"
-
-            "void imulExtended(highp   int, highp   int, highp out   int, out highp   int lsb);"
-            "void imulExtended(highp ivec2, highp ivec2, highp out ivec2, out highp ivec2 lsb);"
-            "void imulExtended(highp ivec3, highp ivec3, highp out ivec3, out highp ivec3 lsb);"
-            "void imulExtended(highp ivec4, highp ivec4, highp out ivec4, out highp ivec4 lsb);"
-
-            "highp   int bitfieldReverse(highp   int);"
-            "highp ivec2 bitfieldReverse(highp ivec2);"
-            "highp ivec3 bitfieldReverse(highp ivec3);"
-            "highp ivec4 bitfieldReverse(highp ivec4);"
-
-            "highp  uint bitfieldReverse(highp  uint);"
-            "highp uvec2 bitfieldReverse(highp uvec2);"
-            "highp uvec3 bitfieldReverse(highp uvec3);"
-            "highp uvec4 bitfieldReverse(highp uvec4);"
-
             "  int bitCount(  int);"
             "ivec2 bitCount(ivec2);"
             "ivec3 bitCount(ivec3);"
@@ -1416,6 +1443,67 @@
             "ivec2 findMSB(highp uvec2);"
             "ivec3 findMSB(highp uvec3);"
             "ivec4 findMSB(highp uvec4);"
+
+            "\n");
+    }
+
+    if ((profile == EEsProfile && version >= 310) ||
+        (profile != EEsProfile && version >= 400)) {
+        commonBuiltins.append(
+            " uint uaddCarry(highp  uint, highp  uint, out lowp  uint carry);"
+            "uvec2 uaddCarry(highp uvec2, highp uvec2, out lowp uvec2 carry);"
+            "uvec3 uaddCarry(highp uvec3, highp uvec3, out lowp uvec3 carry);"
+            "uvec4 uaddCarry(highp uvec4, highp uvec4, out lowp uvec4 carry);"
+
+            " uint usubBorrow(highp  uint, highp  uint, out lowp  uint borrow);"
+            "uvec2 usubBorrow(highp uvec2, highp uvec2, out lowp uvec2 borrow);"
+            "uvec3 usubBorrow(highp uvec3, highp uvec3, out lowp uvec3 borrow);"
+            "uvec4 usubBorrow(highp uvec4, highp uvec4, out lowp uvec4 borrow);"
+
+            "void umulExtended(highp  uint, highp  uint, highp out  uint, out highp  uint lsb);"
+            "void umulExtended(highp uvec2, highp uvec2, highp out uvec2, out highp uvec2 lsb);"
+            "void umulExtended(highp uvec3, highp uvec3, highp out uvec3, out highp uvec3 lsb);"
+            "void umulExtended(highp uvec4, highp uvec4, highp out uvec4, out highp uvec4 lsb);"
+
+            "void imulExtended(highp   int, highp   int, highp out   int, out highp   int lsb);"
+            "void imulExtended(highp ivec2, highp ivec2, highp out ivec2, out highp ivec2 lsb);"
+            "void imulExtended(highp ivec3, highp ivec3, highp out ivec3, out highp ivec3 lsb);"
+            "void imulExtended(highp ivec4, highp ivec4, highp out ivec4, out highp ivec4 lsb);"
+
+            "  int bitfieldReverse(highp   int);"
+            "ivec2 bitfieldReverse(highp ivec2);"
+            "ivec3 bitfieldReverse(highp ivec3);"
+            "ivec4 bitfieldReverse(highp ivec4);"
+
+            " uint bitfieldReverse(highp  uint);"
+            "uvec2 bitfieldReverse(highp uvec2);"
+            "uvec3 bitfieldReverse(highp uvec3);"
+            "uvec4 bitfieldReverse(highp uvec4);"
+
+            "\n");
+    }
+
+    if (profile == EEsProfile && version >= 310) {
+        commonBuiltins.append(
+            "lowp   int bitCount(  int);"
+            "lowp ivec2 bitCount(ivec2);"
+            "lowp ivec3 bitCount(ivec3);"
+            "lowp ivec4 bitCount(ivec4);"
+
+            "lowp   int bitCount( uint);"
+            "lowp ivec2 bitCount(uvec2);"
+            "lowp ivec3 bitCount(uvec3);"
+            "lowp ivec4 bitCount(uvec4);"
+
+            "lowp   int findMSB(highp   int);"
+            "lowp ivec2 findMSB(highp ivec2);"
+            "lowp ivec3 findMSB(highp ivec3);"
+            "lowp ivec4 findMSB(highp ivec4);"
+
+            "lowp   int findMSB(highp  uint);"
+            "lowp ivec2 findMSB(highp uvec2);"
+            "lowp ivec3 findMSB(highp uvec3);"
+            "lowp ivec4 findMSB(highp uvec4);"
             
             "\n");
     }
@@ -1468,6 +1556,161 @@
             "\n");
     }
 
+#ifdef AMD_EXTENSIONS
+    // GL_AMD_shader_ballot
+    if (profile != EEsProfile && version >= 450) {
+        commonBuiltins.append(
+            "float minInvocationsAMD(float);"
+            "vec2  minInvocationsAMD(vec2);"
+            "vec3  minInvocationsAMD(vec3);"
+            "vec4  minInvocationsAMD(vec4);"
+
+            "int   minInvocationsAMD(int);"
+            "ivec2 minInvocationsAMD(ivec2);"
+            "ivec3 minInvocationsAMD(ivec3);"
+            "ivec4 minInvocationsAMD(ivec4);"
+
+            "uint  minInvocationsAMD(uint);"
+            "uvec2 minInvocationsAMD(uvec2);"
+            "uvec3 minInvocationsAMD(uvec3);"
+            "uvec4 minInvocationsAMD(uvec4);"
+
+            "float maxInvocationsAMD(float);"
+            "vec2  maxInvocationsAMD(vec2);"
+            "vec3  maxInvocationsAMD(vec3);"
+            "vec4  maxInvocationsAMD(vec4);"
+
+            "int   maxInvocationsAMD(int);"
+            "ivec2 maxInvocationsAMD(ivec2);"
+            "ivec3 maxInvocationsAMD(ivec3);"
+            "ivec4 maxInvocationsAMD(ivec4);"
+
+            "uint  maxInvocationsAMD(uint);"
+            "uvec2 maxInvocationsAMD(uvec2);"
+            "uvec3 maxInvocationsAMD(uvec3);"
+            "uvec4 maxInvocationsAMD(uvec4);"
+
+            "float addInvocationsAMD(float);"
+            "vec2  addInvocationsAMD(vec2);"
+            "vec3  addInvocationsAMD(vec3);"
+            "vec4  addInvocationsAMD(vec4);"
+
+            "int   addInvocationsAMD(int);"
+            "ivec2 addInvocationsAMD(ivec2);"
+            "ivec3 addInvocationsAMD(ivec3);"
+            "ivec4 addInvocationsAMD(ivec4);"
+
+            "uint  addInvocationsAMD(uint);"
+            "uvec2 addInvocationsAMD(uvec2);"
+            "uvec3 addInvocationsAMD(uvec3);"
+            "uvec4 addInvocationsAMD(uvec4);"
+
+            "float minInvocationsNonUniformAMD(float);"
+            "vec2  minInvocationsNonUniformAMD(vec2);"
+            "vec3  minInvocationsNonUniformAMD(vec3);"
+            "vec4  minInvocationsNonUniformAMD(vec4);"
+
+            "int   minInvocationsNonUniformAMD(int);"
+            "ivec2 minInvocationsNonUniformAMD(ivec2);"
+            "ivec3 minInvocationsNonUniformAMD(ivec3);"
+            "ivec4 minInvocationsNonUniformAMD(ivec4);"
+
+            "uint  minInvocationsNonUniformAMD(uint);"
+            "uvec2 minInvocationsNonUniformAMD(uvec2);"
+            "uvec3 minInvocationsNonUniformAMD(uvec3);"
+            "uvec4 minInvocationsNonUniformAMD(uvec4);"
+
+            "float maxInvocationsNonUniformAMD(float);"
+            "vec2  maxInvocationsNonUniformAMD(vec2);"
+            "vec3  maxInvocationsNonUniformAMD(vec3);"
+            "vec4  maxInvocationsNonUniformAMD(vec4);"
+
+            "int   maxInvocationsNonUniformAMD(int);"
+            "ivec2 maxInvocationsNonUniformAMD(ivec2);"
+            "ivec3 maxInvocationsNonUniformAMD(ivec3);"
+            "ivec4 maxInvocationsNonUniformAMD(ivec4);"
+
+            "uint  maxInvocationsNonUniformAMD(uint);"
+            "uvec2 maxInvocationsNonUniformAMD(uvec2);"
+            "uvec3 maxInvocationsNonUniformAMD(uvec3);"
+            "uvec4 maxInvocationsNonUniformAMD(uvec4);"
+
+            "float addInvocationsNonUniformAMD(float);"
+            "vec2  addInvocationsNonUniformAMD(vec2);"
+            "vec3  addInvocationsNonUniformAMD(vec3);"
+            "vec4  addInvocationsNonUniformAMD(vec4);"
+
+            "int   addInvocationsNonUniformAMD(int);"
+            "ivec2 addInvocationsNonUniformAMD(ivec2);"
+            "ivec3 addInvocationsNonUniformAMD(ivec3);"
+            "ivec4 addInvocationsNonUniformAMD(ivec4);"
+
+            "uint  addInvocationsNonUniformAMD(uint);"
+            "uvec2 addInvocationsNonUniformAMD(uvec2);"
+            "uvec3 addInvocationsNonUniformAMD(uvec3);"
+            "uvec4 addInvocationsNonUniformAMD(uvec4);"
+
+            "float swizzleInvocationsAMD(float, uvec4);"
+            "vec2  swizzleInvocationsAMD(vec2,  uvec4);"
+            "vec3  swizzleInvocationsAMD(vec3,  uvec4);"
+            "vec4  swizzleInvocationsAMD(vec4,  uvec4);"
+
+            "int   swizzleInvocationsAMD(int,   uvec4);"
+            "ivec2 swizzleInvocationsAMD(ivec2, uvec4);"
+            "ivec3 swizzleInvocationsAMD(ivec3, uvec4);"
+            "ivec4 swizzleInvocationsAMD(ivec4, uvec4);"
+
+            "uint  swizzleInvocationsAMD(uint,  uvec4);"
+            "uvec2 swizzleInvocationsAMD(uvec2, uvec4);"
+            "uvec3 swizzleInvocationsAMD(uvec3, uvec4);"
+            "uvec4 swizzleInvocationsAMD(uvec4, uvec4);"
+
+            "float swizzleInvocationsMaskedAMD(float, uvec3);"
+            "vec2  swizzleInvocationsMaskedAMD(vec2,  uvec3);"
+            "vec3  swizzleInvocationsMaskedAMD(vec3,  uvec3);"
+            "vec4  swizzleInvocationsMaskedAMD(vec4,  uvec3);"
+
+            "int   swizzleInvocationsMaskedAMD(int,   uvec3);"
+            "ivec2 swizzleInvocationsMaskedAMD(ivec2, uvec3);"
+            "ivec3 swizzleInvocationsMaskedAMD(ivec3, uvec3);"
+            "ivec4 swizzleInvocationsMaskedAMD(ivec4, uvec3);"
+
+            "uint  swizzleInvocationsMaskedAMD(uint,  uvec3);"
+            "uvec2 swizzleInvocationsMaskedAMD(uvec2, uvec3);"
+            "uvec3 swizzleInvocationsMaskedAMD(uvec3, uvec3);"
+            "uvec4 swizzleInvocationsMaskedAMD(uvec4, uvec3);"
+
+            "float writeInvocationAMD(float, float, uint);"
+            "vec2  writeInvocationAMD(vec2,  vec2,  uint);"
+            "vec3  writeInvocationAMD(vec3,  vec3,  uint);"
+            "vec4  writeInvocationAMD(vec4,  vec4,  uint);"
+
+            "int   writeInvocationAMD(int,   int,   uint);"
+            "ivec2 writeInvocationAMD(ivec2, ivec2, uint);"
+            "ivec3 writeInvocationAMD(ivec3, ivec3, uint);"
+            "ivec4 writeInvocationAMD(ivec4, ivec4, uint);"
+
+            "uint  writeInvocationAMD(uint,  uint,  uint);"
+            "uvec2 writeInvocationAMD(uvec2, uvec2, uint);"
+            "uvec3 writeInvocationAMD(uvec3, uvec3, uint);"
+            "uvec4 writeInvocationAMD(uvec4, uvec4, uint);"
+
+            "uint mbcntAMD(uint64_t);"
+
+            "\n");
+    }
+
+    // GL_AMD_gcn_shader
+    if (profile != EEsProfile && version >= 450) {
+        commonBuiltins.append(
+            "float cubeFaceIndexAMD(vec3);"
+            "vec2 cubeFaceCoordAMD(vec3);"
+            "uint64_t timeAMD();"
+
+            "\n");
+    }
+#endif
+
     //============================================================================
     //
     // Prototypes for built-in functions seen by vertex shaders only.
@@ -1713,6 +1956,29 @@
             "\n");
     }
 
+#ifdef AMD_EXTENSIONS
+    // GL_AMD_shader_explicit_vertex_parameter
+    if (profile != EEsProfile && version >= 450) {
+        stageBuiltins[EShLangFragment].append(
+            "float interpolateAtVertexAMD(float, uint);"
+            "vec2  interpolateAtVertexAMD(vec2,  uint);"
+            "vec3  interpolateAtVertexAMD(vec3,  uint);"
+            "vec4  interpolateAtVertexAMD(vec4,  uint);"
+
+            "int   interpolateAtVertexAMD(int,   uint);"
+            "ivec2 interpolateAtVertexAMD(ivec2, uint);"
+            "ivec3 interpolateAtVertexAMD(ivec3, uint);"
+            "ivec4 interpolateAtVertexAMD(ivec4, uint);"
+
+            "uint  interpolateAtVertexAMD(uint,  uint);"
+            "uvec2 interpolateAtVertexAMD(uvec2, uint);"
+            "uvec3 interpolateAtVertexAMD(uvec3, uint);"
+            "uvec4 interpolateAtVertexAMD(uvec4, uint);"
+
+            "\n");
+    }
+#endif
+
     //============================================================================
     //
     // Standard Uniforms
@@ -2332,6 +2598,19 @@
                 "in float gl_CullDistance[];"
                 "bool gl_HelperInvocation;"     // needs qualifier fixed later
                 );
+
+#ifdef AMD_EXTENSIONS
+        if (version >= 450)
+            stageBuiltins[EShLangFragment].append(
+                "in vec2 gl_BaryCoordNoPerspAMD;"
+                "in vec2 gl_BaryCoordNoPerspCentroidAMD;"
+                "in vec2 gl_BaryCoordNoPerspSampleAMD;"
+                "in vec2 gl_BaryCoordSmoothAMD;"
+                "in vec2 gl_BaryCoordSmoothCentroidAMD;"
+                "in vec2 gl_BaryCoordSmoothSampleAMD;"
+                "in vec3 gl_BaryCoordPullModelAMD;"
+                );
+#endif
     } else {
         // ES profile
 
@@ -3460,6 +3739,14 @@
         s.append(builtInConstant);
     }
 
+#ifdef AMD_EXTENSIONS
+    // GL_AMD_gcn_shader
+    if (profile != EEsProfile && version >= 450) {
+        snprintf(builtInConstant, maxSize, "const int gl_SIMDGroupSizeAMD = 64;");
+        s.append(builtInConstant);
+    }
+#endif
+
     s.append("\n");
 }
 
@@ -3588,6 +3875,33 @@
             symbolTable.setFunctionExtensions("allInvocationsEqualARB", 1, &E_GL_ARB_shader_group_vote);
         }
 
+#ifdef AMD_EXTENSIONS
+        if (profile != EEsProfile) {
+            symbolTable.setFunctionExtensions("minInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("maxInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("addInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("minInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("maxInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("addInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("swizzleInvocationsAMD",            1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("swizzleInvocationsWithPatternAMD", 1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("writeInvocationAMD",               1, &E_GL_AMD_shader_ballot);
+            symbolTable.setFunctionExtensions("mbcntAMD",                         1, &E_GL_AMD_shader_ballot);
+        }
+
+        if (profile != EEsProfile) {
+            symbolTable.setFunctionExtensions("min3", 1, &E_GL_AMD_shader_trinary_minmax);
+            symbolTable.setFunctionExtensions("max3", 1, &E_GL_AMD_shader_trinary_minmax);
+            symbolTable.setFunctionExtensions("mid3", 1, &E_GL_AMD_shader_trinary_minmax);
+        }
+
+        if (profile != EEsProfile) {
+            symbolTable.setFunctionExtensions("cubeFaceIndexAMD", 1, &E_GL_AMD_gcn_shader);
+            symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader);
+            symbolTable.setFunctionExtensions("timeAMD",          1, &E_GL_AMD_gcn_shader);
+        }
+#endif
+
         // Compatibility variables, vertex only
         if (spvVersion.spv == 0) {
             BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
@@ -3872,6 +4186,29 @@
             symbolTable.setFunctionExtensions("textureGradOffsetClampARB",          1, &E_GL_ARB_sparse_texture_clamp);
         }
 
+#ifdef AMD_EXTENSIONS
+        // E_GL_AMD_shader_explicit_vertex_parameter
+        if (profile != EEsProfile) {
+            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspAMD",         1, &E_GL_AMD_shader_explicit_vertex_parameter);
+            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspCentroidAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter);
+            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspSampleAMD",   1, &E_GL_AMD_shader_explicit_vertex_parameter);
+            symbolTable.setVariableExtensions("gl_BaryCoordSmoothAMD",          1, &E_GL_AMD_shader_explicit_vertex_parameter);
+            symbolTable.setVariableExtensions("gl_BaryCoordSmoothCentroidAMD",  1, &E_GL_AMD_shader_explicit_vertex_parameter);
+            symbolTable.setVariableExtensions("gl_BaryCoordSmoothSampleAMD",    1, &E_GL_AMD_shader_explicit_vertex_parameter);
+            symbolTable.setVariableExtensions("gl_BaryCoordPullModelAMD",       1, &E_GL_AMD_shader_explicit_vertex_parameter);
+
+            symbolTable.setFunctionExtensions("interpolateAtVertexAMD",         1, &E_GL_AMD_shader_explicit_vertex_parameter);
+
+            BuiltInVariable("gl_BaryCoordNoPerspAMD",           EbvBaryCoordNoPersp,         symbolTable);
+            BuiltInVariable("gl_BaryCoordNoPerspCentroidAMD",   EbvBaryCoordNoPerspCentroid, symbolTable);
+            BuiltInVariable("gl_BaryCoordNoPerspSampleAMD",     EbvBaryCoordNoPerspSample,   symbolTable);
+            BuiltInVariable("gl_BaryCoordSmoothAMD",            EbvBaryCoordSmooth,          symbolTable);
+            BuiltInVariable("gl_BaryCoordSmoothCentroidAMD",    EbvBaryCoordSmoothCentroid,  symbolTable);
+            BuiltInVariable("gl_BaryCoordSmoothSampleAMD",      EbvBaryCoordSmoothSample,    symbolTable);
+            BuiltInVariable("gl_BaryCoordPullModelAMD",         EbvBaryCoordPullModel,       symbolTable);
+        }
+#endif
+
         symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
 
         if (profile == EEsProfile) {
@@ -4205,6 +4542,27 @@
             symbolTable.relateToOperator("anyInvocationARB",                EOpAnyInvocation);
             symbolTable.relateToOperator("allInvocationsARB",               EOpAllInvocations);
             symbolTable.relateToOperator("allInvocationsEqualARB",          EOpAllInvocationsEqual);
+
+#ifdef AMD_EXTENSIONS
+            symbolTable.relateToOperator("minInvocationsAMD",               EOpMinInvocations);
+            symbolTable.relateToOperator("maxInvocationsAMD",               EOpMaxInvocations);
+            symbolTable.relateToOperator("addInvocationsAMD",               EOpAddInvocations);
+            symbolTable.relateToOperator("minInvocationsNonUniformAMD",     EOpMinInvocationsNonUniform);
+            symbolTable.relateToOperator("maxInvocationsNonUniformAMD",     EOpMaxInvocationsNonUniform);
+            symbolTable.relateToOperator("addInvocationsNonUniformAMD",     EOpAddInvocationsNonUniform);
+            symbolTable.relateToOperator("swizzleInvocationsAMD",           EOpSwizzleInvocations);
+            symbolTable.relateToOperator("swizzleInvocationsMaskedAMD",     EOpSwizzleInvocationsMasked);
+            symbolTable.relateToOperator("writeInvocationAMD",              EOpWriteInvocation);
+            symbolTable.relateToOperator("mbcntAMD",                        EOpMbcnt);
+
+            symbolTable.relateToOperator("min3",    EOpMin3);
+            symbolTable.relateToOperator("max3",    EOpMax3);
+            symbolTable.relateToOperator("mid3",    EOpMid3);
+
+            symbolTable.relateToOperator("cubeFaceIndexAMD",    EOpCubeFaceIndex);
+            symbolTable.relateToOperator("cubeFaceCoordAMD",    EOpCubeFaceCoord);
+            symbolTable.relateToOperator("timeAMD",             EOpTime);
+#endif
         }
     }
 
@@ -4238,7 +4596,12 @@
         symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid);
         symbolTable.relateToOperator("interpolateAtSample",   EOpInterpolateAtSample);
         symbolTable.relateToOperator("interpolateAtOffset",   EOpInterpolateAtOffset);
+
+#ifdef AMD_EXTENSIONS
+        if (profile != EEsProfile)
+            symbolTable.relateToOperator("interpolateAtVertexAMD", EOpInterpolateAtVertex);
         break;
+#endif
 
     case EShLangCompute:
         symbolTable.relateToOperator("memoryBarrierShared",     EOpMemoryBarrierShared);
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 02681ac..be828e9 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -98,6 +98,8 @@
 //
 // Returns the added node.
 //
+// Returns nullptr if the working conversions and promotions could not be found.
+//
 TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc)
 {
     // No operations work on blocks
@@ -161,29 +163,38 @@
 //
 // Returns the added node.
 //
+// Returns nullptr if the 'right' type could not be converted to match the 'left' type,
+// or the resulting operation cannot be properly promoted.
+//
 TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc)
 {
     // No block assignment
     if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
-        return 0;
+        return nullptr;
 
     //
     // Like adding binary math, except the conversion can only go
     // from right to left.
     //
+
+    // convert base types, nullptr return means not possible
+    right = addConversion(op, left->getType(), right);
+    if (right == nullptr)
+        return nullptr;
+
+    // convert shape
+    right = addShapeConversion(op, left->getType(), right);
+
+    // build the node
     TIntermBinary* node = new TIntermBinary(op);
     if (loc.line == 0)
         loc = left->getLoc();
     node->setLoc(loc);
-
-    TIntermTyped* child = addConversion(op, left->getType(), right);
-    if (child == 0)
-        return 0;
-
     node->setLeft(left);
-    node->setRight(child);
+    node->setRight(right);
+
     if (! node->promote())
-        return 0;
+        return nullptr;
 
     node->updatePrecision();
 
@@ -330,35 +341,11 @@
         node->setOperand(child);
         node->setType(returnType);
 
-        // propagate precision up from child
-        if (profile == EEsProfile && returnType.getQualifier().precision == EpqNone && returnType.getBasicType() != EbtBool)
-            node->getQualifier().precision = child->getQualifier().precision;
-
-        // propagate precision down to child
-        if (node->getQualifier().precision != EpqNone)
-            child->propagatePrecision(node->getQualifier().precision);
-
         return node;
     } else {
         // setAggregateOperater() calls fold() for constant folding
         TIntermTyped* node = setAggregateOperator(childNode, op, returnType, loc);
 
-        // if not folded, we'll still have an aggregate node to propagate precision with
-        if (node->getAsAggregate()) {
-            TPrecisionQualifier correctPrecision = returnType.getQualifier().precision;
-            if (correctPrecision == EpqNone && profile == EEsProfile) {
-                // find the maximum precision from the arguments, for the built-in's return precision
-                TIntermSequence& sequence = node->getAsAggregate()->getSequence();
-                for (unsigned int arg = 0; arg < sequence.size(); ++arg)
-                    correctPrecision = std::max(correctPrecision, sequence[arg]->getAsTyped()->getQualifier().precision);
-            }
-
-            // Propagate precision through this node and its children. That algorithm stops
-            // when a precision is found, so start by clearing this subroot precision
-            node->getQualifier().precision = EpqNone;
-            node->propagatePrecision(correctPrecision);
-        }
-
         return node;
     }
 }
@@ -414,6 +401,9 @@
 // Returns a node representing the conversion, which could be the same
 // node passed in if no conversion was needed.
 //
+// Generally, this is focused on basic type conversion, not shape conversion.
+// See addShapeConversion().
+//
 // Return 0 if a conversion can't be done.
 //
 TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
@@ -681,6 +671,50 @@
     return newNode;
 }
 
+// Convert the node's shape of type for the given type, as allowed by the
+// operation involved: 'op'.
+//
+// Generally, the AST represents allowed GLSL shapes, so this isn't needed
+// for GLSL.  Bad shapes are caught in conversion or promotion.
+//
+// Return 'node' if no conversion was done. Promotion handles final shape
+// checking.
+//
+TIntermTyped* TIntermediate::addShapeConversion(TOperator op, const TType& type, TIntermTyped* node)
+{
+    // some source languages don't do this
+    switch (source) {
+    case EShSourceHlsl:
+        break;
+    case EShSourceGlsl:
+    default:
+        return node;
+    }
+
+    // some operations don't do this
+    switch (op) {
+    case EOpAssign:
+        break;
+    default:
+        return node;
+    }
+
+    // structures and arrays don't change shape, either to or from
+    if (node->getType().isStruct() || node->getType().isArray() ||
+        type.isStruct() || type.isArray())
+        return node;
+
+    // The new node that handles the conversion
+    TIntermTyped* conversionNode = node;
+    TOperator constructorOp = mapTypeToConstructorOp(type);
+
+    // scalar -> smeared -> vector
+    if (type.isVector() && node->getType().isScalar())
+        return setAggregateOperator(node, constructorOp, type, node->getLoc());
+
+    return node;
+}
+
 //
 // See if the 'from' type is allowed to be implicitly converted to the
 // 'to' type.  This is not about vector/array/struct, only about basic type.
@@ -752,6 +786,150 @@
 }
 
 //
+// Given a type, find what operation would fully construct it.
+//
+TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
+{
+    TOperator op = EOpNull;
+
+    switch (type.getBasicType()) {
+    case EbtStruct:
+        op = EOpConstructStruct;
+        break;
+    case EbtSampler:
+        if (type.getSampler().combined)
+            op = EOpConstructTextureSampler;
+        break;
+    case EbtFloat:
+        if (type.isMatrix()) {
+            switch (type.getMatrixCols()) {
+            case 2:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructMat2x2; break;
+                case 3: op = EOpConstructMat2x3; break;
+                case 4: op = EOpConstructMat2x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 3:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructMat3x2; break;
+                case 3: op = EOpConstructMat3x3; break;
+                case 4: op = EOpConstructMat3x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 4:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructMat4x2; break;
+                case 3: op = EOpConstructMat4x3; break;
+                case 4: op = EOpConstructMat4x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            default: break; // some compilers want this
+            }
+        } else {
+            switch(type.getVectorSize()) {
+            case 1: op = EOpConstructFloat; break;
+            case 2: op = EOpConstructVec2;  break;
+            case 3: op = EOpConstructVec3;  break;
+            case 4: op = EOpConstructVec4;  break;
+            default: break; // some compilers want this
+            }
+        }
+        break;
+    case EbtDouble:
+        if (type.getMatrixCols()) {
+            switch (type.getMatrixCols()) {
+            case 2:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructDMat2x2; break;
+                case 3: op = EOpConstructDMat2x3; break;
+                case 4: op = EOpConstructDMat2x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 3:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructDMat3x2; break;
+                case 3: op = EOpConstructDMat3x3; break;
+                case 4: op = EOpConstructDMat3x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            case 4:
+                switch (type.getMatrixRows()) {
+                case 2: op = EOpConstructDMat4x2; break;
+                case 3: op = EOpConstructDMat4x3; break;
+                case 4: op = EOpConstructDMat4x4; break;
+                default: break; // some compilers want this
+                }
+                break;
+            }
+        } else {
+            switch(type.getVectorSize()) {
+            case 1: op = EOpConstructDouble; break;
+            case 2: op = EOpConstructDVec2;  break;
+            case 3: op = EOpConstructDVec3;  break;
+            case 4: op = EOpConstructDVec4;  break;
+            default: break; // some compilers want this
+            }
+        }
+        break;
+    case EbtInt:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructInt;   break;
+        case 2: op = EOpConstructIVec2; break;
+        case 3: op = EOpConstructIVec3; break;
+        case 4: op = EOpConstructIVec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtUint:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructUint;  break;
+        case 2: op = EOpConstructUVec2; break;
+        case 3: op = EOpConstructUVec3; break;
+        case 4: op = EOpConstructUVec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtInt64:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructInt64;   break;
+        case 2: op = EOpConstructI64Vec2; break;
+        case 3: op = EOpConstructI64Vec3; break;
+        case 4: op = EOpConstructI64Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtUint64:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructUint64;  break;
+        case 2: op = EOpConstructU64Vec2; break;
+        case 3: op = EOpConstructU64Vec3; break;
+        case 4: op = EOpConstructU64Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtBool:
+        switch(type.getVectorSize()) {
+        case 1:  op = EOpConstructBool;  break;
+        case 2:  op = EOpConstructBVec2; break;
+        case 3:  op = EOpConstructBVec3; break;
+        case 4:  op = EOpConstructBVec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    default:
+        break;
+    }
+
+    return op;
+}
+
+//
 // Safe way to combine two nodes into an aggregate.  Works with null pointers,
 // a node that's not a aggregate yet, etc.
 //
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 0c20cf8..398de1b 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -850,7 +850,7 @@
                 // Swizzle operations propagate specialization-constantness
                 if (base->getQualifier().isSpecConstant())
                     type.getQualifier().makeSpecConstant();
-                return addConstructor(loc, base, type, mapTypeToConstructorOp(type));
+                return addConstructor(loc, base, type);
             }
         }
 
@@ -1078,21 +1078,20 @@
 {
     TIntermTyped* result = nullptr;
 
-    TOperator op = function->getBuiltInOp();
-    if (op == EOpArrayLength)
+    if (function->getBuiltInOp() == EOpArrayLength)
         result = handleLengthMethod(loc, function, arguments);
-    else if (op != EOpNull) {
+    else if (function->getBuiltInOp() != EOpNull) {
         //
         // Then this should be a constructor.
         // Don't go through the symbol table for constructors.
         // Their parameters will be verified algorithmically.
         //
         TType type(EbtVoid);  // use this to get the type back
-        if (! constructorError(loc, arguments, *function, op, type)) {
+        if (! constructorError(loc, arguments, *function, function->getBuiltInOp(), type)) {
             //
             // It's a constructor, of type 'type'.
             //
-            result = addConstructor(loc, arguments, type, op);
+            result = addConstructor(loc, arguments, type);
             if (result == nullptr)
                 error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), "");
         }
@@ -1149,18 +1148,9 @@
                 addInputArgumentConversions(*fnCandidate, arguments);  // arguments may be modified if it's just a single argument node
             }
 
-            op = fnCandidate->getBuiltInOp();
-            if (builtIn && op != EOpNull) {
+            if (builtIn && fnCandidate->getBuiltInOp() != EOpNull) {
                 // A function call mapped to a built-in operation.
-                checkLocation(loc, op);
-                result = intermediate.addBuiltInFunctionCall(loc, op, fnCandidate->getParamCount() == 1, arguments, fnCandidate->getType());
-                if (result == nullptr)  {
-                    error(arguments->getLoc(), " wrong operand type", "Internal Error",
-                                               "built in unary operator function.  Type: %s",
-                                               static_cast<TIntermTyped*>(arguments)->getCompleteString().c_str());
-                } else if (result->getAsOperator()) {
-                    builtInOpCheck(loc, *fnCandidate, *result->getAsOperator());
-                }
+                result = handleBuiltInFunctionCall(loc, *arguments, *fnCandidate);
             } else {
                 // This is a function call not mapped to built-in operator.
                 // It could still be a built-in function, but only if PureOperatorBuiltins == false.
@@ -1181,6 +1171,8 @@
 
                 if (builtIn)
                     nonOpBuiltInCheck(loc, *fnCandidate, *call);
+                else
+                    userFunctionCallCheck(loc, *call);
             }
 
             // Convert 'out' arguments.  If it was a constant folded built-in, it won't be an aggregate anymore.
@@ -1205,6 +1197,118 @@
     return result;
 }
 
+TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNode& arguments,
+                                                       const TFunction& function)
+{
+    checkLocation(loc, function.getBuiltInOp());
+    TIntermTyped *result = intermediate.addBuiltInFunctionCall(loc, function.getBuiltInOp(),
+                                                               function.getParamCount() == 1,
+                                                               &arguments, function.getType());
+    computeBuiltinPrecisions(*result, function);
+    if (result == nullptr)  {
+        error(arguments.getLoc(), " wrong operand type", "Internal Error",
+                                  "built in unary operator function.  Type: %s",
+                                  static_cast<TIntermTyped*>(&arguments)->getCompleteString().c_str());
+    } else if (result->getAsOperator())
+        builtInOpCheck(loc, function, *result->getAsOperator());
+
+    return result;
+}
+
+// "The operation of a built-in function can have a different precision
+// qualification than the precision qualification of the resulting value.
+// These two precision qualifications are established as follows.
+//
+// The precision qualification of the operation of a built-in function is
+// based on the precision qualification of its input arguments and formal
+// parameters:  When a formal parameter specifies a precision qualifier,
+// that is used, otherwise, the precision qualification of the calling
+// argument is used.  The highest precision of these will be the precision
+// qualification of the operation of the built-in function. Generally,
+// this is applied across all arguments to a built-in function, with the
+// exceptions being:
+//   - bitfieldExtract and bitfieldInsert ignore the 'offset' and 'bits'
+//     arguments.
+//   - interpolateAt* functions only look at the 'interpolant' argument.
+//
+// The precision qualification of the result of a built-in function is
+// determined in one of the following ways:
+//
+//   - For the texture sampling, image load, and image store functions,
+//     the precision of the return type matches the precision of the
+//     sampler type
+//
+//   Otherwise:
+//
+//   - For prototypes that do not specify a resulting precision qualifier,
+//     the precision will be the same as the precision of the operation.
+//
+//   - For prototypes that do specify a resulting precision qualifier,
+//     the specified precision qualifier is the precision qualification of
+//     the result."
+//
+void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction& function)
+{
+    TPrecisionQualifier operationPrecision = EpqNone;
+    TPrecisionQualifier resultPrecision = EpqNone;
+
+    if (profile != EEsProfile)
+        return;
+
+    TIntermOperator* opNode = node.getAsOperator();
+    if (opNode == nullptr)
+        return;
+
+    if (TIntermUnary* unaryNode = node.getAsUnaryNode()) {
+        operationPrecision = std::max(function[0].type->getQualifier().precision,
+                                      unaryNode->getOperand()->getType().getQualifier().precision);
+        if (function.getType().getBasicType() != EbtBool)
+            resultPrecision = function.getType().getQualifier().precision == EpqNone ? 
+                                        operationPrecision :
+                                        function.getType().getQualifier().precision;
+    } else if (TIntermAggregate* agg = node.getAsAggregate()) {
+        TIntermSequence& sequence = agg->getSequence();
+        int numArgs = (int)sequence.size();
+        switch (agg->getOp()) {
+        case EOpBitfieldExtract:
+            numArgs = 1;
+            break;
+        case EOpBitfieldInsert:
+            numArgs = 2;
+            break;
+        case EOpInterpolateAtCentroid:
+        case EOpInterpolateAtOffset:
+        case EOpInterpolateAtSample:
+            numArgs = 1;
+            break;
+        default:
+            break;
+        }
+        // find the maximum precision from the arguments and parameters
+        for (unsigned int arg = 0; arg < sequence.size(); ++arg) {
+            operationPrecision = std::max(operationPrecision, sequence[arg]->getAsTyped()->getQualifier().precision);
+            operationPrecision = std::max(operationPrecision, function[arg].type->getQualifier().precision);
+        }
+        // compute the result precision
+        if (agg->isSampling() || agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore)
+            resultPrecision = sequence[0]->getAsTyped()->getQualifier().precision;
+        else if (function.getType().getBasicType() != EbtBool)
+            resultPrecision = function.getType().getQualifier().precision == EpqNone ? 
+                                        operationPrecision :
+                                        function.getType().getQualifier().precision;
+    }
+
+    // Propagate precision through this node and its children. That algorithm stops
+    // when a precision is found, so start by clearing this subroot precision
+    opNode->getQualifier().precision = EpqNone;
+    if (operationPrecision != EpqNone) {
+        opNode->propagatePrecision(operationPrecision);
+        opNode->setOperationPrecision(operationPrecision);
+    }
+    // Now, set the result precision, which might not match
+    opNode->getQualifier().precision = resultPrecision;
+}
+
 TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value)
 {
     functionReturnsValue = true;
@@ -1431,11 +1535,6 @@
     }
     const TIntermSequence& aggArgs = *argp;  // only valid when unaryArg is nullptr
 
-    // built-in texturing functions get their return value precision from the precision of the sampler
-    if (fnCandidate.getType().getQualifier().precision == EpqNone &&
-        fnCandidate.getParamCount() > 0 && fnCandidate[0].type->getBasicType() == EbtSampler)
-        callNode.getQualifier().precision = arg0->getQualifier().precision;
-
     switch (callNode.getOp()) {
     case EOpTextureGather:
     case EOpTextureGatherOffset:
@@ -1567,11 +1666,6 @@
     case EOpInterpolateAtCentroid:
     case EOpInterpolateAtSample:
     case EOpInterpolateAtOffset:
-        // "For the interpolateAt* functions, the call will return a precision
-        // qualification matching the precision of the 'interpolant' argument to
-        // the function call."
-        callNode.getQualifier().precision = arg0->getQualifier().precision;
-
         // Make sure the first argument is an interpolant, or an array element of an interpolant
         if (arg0->getType().getQualifier().storage != EvqVaryingIn) {
             // It might still be an array element.
@@ -1724,6 +1818,26 @@
 }
 
 //
+// Do any extra checking for a user function call.
+//
+void TParseContext::userFunctionCallCheck(const TSourceLoc& loc, TIntermAggregate& callNode)
+{
+    TIntermSequence& arguments = callNode.getSequence();
+
+    for (int i = 0; i < (int)arguments.size(); ++i)
+        samplerConstructorLocationCheck(loc, "call argument", arguments[i]);
+}
+
+//
+// Emit an error if this is a sampler constructor
+//
+void TParseContext::samplerConstructorLocationCheck(const TSourceLoc& loc, const char* token, TIntermNode* node)
+{
+    if (node->getAsOperator() && node->getAsOperator()->getOp() == EOpConstructTextureSampler)
+        error(loc, "sampler constructor must appear at point of use", token, "");
+}
+
+//
 // Handle seeing a built-in constructor in a grammar production.
 //
 TFunction* TParseContext::handleConstructorCall(const TSourceLoc& loc, const TPublicType& publicType)
@@ -1736,7 +1850,7 @@
         profileRequires(loc, EEsProfile, 300, nullptr, "arrayed constructor");
     }
 
-    TOperator op = mapTypeToConstructorOp(type);
+    TOperator op = intermediate.mapTypeToConstructorOp(type);
 
     if (op == EOpNull) {
         error(loc, "cannot construct this type", type.getBasicString(), "");
@@ -1751,150 +1865,6 @@
 }
 
 //
-// Given a type, find what operation would fully construct it.
-//
-TOperator TParseContext::mapTypeToConstructorOp(const TType& type) const
-{
-    TOperator op = EOpNull;
- 
-    switch (type.getBasicType()) {
-    case EbtStruct:
-        op = EOpConstructStruct;
-        break;
-    case EbtSampler:
-        if (type.getSampler().combined)
-            op = EOpConstructTextureSampler;
-        break;
-    case EbtFloat:
-        if (type.isMatrix()) {
-            switch (type.getMatrixCols()) {
-            case 2:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructMat2x2; break;
-                case 3: op = EOpConstructMat2x3; break;
-                case 4: op = EOpConstructMat2x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 3:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructMat3x2; break;
-                case 3: op = EOpConstructMat3x3; break;
-                case 4: op = EOpConstructMat3x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 4:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructMat4x2; break;
-                case 3: op = EOpConstructMat4x3; break;
-                case 4: op = EOpConstructMat4x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            default: break; // some compilers want this
-            }
-        } else {
-            switch(type.getVectorSize()) {
-            case 1: op = EOpConstructFloat; break;
-            case 2: op = EOpConstructVec2;  break;
-            case 3: op = EOpConstructVec3;  break;
-            case 4: op = EOpConstructVec4;  break;
-            default: break; // some compilers want this
-            }
-        }
-        break;
-    case EbtDouble:
-        if (type.getMatrixCols()) {
-            switch (type.getMatrixCols()) {
-            case 2:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructDMat2x2; break;
-                case 3: op = EOpConstructDMat2x3; break;
-                case 4: op = EOpConstructDMat2x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 3:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructDMat3x2; break;
-                case 3: op = EOpConstructDMat3x3; break;
-                case 4: op = EOpConstructDMat3x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 4:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructDMat4x2; break;
-                case 3: op = EOpConstructDMat4x3; break;
-                case 4: op = EOpConstructDMat4x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            }
-        } else {
-            switch(type.getVectorSize()) {
-            case 1: op = EOpConstructDouble; break;
-            case 2: op = EOpConstructDVec2;  break;
-            case 3: op = EOpConstructDVec3;  break;
-            case 4: op = EOpConstructDVec4;  break;
-            default: break; // some compilers want this
-            }
-        }
-        break;
-    case EbtInt:
-        switch(type.getVectorSize()) {
-        case 1: op = EOpConstructInt;   break;
-        case 2: op = EOpConstructIVec2; break;
-        case 3: op = EOpConstructIVec3; break;
-        case 4: op = EOpConstructIVec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    case EbtUint:
-        switch(type.getVectorSize()) {
-        case 1: op = EOpConstructUint;  break;
-        case 2: op = EOpConstructUVec2; break;
-        case 3: op = EOpConstructUVec3; break;
-        case 4: op = EOpConstructUVec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    case EbtInt64:
-        switch(type.getVectorSize()) {
-        case 1: op = EOpConstructInt64;   break;
-        case 2: op = EOpConstructI64Vec2; break;
-        case 3: op = EOpConstructI64Vec3; break;
-        case 4: op = EOpConstructI64Vec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    case EbtUint64:
-        switch(type.getVectorSize()) {
-        case 1: op = EOpConstructUint64;  break;
-        case 2: op = EOpConstructU64Vec2; break;
-        case 3: op = EOpConstructU64Vec3; break;
-        case 4: op = EOpConstructU64Vec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    case EbtBool:
-        switch(type.getVectorSize()) {
-        case 1:  op = EOpConstructBool;  break;
-        case 2:  op = EOpConstructBVec2; break;
-        case 3:  op = EOpConstructBVec3; break;
-        case 4:  op = EOpConstructBVec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    default:
-        break;
-    }
-
-    return op;
-}
-
-//
 // Same error message for all places assignments don't work.
 //
 void TParseContext::assignError(const TSourceLoc& loc, const char* op, TString left, TString right)
@@ -2119,6 +2089,10 @@
     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());
+#endif
 }
 
 //
@@ -2665,7 +2639,11 @@
         publicType.basicType == EbtDouble)
         profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
 
-    if (! qualifier.flat) {
+#ifdef AMD_EXTENSIONS
+    if (! qualifier.flat && ! qualifier.explicitInterp) {
+#else
+    if (!qualifier.flat) {
+#endif
         if (publicType.basicType == EbtInt    || publicType.basicType == EbtUint   ||
             publicType.basicType == EbtInt64  || publicType.basicType == EbtUint64 ||
             publicType.basicType == EbtDouble ||
@@ -2802,7 +2780,11 @@
 
     // Multiple interpolation qualifiers (mostly done later by 'individual qualifiers')
     if (src.isInterpolation() && dst.isInterpolation())
+#ifdef AMD_EXTENSIONS
+        error(loc, "can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD)", "", "");
+#else
         error(loc, "can only have one interpolation qualifier (flat, smooth, noperspective)", "", "");
+#endif
 
     // Ordering
     if (! force && ((profile != EEsProfile && version < 420) || 
@@ -2858,6 +2840,9 @@
     MERGE_SINGLETON(smooth);
     MERGE_SINGLETON(flat);
     MERGE_SINGLETON(nopersp);
+#ifdef AMD_EXTENSIONS
+    MERGE_SINGLETON(explicitInterp);
+#endif
     MERGE_SINGLETON(patch);
     MERGE_SINGLETON(sample);
     MERGE_SINGLETON(coherent);
@@ -4460,12 +4445,17 @@
         }
         if (qualifier.hasComponent()) {
             // "It is a compile-time error if this sequence of components gets larger than 3."
-            if (qualifier.layoutComponent + type.getVectorSize() > 4)
+            if (qualifier.layoutComponent + type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1) > 4)
                 error(loc, "type overflows the available 4 components", "component", "");
 
             // "It is a compile-time error to apply the component qualifier to a matrix, a structure, a block, or an array containing any of these."
             if (type.isMatrix() || type.getBasicType() == EbtBlock || type.getBasicType() == EbtStruct)
                 error(loc, "cannot apply to a matrix, structure, or block", "component", "");
+
+            // " It is a compile-time error to use component 1 or 3 as the beginning of a double or dvec2."
+            if (type.getBasicType() == EbtDouble)
+                if (qualifier.layoutComponent & 1)
+                    error(loc, "doubles cannot start on an odd-numbered component", "component", "");
         }
 
         switch (qualifier.storage) {
@@ -4524,8 +4514,13 @@
             error(loc, "requires block, or sampler/image, or atomic-counter type", "binding", "");
         if (type.getBasicType() == EbtSampler) {
             int lastBinding = qualifier.layoutBinding;
-            if (type.isArray())
-                lastBinding += type.getCumulativeArraySize();
+            if (type.isArray()) {
+                if (type.isImplicitlySizedArray()) {
+                    lastBinding += 1;
+                    warn(loc, "assuming array size of one for compile-time checking of binding numbers for implicitly-sized array", "[]", "");
+                } else
+                    lastBinding += type.getCumulativeArraySize();
+            }
             if (lastBinding >= resources.maxCombinedTextureImageUnits)
                 error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : "");
         }
@@ -5232,7 +5227,7 @@
                 return nullptr;
         }
 
-        return addConstructor(loc, initList, arrayType, mapTypeToConstructorOp(arrayType));
+        return addConstructor(loc, initList, arrayType);
     } else if (type.isStruct()) {
         if (type.getStruct()->size() != initList->getSequence().size()) {
             error(loc, "wrong number of structure members", "initializer list", "");
@@ -5264,8 +5259,14 @@
         return nullptr;
     }
 
-    // now that the subtree is processed, process this node
-    return addConstructor(loc, initList, type, mapTypeToConstructorOp(type));
+    // Now that the subtree is processed, process this node as if the
+    // initializer list is a set of arguments to a constructor.
+    TIntermNode* emulatedConstructorArguments;
+    if (initList->getSequence().size() == 1)
+        emulatedConstructorArguments = initList->getSequence()[0];
+    else
+        emulatedConstructorArguments = initList;
+    return addConstructor(loc, emulatedConstructorArguments, type);
 }
 
 //
@@ -5274,13 +5275,14 @@
 //
 // Returns nullptr for an error or the constructed node (aggregate or typed) for no error.
 //
-TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* node, const TType& type, TOperator op)
+TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* node, const TType& type)
 {
     if (node == nullptr || node->getAsTyped() == nullptr)
         return nullptr;
     rValueErrorCheck(loc, "constructor", node->getAsTyped());
 
     TIntermAggregate* aggrNode = node->getAsAggregate();
+    TOperator op = intermediate.mapTypeToConstructorOp(type);
 
     // Combined texture-sampler constructors are completely semantic checked
     // in constructorTextureSamplerError()
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 2f5e095..544c3d3 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -197,6 +197,8 @@
     TFunction* handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
     TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&);
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
+    TIntermTyped* handleBuiltInFunctionCall(TSourceLoc, TIntermNode& arguments, const TFunction& function);
+    void computeBuiltinPrecisions(TIntermTyped&, const TFunction&);
     TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*);
     void checkLocation(const TSourceLoc&, TOperator);
     TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*);
@@ -204,6 +206,8 @@
     TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&) const;
     void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&);
     void nonOpBuiltInCheck(const TSourceLoc&, const TFunction&, TIntermAggregate&);
+    void userFunctionCallCheck(const TSourceLoc&, TIntermAggregate&);
+    void samplerConstructorLocationCheck(const TSourceLoc&, const char* token, TIntermNode*);
     TFunction* handleConstructorCall(const TSourceLoc&, const TPublicType&);
 
     bool parseVectorFields(const TSourceLoc&, const TString&, int vecSize, TVectorFields&);
@@ -276,7 +280,7 @@
     const TFunction* findFunction400(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     void declareTypeDefaults(const TSourceLoc&, const TPublicType&);
     TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
-    TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&, TOperator);
+    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&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0);
@@ -302,7 +306,6 @@
     void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool& newDeclaration);
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
-    TOperator mapTypeToConstructorOp(const TType&) const;
     void finalErrorCheck();
     void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
                        const char* szExtraInfoFormat, TPrefixType prefix,
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index b8cb869..e297e34 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -55,7 +55,7 @@
 
 // Required to avoid missing prototype warnings for some compilers
 int yylex(YYSTYPE*, glslang::TParseContext&);
-    
+
 namespace glslang {
 
 // read past any white space
@@ -553,6 +553,9 @@
     (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
     (*KeywordMap)["smooth"] =                  SMOOTH;
     (*KeywordMap)["flat"] =                    FLAT;
+#ifdef AMD_EXTENSIONS
+    (*KeywordMap)["__explicitInterpAMD"] =     __EXPLICITINTERPAMD;
+#endif
     (*KeywordMap)["centroid"] =                CENTROID;
     (*KeywordMap)["precise"] =                 PRECISE;
     (*KeywordMap)["invariant"] =               INVARIANT;
@@ -561,7 +564,7 @@
     (*KeywordMap)["superp"] =                  SUPERP;
 
     ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
-    
+
     ReservedSet->insert("common");
     ReservedSet->insert("partition");
     ReservedSet->insert("active");
@@ -609,13 +612,15 @@
     ReservedSet = nullptr;
 }
 
+// Called by yylex to get the next token.
+// Returning 0 implies end of input.
 int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
 {
     do {
         parserToken = &token;
         TPpToken ppToken;
         tokenText = pp->tokenize(&ppToken);
-        if (tokenText == nullptr)
+        if (tokenText == nullptr || tokenText[0] == 0)
             return 0;
 
         loc = ppToken.loc;
@@ -675,7 +680,7 @@
 
         case PpAtomDecrement:          return DEC_OP;
         case PpAtomIncrement:          return INC_OP;
-                                   
+
         case PpAtomConstInt:           parserToken->sType.lex.i   = ppToken.ival;       return INTCONSTANT;
         case PpAtomConstUint:          parserToken->sType.lex.i   = ppToken.ival;       return UINTCONSTANT;
         case PpAtomConstInt64:         parserToken->sType.lex.i64 = ppToken.i64val;     return INT64CONSTANT;
@@ -847,7 +852,7 @@
     case MAT3X4:
     case MAT4X2:
     case MAT4X3:
-    case MAT4X4:        
+    case MAT4X4:
         return matNxM();
 
     case DMAT2:
@@ -973,7 +978,7 @@
     case USAMPLER2DARRAY:
         afterType = true;
         return nonreservedKeyword(300, 130);
-        
+
     case ISAMPLER2DRECT:
     case USAMPLER2DRECT:
         afterType = true;
@@ -991,7 +996,7 @@
         if (parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
             return keyword;
         return es30ReservedFromGLSL(140);
-        
+
     case SAMPLER2DMS:
     case ISAMPLER2DMS:
     case USAMPLER2DMS:
@@ -1110,13 +1115,21 @@
 
     case NOPERSPECTIVE:
         return es30ReservedFromGLSL(130);
-        
+
     case SMOOTH:
         if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
             (parseContext.profile != EEsProfile && parseContext.version < 130))
             return identifierOrType();
         return keyword;
 
+#ifdef AMD_EXTENSIONS
+    case __EXPLICITINTERPAMD:
+        if (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
+            parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
+            return keyword;
+        return identifierOrType();
+#endif
+
     case FLAT:
         if (parseContext.profile == EEsProfile && parseContext.version < 300)
             reservedWord();
@@ -1161,7 +1174,7 @@
         bool reserved = parseContext.profile == EEsProfile || parseContext.version >= 130;
         return identifierOrReserved(reserved);
     }
-    
+
     default:
         parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
         return 0;
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index e46118a..52d205d 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -187,6 +187,13 @@
     extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
     extensionBehavior[E_GL_GOOGLE_include_directive]                 = EBhDisable;
 
+#ifdef AMD_EXTENSIONS
+    extensionBehavior[E_GL_AMD_shader_ballot]                        = EBhDisable;
+    extensionBehavior[E_GL_AMD_shader_trinary_minmax]                = EBhDisable;
+    extensionBehavior[E_GL_AMD_shader_explicit_vertex_parameter]     = EBhDisable;
+    extensionBehavior[E_GL_AMD_gcn_shader]                           = EBhDisable;
+#endif
+
     // AEP
     extensionBehavior[E_GL_ANDROID_extension_pack_es31a]             = EBhDisable;
     extensionBehavior[E_GL_KHR_blend_equation_advanced]              = EBhDisable;
@@ -286,6 +293,13 @@
             "#define GL_ARB_sparse_texture_clamp 1\n"
 //            "#define GL_ARB_cull_distance 1\n"    // present for 4.5, but need extension control over block members
             "#define GL_EXT_shader_non_constant_global_initializers 1\n"
+
+#ifdef AMD_EXTENSIONS
+            "#define GL_AMD_shader_ballot 1\n"
+            "#define GL_AMD_shader_trinary_minmax 1\n"
+            "#define GL_AMD_shader_explicit_vertex_parameter 1\n"
+            "#define GL_AMD_gcn_shader 1\n"
+#endif
             ;
     }
 
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 19d101d..6fd08b0 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -135,6 +135,13 @@
 const char* const E_GL_GOOGLE_cpp_style_line_directive          = "GL_GOOGLE_cpp_style_line_directive";
 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";
+#endif
+
 // AEP
 const char* const E_GL_ANDROID_extension_pack_es31a             = "GL_ANDROID_extension_pack_es31a";
 const char* const E_GL_KHR_blend_equation_advanced              = "GL_KHR_blend_equation_advanced";
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 2cd1cc6..72bad94 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -126,7 +126,7 @@
 %token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
 %token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
-%token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT
+%token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD
 
 %token <lex> MAT2X2 MAT2X3 MAT2X4
 %token <lex> MAT3X2 MAT3X3 MAT3X4
@@ -691,6 +691,7 @@
         $$ = $1;
     }
     | expression COMMA assignment_expression {
+        parseContext.samplerConstructorLocationCheck($2.loc, ",", $3);
         $$ = parseContext.intermediate.addComma($1, $3, $2.loc);
         if ($$ == 0) {
             parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString());
@@ -1050,6 +1051,15 @@
         $$.init($1.loc);
         $$.qualifier.nopersp = true;
     }
+    | __EXPLICITINTERPAMD {
+#ifdef AMD_EXTENSIONS
+        parseContext.globalCheck($1.loc, "__explicitInterpAMD");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
+        parseContext.profileRequires($1.loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
+        $$.init($1.loc);
+        $$.qualifier.explicitInterp = true;
+#endif
+    }
     ;
 
 layout_qualifier
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index c8664f9..0d1dc43 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -189,206 +189,207 @@
     FLAT = 322,
     SMOOTH = 323,
     LAYOUT = 324,
-    MAT2X2 = 325,
-    MAT2X3 = 326,
-    MAT2X4 = 327,
-    MAT3X2 = 328,
-    MAT3X3 = 329,
-    MAT3X4 = 330,
-    MAT4X2 = 331,
-    MAT4X3 = 332,
-    MAT4X4 = 333,
-    DMAT2X2 = 334,
-    DMAT2X3 = 335,
-    DMAT2X4 = 336,
-    DMAT3X2 = 337,
-    DMAT3X3 = 338,
-    DMAT3X4 = 339,
-    DMAT4X2 = 340,
-    DMAT4X3 = 341,
-    DMAT4X4 = 342,
-    ATOMIC_UINT = 343,
-    SAMPLER1D = 344,
-    SAMPLER2D = 345,
-    SAMPLER3D = 346,
-    SAMPLERCUBE = 347,
-    SAMPLER1DSHADOW = 348,
-    SAMPLER2DSHADOW = 349,
-    SAMPLERCUBESHADOW = 350,
-    SAMPLER1DARRAY = 351,
-    SAMPLER2DARRAY = 352,
-    SAMPLER1DARRAYSHADOW = 353,
-    SAMPLER2DARRAYSHADOW = 354,
-    ISAMPLER1D = 355,
-    ISAMPLER2D = 356,
-    ISAMPLER3D = 357,
-    ISAMPLERCUBE = 358,
-    ISAMPLER1DARRAY = 359,
-    ISAMPLER2DARRAY = 360,
-    USAMPLER1D = 361,
-    USAMPLER2D = 362,
-    USAMPLER3D = 363,
-    USAMPLERCUBE = 364,
-    USAMPLER1DARRAY = 365,
-    USAMPLER2DARRAY = 366,
-    SAMPLER2DRECT = 367,
-    SAMPLER2DRECTSHADOW = 368,
-    ISAMPLER2DRECT = 369,
-    USAMPLER2DRECT = 370,
-    SAMPLERBUFFER = 371,
-    ISAMPLERBUFFER = 372,
-    USAMPLERBUFFER = 373,
-    SAMPLERCUBEARRAY = 374,
-    SAMPLERCUBEARRAYSHADOW = 375,
-    ISAMPLERCUBEARRAY = 376,
-    USAMPLERCUBEARRAY = 377,
-    SAMPLER2DMS = 378,
-    ISAMPLER2DMS = 379,
-    USAMPLER2DMS = 380,
-    SAMPLER2DMSARRAY = 381,
-    ISAMPLER2DMSARRAY = 382,
-    USAMPLER2DMSARRAY = 383,
-    SAMPLEREXTERNALOES = 384,
-    SAMPLER = 385,
-    SAMPLERSHADOW = 386,
-    TEXTURE1D = 387,
-    TEXTURE2D = 388,
-    TEXTURE3D = 389,
-    TEXTURECUBE = 390,
-    TEXTURE1DARRAY = 391,
-    TEXTURE2DARRAY = 392,
-    ITEXTURE1D = 393,
-    ITEXTURE2D = 394,
-    ITEXTURE3D = 395,
-    ITEXTURECUBE = 396,
-    ITEXTURE1DARRAY = 397,
-    ITEXTURE2DARRAY = 398,
-    UTEXTURE1D = 399,
-    UTEXTURE2D = 400,
-    UTEXTURE3D = 401,
-    UTEXTURECUBE = 402,
-    UTEXTURE1DARRAY = 403,
-    UTEXTURE2DARRAY = 404,
-    TEXTURE2DRECT = 405,
-    ITEXTURE2DRECT = 406,
-    UTEXTURE2DRECT = 407,
-    TEXTUREBUFFER = 408,
-    ITEXTUREBUFFER = 409,
-    UTEXTUREBUFFER = 410,
-    TEXTURECUBEARRAY = 411,
-    ITEXTURECUBEARRAY = 412,
-    UTEXTURECUBEARRAY = 413,
-    TEXTURE2DMS = 414,
-    ITEXTURE2DMS = 415,
-    UTEXTURE2DMS = 416,
-    TEXTURE2DMSARRAY = 417,
-    ITEXTURE2DMSARRAY = 418,
-    UTEXTURE2DMSARRAY = 419,
-    SUBPASSINPUT = 420,
-    SUBPASSINPUTMS = 421,
-    ISUBPASSINPUT = 422,
-    ISUBPASSINPUTMS = 423,
-    USUBPASSINPUT = 424,
-    USUBPASSINPUTMS = 425,
-    IMAGE1D = 426,
-    IIMAGE1D = 427,
-    UIMAGE1D = 428,
-    IMAGE2D = 429,
-    IIMAGE2D = 430,
-    UIMAGE2D = 431,
-    IMAGE3D = 432,
-    IIMAGE3D = 433,
-    UIMAGE3D = 434,
-    IMAGE2DRECT = 435,
-    IIMAGE2DRECT = 436,
-    UIMAGE2DRECT = 437,
-    IMAGECUBE = 438,
-    IIMAGECUBE = 439,
-    UIMAGECUBE = 440,
-    IMAGEBUFFER = 441,
-    IIMAGEBUFFER = 442,
-    UIMAGEBUFFER = 443,
-    IMAGE1DARRAY = 444,
-    IIMAGE1DARRAY = 445,
-    UIMAGE1DARRAY = 446,
-    IMAGE2DARRAY = 447,
-    IIMAGE2DARRAY = 448,
-    UIMAGE2DARRAY = 449,
-    IMAGECUBEARRAY = 450,
-    IIMAGECUBEARRAY = 451,
-    UIMAGECUBEARRAY = 452,
-    IMAGE2DMS = 453,
-    IIMAGE2DMS = 454,
-    UIMAGE2DMS = 455,
-    IMAGE2DMSARRAY = 456,
-    IIMAGE2DMSARRAY = 457,
-    UIMAGE2DMSARRAY = 458,
-    STRUCT = 459,
-    VOID = 460,
-    WHILE = 461,
-    IDENTIFIER = 462,
-    TYPE_NAME = 463,
-    FLOATCONSTANT = 464,
-    DOUBLECONSTANT = 465,
-    INTCONSTANT = 466,
-    UINTCONSTANT = 467,
-    INT64CONSTANT = 468,
-    UINT64CONSTANT = 469,
-    BOOLCONSTANT = 470,
-    LEFT_OP = 471,
-    RIGHT_OP = 472,
-    INC_OP = 473,
-    DEC_OP = 474,
-    LE_OP = 475,
-    GE_OP = 476,
-    EQ_OP = 477,
-    NE_OP = 478,
-    AND_OP = 479,
-    OR_OP = 480,
-    XOR_OP = 481,
-    MUL_ASSIGN = 482,
-    DIV_ASSIGN = 483,
-    ADD_ASSIGN = 484,
-    MOD_ASSIGN = 485,
-    LEFT_ASSIGN = 486,
-    RIGHT_ASSIGN = 487,
-    AND_ASSIGN = 488,
-    XOR_ASSIGN = 489,
-    OR_ASSIGN = 490,
-    SUB_ASSIGN = 491,
-    LEFT_PAREN = 492,
-    RIGHT_PAREN = 493,
-    LEFT_BRACKET = 494,
-    RIGHT_BRACKET = 495,
-    LEFT_BRACE = 496,
-    RIGHT_BRACE = 497,
-    DOT = 498,
-    COMMA = 499,
-    COLON = 500,
-    EQUAL = 501,
-    SEMICOLON = 502,
-    BANG = 503,
-    DASH = 504,
-    TILDE = 505,
-    PLUS = 506,
-    STAR = 507,
-    SLASH = 508,
-    PERCENT = 509,
-    LEFT_ANGLE = 510,
-    RIGHT_ANGLE = 511,
-    VERTICAL_BAR = 512,
-    CARET = 513,
-    AMPERSAND = 514,
-    QUESTION = 515,
-    INVARIANT = 516,
-    PRECISE = 517,
-    HIGH_PRECISION = 518,
-    MEDIUM_PRECISION = 519,
-    LOW_PRECISION = 520,
-    PRECISION = 521,
-    PACKED = 522,
-    RESOURCE = 523,
-    SUPERP = 524
+    __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
   };
 #endif
 
@@ -431,7 +432,7 @@
         };
     } interm;
 
-#line 435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+#line 436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -462,7 +463,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -702,23 +703,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  248
+#define YYFINAL  249
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   5943
+#define YYLAST   5966
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  270
+#define YYNTOKENS  271
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  100
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  421
+#define YYNRULES  422
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  553
+#define YYNSTATES  554
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   524
+#define YYMAXUTOK   525
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -779,7 +780,7 @@
      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
+     265,   266,   267,   268,   269,   270
 };
 
 #if YYDEBUG
@@ -794,41 +795,41 @@
      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,   703,   710,   715,   720,
-     728,   732,   736,   740,   745,   750,   759,   759,   770,   774,
-     781,   788,   791,   798,   806,   826,   844,   859,   882,   893,
-     903,   913,   923,   932,   935,   939,   943,   948,   956,   961,
-     966,   971,   976,   985,   996,  1023,  1032,  1039,  1046,  1056,
-    1062,  1065,  1072,  1076,  1080,  1088,  1097,  1100,  1111,  1114,
-    1117,  1120,  1124,  1128,  1135,  1139,  1151,  1165,  1170,  1176,
-    1182,  1189,  1195,  1200,  1205,  1210,  1217,  1221,  1225,  1229,
-    1233,  1237,  1243,  1255,  1258,  1263,  1267,  1276,  1281,  1289,
-    1293,  1303,  1307,  1311,  1316,  1320,  1325,  1330,  1335,  1339,
-    1344,  1349,  1354,  1360,  1366,  1372,  1377,  1382,  1387,  1392,
-    1397,  1402,  1408,  1414,  1420,  1426,  1432,  1438,  1444,  1450,
-    1456,  1461,  1466,  1471,  1476,  1481,  1486,  1491,  1496,  1501,
-    1506,  1511,  1516,  1522,  1528,  1534,  1540,  1546,  1552,  1558,
-    1564,  1570,  1576,  1582,  1588,  1593,  1598,  1603,  1608,  1613,
-    1618,  1623,  1628,  1633,  1638,  1643,  1648,  1653,  1658,  1663,
-    1668,  1673,  1678,  1683,  1688,  1693,  1698,  1703,  1708,  1713,
-    1718,  1723,  1728,  1733,  1738,  1743,  1748,  1753,  1758,  1763,
-    1768,  1773,  1778,  1783,  1788,  1793,  1798,  1803,  1808,  1813,
-    1818,  1823,  1828,  1833,  1838,  1843,  1848,  1853,  1858,  1863,
-    1868,  1873,  1878,  1883,  1888,  1893,  1898,  1903,  1908,  1913,
-    1918,  1923,  1928,  1933,  1938,  1943,  1948,  1953,  1958,  1963,
-    1968,  1973,  1978,  1983,  1988,  1993,  1998,  2003,  2008,  2013,
-    2018,  2023,  2028,  2033,  2038,  2043,  2048,  2053,  2058,  2063,
-    2068,  2073,  2078,  2083,  2088,  2093,  2098,  2103,  2108,  2113,
-    2118,  2123,  2128,  2133,  2139,  2145,  2151,  2157,  2163,  2169,
-    2175,  2180,  2196,  2202,  2208,  2217,  2217,  2228,  2228,  2238,
-    2241,  2254,  2272,  2296,  2300,  2306,  2311,  2322,  2325,  2331,
-    2340,  2343,  2349,  2353,  2354,  2360,  2361,  2362,  2363,  2364,
-    2365,  2366,  2370,  2371,  2375,  2371,  2387,  2388,  2392,  2392,
-    2399,  2399,  2413,  2416,  2424,  2432,  2443,  2444,  2448,  2455,
-    2459,  2467,  2471,  2484,  2484,  2504,  2507,  2513,  2525,  2537,
-    2537,  2552,  2552,  2568,  2568,  2589,  2592,  2598,  2601,  2607,
-    2611,  2618,  2623,  2628,  2635,  2638,  2647,  2651,  2658,  2661,
-    2667,  2667
+     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,  1130,  1134,  1138,  1145,  1149,  1161,  1175,  1180,
+    1186,  1192,  1199,  1205,  1210,  1215,  1220,  1227,  1231,  1235,
+    1239,  1243,  1247,  1253,  1265,  1268,  1273,  1277,  1286,  1291,
+    1299,  1303,  1313,  1317,  1321,  1326,  1330,  1335,  1340,  1345,
+    1349,  1354,  1359,  1364,  1370,  1376,  1382,  1387,  1392,  1397,
+    1402,  1407,  1412,  1418,  1424,  1430,  1436,  1442,  1448,  1454,
+    1460,  1466,  1471,  1476,  1481,  1486,  1491,  1496,  1501,  1506,
+    1511,  1516,  1521,  1526,  1532,  1538,  1544,  1550,  1556,  1562,
+    1568,  1574,  1580,  1586,  1592,  1598,  1603,  1608,  1613,  1618,
+    1623,  1628,  1633,  1638,  1643,  1648,  1653,  1658,  1663,  1668,
+    1673,  1678,  1683,  1688,  1693,  1698,  1703,  1708,  1713,  1718,
+    1723,  1728,  1733,  1738,  1743,  1748,  1753,  1758,  1763,  1768,
+    1773,  1778,  1783,  1788,  1793,  1798,  1803,  1808,  1813,  1818,
+    1823,  1828,  1833,  1838,  1843,  1848,  1853,  1858,  1863,  1868,
+    1873,  1878,  1883,  1888,  1893,  1898,  1903,  1908,  1913,  1918,
+    1923,  1928,  1933,  1938,  1943,  1948,  1953,  1958,  1963,  1968,
+    1973,  1978,  1983,  1988,  1993,  1998,  2003,  2008,  2013,  2018,
+    2023,  2028,  2033,  2038,  2043,  2048,  2053,  2058,  2063,  2068,
+    2073,  2078,  2083,  2088,  2093,  2098,  2103,  2108,  2113,  2118,
+    2123,  2128,  2133,  2138,  2143,  2149,  2155,  2161,  2167,  2173,
+    2179,  2185,  2190,  2206,  2212,  2218,  2227,  2227,  2238,  2238,
+    2248,  2251,  2264,  2282,  2306,  2310,  2316,  2321,  2332,  2335,
+    2341,  2350,  2353,  2359,  2363,  2364,  2370,  2371,  2372,  2373,
+    2374,  2375,  2376,  2380,  2381,  2385,  2381,  2397,  2398,  2402,
+    2402,  2409,  2409,  2423,  2426,  2434,  2442,  2453,  2454,  2458,
+    2465,  2469,  2477,  2481,  2494,  2494,  2514,  2517,  2523,  2535,
+    2547,  2547,  2562,  2562,  2578,  2578,  2599,  2602,  2608,  2611,
+    2617,  2621,  2628,  2633,  2638,  2645,  2648,  2657,  2661,  2668,
+    2671,  2677,  2677
 };
 #endif
 
@@ -846,54 +847,55 @@
   "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", "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", "TEXTURE2DARRAY", "ITEXTURE1D",
-  "ITEXTURE2D", "ITEXTURE3D", "ITEXTURECUBE", "ITEXTURE1DARRAY",
-  "ITEXTURE2DARRAY", "UTEXTURE1D", "UTEXTURE2D", "UTEXTURE3D",
-  "UTEXTURECUBE", "UTEXTURE1DARRAY", "UTEXTURE2DARRAY", "TEXTURE2DRECT",
-  "ITEXTURE2DRECT", "UTEXTURE2DRECT", "TEXTUREBUFFER", "ITEXTUREBUFFER",
-  "UTEXTUREBUFFER", "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY",
-  "UTEXTURECUBEARRAY", "TEXTURE2DMS", "ITEXTURE2DMS", "UTEXTURE2DMS",
-  "TEXTURE2DMSARRAY", "ITEXTURE2DMSARRAY", "UTEXTURE2DMSARRAY",
-  "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT", "ISUBPASSINPUTMS",
-  "USUBPASSINPUT", "USUBPASSINPUTMS", "IMAGE1D", "IIMAGE1D", "UIMAGE1D",
-  "IMAGE2D", "IIMAGE2D", "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D",
-  "IMAGE2DRECT", "IIMAGE2DRECT", "UIMAGE2DRECT", "IMAGECUBE", "IIMAGECUBE",
-  "UIMAGECUBE", "IMAGEBUFFER", "IIMAGEBUFFER", "UIMAGEBUFFER",
-  "IMAGE1DARRAY", "IIMAGE1DARRAY", "UIMAGE1DARRAY", "IMAGE2DARRAY",
-  "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBEARRAY", "IIMAGECUBEARRAY",
-  "UIMAGECUBEARRAY", "IMAGE2DMS", "IIMAGE2DMS", "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", "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", "AMPERSAND", "QUESTION",
-  "INVARIANT", "PRECISE", "HIGH_PRECISION", "MEDIUM_PRECISION",
-  "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP", "$accept",
-  "variable_identifier", "primary_expression", "postfix_expression",
-  "integer_expression", "function_call", "function_call_or_method",
-  "function_call_generic", "function_call_header_no_parameters",
+  "DMAT4", "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",
+  "TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D", "ITEXTURE3D",
+  "ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY", "UTEXTURE1D",
+  "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", "UTEXTURE1DARRAY",
+  "UTEXTURE2DARRAY", "TEXTURE2DRECT", "ITEXTURE2DRECT", "UTEXTURE2DRECT",
+  "TEXTUREBUFFER", "ITEXTUREBUFFER", "UTEXTUREBUFFER", "TEXTURECUBEARRAY",
+  "ITEXTURECUBEARRAY", "UTEXTURECUBEARRAY", "TEXTURE2DMS", "ITEXTURE2DMS",
+  "UTEXTURE2DMS", "TEXTURE2DMSARRAY", "ITEXTURE2DMSARRAY",
+  "UTEXTURE2DMSARRAY", "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT",
+  "ISUBPASSINPUTMS", "USUBPASSINPUT", "USUBPASSINPUTMS", "IMAGE1D",
+  "IIMAGE1D", "UIMAGE1D", "IMAGE2D", "IIMAGE2D", "UIMAGE2D", "IMAGE3D",
+  "IIMAGE3D", "UIMAGE3D", "IMAGE2DRECT", "IIMAGE2DRECT", "UIMAGE2DRECT",
+  "IMAGECUBE", "IIMAGECUBE", "UIMAGECUBE", "IMAGEBUFFER", "IIMAGEBUFFER",
+  "UIMAGEBUFFER", "IMAGE1DARRAY", "IIMAGE1DARRAY", "UIMAGE1DARRAY",
+  "IMAGE2DARRAY", "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBEARRAY",
+  "IIMAGECUBEARRAY", "UIMAGECUBEARRAY", "IMAGE2DMS", "IIMAGE2DMS",
+  "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",
+  "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",
+  "AMPERSAND", "QUESTION", "INVARIANT", "PRECISE", "HIGH_PRECISION",
+  "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE",
+  "SUPERP", "$accept", "variable_identifier", "primary_expression",
+  "postfix_expression", "integer_expression", "function_call",
+  "function_call_or_method", "function_call_generic",
+  "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
   "multiplicative_expression", "additive_expression", "shift_expression",
@@ -958,16 +960,17 @@
      485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
      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
+     515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
+     525
 };
 # endif
 
-#define YYPACT_NINF -496
+#define YYPACT_NINF -495
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-496)))
+  (!!((Yystate) == (-495)))
 
-#define YYTABLE_NINF -379
+#define YYTABLE_NINF -380
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -976,62 +979,62 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2394,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -199,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -187,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -180,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -134,
-    -496,  -191,  -181,  -155,  -131,  3871,  -133,  -496,   -69,  -496,
-    -496,  -496,  -496,  2900,  -496,  -496,  -496,   -92,  -496,  -496,
-     546,  -496,  -496,   -68,   -45,   -91,  -496,  5735,  -200,  -496,
-    -496,   -85,  -496,  3871,  -496,  -496,  -496,  3871,   -50,   -49,
-    -496,  -209,  -193,  -496,  -496,  -496,  4323,   -80,  -496,  -496,
-    -496,  -202,  -496,   -86,  -171,  -496,  -496,  3871,   -84,  -496,
-    -198,   810,  -496,  -496,  -496,  -496,   -92,  -214,  -496,  4558,
-    -176,  -496,   -46,  -496,  -127,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  5271,  5271,  5271,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -175,  -496,  -496,  -496,   -73,  -169,  5503,
-     -71,  -496,  5271,  -118,  -170,  -195,  -197,   -90,   -89,   -87,
-     -88,   -57,   -58,  -208,   -67,  -496,  4804,  -496,   -36,  5271,
-    -496,   -45,  3871,  3871,   -33,  3145,  -496,  -496,  -496,   -72,
-     -70,  -496,   -61,   -59,   -66,  5039,   -55,  5271,   -62,   -51,
-     -54,  -496,  -496,  -141,  -496,  -496,  -125,  -496,  -181,   -48,
-    -496,  -496,  -496,  -496,  1074,  -496,  -496,  -496,  -496,  -496,
-    -496,   -80,  4558,  -174,  4558,  -496,  -496,  4558,  3871,  -496,
-     -23,  -496,  -496,  -496,  -167,  -496,  -496,  5271,   -20,  -496,
-    -496,  5271,   -43,  -496,  -496,  -496,  5271,  5271,  5271,  5271,
-    5271,  5271,  5271,  5271,  5271,  5271,  5271,  5271,  5271,  5271,
-    5271,  5271,  5271,  5271,  5271,  -496,  -496,  -496,   -44,  -496,
-    -496,  -496,  -496,  3387,   -33,   -92,  -121,  -496,  -496,  -496,
-    -496,  -496,  1338,  -496,  5271,  -496,  -496,  -120,  5271,  -102,
-    -496,  -496,  -496,  1338,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  5271,  5271,  -496,  -496,  -496,
-    -496,  4558,  -496,  -105,  -496,  3629,  -496,  -496,   -42,   -52,
-    -496,  -496,  -496,  -496,  -496,  -118,  -118,  -170,  -170,  -195,
-    -195,  -195,  -195,  -197,  -197,   -90,   -89,   -87,   -88,   -57,
-     -58,  5271,  -496,  -496,  -119,   -80,   -33,  -496,   -16,  2130,
-    -164,  -496,  -160,  -496,  2637,  1338,  -496,  -496,  -496,  -496,
-    4077,  -496,  -496,   -99,  -496,  -496,   -40,  -496,  -496,  2637,
-     -41,  -496,   -52,    -8,  3871,   -35,   -38,  -496,  -496,  5271,
-    5271,  -496,   -39,   -32,   191,   -31,  1866,  -496,   -30,   -34,
-    1602,  -496,  -496,  -138,  5271,  1602,   -41,  -496,  -496,  1338,
-    4558,  -496,  -496,  -496,   -29,   -52,  -496,  -496,  1338,   -27,
-    -496,  -496,  -496
+    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
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1039,92 +1042,92 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   145,   146,   144,   178,   172,   173,   174,   175,   176,
-     177,   161,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   179,   180,   181,
-     200,   201,   202,   150,   148,   149,   147,   153,   151,   152,
-     154,   155,   156,   157,   158,   159,   160,   182,   183,   184,
-     212,   213,   214,   128,   127,   126,     0,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   215,   216,   217,   218,
+       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,   238,   239,   240,
-     241,   242,   243,   245,   246,   247,   248,   249,   250,   252,
-     253,   254,   255,   256,   257,   258,   236,   237,   244,   251,
-     259,   260,   261,   262,   263,   264,   333,   265,   266,   267,
-     268,   269,   270,   271,   272,   274,   275,   276,   277,   278,
-     279,   281,   282,   283,   284,   285,   286,   288,   289,   290,
-     291,   292,   293,   273,   280,   287,   294,   295,   296,   297,
-     298,   299,   334,   335,   336,   337,   338,   339,   300,   301,
+     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,     0,   171,   341,   125,   135,   342,   343,   344,     0,
-     419,     0,   420,     0,   102,   101,     0,   113,   118,   142,
-     141,   139,   143,     0,   136,   138,   123,   165,   140,   340,
-       0,   416,   418,     0,     0,     0,   347,     0,     0,    90,
-      87,     0,   100,     0,   109,   103,   111,     0,   112,     0,
-      88,   119,     0,    93,   137,   124,     0,   166,     1,   417,
-     163,     0,   134,   132,     0,   130,   345,     0,     0,    91,
-       0,     0,   421,   104,   108,   110,   106,   114,   105,     0,
-     120,    96,     0,    94,     0,     2,     8,     9,     4,     5,
-       6,     7,    10,     0,     0,     0,   167,    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,   162,     0,     0,
-     129,     0,     0,     0,     0,     0,   349,    89,    92,     0,
-       0,   401,     0,     0,     0,     0,     0,     0,     0,     0,
-     373,   382,   386,    38,    71,    84,     0,   362,     0,   123,
-     365,   384,   364,   363,     0,   366,   367,   368,   369,   370,
-     371,   107,     0,   115,     0,   357,   122,     0,     0,    98,
-       0,    95,    31,    32,     0,    16,    17,     0,     0,    22,
-      21,     0,   171,    25,    27,    33,     0,     0,     0,     0,
+     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,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    69,   168,   169,     0,   164,
-      86,   133,   131,     0,     0,   355,     0,   353,   348,   350,
-     412,   411,     0,   403,     0,   415,   413,     0,     0,     0,
-     398,   399,   372,     0,    74,    75,    77,    76,    79,    80,
-      81,    82,    83,    78,    73,     0,     0,   387,   383,   385,
-     117,     0,   360,     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,   170,   346,     0,   356,     0,   351,     0,     0,
-       0,   414,     0,   397,     0,   374,    72,    85,   116,   358,
-       0,    97,    13,     0,   352,   354,     0,   406,   405,   408,
-     380,   393,   391,     0,     0,     0,     0,   359,   361,     0,
-       0,   407,     0,     0,   390,     0,     0,   388,     0,     0,
-       0,   375,    70,     0,   409,     0,   380,   379,   381,   395,
-       0,   377,   400,   376,     0,   410,   404,   389,   396,     0,
-     392,   402,   394
+       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
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,   -53,  -496,  -237,  -288,  -286,  -243,  -183,  -179,
-    -184,  -177,  -168,  -185,  -496,  -234,  -496,  -266,  -496,  -280,
-    -496,     4,  -496,  -496,  -496,     6,  -496,  -496,  -496,   -15,
-     -10,    -9,  -496,  -496,  -475,  -496,  -496,  -496,  -496,   -83,
-    -496,  -204,  -211,  -496,  -496,     0,  -221,  -496,    33,  -496,
-    -496,  -496,  -308,  -314,  -178,  -247,  -349,  -496,  -248,  -346,
-    -495,  -283,  -496,  -496,  -292,  -291,  -496,  -496,    13,  -423,
-    -242,  -496,  -496,  -263,  -496,  -496,  -496,  -496,  -496,  -496,
-    -496,  -496,  -496,  -496,  -496,  -496,  -496,    28,  -496,  -496
+    -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
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   291,   292,   293,   458,   294,   295,   296,   297,   298,
-     299,   300,   343,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   344,   481,   345,   445,   346,
-     411,   347,   201,   368,   274,   348,   203,   204,   205,   234,
-     235,   236,   206,   207,   208,   209,   210,   211,   254,   255,
-     212,   213,   214,   215,   251,   315,   247,   217,   218,   219,
-     322,   257,   325,   326,   416,   417,   366,   453,   350,   351,
-     352,   353,   433,   516,   542,   524,   525,   526,   543,   354,
-     355,   356,   527,   515,   357,   528,   549,   358,   359,   494,
-     422,   489,   509,   522,   523,   360,   220,   221,   222,   231
+      -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
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1132,169 +1135,90 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     216,   237,   244,   365,   200,   374,   202,   260,   449,   252,
-     495,   419,   314,   450,   413,   452,   228,   404,   454,   513,
-     270,   391,   392,   393,   394,   246,   244,   225,   268,   237,
-     246,   538,   362,   383,   513,   541,   317,   269,   223,   246,
-     541,   316,   318,   375,   376,   361,   363,   259,   271,   328,
-     224,   272,   405,   323,   273,   427,   229,   429,   395,   396,
-     455,   226,   -29,   316,   377,   316,   230,   320,   378,   380,
-     367,   457,   451,   321,   510,   381,   488,   446,   511,   389,
-     446,   390,   408,   232,   446,   410,   434,   435,   436,   437,
-     438,   439,   440,   441,   442,   443,   365,   459,   365,   419,
-     544,   365,   498,   467,   468,   444,   446,   469,   470,   471,
-     472,   239,   244,   233,   240,   461,   548,   370,   323,   446,
-     371,   323,   447,   486,   446,   486,   487,   491,   504,   196,
-     197,   198,   397,   398,   386,   387,   388,   499,   241,   500,
-     250,   419,   446,   493,   490,   446,   519,   246,   492,   449,
-     256,   518,   465,   466,   473,   474,   261,   266,   267,   316,
-     319,   369,   253,   327,   323,   379,   384,   402,   403,   401,
-     399,   400,   409,   406,   415,   420,   423,   421,   424,   496,
-     497,   425,   428,   430,   456,   365,   431,   460,   432,   -28,
-     506,   550,   446,   301,   485,   -23,   482,   520,   502,   529,
-    -378,   503,   449,   530,   531,   238,   535,   536,   534,   323,
-     340,   539,   540,   245,   512,   552,   475,   477,   551,   480,
-     216,   476,   264,   263,   200,   478,   202,   258,   265,   512,
-     372,   373,   227,   238,   365,   479,   484,   238,   412,   505,
-     533,   507,   537,   546,   262,   547,   521,   508,   249,   385,
-       0,   323,     0,   532,   545,     0,     0,   324,     0,     0,
-       0,   349,     0,   301,     0,     0,   301,     0,     0,     0,
-       0,     0,     0,     0,   365,     0,     0,     0,     0,     0,
+     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,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     514,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   244,     0,   514,     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,     0,     0,     0,     0,     0,     0,
-       0,     0,   324,   414,     0,   324,     0,     0,     0,     0,
-       0,     0,     0,   462,   463,   464,   301,   301,   301,   301,
-     301,   301,   301,   301,   301,   301,   301,   301,   301,   301,
-     301,   301,     0,     0,   349,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   324,     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,     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,   324,     0,     0,     0,     0,     0,     0,
-       0,     0,   349,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   349,     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,   324,     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,     0,     0,     0,     0,     0,     0,     0,     0,   349,
-       0,     0,     0,     0,   349,   349,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   349,
-       0,     0,     0,     0,   245,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   349,     0,     0,     0,
-     349,     0,     0,     0,     0,   349,     0,     0,     0,   349,
-       0,     0,     0,     0,     0,     0,   248,     0,   349,     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,     0,     0,   193,     0,     0,     0,     0,     0,
+     350,     0,     0,     0,     0,   350,   350,     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,     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,   194,   195,   196,
-     197,   198,   199,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,   329,   330,   331,     0,   332,   333,   334,
-     335,   336,   337,   338,    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,   339,   275,   193,   276,
-     277,   278,   279,   280,   281,   282,     0,     0,   283,   284,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   285,     0,     0,
-       0,   340,   341,     0,     0,     0,     0,   342,   287,   288,
-     289,   290,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   194,   195,   196,   197,   198,   199,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,   329,   330,   331,
-       0,   332,   333,   334,   335,   336,   337,   338,    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,
-     339,   275,   193,   276,   277,   278,   279,   280,   281,   282,
-       0,     0,   283,   284,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   285,     0,     0,     0,   340,   448,     0,     0,     0,
-       0,   342,   287,   288,   289,   290,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   194,   195,   196,   197,   198,
-     199,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,   329,   330,   331,     0,   332,   333,   334,   335,   336,
-     337,   338,    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,   339,   275,   193,   276,   277,   278,
-     279,   280,   281,   282,     0,     0,   283,   284,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   285,     0,     0,     0,   340,
-       0,     0,     0,     0,     0,   342,   287,   288,   289,   290,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   194,
-     195,   196,   197,   198,   199,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,   329,   330,   331,     0,   332,
-     333,   334,   335,   336,   337,   338,    11,    12,    13,    14,
+       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,
@@ -1312,15 +1236,172 @@
      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,   339,   275,
-     193,   276,   277,   278,   279,   280,   281,   282,     0,     0,
-     283,   284,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   285,
-       0,     0,     0,   261,     0,     0,     0,     0,     0,   342,
-     287,   288,   289,   290,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   194,   195,   196,   197,   198,   199,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,   329,
-     330,   331,     0,   332,   333,   334,   335,   336,   337,   338,
+     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,     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,     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,     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,
+      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,     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,
+       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,     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,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
@@ -1339,12 +1420,12 @@
      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,   339,   275,   193,   276,   277,   278,   279,   280,
-     281,   282,     0,     0,   283,   284,     0,     0,     0,     0,
+     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,   285,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   342,   287,   288,   289,   290,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   194,   195,   196,
+       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,
@@ -1365,139 +1446,38 @@
      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,     0,   275,   193,   276,
-     277,   278,   279,   280,   281,   282,     0,     0,   283,   284,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   285,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   342,   287,   288,
-     289,   290,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   194,   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,
-       0,     0,   193,     0,     0,     0,     0,     0,     0,     0,
+     187,   188,   189,   190,   191,   192,   193,     0,   243,   194,
        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,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-       0,     0,     0,     0,     0,   194,   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,     0,   275,   193,   276,   277,   278,   279,
-     280,   281,   282,     0,     0,   283,   284,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   285,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   287,   288,   289,   290,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   194,   195,
-     196,   197,   198,     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,     0,   242,   193,     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,     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,   243,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,     0,     0,
-       0,   194,   195,   196,   197,   198,     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,     0,     0,   193,     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,   418,     0,     0,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-       0,     0,     0,     0,     0,     0,   194,   195,   196,   197,
-     198,    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,     0,     0,   193,     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,   483,
+       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,   194,   195,
-     196,   197,   198,    11,    12,    13,    14,    15,    16,    17,
+       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,
@@ -1515,359 +1495,39 @@
      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,     0,     0,   193,     0,     0,
+     188,   189,   190,   191,   192,   193,     0,     0,   194,     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,     0,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,     0,     0,     0,     0,     0,     0,
-     194,   195,   196,   197,   198,    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,     0,     0,   193,
-       0,     0,     0,     4,     5,     6,     7,     8,     9,    10,
+       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,
+      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,     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,   194,   195,   196,   197,   198,    47,    48,    49,
-      50,    51,    52,     0,     0,     0,     0,    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,     0,   275,   193,   276,   277,   278,   279,
-     280,   281,   282,     0,     0,   283,   284,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   285,     0,     0,     0,   364,   517,
-       0,     0,     0,     0,     0,   287,   288,   289,   290,     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,     0,     0,
-       0,     0,     0,    47,    48,    49,    50,    51,    52,     0,
-       0,     0,     0,    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,     0,
-     275,   193,   276,   277,   278,   279,   280,   281,   282,     0,
-       0,   283,   284,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     285,     0,     0,   286,     4,     5,     6,     7,     8,     9,
-      10,   287,   288,   289,   290,     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,    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,     0,   275,   193,   276,   277,   278,
-     279,   280,   281,   282,     0,     0,   283,   284,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   285,     0,     0,     0,   364,
-       0,     0,     0,     0,     0,     0,   287,   288,   289,   290,
-       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,     0,
-       0,     0,     0,     0,    47,    48,    49,    50,    51,    52,
-       0,     0,     0,     0,    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,
-       0,   275,   193,   276,   277,   278,   279,   280,   281,   282,
-       0,     0,   283,   284,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   285,     0,     0,   407,     4,     5,     6,     7,     8,
-       9,    10,   287,   288,   289,   290,     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,    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,     0,   275,   193,   276,   277,
-     278,   279,   280,   281,   282,     0,     0,   283,   284,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   285,     4,     5,     6,
-       7,     8,     9,    10,     0,     0,   426,   287,   288,   289,
-     290,     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,    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,     0,   275,   193,
-     276,   277,   278,   279,   280,   281,   282,     0,     0,   283,
-     284,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   285,     4,
-       5,     6,     7,     8,     9,    10,     0,     0,     0,   287,
-     288,   289,   290,     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,    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,   382,     0,
-     275,   193,   276,   277,   278,   279,   280,   281,   282,     0,
-       0,   283,   284,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     285,     4,     5,     6,     7,     8,     9,    10,     0,     0,
-       0,   287,   288,   289,   290,     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,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    47,    48,    49,    50,    51,
-      52,     0,     0,     0,     0,    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,     0,     0,   193
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,   205,   213,   269,     0,   285,     0,   228,   354,    54,
-     433,   325,   246,   362,   322,   364,   207,   225,   367,   494,
-     241,   216,   217,   220,   221,   239,   237,   207,   237,   233,
-     239,   526,   246,   299,   509,   530,   238,   246,   237,   239,
-     535,   239,   244,   218,   219,   266,   267,   247,   241,   247,
-     237,   244,   260,   257,   247,   335,   247,   337,   255,   256,
-     368,   241,   237,   239,   239,   239,   247,   238,   243,   238,
-     246,   238,   246,   244,   238,   244,   422,   244,   238,   249,
-     244,   251,   316,   238,   244,   319,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   362,   377,   364,   413,
-     238,   367,   451,   391,   392,   246,   244,   393,   394,   395,
-     396,   244,   323,   244,   247,   381,   539,   244,   322,   244,
-     247,   325,   247,   244,   244,   244,   247,   247,   247,   263,
-     264,   265,   222,   223,   252,   253,   254,   242,   207,   244,
-     208,   455,   244,   245,   424,   244,   245,   239,   428,   495,
-     241,   500,   389,   390,   397,   398,   241,   207,   207,   239,
-     246,   207,   207,   247,   368,   238,   237,   224,   226,   257,
-     259,   258,   208,   240,   207,   247,   237,   247,   237,   445,
-     446,   247,   237,   245,   207,   451,   237,   207,   242,   237,
-     206,   540,   244,   246,   415,   238,   240,   237,   240,   207,
-     241,   481,   548,   238,   242,   205,   238,    16,   247,   413,
-     241,   241,   246,   213,   494,   242,   399,   401,   247,   404,
-     220,   400,   237,   233,   220,   402,   220,   227,   237,   509,
-     283,   284,   199,   233,   500,   403,   414,   237,   321,   486,
-     520,   489,   525,   535,   231,   536,   509,   489,   220,   302,
-      -1,   455,    -1,   519,   534,    -1,    -1,   257,    -1,    -1,
-      -1,   261,    -1,   316,    -1,    -1,   319,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   540,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     494,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   514,    -1,   509,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   322,   323,    -1,   325,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   386,   387,   388,   389,   390,   391,   392,
-     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,   404,    -1,    -1,   354,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   413,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   422,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   455,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   489,
-      -1,    -1,    -1,    -1,   494,   495,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   509,
-      -1,    -1,    -1,    -1,   514,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   526,    -1,    -1,    -1,
-     530,    -1,    -1,    -1,    -1,   535,    -1,    -1,    -1,   539,
-      -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,   548,     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,    -1,    -1,   208,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   261,   262,   263,
-     264,   265,   266,     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,    -1,    -1,   218,   219,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   237,    -1,    -1,
-      -1,   241,   242,    -1,    -1,    -1,    -1,   247,   248,   249,
-     250,   251,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   261,   262,   263,   264,   265,   266,     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,
-      -1,    -1,   218,   219,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   237,    -1,    -1,    -1,   241,   242,    -1,    -1,    -1,
-      -1,   247,   248,   249,   250,   251,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   261,   262,   263,   264,   265,
-     266,     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,
@@ -1884,14 +1544,280 @@
      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,    -1,    -1,   218,   219,    -1,    -1,
+     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,
+      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,
+     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,
+      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,   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,     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,     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,
+      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,
+     383,     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,    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
+};
+
+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,
-      -1,    -1,    -1,    -1,    -1,   237,    -1,    -1,    -1,   241,
-      -1,    -1,    -1,    -1,    -1,   247,   248,   249,   250,   251,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   261,
-     262,   263,   264,   265,   266,     3,     4,     5,     6,     7,
+     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,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -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,    -1,    -1,    -1,    -1,    -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,    -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,    -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,
@@ -1912,14 +1838,171 @@
      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,    -1,    -1,
-     218,   219,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   237,
-      -1,    -1,    -1,   241,    -1,    -1,    -1,    -1,    -1,   247,
-     248,   249,   250,   251,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   261,   262,   263,   264,   265,   266,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    -1,    17,    18,    19,    20,    21,    22,    23,
+     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,
       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,
@@ -1938,12 +2021,12 @@
      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,    -1,    -1,   218,   219,    -1,    -1,    -1,    -1,
+     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,   237,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   247,   248,   249,   250,   251,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   261,   262,   263,
+      -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,
@@ -1964,90 +2047,86 @@
      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,    -1,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,    -1,    -1,   218,   219,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   237,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   247,   248,   249,
-     250,   251,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   261,   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,    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,
-      -1,    -1,   208,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     200,   201,   202,   203,   204,   205,   206,    -1,   208,   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,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      -1,    -1,    -1,    -1,    -1,   261,   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,    -1,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,    -1,    -1,   218,   219,    -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,
+      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,   237,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   248,   249,   250,   251,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   261,   262,
-     263,   264,   265,     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,    -1,   207,   208,    -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,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   247,     3,     4,
+      -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,   261,   262,   263,   264,   265,    -1,    -1,    -1,    24,
+      -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,
@@ -2066,182 +2145,38 @@
      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,    -1,    -1,   208,    -1,    -1,    -1,    -1,    -1,    -1,
+     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   242,    -1,    -1,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      -1,    -1,    -1,    -1,    -1,    -1,   261,   262,   263,   264,
-     265,    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,    -1,    -1,   208,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   242,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,   261,   262,
-     263,   264,   265,    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,    -1,    -1,   208,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   242,    -1,    -1,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
-     261,   262,   263,   264,   265,    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,    -1,    -1,   208,
-      -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,   261,   262,   263,   264,   265,    60,    61,    62,
-      63,    64,    65,    -1,    -1,    -1,    -1,    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,    -1,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,    -1,    -1,   218,   219,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   237,    -1,    -1,    -1,   241,   242,
-      -1,    -1,    -1,    -1,    -1,   248,   249,   250,   251,     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,    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,    -1,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,    -1,
-      -1,   218,   219,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     237,    -1,    -1,   240,     6,     7,     8,     9,    10,    11,
-      12,   248,   249,   250,   251,    -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,    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,    -1,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,    -1,    -1,   218,   219,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   237,    -1,    -1,    -1,   241,
-      -1,    -1,    -1,    -1,    -1,    -1,   248,   249,   250,   251,
-       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,    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,
-      -1,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-      -1,    -1,   218,   219,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   237,    -1,    -1,   240,     6,     7,     8,     9,    10,
-      11,    12,   248,   249,   250,   251,    -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,    -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,    70,
+      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,
@@ -2255,63 +2190,17 @@
      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,    -1,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,    -1,    -1,   218,   219,    -1,
+     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,   237,     6,     7,     8,
-       9,    10,    11,    12,    -1,    -1,   247,   248,   249,   250,
-     251,    -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,    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,    -1,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,    -1,    -1,   218,
-     219,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   237,     6,
-       7,     8,     9,    10,    11,    12,    -1,    -1,    -1,   248,
-     249,   250,   251,    -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,    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,    -1,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,    -1,
-      -1,   218,   219,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     237,     6,     7,     8,     9,    10,    11,    12,    -1,    -1,
-      -1,   248,   249,   250,   251,    -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,    70,    71,    72,    73,    74,
+      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,
@@ -2325,7 +2214,125 @@
      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,    -1,    -1,   208
+     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,
+      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,   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,
+      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,    -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,   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,    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
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2351,91 +2358,91 @@
      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,   208,   261,   262,   263,   264,   265,   266,
-     301,   302,   305,   306,   307,   308,   312,   313,   314,   315,
-     316,   317,   320,   321,   322,   323,   325,   327,   328,   329,
-     366,   367,   368,   237,   237,   207,   241,   328,   207,   247,
-     247,   369,   238,   244,   309,   310,   311,   321,   325,   244,
-     247,   207,   207,   247,   322,   325,   239,   326,     0,   367,
-     208,   324,    54,   207,   318,   319,   241,   331,   325,   247,
-     326,   241,   348,   310,   309,   311,   207,   207,   237,   246,
-     326,   241,   244,   247,   304,   207,   209,   210,   211,   212,
-     213,   214,   215,   218,   219,   237,   240,   248,   249,   250,
-     251,   271,   272,   273,   275,   276,   277,   278,   279,   280,
+     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,   325,   239,   238,   244,   246,
-     238,   244,   330,   321,   325,   332,   333,   247,   247,    13,
-      14,    15,    17,    18,    19,    20,    21,    22,    23,   206,
-     241,   242,   247,   282,   295,   297,   299,   301,   305,   325,
-     338,   339,   340,   341,   349,   350,   351,   354,   357,   358,
-     365,   326,   246,   326,   241,   297,   336,   246,   303,   207,
-     244,   247,   282,   282,   299,   218,   219,   239,   243,   238,
-     238,   244,   205,   297,   237,   282,   252,   253,   254,   249,
-     251,   216,   217,   220,   221,   255,   256,   222,   223,   259,
-     258,   257,   224,   226,   225,   260,   240,   240,   295,   208,
-     295,   300,   319,   332,   325,   207,   334,   335,   242,   333,
-     247,   247,   360,   237,   237,   247,   247,   299,   237,   299,
-     245,   237,   242,   342,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   246,   298,   244,   247,   242,   339,
-     336,   246,   336,   337,   336,   332,   207,   238,   274,   299,
-     207,   297,   282,   282,   282,   284,   284,   285,   285,   286,
-     286,   286,   286,   287,   287,   288,   289,   290,   291,   292,
-     293,   296,   240,   242,   334,   326,   244,   247,   339,   361,
-     299,   247,   299,   245,   359,   349,   297,   297,   336,   242,
-     244,   242,   240,   299,   247,   335,   206,   338,   350,   362,
-     238,   238,   299,   314,   321,   353,   343,   242,   336,   245,
-     237,   353,   363,   364,   345,   346,   347,   352,   355,   207,
-     238,   242,   297,   299,   247,   238,    16,   341,   340,   241,
-     246,   340,   344,   348,   238,   299,   344,   345,   349,   356,
-     336,   247,   242
+     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,   270,   271,   272,   272,   272,   272,   272,   272,   272,
-     272,   272,   273,   273,   273,   273,   273,   273,   274,   275,
-     276,   277,   277,   278,   278,   279,   279,   280,   281,   281,
-     282,   282,   282,   282,   283,   283,   283,   283,   284,   284,
-     284,   284,   285,   285,   285,   286,   286,   286,   287,   287,
-     287,   287,   287,   288,   288,   288,   289,   289,   290,   290,
-     291,   291,   292,   292,   293,   293,   294,   294,   295,   296,
-     295,   297,   297,   298,   298,   298,   298,   298,   298,   298,
-     298,   298,   298,   298,   299,   299,   300,   301,   301,   301,
-     301,   301,   301,   301,   301,   301,   303,   302,   304,   304,
-     305,   306,   306,   307,   307,   308,   309,   309,   310,   310,
-     310,   310,   311,   312,   312,   312,   312,   312,   313,   313,
-     313,   313,   313,   314,   314,   315,   316,   316,   316,   317,
-     318,   318,   319,   319,   319,   320,   321,   321,   322,   322,
-     322,   322,   322,   322,   323,   323,   323,   323,   323,   323,
-     323,   323,   323,   323,   323,   323,   323,   323,   323,   323,
-     323,   323,   323,   324,   324,   325,   325,   326,   326,   326,
-     326,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-     327,   327,   328,   328,   328,   330,   329,   331,   329,   332,
-     332,   333,   333,   334,   334,   335,   335,   336,   336,   336,
-     337,   337,   338,   339,   339,   340,   340,   340,   340,   340,
-     340,   340,   341,   342,   343,   341,   344,   344,   346,   345,
-     347,   345,   348,   348,   349,   349,   350,   350,   351,   352,
-     352,   353,   353,   355,   354,   356,   356,   357,   357,   359,
-     358,   360,   358,   361,   358,   362,   362,   363,   363,   364,
-     364,   365,   365,   365,   365,   365,   366,   366,   367,   367,
-     369,   368
+       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.  */
@@ -2453,12 +2460,12 @@
        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,     4,
-       1,     3,     1,     3,     1,     1,     1,     2,     1,     1,
+       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,     4,     1,     3,     1,     2,     2,     3,     3,
-       4,     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,
@@ -2475,15 +2482,15 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     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
+       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
 };
 
 
@@ -3170,7 +3177,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 3174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
@@ -3178,7 +3185,7 @@
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
@@ -3186,7 +3193,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 3190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
@@ -3195,7 +3202,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 3199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 6:
@@ -3204,7 +3211,7 @@
         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);
     }
-#line 3208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 7:
@@ -3213,7 +3220,7 @@
         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);
     }
-#line 3217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 8:
@@ -3221,7 +3228,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 3225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 9:
@@ -3230,7 +3237,7 @@
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 3234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
@@ -3238,7 +3245,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 3242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
@@ -3248,7 +3255,7 @@
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 3252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 12:
@@ -3256,7 +3263,7 @@
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3267 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 13:
@@ -3264,7 +3271,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
@@ -3272,7 +3279,7 @@
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 15:
@@ -3280,7 +3287,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 3284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 16:
@@ -3290,7 +3297,7 @@
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
@@ -3300,7 +3307,7 @@
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
@@ -3309,7 +3316,7 @@
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
@@ -3318,7 +3325,7 @@
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 3322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
@@ -3326,7 +3333,7 @@
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 3330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
@@ -3335,7 +3342,7 @@
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 22:
@@ -3344,7 +3351,7 @@
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 23:
@@ -3352,7 +3359,7 @@
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 3356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3363 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 24:
@@ -3360,7 +3367,7 @@
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 3364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
@@ -3372,7 +3379,7 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
@@ -3384,7 +3391,7 @@
         (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);
     }
-#line 3388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
@@ -3392,7 +3399,7 @@
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 3396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
@@ -3402,7 +3409,7 @@
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 3406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 29:
@@ -3434,7 +3441,7 @@
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 3438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 30:
@@ -3445,7 +3452,7 @@
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 3449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 31:
@@ -3454,7 +3461,7 @@
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 3458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 32:
@@ -3463,7 +3470,7 @@
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 3467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
@@ -3484,38 +3491,38 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 3488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 36:
 #line 449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 3506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     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 3513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 38:
 #line 456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 39:
@@ -3525,7 +3532,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
@@ -3535,7 +3542,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
@@ -3546,13 +3553,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
@@ -3562,7 +3569,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
@@ -3572,13 +3579,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3589 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 46:
@@ -3589,7 +3596,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 47:
@@ -3600,13 +3607,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 49:
@@ -3616,7 +3623,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 50:
@@ -3626,7 +3633,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 51:
@@ -3636,7 +3643,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
@@ -3646,13 +3653,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 54:
@@ -3665,7 +3672,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 55:
@@ -3678,13 +3685,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 57:
@@ -3695,13 +3702,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 59:
@@ -3712,13 +3719,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 61:
@@ -3729,13 +3736,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 63:
@@ -3745,13 +3752,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3762 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 65:
@@ -3761,13 +3768,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 67:
@@ -3777,13 +3784,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 69:
@@ -3791,7 +3798,7 @@
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 3795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 70:
@@ -3808,13 +3815,13 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 3812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#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 3818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 72:
@@ -3831,7 +3838,7 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 3835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
@@ -3840,7 +3847,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 3844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3851 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 74:
@@ -3849,7 +3856,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 3853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
@@ -3858,7 +3865,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 3862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 76:
@@ -3868,7 +3875,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 3872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 77:
@@ -3877,7 +3884,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 3881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 78:
@@ -3886,7 +3893,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 3890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 79:
@@ -3895,7 +3902,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 3899 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 80:
@@ -3904,7 +3911,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 3908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 81:
@@ -3913,7 +3920,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 3917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 82:
@@ -3922,7 +3929,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 3926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 83:
@@ -3931,7 +3938,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 3935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 84:
@@ -3939,52 +3946,53 @@
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3943 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 85:
 #line 693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        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);
         }
     }
-#line 3955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 704 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 710 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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
     }
-#line 3974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 3984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 721 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
 
@@ -3993,75 +4001,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 3997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 4024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 4034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
         (yyval.interm.intermNode) = 0;
     }
-#line 4044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 750 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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));
         (yyval.interm.intermNode) = 0;
     }
-#line 4055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 759 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 760 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 759 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 760 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -4071,54 +4079,54 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 4075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 770 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 771 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 774 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 775 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4101 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 781 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 782 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4102 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 101:
-#line 788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
 #line 4110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 102:
-#line 791 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 101:
+#line 789 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
 #line 4118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
+  case 102:
+#line 792 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+#line 4126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
   case 103:
-#line 798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 799 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -4127,11 +4135,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 4131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 806 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -4149,11 +4157,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 4153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 827 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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",
@@ -4168,11 +4176,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 4172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 845 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -4188,11 +4196,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 860 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -4210,11 +4218,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 882 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4226,11 +4234,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 4230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -4238,11 +4246,11 @@
         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 4242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 904 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4253,11 +4261,11 @@
         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 4257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -4265,118 +4273,118 @@
         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 4269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 4280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 113:
-#line 932 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
 #line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
+  case 113:
+#line 933 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
   case 114:
-#line 935 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 4297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4305 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 940 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 943 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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);
     }
-#line 4316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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);
     }
-#line 4326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 956 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 957 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
     }
-#line 4336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 961 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 962 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 967 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-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);
     }
-#line 4356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 971 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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);
     }
-#line 4366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 976 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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);
     }
-#line 4376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 985 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 986 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -4388,11 +4396,11 @@
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 4392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 996 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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));
@@ -4417,22 +4425,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1023 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#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 4432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1032 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -4440,11 +4448,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1039 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1040 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -4452,11 +4460,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 4456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1046 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1047 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
@@ -4464,84 +4472,98 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 4468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 129:
-#line 1056 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-    }
 #line 4476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 1062 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 129:
+#line 1054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+#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
     }
-#line 4484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 130:
+#line 1066 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[-1].interm.type);
+    }
+#line 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1065 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1072 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 132:
+#line 1075 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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);
     }
-#line 4494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 1072 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 133:
+#line 1082 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 4503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 133:
-#line 1076 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 134:
+#line 1086 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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));
     }
-#line 4512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 134:
-#line 1080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  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 4522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 135:
-#line 1088 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  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 4533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 136:
-#line 1097 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1100 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1107 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 4563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 138:
+#line 1110 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -4550,71 +4572,71 @@
         (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);
     }
-#line 4554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 138:
-#line 1111 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1121 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1117 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1130 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1135 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1138 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 4627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 145:
+#line 1145 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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
     }
-#line 4614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 145:
-#line 1139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 146:
+#line 1149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -4627,11 +4649,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 146:
-#line 1151 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 147:
+#line 1161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -4646,43 +4668,43 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 147:
-#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 148:
+#line 1175 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 4660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 148:
-#line 1170 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 149:
+#line 1180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].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 4671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 149:
-#line 1176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 150:
+#line 1186 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].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 4682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 150:
-#line 1182 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 151:
+#line 1192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -4690,52 +4712,52 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 4694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 1189 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 152:
+#line 1199 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 4705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 1195 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 153:
+#line 1205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 4715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 154:
+#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 4725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 1205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 155:
+#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 4735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 156:
+#line 1220 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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");
@@ -4743,67 +4765,67 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 4747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 157:
+#line 1227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 4756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1221 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 158:
+#line 1231 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 4765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 159:
+#line 1235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 4774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 160:
+#line 1239 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 4783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 161:
+#line 1243 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 4792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1237 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 162:
+#line 1247 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 4803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1243 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 163:
+#line 1253 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
@@ -4813,56 +4835,56 @@
         // 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 4817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 163:
-#line 1255 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // TODO: 4.0 functionality: subroutine type to list
-    }
-#line 4825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        // TODO: 4.0 functionality: subroutine type to list
     }
-#line 4832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1268 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    }
+#line 4854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 166:
+#line 1273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 4841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 167:
+#line 1277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayDimCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes, 0);
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 4852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1276 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 168:
+#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 4862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1281 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 169:
+#line 1291 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -4871,20 +4893,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 4875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 170:
+#line 1299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 4884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 171:
+#line 1303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -4892,1738 +4914,1738 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 4896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 172:
+#line 1313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 4905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 173:
+#line 1317 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 4914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 174:
+#line 1321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 4924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 175:
+#line 1326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 4933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 176:
+#line 1330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 4943 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 177:
+#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 4953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 178:
+#line 1340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 4963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 179:
+#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 4972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 179:
-#line 1339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 4982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 180:
-#line 1344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 4992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 181:
 #line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(4);
+        (yyval.interm.type).setVector(2);
     }
-#line 5002 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 181:
+#line 1354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
+    }
+#line 5014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 182:
-#line 1354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 183:
-#line 1360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(4);
     }
 #line 5024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
+  case 183:
+#line 1364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
+    }
+#line 5035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
   case 184:
-#line 1366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(3);
+    }
+#line 5046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 185:
+#line 1376 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 5035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 185:
-#line 1372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 1377 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 187:
 #line 1382 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(4);
+        (yyval.interm.type).setVector(2);
     }
-#line 5065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 188:
+  case 187:
 #line 1387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(3);
     }
-#line 5075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 189:
+  case 188:
 #line 1392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(4);
     }
-#line 5085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 190:
+  case 189:
 #line 1397 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(4);
+        (yyval.interm.type).setVector(2);
     }
-#line 5095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 190:
+#line 1402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 5107 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 1402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1407 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 192:
-#line 1408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
     }
 #line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
+  case 192:
+#line 1412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(2);
+    }
+#line 5128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
   case 193:
-#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1418 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(3);
+    }
+#line 5139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 194:
+#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 5128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 1420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 195:
+#line 1430 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 5139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 195:
-#line 1426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 196:
-#line 1432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(4);
-    }
 #line 5161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
+  case 196:
+#line 1436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
+    }
+#line 5172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
   case 197:
-#line 1438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1442 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
+    }
+#line 5183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 198:
+#line 1448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 5172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 1444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 199:
+#line 1454 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 5183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 1450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 200:
+#line 1460 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 5194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 200:
-#line 1456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 5204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 1461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 5214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 202:
 #line 1466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 203:
+  case 202:
 #line 1471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 204:
+  case 203:
 #line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 3);
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 205:
+  case 204:
 #line 1481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 4);
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 205:
+#line 1486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 5266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 1486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 5276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 207:
+#line 1496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 5264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 1491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 208:
+#line 1501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 1496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 209:
+#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 5284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 1501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 210:
+#line 1511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 5294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 210:
-#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 211:
+#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 5304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 1511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 212:
+#line 1521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 213:
+#line 1526 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 1522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 214:
+#line 1532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 215:
+#line 1538 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 1534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 216:
+#line 1544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 217:
+#line 1550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 5369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 1546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 218:
+#line 1556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 5380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 219:
+#line 1562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 5391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 220:
+#line 1568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 1564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 221:
+#line 1574 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 5413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 222:
+#line 1580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 5424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 1576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 223:
+#line 1586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 5435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 1582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 224:
+#line 1592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 1588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 225:
+#line 1598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 1593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 226:
+#line 1603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 5466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 1598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 227:
+#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 5476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 1603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 228:
+#line 1613 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 5486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 229:
+#line 1618 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 5496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 1613 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 230:
+#line 1623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 5506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 1618 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 231:
+#line 1628 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 5516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 1623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 232:
+#line 1633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 5526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 1628 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 233:
+#line 1638 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 5536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 1633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 234:
+#line 1643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 5546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 1638 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 235:
+#line 1648 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 5556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 1643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 236:
+#line 1653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 5566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 1648 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 237:
+#line 1658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 5576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 1653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 238:
+#line 1663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 5586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 1658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 239:
+#line 1668 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 5596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 1663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 240:
+#line 1673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 5606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 1668 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 241:
+#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 5616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 241:
-#line 1673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 242:
+#line 1683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 5626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 242:
-#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 243:
+#line 1688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 5636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 243:
-#line 1683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 244:
+#line 1693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 5646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 244:
-#line 1688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 245:
+#line 1698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 5656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 245:
-#line 1693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 246:
+#line 1703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 5666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 246:
-#line 1698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 247:
+#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 5676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 1703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 248:
+#line 1713 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 5686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 249:
+#line 1718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 5696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 1713 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 250:
+#line 1723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 5706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 1718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 251:
+#line 1728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 5716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 252:
+#line 1733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 5726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 253:
+#line 1738 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 254:
+#line 1743 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 5746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1738 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 255:
+#line 1748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 5756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1743 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 256:
+#line 1753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 5766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 257:
+#line 1758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 5776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 258:
+#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 5786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 259:
+#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 5796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 260:
+#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 5806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 261:
+#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 5816 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 262:
+#line 1783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 5826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 263:
+#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 5836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 264:
+#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 5846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5868 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 265:
+#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 5856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 266:
+#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 5866 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 267:
+#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 5876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 268:
+#line 1813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 5886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 269:
+#line 1818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 5896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 270:
+#line 1823 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 5906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 271:
+#line 1828 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 5916 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1823 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 272:
+#line 1833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 5926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5948 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1828 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 273:
+#line 1838 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
     }
-#line 5936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 274:
+#line 1843 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 5946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1838 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 275:
+#line 1848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 5956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1843 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 276:
+#line 1853 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 5966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 277:
+#line 1858 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 5976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1853 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 278:
+#line 1863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 5986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1858 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 279:
+#line 1868 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 5996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 280:
+#line 1873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
     }
-#line 6006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1868 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 281:
+#line 1878 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 6016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 282:
+#line 1883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 6026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1878 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 283:
+#line 1888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 6036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 284:
+#line 1893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 6046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 1888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 285:
+#line 1898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 6056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 1893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 286:
+#line 1903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 6066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 1898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 287:
+#line 1908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
     }
-#line 6076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 1903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 288:
+#line 1913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 6086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 1908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 289:
+#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 6096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 1913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 290:
+#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 6106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 291:
+#line 1928 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 6116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 292:
+#line 1933 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 6126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 1928 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 293:
+#line 1938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 6136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 1933 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 294:
+#line 1943 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 6146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 1938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 295:
+#line 1948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 6156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 1943 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 296:
+#line 1953 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 6166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 1948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 297:
+#line 1958 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 1953 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 298:
+#line 1963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 1958 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 299:
+#line 1968 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6218 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 1963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 300:
+#line 1973 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 6206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 1968 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 301:
+#line 1978 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 1973 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 302:
+#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 6226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 1978 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 303:
+#line 1988 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 6236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 304:
+#line 1993 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 6246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 1988 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 305:
+#line 1998 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 6256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6278 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 1993 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 306:
+#line 2003 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 6266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 1998 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 307:
+#line 2008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 6276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2003 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 308:
+#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 6286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 309:
+#line 2018 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 6296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 310:
+#line 2023 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 6306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2018 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 311:
+#line 2028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 6316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2023 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 312:
+#line 2033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 6326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 313:
+#line 2038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 6336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 314:
+#line 2043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 6346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 315:
+#line 2048 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 6356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 316:
+#line 2053 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 6366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2048 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 317:
+#line 2058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 6376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2053 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 318:
+#line 2063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 6386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 319:
+#line 2068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 6396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 320:
+#line 2073 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 6406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 321:
+#line 2078 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 6416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2073 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 322:
+#line 2083 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 6426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2078 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 323:
+#line 2088 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 6436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2083 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 324:
+#line 2093 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 6446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2088 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 325:
+#line 2098 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 6456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2093 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 326:
+#line 2103 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 6466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2098 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 327:
+#line 2108 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 6476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2103 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 328:
+#line 2113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 6486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2108 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 329:
+#line 2118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 6496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 330:
+#line 2123 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 331:
+#line 2128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 6516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2123 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 332:
+#line 2133 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 6526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 333:
+#line 2138 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 6536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2133 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 334:
+#line 2143 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 6547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 335:
+#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 6558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2145 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 336:
+#line 2155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 6569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2151 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 337:
+#line 2161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 6580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 338:
+#line 2167 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 6591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2163 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 339:
+#line 2173 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 6602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 340:
+#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 6613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6635 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2175 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 341:
+#line 2185 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 6623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 342:
+#line 2190 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -6637,50 +6659,50 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 6641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2196 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 343:
+#line 2206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         if (parseContext.profile == EEsProfile)
             (yyval.interm.type).qualifier.precision = EpqHigh;
     }
-#line 6652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 344:
+#line 2212 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         if (parseContext.profile == EEsProfile)
             (yyval.interm.type).qualifier.precision = EpqMedium;
     }
-#line 6663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6685 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2208 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 345:
+#line 2218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         if (parseContext.profile == EEsProfile)
             (yyval.interm.type).qualifier.precision = EpqLow;
     }
-#line 6674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 345:
-#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 6680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 346:
-#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
+#line 6702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 347:
+#line 2227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -6692,17 +6714,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 6696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 347:
-#line 2228 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 6702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 348:
-#line 2228 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2238 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
+#line 6724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 349:
+#line 2238 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -6710,19 +6732,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 6714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 349:
-#line 2238 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
-    }
-#line 6722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 350:
-#line 2241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2248 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
+    }
+#line 6744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 351:
+#line 2251 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -6733,11 +6755,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 6737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 352:
+#line 2264 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -6756,11 +6778,11 @@
             (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
         }
     }
-#line 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 2272 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 353:
+#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier);
         if ((yyvsp[-2].interm.type).arraySizes) {
@@ -6782,38 +6804,38 @@
             (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
         }
     }
-#line 6786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2296 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 354:
+#line 2306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 6795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 354:
-#line 2300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
-    }
-#line 6803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 355:
-#line 2306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
+    }
+#line 6825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 356:
+#line 2316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 6813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 357:
+#line 2321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes, 0);
 
@@ -6822,219 +6844,219 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[0].interm).arraySizes);
     }
-#line 6826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 357:
-#line 2322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 6834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 358:
-#line 2325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+#line 6856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 359:
+#line 2335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 6845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 2331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 360:
+#line 2341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 6856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 360:
-#line 2340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
-    }
-#line 6864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 361:
-#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-    }
-#line 6872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 362:
-#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 #line 6878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 363:
+  case 361:
+#line 2350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
+    }
+#line 6886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 362:
 #line 2353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+    }
+#line 6894 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 363:
+#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 364:
-#line 2354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 365:
-#line 2360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 366:
-#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 367:
-#line 2362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 368:
-#line 2363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 369:
-#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 370:
-#line 2365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 371:
-#line 2366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2375 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6948 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 372:
-#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = 0; }
-#line 6938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 2376 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 6954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 373:
-#line 2371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2380 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = 0; }
+#line 6960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 374:
+#line 2381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 6947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2375 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 375:
+#line 2385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 6956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 376:
+#line 2389 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 6966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 376:
-#line 2387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 377:
-#line 2388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 6978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 378:
-#line 2392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 6986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 2398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 7000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 379:
-#line 2395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        ++parseContext.controlFlowNestingLevel;
+    }
+#line 7008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 380:
+#line 2405 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 6995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 2399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 381:
+#line 2409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 2404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 382:
+#line 2414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 382:
-#line 2413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermNode) = 0;
-    }
-#line 7024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 383:
-#line 2416 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2423 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermNode) = 0;
+    }
+#line 7046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 384:
+#line 2426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 7034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 2424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 385:
+#line 2434 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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 ||
@@ -7043,11 +7065,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 7047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 385:
-#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 386:
+#line 2442 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -7056,59 +7078,59 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 386:
-#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = 0; }
-#line 7066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 387:
-#line 2444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 7072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 2453 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = 0; }
+#line 7088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 388:
-#line 2448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2454 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
+#line 7094 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 389:
+#line 2458 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 7081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 389:
-#line 2455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 390:
+#line 2465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 7090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 2459 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 391:
+#line 2469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 391:
-#line 2467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 392:
+#line 2477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 7108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 393:
+#line 2481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -7119,11 +7141,11 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 7123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 2484 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 394:
+#line 2494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -7132,11 +7154,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 7136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 395:
+#line 2502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
@@ -7146,27 +7168,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 395:
-#line 2504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermNode) = 0;
-    }
-#line 7158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 396:
-#line 2507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2514 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermNode) = 0;
     }
-#line 7166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 397:
-#line 2513 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2517 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 7188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 398:
+#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -7179,11 +7201,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 7183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2525 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 399:
+#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -7193,11 +7215,11 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 7197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 2537 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 400:
+#line 2547 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -7206,11 +7228,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 401:
+#line 2555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
@@ -7218,21 +7240,21 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2552 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 402:
+#line 2562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2557 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 403:
+#line 2567 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -7244,22 +7266,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 2568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 404:
+#line 2578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 2574 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 405:
+#line 2584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -7272,81 +7294,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 405:
-#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 7284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 406:
-#line 2592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 407:
-#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 408:
-#line 2601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = 0;
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 409:
-#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = 0;
+    }
+#line 7330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 410:
+#line 2617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 411:
+#line 2621 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2618 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 412:
+#line 2628 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 7336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 413:
+#line 2633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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);
     }
-#line 7346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2628 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 414:
+#line 2638 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -7354,71 +7376,71 @@
         if (parseContext.inMain)
             parseContext.postMainReturn = true;
     }
-#line 7358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 414:
-#line 2635 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 7366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 415:
-#line 2638 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2645 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
+    }
+#line 7388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 416:
+#line 2648 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 7375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2647 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 417:
+#line 2657 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 418:
+#line 2661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 418:
-#line 2658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-#line 7401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 419:
-#line 2661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2668 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 420:
-#line 2667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 7431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 421:
+#line 2677 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (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);
     }
-#line 7418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 422:
+#line 2681 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -7434,11 +7456,11 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 7438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 7442 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -7666,5 +7688,5 @@
 #endif
   return yyresult;
 }
-#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 2698 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index e7d8fae..2d8276a 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -112,206 +112,207 @@
     FLAT = 322,
     SMOOTH = 323,
     LAYOUT = 324,
-    MAT2X2 = 325,
-    MAT2X3 = 326,
-    MAT2X4 = 327,
-    MAT3X2 = 328,
-    MAT3X3 = 329,
-    MAT3X4 = 330,
-    MAT4X2 = 331,
-    MAT4X3 = 332,
-    MAT4X4 = 333,
-    DMAT2X2 = 334,
-    DMAT2X3 = 335,
-    DMAT2X4 = 336,
-    DMAT3X2 = 337,
-    DMAT3X3 = 338,
-    DMAT3X4 = 339,
-    DMAT4X2 = 340,
-    DMAT4X3 = 341,
-    DMAT4X4 = 342,
-    ATOMIC_UINT = 343,
-    SAMPLER1D = 344,
-    SAMPLER2D = 345,
-    SAMPLER3D = 346,
-    SAMPLERCUBE = 347,
-    SAMPLER1DSHADOW = 348,
-    SAMPLER2DSHADOW = 349,
-    SAMPLERCUBESHADOW = 350,
-    SAMPLER1DARRAY = 351,
-    SAMPLER2DARRAY = 352,
-    SAMPLER1DARRAYSHADOW = 353,
-    SAMPLER2DARRAYSHADOW = 354,
-    ISAMPLER1D = 355,
-    ISAMPLER2D = 356,
-    ISAMPLER3D = 357,
-    ISAMPLERCUBE = 358,
-    ISAMPLER1DARRAY = 359,
-    ISAMPLER2DARRAY = 360,
-    USAMPLER1D = 361,
-    USAMPLER2D = 362,
-    USAMPLER3D = 363,
-    USAMPLERCUBE = 364,
-    USAMPLER1DARRAY = 365,
-    USAMPLER2DARRAY = 366,
-    SAMPLER2DRECT = 367,
-    SAMPLER2DRECTSHADOW = 368,
-    ISAMPLER2DRECT = 369,
-    USAMPLER2DRECT = 370,
-    SAMPLERBUFFER = 371,
-    ISAMPLERBUFFER = 372,
-    USAMPLERBUFFER = 373,
-    SAMPLERCUBEARRAY = 374,
-    SAMPLERCUBEARRAYSHADOW = 375,
-    ISAMPLERCUBEARRAY = 376,
-    USAMPLERCUBEARRAY = 377,
-    SAMPLER2DMS = 378,
-    ISAMPLER2DMS = 379,
-    USAMPLER2DMS = 380,
-    SAMPLER2DMSARRAY = 381,
-    ISAMPLER2DMSARRAY = 382,
-    USAMPLER2DMSARRAY = 383,
-    SAMPLEREXTERNALOES = 384,
-    SAMPLER = 385,
-    SAMPLERSHADOW = 386,
-    TEXTURE1D = 387,
-    TEXTURE2D = 388,
-    TEXTURE3D = 389,
-    TEXTURECUBE = 390,
-    TEXTURE1DARRAY = 391,
-    TEXTURE2DARRAY = 392,
-    ITEXTURE1D = 393,
-    ITEXTURE2D = 394,
-    ITEXTURE3D = 395,
-    ITEXTURECUBE = 396,
-    ITEXTURE1DARRAY = 397,
-    ITEXTURE2DARRAY = 398,
-    UTEXTURE1D = 399,
-    UTEXTURE2D = 400,
-    UTEXTURE3D = 401,
-    UTEXTURECUBE = 402,
-    UTEXTURE1DARRAY = 403,
-    UTEXTURE2DARRAY = 404,
-    TEXTURE2DRECT = 405,
-    ITEXTURE2DRECT = 406,
-    UTEXTURE2DRECT = 407,
-    TEXTUREBUFFER = 408,
-    ITEXTUREBUFFER = 409,
-    UTEXTUREBUFFER = 410,
-    TEXTURECUBEARRAY = 411,
-    ITEXTURECUBEARRAY = 412,
-    UTEXTURECUBEARRAY = 413,
-    TEXTURE2DMS = 414,
-    ITEXTURE2DMS = 415,
-    UTEXTURE2DMS = 416,
-    TEXTURE2DMSARRAY = 417,
-    ITEXTURE2DMSARRAY = 418,
-    UTEXTURE2DMSARRAY = 419,
-    SUBPASSINPUT = 420,
-    SUBPASSINPUTMS = 421,
-    ISUBPASSINPUT = 422,
-    ISUBPASSINPUTMS = 423,
-    USUBPASSINPUT = 424,
-    USUBPASSINPUTMS = 425,
-    IMAGE1D = 426,
-    IIMAGE1D = 427,
-    UIMAGE1D = 428,
-    IMAGE2D = 429,
-    IIMAGE2D = 430,
-    UIMAGE2D = 431,
-    IMAGE3D = 432,
-    IIMAGE3D = 433,
-    UIMAGE3D = 434,
-    IMAGE2DRECT = 435,
-    IIMAGE2DRECT = 436,
-    UIMAGE2DRECT = 437,
-    IMAGECUBE = 438,
-    IIMAGECUBE = 439,
-    UIMAGECUBE = 440,
-    IMAGEBUFFER = 441,
-    IIMAGEBUFFER = 442,
-    UIMAGEBUFFER = 443,
-    IMAGE1DARRAY = 444,
-    IIMAGE1DARRAY = 445,
-    UIMAGE1DARRAY = 446,
-    IMAGE2DARRAY = 447,
-    IIMAGE2DARRAY = 448,
-    UIMAGE2DARRAY = 449,
-    IMAGECUBEARRAY = 450,
-    IIMAGECUBEARRAY = 451,
-    UIMAGECUBEARRAY = 452,
-    IMAGE2DMS = 453,
-    IIMAGE2DMS = 454,
-    UIMAGE2DMS = 455,
-    IMAGE2DMSARRAY = 456,
-    IIMAGE2DMSARRAY = 457,
-    UIMAGE2DMSARRAY = 458,
-    STRUCT = 459,
-    VOID = 460,
-    WHILE = 461,
-    IDENTIFIER = 462,
-    TYPE_NAME = 463,
-    FLOATCONSTANT = 464,
-    DOUBLECONSTANT = 465,
-    INTCONSTANT = 466,
-    UINTCONSTANT = 467,
-    INT64CONSTANT = 468,
-    UINT64CONSTANT = 469,
-    BOOLCONSTANT = 470,
-    LEFT_OP = 471,
-    RIGHT_OP = 472,
-    INC_OP = 473,
-    DEC_OP = 474,
-    LE_OP = 475,
-    GE_OP = 476,
-    EQ_OP = 477,
-    NE_OP = 478,
-    AND_OP = 479,
-    OR_OP = 480,
-    XOR_OP = 481,
-    MUL_ASSIGN = 482,
-    DIV_ASSIGN = 483,
-    ADD_ASSIGN = 484,
-    MOD_ASSIGN = 485,
-    LEFT_ASSIGN = 486,
-    RIGHT_ASSIGN = 487,
-    AND_ASSIGN = 488,
-    XOR_ASSIGN = 489,
-    OR_ASSIGN = 490,
-    SUB_ASSIGN = 491,
-    LEFT_PAREN = 492,
-    RIGHT_PAREN = 493,
-    LEFT_BRACKET = 494,
-    RIGHT_BRACKET = 495,
-    LEFT_BRACE = 496,
-    RIGHT_BRACE = 497,
-    DOT = 498,
-    COMMA = 499,
-    COLON = 500,
-    EQUAL = 501,
-    SEMICOLON = 502,
-    BANG = 503,
-    DASH = 504,
-    TILDE = 505,
-    PLUS = 506,
-    STAR = 507,
-    SLASH = 508,
-    PERCENT = 509,
-    LEFT_ANGLE = 510,
-    RIGHT_ANGLE = 511,
-    VERTICAL_BAR = 512,
-    CARET = 513,
-    AMPERSAND = 514,
-    QUESTION = 515,
-    INVARIANT = 516,
-    PRECISE = 517,
-    HIGH_PRECISION = 518,
-    MEDIUM_PRECISION = 519,
-    LOW_PRECISION = 520,
-    PRECISION = 521,
-    PACKED = 522,
-    RESOURCE = 523,
-    SUPERP = 524
+    __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
   };
 #endif
 
@@ -354,7 +355,7 @@
         };
     } interm;
 
-#line 358 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
+#line 359 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 03519bc..893f42b 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -355,6 +355,7 @@
 
     case EOpBallot:                 out.debug << "ballot";                break;
     case EOpReadFirstInvocation:    out.debug << "readFirstInvocation";   break;
+
     case EOpAnyInvocation:          out.debug << "anyInvocation";         break;
     case EOpAllInvocations:         out.debug << "allInvocations";        break;
     case EOpAllInvocationsEqual:    out.debug << "allInvocationsEqual";   break;
@@ -365,6 +366,19 @@
     case EOpRcp:                    out.debug << "rcp";                   break;
     case EOpSaturate:               out.debug << "saturate";              break;
 
+#ifdef AMD_EXTENSIONS
+    case EOpMinInvocations:             out.debug << "minInvocations";              break;
+    case EOpMaxInvocations:             out.debug << "maxInvocations";              break;
+    case EOpAddInvocations:             out.debug << "addInvocations";              break;
+    case EOpMinInvocationsNonUniform:   out.debug << "minInvocationsNonUniform";    break;
+    case EOpMaxInvocationsNonUniform:   out.debug << "maxInvocationsNonUniform";    break;
+    case EOpAddInvocationsNonUniform:   out.debug << "addInvocationsNonUniform";    break;
+    case EOpMbcnt:                      out.debug << "mbcnt";                       break;
+
+    case EOpCubeFaceIndex:          out.debug << "cubeFaceIndex";         break;
+    case EOpCubeFaceCoord:          out.debug << "cubeFaceCoord";         break;
+#endif
+
     default: out.debug.message(EPrefixError, "Bad unary op");
     }
 
@@ -482,6 +496,18 @@
 
     case EOpReadInvocation:             out.debug << "readInvocation";        break;
 
+#ifdef AMD_EXTENSIONS
+    case EOpSwizzleInvocations:         out.debug << "swizzleInvocations";       break;
+    case EOpSwizzleInvocationsMasked:   out.debug << "swizzleInvocationsMasked"; break;
+    case EOpWriteInvocation:            out.debug << "writeInvocation";          break;
+
+    case EOpMin3:                       out.debug << "min3";                  break;
+    case EOpMax3:                       out.debug << "max3";                  break;
+    case EOpMid3:                       out.debug << "mid3";                  break;
+
+    case EOpTime:                       out.debug << "time";                  break;
+#endif
+
     case EOpAtomicAdd:                  out.debug << "AtomicAdd";             break;
     case EOpAtomicMin:                  out.debug << "AtomicMin";             break;
     case EOpAtomicMax:                  out.debug << "AtomicMax";             break;
@@ -539,6 +565,9 @@
 
     case EOpInterpolateAtSample:   out.debug << "interpolateAtSample";    break;
     case EOpInterpolateAtOffset:   out.debug << "interpolateAtOffset";    break;
+#ifdef AMD_EXTENSIONS
+    case EOpInterpolateAtVertex:   out.debug << "interpolateAtVertex";    break;
+#endif
 
     case EOpSinCos:                     out.debug << "sincos";                break;
     case EOpGenMul:                     out.debug << "mul";                   break;
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index 1cda57d..0bc1d91 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -651,7 +651,7 @@
 
     int size;
     if (qualifier.isUniformOrBuffer()) {
-        if (type.isArray())
+        if (type.isExplicitlySizedArray())
             size = type.getCumulativeArraySize();
         else
             size = 1;
@@ -664,12 +664,19 @@
             size = computeTypeLocationSize(type);
     }
 
+    // locations...
     TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1);
+
+    // components in this location slot...    
     TRange componentRange(0, 3);
-    if (qualifier.hasComponent()) {
-        componentRange.start = qualifier.layoutComponent;
-        componentRange.last = componentRange.start + type.getVectorSize() - 1;
+    if (qualifier.hasComponent() || type.getVectorSize() > 0) {
+        int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1);
+        if (qualifier.hasComponent())
+            componentRange.start = qualifier.layoutComponent;
+        componentRange.last  = componentRange.start + consumedComponents - 1;
     }
+
+    // both...
     TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.layoutIndex : 0);
 
     // check for collisions, except for vertex inputs on desktop
@@ -940,7 +947,7 @@
     //      components each, according to rule (4).
     //
     //   6. If the member is an array of S column-major matrices with C columns and
-    //      R rows, the matrix is stored identically to a row of S  C column vectors
+    //      R rows, the matrix is stored identically to a row of S X C column vectors
     //      with R components each, according to rule (4).
     //
     //   7. If the member is a row-major matrix with C columns and R rows, the matrix
@@ -948,7 +955,7 @@
     //      according to rule (4).
     //
     //   8. If the member is an array of S row-major matrices with C columns and R
-    //      rows, the matrix is stored identically to a row of S  R row vectors with C
+    //      rows, the matrix is stored identically to a row of S X R row vectors with C
     //      components each, according to rule (4).
     //
     //   9. If the member is a structure, the base alignment of the structure is N , where
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index d855e72..7bd457d 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -1,5 +1,6 @@
 //
 //Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
+//Copyright (C) 2016 LunarG, Inc.
 //All rights reserved.
 //
 //Redistribution and use in source and binary forms, with or without
@@ -47,6 +48,16 @@
 namespace glslang {
 
 struct TVectorFields {
+    TVectorFields() { }
+
+    TVectorFields(int c0, int c1, int c2, int c3) : num(4)
+    {
+        offsets[0] = c0;
+        offsets[1] = c1;
+        offsets[2] = c2;
+        offsets[3] = c3;
+    }
+
     int offsets[4];
     int num;
 };
@@ -172,12 +183,14 @@
     TIntermSymbol* addSymbol(const TVariable&, const TSourceLoc&);
     TIntermSymbol* addSymbol(const TType&, const TSourceLoc&);
     TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*) const;
+    TIntermTyped* addShapeConversion(TOperator, const TType&, TIntermTyped*);
     TIntermTyped* addBinaryMath(TOperator, TIntermTyped* left, TIntermTyped* right, TSourceLoc);
     TIntermTyped* addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc);
     TIntermTyped* addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, TSourceLoc);
     TIntermTyped* addUnaryMath(TOperator, TIntermTyped* child, TSourceLoc);
     TIntermTyped* addBuiltInFunctionCall(const TSourceLoc& line, TOperator, bool unary, TIntermNode*, const TType& returnType);
     bool canImplicitlyPromote(TBasicType from, TBasicType to) const;
+    TOperator mapTypeToConstructorOp(const TType&) const;
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right);
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&);
     TIntermAggregate* makeAggregate(TIntermNode* node);
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
index c0c8945..dc51682 100755
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -119,12 +119,12 @@
     TIntermediate& intermediate; // helper for making and hooking up pieces of the parse tree
 
 protected:
+    TMap<TString, TExtensionBehavior> extensionBehavior;    // for each extension string, what its current behavior is set to
     EShMessages messages;        // errors/warnings/rule-sets
     int numErrors;               // number of compile-time errors encountered
     TInputScanner* currentScanner;
 
 private:
-    TMap<TString, TExtensionBehavior> extensionBehavior;    // for each extension string, what its current behavior is set to
     explicit TParseVersions(const TParseVersions&);
     TParseVersions& operator=(const TParseVersions&);
 };
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index 3509758..d771010 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -192,7 +192,7 @@
                 do {
                     int oldToken;
                     TPpToken oldPpToken;
-                    TPpToken newPpToken;                    
+                    TPpToken newPpToken;
                     oldToken = ReadToken(symb->mac.body, &oldPpToken);
                     newToken = ReadToken(mac.body, &newPpToken);
                     if (oldToken != newToken || oldPpToken != newPpToken) {
@@ -250,7 +250,7 @@
         if (token != '#') {
             while (token != '\n' && token != EndOfInput)
                 token = scanToken(ppToken);
-            
+
             if (token == EndOfInput)
                 return token;
 
@@ -495,7 +495,7 @@
         if (op < 0 || binop[op].precedence <= precedence)
             break;
         int leftSide = res;
-        
+
         // Setup short-circuiting, needed for ES, unless already in a short circuit.
         // (Once in a short-circuit, can't turn off again, until that whole subexpression is done.
         if (! shortCircuit) {
@@ -756,7 +756,7 @@
     else
         parseContext.handlePragma(loc, tokens);
 
-    return token;    
+    return token;
 }
 
 // #version: This is just for error checking: the version and profile are decided before preprocessing starts
@@ -980,7 +980,7 @@
 
     if (token == EndOfInput)
         mac->busy = 0;
-        
+
     return token;
 }
 
@@ -1060,7 +1060,7 @@
     if (sym->mac.args) {
         token = scanToken(ppToken);
         if (newLineOkay) {
-            while (token == '\n')                
+            while (token == '\n')
                 token = scanToken(ppToken);
         }
         if (token != '(') {
diff --git a/glslang/MachineIndependent/preprocessor/PpAtom.cpp b/glslang/MachineIndependent/preprocessor/PpAtom.cpp
index 763b6b4..7a59d48 100644
--- a/glslang/MachineIndependent/preprocessor/PpAtom.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpAtom.cpp
@@ -98,6 +98,32 @@
     int val;
     const char* str;
 } tokens[] = {
+
+    { PpAtomAdd,            "+=" },
+    { PpAtomSub,            "-=" },
+    { PpAtomMul,            "*=" },
+    { PpAtomDiv,            "/=" },
+    { PpAtomMod,            "%=" },
+    { PpAtomRight,          ">>" },
+    { PpAtomLeft,           "<<" },
+    { PpAtomAnd,            "&&" },
+    { PpAtomOr,             "||" },
+    { PpAtomXor,            "^^" },
+
+    { PpAtomRightAssign,    ">>=" },
+    { PpAtomLeftAssign,     "<<=" },
+    { PpAtomAndAssign,      "&=" },
+    { PpAtomOrAssign,       "|=" },
+    { PpAtomXorAssign,      "^=" },
+
+    { PpAtomEQ,             "==" },
+    { PpAtomNE,             "!=" },
+    { PpAtomGE,             ">=" },
+    { PpAtomLE,             "<=" },
+
+    { PpAtomDecrement,      "--" },
+    { PpAtomIncrement,      "++" },
+
     { PpAtomDefine,         "define" },
     { PpAtomDefined,        "defined" },
     { PpAtomUndef,          "undef" },
@@ -121,8 +147,7 @@
     { PpAtomFileMacro,       "__FILE__" },
     { PpAtomVersionMacro,    "__VERSION__" },
 
-    { PpAtomInclude,        "include" },
-
+    { PpAtomInclude,         "include" },
 };
 
 } // end anonymous namespace
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index b3d1af6..5ce5a03 100644
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -298,7 +298,7 @@
             ppToken->name[len++] = (char)ch;
             ch = getch();
             if (ch == 'x' || ch == 'X') {
-                // must be hexidecimal
+                // must be hexadecimal
 
                 bool isUnsigned = false;
                 bool isInt64 = false;
@@ -319,11 +319,11 @@
                             } else if (ch >= 'a' && ch <= 'f') {
                                 ii = ch - 'a' + 10;
                             } else
-                                pp->parseContext.ppError(ppToken->loc, "bad digit in hexidecimal literal", "", "");
+                                pp->parseContext.ppError(ppToken->loc, "bad digit in hexadecimal literal", "", "");
                             ival = (ival << 4) | ii;
                         } else {
                             if (! AlreadyComplained) {
-                                pp->parseContext.ppError(ppToken->loc, "hexidecimal literal too big", "", "");
+                                pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
                                 AlreadyComplained = 1;
                             }
                             ival = 0xffffffffffffffffull;
@@ -333,7 +333,7 @@
                              (ch >= 'A' && ch <= 'F') ||
                              (ch >= 'a' && ch <= 'f'));
                 } else {
-                    pp->parseContext.ppError(ppToken->loc, "bad digit in hexidecimal literal", "", "");
+                    pp->parseContext.ppError(ppToken->loc, "bad digit in hexadecimal literal", "", "");
                 }
                 if (ch == 'u' || ch == 'U') {
                     if (len < MaxTokenLength)
@@ -405,7 +405,7 @@
                 }
                 if (ch == '.' || ch == 'e' || ch == 'f' || ch == 'E' || ch == 'F')
                     return pp->lFloatConst(len, ch, ppToken);
-                
+
                 // wasn't a float, so must be octal...
                 if (nonOctal)
                     pp->parseContext.ppError(ppToken->loc, "octal literal digit too large", "", "");
@@ -447,7 +447,7 @@
             break;
         case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
-            // can't be hexidecimal or octal, is either decimal or floating point
+            // can't be hexadecimal or octal, is either decimal or floating point
 
             do {
                 if (len < MaxTokenLength)
@@ -705,7 +705,7 @@
 // Return 0 when no more tokens.
 //
 const char* TPpContext::tokenize(TPpToken* ppToken)
-{    
+{
     int token = '\n';
 
     for(;;) {
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index 7a1a244..61883c9 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -180,14 +180,17 @@
         ltoken += 128;
     switch (ltoken) {
     case '#':
-        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);
-        } else
-            lUnreadByte(pTok);
+        // Check for ##, unless the current # is the last character
+        if (pTok->current < pTok->data.size()) {
+            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);
+            } else
+                lUnreadByte(pTok);
+        }
         break;
     case PpAtomConstString:
     case PpAtomIdentifier:
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.h b/glslang/MachineIndependent/preprocessor/PpTokens.h
index 87f0eb1..fd4d407 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.h
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.h
@@ -125,7 +125,7 @@
     PpAtomConstDouble,
     PpAtomConstString,
 
-    // Indentifiers 
+    // Identifiers 
     PpAtomIdentifier,
 
     // preprocessor "keywords"
diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp
index 123e086..8e583ea 100644
--- a/glslang/OSDependent/Unix/ossource.cpp
+++ b/glslang/OSDependent/Unix/ossource.cpp
@@ -170,16 +170,16 @@
 void GetGlobalLock() { }
 void ReleaseGlobalLock() { }
 
-void* OS_CreateThread(TThreadEntrypoint entry)
+void* OS_CreateThread(TThreadEntrypoint /*entry*/)
 {
     return 0;
 }
 
-void OS_WaitForAllThreads(void* threads, int numThreads)
+void OS_WaitForAllThreads(void* /*threads*/, int /*numThreads*/)
 {
 }
 
-void OS_Sleep(int milliseconds)
+void OS_Sleep(int /*milliseconds*/)
 {
 }
 
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 6f4abef..7c31df0 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -78,6 +78,7 @@
         "cppSimple.vert",
         "cppIndent.vert",
         "cppNest.vert",
+        "cppBad.vert",
         "cppComplexExpr.vert",
         "badChars.frag",
         "pointCoord.frag",
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index c1bfcb9..0d99d1e 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -75,17 +75,33 @@
         {"hlsl.array.frag", "PixelShaderFunction"},
         {"hlsl.assoc.frag", "PixelShaderFunction"},
         {"hlsl.attribute.frag", "PixelShaderFunction"},
+        {"hlsl.buffer.frag", "PixelShaderFunction"},
+        {"hlsl.calculatelod.dx10.frag", "main"},
+        {"hlsl.calculatelodunclamped.dx10.frag", "main"},
         {"hlsl.cast.frag", "PixelShaderFunction"},
+        {"hlsl.conditional.frag", "PixelShaderFunction"},
+        {"hlsl.constructexpr.frag", "main"},
         {"hlsl.discard.frag", "PixelShaderFunction"},
         {"hlsl.doLoop.frag", "PixelShaderFunction"},
         {"hlsl.float1.frag", "PixelShaderFunction"},
         {"hlsl.float4.frag", "PixelShaderFunction"},
         {"hlsl.forLoop.frag", "PixelShaderFunction"},
+        {"hlsl.gather.array.dx10.frag", "main"},
+        {"hlsl.gather.basic.dx10.frag", "main"},
+        {"hlsl.gather.basic.dx10.vert", "main"},
+        {"hlsl.gather.offset.dx10.frag", "main"},
+        {"hlsl.gather.offsetarray.dx10.frag", "main"},
+        {"hlsl.gatherRGBA.array.dx10.frag", "main"},
+        {"hlsl.gatherRGBA.basic.dx10.frag", "main"},
+        {"hlsl.gatherRGBA.offset.dx10.frag", "main"},
+        {"hlsl.gatherRGBA.offsetarray.dx10.frag", "main"},
         {"hlsl.getdimensions.dx10.frag", "main"},
         {"hlsl.getdimensions.dx10.vert", "main"},
+        {"hlsl.getsampleposition.dx10.frag", "main"},
         {"hlsl.if.frag", "PixelShaderFunction"},
         {"hlsl.inoutquals.frag", "main"},
         {"hlsl.init.frag", "ShaderFunction"},
+        {"hlsl.init2.frag", "main"},
         {"hlsl.intrinsics.barriers.comp", "ComputeShaderFunction"},
         {"hlsl.intrinsics.comp", "ComputeShaderFunction"},
         {"hlsl.intrinsics.evalfns.frag", "main"},
@@ -96,6 +112,15 @@
         {"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"},
         {"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
         {"hlsl.intrinsics.negative.vert", "VertexShaderFunction"},
+        {"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.offset.dx10.frag", "main"},
+        {"hlsl.load.offsetarray.dx10.frag", "main"},
+        {"hlsl.numericsuffixes.frag", "main"},
+        {"hlsl.pp.line.frag", "main"},
         {"hlsl.sample.array.dx10.frag", "main"},
         {"hlsl.sample.basic.dx10.frag", "main"},
         {"hlsl.sample.offset.dx10.frag", "main"},
@@ -104,11 +129,26 @@
         {"hlsl.samplebias.basic.dx10.frag", "main"},
         {"hlsl.samplebias.offset.dx10.frag", "main"},
         {"hlsl.samplebias.offsetarray.dx10.frag", "main"},
+        {"hlsl.samplecmp.array.dx10.frag", "main"},
+        {"hlsl.samplecmp.basic.dx10.frag", "main"},
+        {"hlsl.samplecmp.offset.dx10.frag", "main"},
+        {"hlsl.samplecmp.offsetarray.dx10.frag", "main"},
+        {"hlsl.samplecmplevelzero.array.dx10.frag", "main"},
+        {"hlsl.samplecmplevelzero.basic.dx10.frag", "main"},
+        {"hlsl.samplecmplevelzero.offset.dx10.frag", "main"},
+        {"hlsl.samplecmplevelzero.offsetarray.dx10.frag", "main"},
         {"hlsl.samplegrad.array.dx10.frag", "main"},
         {"hlsl.samplegrad.basic.dx10.frag", "main"},
         {"hlsl.samplegrad.basic.dx10.vert", "main"},
         {"hlsl.samplegrad.offset.dx10.frag", "main"},
         {"hlsl.samplegrad.offsetarray.dx10.frag", "main"},
+        {"hlsl.samplelevel.array.dx10.frag", "main"},
+        {"hlsl.samplelevel.basic.dx10.frag", "main"},
+        {"hlsl.samplelevel.basic.dx10.vert", "main"},
+        {"hlsl.samplelevel.offset.dx10.frag", "main"},
+        {"hlsl.samplelevel.offsetarray.dx10.frag", "main"},
+        {"hlsl.semicolons.frag", "main"},
+        {"hlsl.shapeConv.frag", "main"},
         {"hlsl.intrinsics.vert", "VertexShaderFunction"},
         {"hlsl.matType.frag", "PixelShaderFunction"},
         {"hlsl.max.frag", "PixelShaderFunction"},
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index dbe0507..a8f3dd8 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -184,6 +184,7 @@
         "spv.structure.frag",
         "spv.switch.frag",
         "spv.swizzle.frag",
+        "spv.swizzleInversion.frag",
         "spv.test.frag",
         "spv.test.vert",
         "spv.texture.frag",
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 61fe8f5..64e8b9f 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -89,12 +89,17 @@
 
 // compilationUnit
 //      : list of externalDeclaration
+//      |   SEMICOLONS
 //
 bool HlslGrammar::acceptCompilationUnit()
 {
     TIntermNode* unitNode = nullptr;
 
     while (! peekTokenClass(EHTokNone)) {
+        // HLSL allows semicolons between global declarations, e.g, between functions.
+        if (acceptTokenClass(EHTokSemicolon))
+            continue;
+
         // externalDeclaration
         TIntermNode* declarationNode;
         if (! acceptDeclaration(declarationNode))
@@ -337,6 +342,8 @@
 
             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
@@ -414,11 +421,19 @@
     TQualifier qualifier;
     qualifier.clear();
     acceptQualifier(qualifier);
+    TSourceLoc loc = token.loc;
 
     // type_specifier
     if (! acceptType(type))
         return false;
-    type.getQualifier() = qualifier;
+    if (type.getBasicType() == EbtBlock) {
+        // the type was a block, which set some parts of the qualifier
+        parseContext.mergeQualifiers(loc, type.getQualifier(), qualifier, true);
+        // further, it can create an anonymous instance of the block
+        if (peekTokenClass(EHTokSemicolon))
+            parseContext.declareBlock(loc, type);
+    } else
+        type.getQualifier() = qualifier;
 
     return true;
 }
@@ -661,8 +676,11 @@
     // read sampler type
     const EHlslTokenClass samplerType = peek();
 
+    // TODO: for DX9
     // TSamplerDim dim = EsdNone;
 
+    bool isShadow = false;
+
     switch (samplerType) {
     case EHTokSampler:      break;
     case EHTokSampler1d:    /*dim = Esd1D*/; break;
@@ -670,7 +688,7 @@
     case EHTokSampler3d:    /*dim = Esd3D*/; break;
     case EHTokSamplerCube:  /*dim = EsdCube*/; break;
     case EHTokSamplerState: break;
-    case EHTokSamplerComparisonState: break;
+    case EHTokSamplerComparisonState: isShadow = true; break;
     default:
         return false;  // not a sampler declaration
     }
@@ -678,10 +696,9 @@
     advanceToken();  // consume the sampler type keyword
 
     TArraySizes* arraySizes = nullptr; // TODO: array
-    bool shadow = false;               // TODO: shadow
 
     TSampler sampler;
-    sampler.setPureSampler(shadow);
+    sampler.setPureSampler(isShadow);
 
     type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
 
@@ -742,6 +759,18 @@
             return false;
         }
 
+        // Buffers can handle small mats if they fit in 4 components
+        if (dim == EsdBuffer && txType.isMatrix()) {
+            if ((txType.getMatrixCols() * txType.getMatrixRows()) > 4) {
+                expected("components < 4 in matrix buffer type");
+                return false;
+            }
+
+            // TODO: except we don't handle it yet...
+            unimplemented("matrix type in buffer");
+            return false;
+        }
+
         if (!txType.isScalar() && !txType.isVector()) {
             expected("scalar or vector type");
             return false;
@@ -777,7 +806,14 @@
     const bool shadow = txType.isScalar() || (txType.isVector() && txType.getVectorSize() == 1);
 
     TSampler sampler;
-    sampler.setTexture(txType.getBasicType(), dim, array, shadow, ms);
+
+    // Buffers are combined.
+    if (dim == EsdBuffer) {
+        sampler.set(txType.getBasicType(), dim, array);
+    } else {
+        // DX10 textures are separated.  TODO: DX9.
+        sampler.setTexture(txType.getBasicType(), dim, array, shadow, ms);
+    }
     
     type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
 
@@ -823,6 +859,8 @@
         break;
 
     case EHTokStruct:
+    case EHTokCBuffer:
+    case EHTokTBuffer:
         return acceptStruct(type);
         break;
 
@@ -1184,13 +1222,29 @@
 }
 
 // struct
-//      : STRUCT IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE
-//      | STRUCT            LEFT_BRACE struct_declaration_list RIGHT_BRACE
+//      : struct_type IDENTIFIER post_decls LEFT_BRACE struct_declaration_list RIGHT_BRACE
+//      | struct_type            post_decls LEFT_BRACE struct_declaration_list RIGHT_BRACE
+//
+// struct_type
+//      : STRUCT
+//      | CBUFFER
+//      | TBUFFER
 //
 bool HlslGrammar::acceptStruct(TType& type)
 {
+    // This qualifier.storage will tell us whether it's an AST block or
+    // just a struct.
+    TQualifier qualifier;
+    qualifier.clear();
+
+    // CBUFFER
+    if (acceptTokenClass(EHTokCBuffer))
+        qualifier.storage = EvqUniform;
+    // TBUFFER
+    else if (acceptTokenClass(EHTokTBuffer))
+        qualifier.storage = EvqBuffer;
     // STRUCT
-    if (! acceptTokenClass(EHTokStruct))
+    else if (! acceptTokenClass(EHTokStruct))
         return false;
 
     // IDENTIFIER
@@ -1200,6 +1254,9 @@
         advanceToken();
     }
 
+    // post_decls
+    acceptPostDecls(type);
+
     // LEFT_BRACE
     if (! acceptTokenClass(EHTokLeftBrace)) {
         expected("{");
@@ -1220,11 +1277,15 @@
     }
 
     // create the user-defined type
-    new(&type) TType(typeList, structName);
+    if (qualifier.storage == EvqTemporary)
+        new(&type) TType(typeList, structName);
+    else
+        new(&type) TType(typeList, structName, qualifier); // sets EbtBlock
 
-    // If it was named, which means it can be reused later, add
-    // it to the symbol table.
-    if (structName.size() > 0) {
+    // If it was named, which means the type can be reused later, add
+    // it to the symbol table.  (Unless it's a block, in which
+    // case the name is not a type.)
+    if (type.getBasicType() != EbtBlock && structName.size() > 0) {
         TVariable* userTypeDef = new TVariable(&structName, type, true);
         if (! parseContext.symbolTable.insert(*userTypeDef))
             parseContext.error(token.loc, "redefinition", structName.c_str(), "struct");
@@ -1493,8 +1554,11 @@
         node = intermediate.growAggregate(node, expr, loc);
 
         // COMMA
-        if (acceptTokenClass(EHTokComma))
+        if (acceptTokenClass(EHTokComma)) {
+            if (acceptTokenClass(EHTokRightBrace))  // allow trailing comma
+                return true;
             continue;
+        }
 
         // RIGHT_BRACE
         if (acceptTokenClass(EHTokRightBrace))
@@ -1511,8 +1575,9 @@
 //    a op (b op (c op d))
 //
 // assigment_expression
-//      : binary_expression op binary_expression op binary_expression ...
-//      | initializer
+//      : initializer
+//      | conditional_expression
+//      | conditional_expression assign_op conditional_expression assign_op conditional_expression ...
 //
 bool HlslGrammar::acceptAssignmentExpression(TIntermTyped*& node)
 {
@@ -1525,8 +1590,8 @@
         return false;
     }
 
-    // binary_expression
-    if (! acceptBinaryExpression(node, PlLogicalOr))
+    // conditional_expression
+    if (! acceptConditionalExpression(node))
         return false;
 
     // assignment operation?
@@ -1534,12 +1599,12 @@
     if (assignOp == EOpNull)
         return true;
 
-    // assignment op
+    // assign_op
     TSourceLoc loc = token.loc;
     advanceToken();
 
-    // binary_expression
-    // But, done by recursing this function, which automatically
+    // conditional_expression assign_op conditional_expression ...
+    // Done by recursing this function, which automatically
     // gets the right-to-left associativity.
     TIntermTyped* rightNode = nullptr;
     if (! acceptAssignmentExpression(rightNode)) {
@@ -1548,6 +1613,10 @@
     }
 
     node = intermediate.addAssign(assignOp, node, rightNode, loc);
+    if (node == nullptr) {
+        parseContext.error(loc, "could not create assignment", "", "");
+        return false;
+    }
 
     if (! peekTokenClass(EHTokComma))
         return true;
@@ -1555,6 +1624,46 @@
     return true;
 }
 
+// Accept a conditional expression, which associates right-to-left,
+// accomplished by the "true" expression calling down to lower
+// precedence levels than this level.
+//
+// conditional_expression
+//      : binary_expression
+//      | binary_expression QUESTION expression COLON assignment_expression
+//
+bool HlslGrammar::acceptConditionalExpression(TIntermTyped*& node)
+{
+    // binary_expression
+    if (! acceptBinaryExpression(node, PlLogicalOr))
+        return false;
+
+    if (! acceptTokenClass(EHTokQuestion))
+        return true;
+
+    TIntermTyped* trueNode = nullptr;
+    if (! acceptExpression(trueNode)) {
+        expected("expression after ?");
+        return false;
+    }
+    TSourceLoc loc = token.loc;
+
+    if (! acceptTokenClass(EHTokColon)) {
+        expected(":");
+        return false;
+    }
+
+    TIntermTyped* falseNode = nullptr;
+    if (! acceptAssignmentExpression(falseNode)) {
+        expected("expression after :");
+        return false;
+    }
+
+    node = intermediate.addSelection(node, trueNode, falseNode, loc);
+
+    return true;
+}
+
 // Accept a binary expression, for binary operations that
 // associate left-to-right.  This is, it is implicit, for example
 //
@@ -1574,12 +1683,12 @@
     if (! acceptBinaryExpression(node, (PrecedenceLevel)(precedenceLevel + 1)))
         return false;
 
-    TOperator op = HlslOpMap::binary(peek());
-    PrecedenceLevel tokenLevel = HlslOpMap::precedenceLevel(op);
-    if (tokenLevel < precedenceLevel)
-        return true;
-
     do {
+        TOperator op = HlslOpMap::binary(peek());
+        PrecedenceLevel tokenLevel = HlslOpMap::precedenceLevel(op);
+        if (tokenLevel < precedenceLevel)
+            return true;
+
         // ... op
         TSourceLoc loc = token.loc;
         advanceToken();
@@ -1592,9 +1701,10 @@
         }
 
         node = intermediate.addBinaryMath(op, node, rightNode, loc);
-
-        if (! peekTokenClass(EHTokComma))
-            return true;
+        if (node == nullptr) {
+            parseContext.error(loc, "Could not perform requested binary operation", "", "");
+            return false;
+        }
     } while (true);
 }
 
@@ -1616,27 +1726,29 @@
     if (acceptTokenClass(EHTokLeftParen)) {
         TType castType;
         if (acceptType(castType)) {
-            if (! acceptTokenClass(EHTokRightParen)) {
-                expected(")");
-                return false;
+            if (acceptTokenClass(EHTokRightParen)) {
+                // We've matched "(type)" now, get the expression to cast
+                TSourceLoc loc = token.loc;
+                if (! acceptUnaryExpression(node))
+                    return false;
+
+                // Hook it up like a constructor
+                TFunction* constructorFunction = parseContext.handleConstructorCall(loc, castType);
+                if (constructorFunction == nullptr) {
+                    expected("type that can be constructed");
+                    return false;
+                }
+                TIntermTyped* arguments = nullptr;
+                parseContext.handleFunctionArgument(constructorFunction, arguments, node);
+                node = parseContext.handleFunctionCall(loc, constructorFunction, arguments);
+
+                return true;
+            } else {
+                // This could be a parenthesized constructor, ala (int(3)), and we just accepted
+                // the '(int' part.  We must back up twice.
+                recedeToken();
+                recedeToken();
             }
-
-            // We've matched "(type)" now, get the expression to cast
-            TSourceLoc loc = token.loc;
-            if (! acceptUnaryExpression(node))
-                return false;
-
-            // Hook it up like a constructor
-            TFunction* constructorFunction = parseContext.handleConstructorCall(loc, castType);
-            if (constructorFunction == nullptr) {
-                expected("type that can be constructed");
-                return false;
-            }
-            TIntermTyped* arguments = nullptr;
-            parseContext.handleFunctionArgument(constructorFunction, arguments, node);
-            node = parseContext.handleFunctionCall(loc, constructorFunction, arguments);
-
-            return true;
         } else {
             // This isn't a type cast, but it still started "(", so if it is a
             // unary expression, it can only be a postfix_expression, so try that.
@@ -1879,6 +1991,9 @@
     case EHTokIntConstant:
         node = intermediate.addConstantUnion(token.i, token.loc, true);
         break;
+    case EHTokUintConstant:
+        node = intermediate.addConstantUnion(token.u, token.loc, true);
+        break;
     case EHTokFloatConstant:
         node = intermediate.addConstantUnion(token.d, EbtFloat, token.loc, true);
         break;
@@ -2416,10 +2531,10 @@
 }
 
 // post_decls
-//      : COLON semantic    // optional
-//        COLON PACKOFFSET LEFT_PAREN ... RIGHT_PAREN  // optional
-//        COLON REGISTER    // optional
-//        annotations       // optional
+//      : COLON semantic                                                            // optional
+//        COLON PACKOFFSET LEFT_PAREN c[Subcomponent][.component]       RIGHT_PAREN // optional
+//        COLON REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt RIGHT_PAREN // optional
+//        annotations                                                               // optional
 //
 void HlslGrammar::acceptPostDecls(TType& type)
 {
@@ -2428,38 +2543,71 @@
         if (acceptTokenClass(EHTokColon)) {
             HlslToken idToken;
             if (acceptTokenClass(EHTokPackOffset)) {
+                // PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN
                 if (! acceptTokenClass(EHTokLeftParen)) {
                     expected("(");
                     return;
                 }
-                acceptTokenClass(EHTokIdentifier);
-                acceptTokenClass(EHTokDot);
-                acceptTokenClass(EHTokIdentifier);
+                HlslToken locationToken;
+                if (! acceptIdentifier(locationToken)) {
+                    expected("c[subcomponent][.component]");
+                    return;
+                }
+                HlslToken componentToken;
+                if (acceptTokenClass(EHTokDot)) {
+                    if (! acceptIdentifier(componentToken)) {
+                        expected("component");
+                        return;
+                    }
+                }
                 if (! acceptTokenClass(EHTokRightParen)) {
                     expected(")");
                     break;
                 }
-                // TODO: process the packoffset information
+                parseContext.handlePackOffset(locationToken.loc, type, *locationToken.string, componentToken.string);
             } else if (! acceptIdentifier(idToken)) {
                 expected("semantic or packoffset or register");
                 return;
             } else if (*idToken.string == "register") {
+                // REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt RIGHT_PAREN
                 if (! acceptTokenClass(EHTokLeftParen)) {
                     expected("(");
                     return;
                 }
-                acceptTokenClass(EHTokIdentifier);
-                acceptTokenClass(EHTokComma);
-                acceptTokenClass(EHTokIdentifier);
-                acceptTokenClass(EHTokLeftBracket);
-                if (peekTokenClass(EHTokIntConstant))
+                HlslToken registerDesc;  // for Type#
+                HlslToken profile;
+                if (! acceptIdentifier(registerDesc)) {
+                    expected("register number description");
+                    return;
+                }
+                if (acceptTokenClass(EHTokComma)) {
+                    // Then we didn't really see the registerDesc yet, it was
+                    // actually the profile.  Adjust...
+                    profile = registerDesc;
+                    if (! acceptIdentifier(registerDesc)) {
+                        expected("register number description");
+                        return;
+                    }
+                }
+                int subComponent = 0;
+                if (acceptTokenClass(EHTokLeftBracket)) {
+                    // LEFT_BRACKET subcomponent RIGHT_BRACKET
+                    if (! peekTokenClass(EHTokIntConstant)) {
+                        expected("literal integer");
+                        return;
+                    }
+                    subComponent = token.i;
                     advanceToken();
-                acceptTokenClass(EHTokRightBracket);
+                    if (! acceptTokenClass(EHTokRightBracket)) {
+                        expected("]");
+                        break;
+                    }
+                }
                 if (! acceptTokenClass(EHTokRightParen)) {
                     expected(")");
                     break;
                 }
-                // TODO: process the register information
+                parseContext.handleRegister(registerDesc.loc, type, profile.string, *registerDesc.string, subComponent);
             } else {
                 // semantic, in idToken.string
                 parseContext.handleSemantic(type, *idToken.string);
diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h
index 9f224fe..c522df4 100755
--- a/hlsl/hlslGrammar.h
+++ b/hlsl/hlslGrammar.h
@@ -83,6 +83,7 @@
         bool acceptExpression(TIntermTyped*&);
         bool acceptInitializer(TIntermTyped*&);
         bool acceptAssignmentExpression(TIntermTyped*&);
+        bool acceptConditionalExpression(TIntermTyped*&);
         bool acceptBinaryExpression(TIntermTyped*&, PrecedenceLevel);
         bool acceptUnaryExpression(TIntermTyped*&);
         bool acceptPostfixExpression(TIntermTyped*&);
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 25dd745..fc926d7 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -88,6 +88,14 @@
 {
 }
 
+void HlslParseContext::initializeExtensionBehavior()
+{
+    TParseContextBase::initializeExtensionBehavior();
+
+    // HLSL allows #line by default.
+    extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhEnable;
+}
+
 void HlslParseContext::setLimits(const TBuiltInResource& r)
 {
     resources = r;
@@ -573,6 +581,15 @@
     } else if (field == "CalculateLevelOfDetail"          ||
                field == "CalculateLevelOfDetailUnclamped" ||
                field == "Gather"                          ||
+               field == "GatherRed"                       ||
+               field == "GatherGreen"                     ||
+               field == "GatherBlue"                      ||
+               field == "GatherAlpha"                     ||
+               field == "GatherCmp"                       ||
+               field == "GatherCmpRed"                    ||
+               field == "GatherCmpGreen"                  ||
+               field == "GatherCmpBlue"                   ||
+               field == "GatherCmpAlpha"                  ||
                field == "GetDimensions"                   ||
                field == "GetSamplePosition"               ||
                field == "Load"                            ||
@@ -616,7 +633,7 @@
                 return result;
             else {
                 TType type(base->getBasicType(), EvqTemporary, fields.num);
-                return addConstructor(loc, base, type, mapTypeToConstructorOp(type));
+                return addConstructor(loc, base, type);
             }
         }
 
@@ -626,7 +643,7 @@
             if (fields.num == 1) {
                 TIntermTyped* index = intermediate.addConstantUnion(fields.offsets[0], loc);
                 result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
-                result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision));
+                result->setType(TType(base->getBasicType(), EvqTemporary));
             } else {
                 TString vectorString = field;
                 TIntermTyped* index = intermediate.addSwizzle(fields, loc);
@@ -825,6 +842,7 @@
 
     TSampler samplerType = argTex->getType().getSampler();
     samplerType.combined = true;
+    samplerType.shadow   = argSampler->getType().getSampler().shadow;
 
     txcombine->setType(TType(samplerType, EvqTemporary));
     txcombine->setLoc(loc);
@@ -980,7 +998,7 @@
 
             const TSampler& texSampler = texType.getSampler();
             const TSamplerDim dim = texSampler.dim;
-            const int numArgs = argAggregate->getSequence().size();
+            const int numArgs = (int) argAggregate->getSequence().size();
 
             int numDims = 0;
 
@@ -998,7 +1016,7 @@
                 ++numDims;
 
             // Establish whether we're querying mip levels
-            const bool mipQuery = numArgs > (numDims + 1);
+            const bool mipQuery = (numArgs > (numDims + 1)) && (!texSampler.isMultiSample());
 
             // AST assumes integer return.  Will be converted to float if required.
             TIntermAggregate* sizeQuery = new TIntermAggregate(EOpTextureQuerySize);
@@ -1054,6 +1072,19 @@
                 compoundStatement = intermediate.growAggregate(compoundStatement, compAssign);
             }
 
+            // 2DMS formats query # samples, which needs a different query op
+            if (texSampler.isMultiSample()) {
+                TIntermTyped* outParam = argAggregate->getSequence()[outParamBase + numDims]->getAsTyped();
+
+                TIntermAggregate* samplesQuery = new TIntermAggregate(EOpImageQuerySamples);
+                samplesQuery->getSequence().push_back(argTex);
+                samplesQuery->setType(TType(EbtUint, EvqTemporary, 1));
+                samplesQuery->setLoc(loc);
+                
+                TIntermTyped* compAssign = intermediate.addAssign(EOpAssign, outParam, samplesQuery, loc);
+                compoundStatement = intermediate.growAggregate(compoundStatement, compAssign);
+            }
+
             compoundStatement->setOperator(EOpSequence);
             compoundStatement->setLoc(loc);
             compoundStatement->setType(TType(EbtVoid));
@@ -1063,6 +1094,351 @@
             break;
         }
 
+    case EOpMethodSampleCmp:  // fall through...
+    case EOpMethodSampleCmpLevelZero:
+        {
+            TIntermTyped* argTex    = argAggregate->getSequence()[0]->getAsTyped();
+            TIntermTyped* argSamp   = argAggregate->getSequence()[1]->getAsTyped();
+            TIntermTyped* argCoord  = argAggregate->getSequence()[2]->getAsTyped();
+            TIntermTyped* argCmpVal = argAggregate->getSequence()[3]->getAsTyped();
+            TIntermTyped* argOffset = nullptr;
+
+            // optional offset value
+            if (argAggregate->getSequence().size() > 4)
+                argOffset = argAggregate->getSequence()[4]->getAsTyped();
+            
+            const int coordDimWithCmpVal = argCoord->getType().getVectorSize() + 1; // +1 for cmp
+
+            // AST wants comparison value as one of the texture coordinates
+            TOperator constructOp = EOpNull;
+            switch (coordDimWithCmpVal) {
+            // 1D can't happen: there's always at least 1 coordinate dimension + 1 cmp val
+            case 2: constructOp = EOpConstructVec2;  break;
+            case 3: constructOp = EOpConstructVec3;  break;
+            case 4: constructOp = EOpConstructVec4;  break;
+            case 5: constructOp = EOpConstructVec4;  break; // cubeArrayShadow, cmp value is separate arg.
+            default: assert(0); break;
+            }
+
+            TIntermAggregate* coordWithCmp = new TIntermAggregate(constructOp);
+            coordWithCmp->getSequence().push_back(argCoord);
+            if (coordDimWithCmpVal != 5) // cube array shadow is special.
+                coordWithCmp->getSequence().push_back(argCmpVal);
+            coordWithCmp->setLoc(loc);
+
+            TOperator textureOp = (op == EOpMethodSampleCmpLevelZero ? EOpTextureLod : EOpTexture);
+            if (argOffset != nullptr)
+                textureOp = (op == EOpMethodSampleCmpLevelZero ? EOpTextureLodOffset : EOpTextureOffset);
+
+            // Create combined sampler & texture op
+            TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp);
+            TIntermAggregate* txsample = new TIntermAggregate(textureOp);
+            txsample->getSequence().push_back(txcombine);
+            txsample->getSequence().push_back(coordWithCmp);
+
+            if (coordDimWithCmpVal == 5) // cube array shadow is special: cmp val follows coord.
+                txsample->getSequence().push_back(argCmpVal);
+
+            // the LevelZero form uses 0 as an explicit LOD
+            if (op == EOpMethodSampleCmpLevelZero)
+                txsample->getSequence().push_back(intermediate.addConstantUnion(0.0, EbtFloat, loc, true));
+
+            // Add offset if present
+            if (argOffset != nullptr)
+                txsample->getSequence().push_back(argOffset);
+
+            txsample->setType(node->getType());
+            txsample->setLoc(loc);
+            node = txsample;
+
+            break;
+        }
+
+    case EOpMethodLoad:
+        {
+            TIntermTyped* argTex    = argAggregate->getSequence()[0]->getAsTyped();
+            TIntermTyped* argCoord  = argAggregate->getSequence()[1]->getAsTyped();
+            TIntermTyped* argOffset = nullptr;
+            TIntermTyped* lodComponent = nullptr;
+            TIntermTyped* coordSwizzle = nullptr;
+
+            const bool isMS = argTex->getType().getSampler().isMultiSample();
+            const bool isBuffer = argTex->getType().getSampler().dim == EsdBuffer;
+            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
+                coordSwizzle = argCoord;
+            } else {
+                // Extract coordinate
+                TVectorFields coordFields(0,1,2,3);
+                coordFields.num = argCoord->getType().getVectorSize() - (isMS ? 0 : 1);
+                TIntermTyped* coordIdx = intermediate.addSwizzle(coordFields, loc);
+                coordSwizzle = intermediate.addIndex(EOpVectorSwizzle, argCoord, coordIdx, loc);
+                coordSwizzle->setType(TType(coordBaseType, EvqTemporary, coordFields.num));
+
+                // Extract LOD
+                TIntermTyped* lodIdx = intermediate.addConstantUnion(coordFields.num, loc, true);
+                lodComponent = intermediate.addIndex(EOpIndexDirect, argCoord, lodIdx, loc);
+                lodComponent->setType(TType(coordBaseType, EvqTemporary, 1));
+            }
+
+            const int numArgs    = (int) argAggregate->getSequence().size();
+            const bool hasOffset = ((!isMS && numArgs == 3) || (isMS && numArgs == 4));
+
+            // Create texel fetch
+            const TOperator fetchOp = (hasOffset ? EOpTextureFetchOffset : EOpTextureFetch);
+            TIntermAggregate* txfetch = new TIntermAggregate(fetchOp);
+
+            // Build up the fetch
+            txfetch->getSequence().push_back(argTex);
+            txfetch->getSequence().push_back(coordSwizzle);
+
+            if (isMS) {
+                // add 2DMS sample index
+                TIntermTyped* argSampleIdx  = argAggregate->getSequence()[2]->getAsTyped();
+                txfetch->getSequence().push_back(argSampleIdx);
+            } else if (isBuffer) {
+                // Nothing else to do for buffers.
+            } else {
+                // 2DMS and buffer have no LOD, but everything else does.
+                txfetch->getSequence().push_back(lodComponent);
+            }
+
+            // Obtain offset arg, if there is one.
+            if (hasOffset) {
+                const int offsetPos  = (isMS ? 3 : 2);
+                argOffset = argAggregate->getSequence()[offsetPos]->getAsTyped();
+                txfetch->getSequence().push_back(argOffset);
+            }
+
+            txfetch->setType(node->getType());
+            txfetch->setLoc(loc);
+            node = txfetch;
+
+            break;
+        }
+
+    case EOpMethodSampleLevel:
+        {
+            TIntermTyped* argTex    = argAggregate->getSequence()[0]->getAsTyped();
+            TIntermTyped* argSamp   = argAggregate->getSequence()[1]->getAsTyped();
+            TIntermTyped* argCoord  = argAggregate->getSequence()[2]->getAsTyped();
+            TIntermTyped* argLod    = argAggregate->getSequence()[3]->getAsTyped();
+            TIntermTyped* argOffset = nullptr;
+
+            const int  numArgs = (int) argAggregate->getSequence().size();
+
+            if (numArgs == 5) // offset, if present
+                argOffset = argAggregate->getSequence()[4]->getAsTyped();
+            
+            const TOperator textureOp = (argOffset == nullptr ? EOpTextureLod : EOpTextureLodOffset);
+            TIntermAggregate* txsample = new TIntermAggregate(textureOp);
+
+            TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp);
+
+            txsample->getSequence().push_back(txcombine);
+            txsample->getSequence().push_back(argCoord);
+            txsample->getSequence().push_back(argLod);
+
+            if (argOffset != nullptr)
+                txsample->getSequence().push_back(argOffset);
+
+            txsample->setType(node->getType());
+            txsample->setLoc(loc);
+            node = txsample;
+
+            break;
+        }
+
+    case EOpMethodGather:
+        {
+            TIntermTyped* argTex    = argAggregate->getSequence()[0]->getAsTyped();
+            TIntermTyped* argSamp   = argAggregate->getSequence()[1]->getAsTyped();
+            TIntermTyped* argCoord  = argAggregate->getSequence()[2]->getAsTyped();
+            TIntermTyped* argOffset = nullptr;
+
+            // Offset is optional
+            if (argAggregate->getSequence().size() > 3)
+                argOffset = argAggregate->getSequence()[3]->getAsTyped();
+
+            const TOperator textureOp = (argOffset == nullptr ? EOpTextureGather : EOpTextureGatherOffset);
+            TIntermAggregate* txgather = new TIntermAggregate(textureOp);
+
+            TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp);
+
+            txgather->getSequence().push_back(txcombine);
+            txgather->getSequence().push_back(argCoord);
+            // Offset if not given is implicitly channel 0 (red)
+
+            if (argOffset != nullptr)
+                txgather->getSequence().push_back(argOffset);
+
+            txgather->setType(node->getType());
+            txgather->setLoc(loc);
+            node = txgather;
+
+            break;
+        }
+        
+    case EOpMethodGatherRed:      // fall through...
+    case EOpMethodGatherGreen:    // ...
+    case EOpMethodGatherBlue:     // ...
+    case EOpMethodGatherAlpha:    // ...
+    case EOpMethodGatherCmpRed:   // ...
+    case EOpMethodGatherCmpGreen: // ...
+    case EOpMethodGatherCmpBlue:  // ...
+    case EOpMethodGatherCmpAlpha: // ...
+        {
+            int channel = 0;    // the channel we are gathering
+            int cmpValues = 0;  // 1 if there is a compare value (handier than a bool below)
+
+            switch (op) {
+            case EOpMethodGatherCmpRed:   cmpValues = 1;  // fall through
+            case EOpMethodGatherRed:      channel = 0; break;
+            case EOpMethodGatherCmpGreen: cmpValues = 1;  // fall through
+            case EOpMethodGatherGreen:    channel = 1; break;
+            case EOpMethodGatherCmpBlue:  cmpValues = 1;  // fall through
+            case EOpMethodGatherBlue:     channel = 2; break;
+            case EOpMethodGatherCmpAlpha: cmpValues = 1;  // fall through
+            case EOpMethodGatherAlpha:    channel = 3; break;
+            default:                      assert(0);   break;
+            }
+
+            // For now, we have nothing to map the component-wise comparison forms
+            // to, because neither GLSL nor SPIR-V has such an opcode.  Issue an
+            // unimplemented error instead.  Most of the machinery is here if that
+            // should ever become available.
+            if (cmpValues) {
+                error(loc, "unimplemented: component-level gather compare", "", "");
+                return;
+            }
+
+            int arg = 0;
+
+            TIntermTyped* argTex        = argAggregate->getSequence()[arg++]->getAsTyped();
+            TIntermTyped* argSamp       = argAggregate->getSequence()[arg++]->getAsTyped();
+            TIntermTyped* argCoord      = argAggregate->getSequence()[arg++]->getAsTyped();
+            TIntermTyped* argOffset     = nullptr;
+            TIntermTyped* argOffsets[4] = { nullptr, nullptr, nullptr, nullptr };
+            // TIntermTyped* argStatus     = nullptr; // TODO: residency
+            TIntermTyped* argCmp        = nullptr;
+
+            const TSamplerDim dim = argTex->getType().getSampler().dim;
+
+            const int  argSize = argAggregate->getSequence().size();
+            bool hasStatus     = (argSize == (5+cmpValues) || argSize == (8+cmpValues));
+            bool hasOffset1    = false;
+            bool hasOffset4    = false;
+
+            // Only 2D forms can have offsets.  Discover if we have 0, 1 or 4 offsets.
+            if (dim == Esd2D) {
+                hasOffset1 = (argSize == (4+cmpValues) || argSize == (5+cmpValues));
+                hasOffset4 = (argSize == (7+cmpValues) || argSize == (8+cmpValues));
+            }
+
+            assert(!(hasOffset1 && hasOffset4));
+
+            TOperator textureOp = EOpTextureGather;
+
+            // Compare forms have compare value
+            if (cmpValues != 0)
+                argCmp = argOffset = argAggregate->getSequence()[arg++]->getAsTyped();
+
+            // Some forms have single offset
+            if (hasOffset1) {
+                textureOp = EOpTextureGatherOffset;   // single offset form
+                argOffset = argAggregate->getSequence()[arg++]->getAsTyped();
+            }
+
+            // Some forms have 4 gather offsets
+            if (hasOffset4) {
+                textureOp = EOpTextureGatherOffsets;  // note plural, for 4 offset form
+                for (int offsetNum = 0; offsetNum < 4; ++offsetNum)
+                    argOffsets[offsetNum] = argAggregate->getSequence()[arg++]->getAsTyped();
+            }
+
+            // Residency status
+            if (hasStatus) {
+                // argStatus = argAggregate->getSequence()[arg++]->getAsTyped();
+                error(loc, "unimplemented: residency status", "", "");
+                return;
+            }
+
+            TIntermAggregate* txgather = new TIntermAggregate(textureOp);
+            TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp);
+
+            TIntermTyped* argChannel = intermediate.addConstantUnion(channel, loc, true);
+
+            txgather->getSequence().push_back(txcombine);
+            txgather->getSequence().push_back(argCoord);
+
+            // AST wants an array of 4 offsets, where HLSL has separate args.  Here
+            // we construct an array from the separate args.
+            if (hasOffset4) {
+                TType arrayType(EbtInt, EvqTemporary, 2);
+                TArraySizes arraySizes;
+                arraySizes.addInnerSize(4);
+                arrayType.newArraySizes(arraySizes);
+
+                TIntermAggregate* initList = new TIntermAggregate(EOpNull);
+
+                for (int offsetNum = 0; offsetNum < 4; ++offsetNum)
+                    initList->getSequence().push_back(argOffsets[offsetNum]);
+
+                argOffset = addConstructor(loc, initList, arrayType);
+            }
+
+            // Add comparison value if we have one
+            if (argTex->getType().getSampler().isShadow())
+                txgather->getSequence().push_back(argCmp);
+
+            // Add offset (either 1, or an array of 4) if we have one
+            if (argOffset != nullptr)
+                txgather->getSequence().push_back(argOffset);
+
+            txgather->getSequence().push_back(argChannel);
+
+            txgather->setType(node->getType());
+            txgather->setLoc(loc);
+            node = txgather;
+
+            break;
+        }
+
+    case EOpMethodCalculateLevelOfDetail:
+    case EOpMethodCalculateLevelOfDetailUnclamped:
+        {
+            TIntermTyped* argTex    = argAggregate->getSequence()[0]->getAsTyped();
+            TIntermTyped* argSamp   = argAggregate->getSequence()[1]->getAsTyped();
+            TIntermTyped* argCoord  = argAggregate->getSequence()[2]->getAsTyped();
+
+            TIntermAggregate* txquerylod = new TIntermAggregate(EOpTextureQueryLod);
+
+            TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp);
+            txquerylod->getSequence().push_back(txcombine);
+            txquerylod->getSequence().push_back(argCoord);
+
+            TIntermTyped* lodComponent = intermediate.addConstantUnion(0, loc, true);
+            TIntermTyped* lodComponentIdx = intermediate.addIndex(EOpIndexDirect, txquerylod, lodComponent, loc);
+            lodComponentIdx->setType(TType(EbtFloat, EvqTemporary, 1));
+
+            node = lodComponentIdx;
+
+            // We cannot currently obtain the unclamped LOD
+            if (op == EOpMethodCalculateLevelOfDetailUnclamped)
+                error(loc, "unimplemented: CalculateLevelOfDetailUnclamped", "", "");
+
+            break;
+        }
+
+    case EOpMethodGetSamplePosition:
+        {
+            error(loc, "unimplemented: GetSamplePosition", "", "");
+            break;
+        }
+
     default:
         break; // most pass through unchanged
     }
@@ -1443,7 +1819,7 @@
             //
             // It's a constructor, of type 'type'.
             //
-            result = addConstructor(loc, arguments, type, op);
+            result = addConstructor(loc, arguments, type);
             if (result == nullptr)
                 error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), "");
         }
@@ -1712,11 +2088,6 @@
     }
     const TIntermSequence& aggArgs = *argp;  // only valid when unaryArg is nullptr
 
-    // built-in texturing functions get their return value precision from the precision of the sampler
-    if (fnCandidate.getType().getQualifier().precision == EpqNone &&
-        fnCandidate.getParamCount() > 0 && fnCandidate[0].type->getBasicType() == EbtSampler)
-        callNode.getQualifier().precision = arg0->getQualifier().precision;
-
     switch (callNode.getOp()) {
     case EOpTextureGather:
     case EOpTextureGatherOffset:
@@ -1819,11 +2190,6 @@
     case EOpInterpolateAtCentroid:
     case EOpInterpolateAtSample:
     case EOpInterpolateAtOffset:
-        // "For the interpolateAt* functions, the call will return a precision
-        // qualification matching the precision of the 'interpolant' argument to
-        // the function call."
-        callNode.getQualifier().precision = arg0->getQualifier().precision;
-
         // Make sure the first argument is an interpolant, or an array element of an interpolant
         if (arg0->getType().getQualifier().storage != EvqVaryingIn) {
             // It might still be an array element.
@@ -1849,7 +2215,7 @@
 //
 TFunction* HlslParseContext::handleConstructorCall(const TSourceLoc& loc, const TType& type)
 {
-    TOperator op = mapTypeToConstructorOp(type);
+    TOperator op = intermediate.mapTypeToConstructorOp(type);
 
     if (op == EOpNull) {
         error(loc, "cannot construct this type", type.getBasicString(), "");
@@ -1894,129 +2260,85 @@
 }
 
 //
-// Given a type, find what operation would fully construct it.
+// Handle seeing something like "PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN"
 //
-TOperator HlslParseContext::mapTypeToConstructorOp(const TType& type) const
+// 'location' has the "c[Subcomponent]" part.
+// 'component' points to the "component" part, or nullptr if not present.
+//
+void HlslParseContext::handlePackOffset(const TSourceLoc& loc, TType& type, const glslang::TString& location,
+                                                                            const glslang::TString* component)
 {
-    TOperator op = EOpNull;
-
-    switch (type.getBasicType()) {
-    case EbtStruct:
-        op = EOpConstructStruct;
-        break;
-    case EbtSampler:
-        if (type.getSampler().combined)
-            op = EOpConstructTextureSampler;
-        break;
-    case EbtFloat:
-        if (type.isMatrix()) {
-            switch (type.getMatrixCols()) {
-            case 2:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructMat2x2; break;
-                case 3: op = EOpConstructMat2x3; break;
-                case 4: op = EOpConstructMat2x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 3:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructMat3x2; break;
-                case 3: op = EOpConstructMat3x3; break;
-                case 4: op = EOpConstructMat3x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 4:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructMat4x2; break;
-                case 3: op = EOpConstructMat4x3; break;
-                case 4: op = EOpConstructMat4x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            default: break; // some compilers want this
-            }
-        } else {
-            switch (type.getVectorSize()) {
-            case 1: op = EOpConstructFloat; break;
-            case 2: op = EOpConstructVec2;  break;
-            case 3: op = EOpConstructVec3;  break;
-            case 4: op = EOpConstructVec4;  break;
-            default: break; // some compilers want this
-            }
-        }
-        break;
-    case EbtDouble:
-        if (type.getMatrixCols()) {
-            switch (type.getMatrixCols()) {
-            case 2:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructDMat2x2; break;
-                case 3: op = EOpConstructDMat2x3; break;
-                case 4: op = EOpConstructDMat2x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 3:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructDMat3x2; break;
-                case 3: op = EOpConstructDMat3x3; break;
-                case 4: op = EOpConstructDMat3x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            case 4:
-                switch (type.getMatrixRows()) {
-                case 2: op = EOpConstructDMat4x2; break;
-                case 3: op = EOpConstructDMat4x3; break;
-                case 4: op = EOpConstructDMat4x4; break;
-                default: break; // some compilers want this
-                }
-                break;
-            }
-        } else {
-            switch (type.getVectorSize()) {
-            case 1: op = EOpConstructDouble; break;
-            case 2: op = EOpConstructDVec2;  break;
-            case 3: op = EOpConstructDVec3;  break;
-            case 4: op = EOpConstructDVec4;  break;
-            default: break; // some compilers want this
-            }
-        }
-        break;
-    case EbtInt:
-        switch (type.getVectorSize()) {
-        case 1: op = EOpConstructInt;   break;
-        case 2: op = EOpConstructIVec2; break;
-        case 3: op = EOpConstructIVec3; break;
-        case 4: op = EOpConstructIVec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    case EbtUint:
-        switch (type.getVectorSize()) {
-        case 1: op = EOpConstructUint;  break;
-        case 2: op = EOpConstructUVec2; break;
-        case 3: op = EOpConstructUVec3; break;
-        case 4: op = EOpConstructUVec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    case EbtBool:
-        switch (type.getVectorSize()) {
-        case 1:  op = EOpConstructBool;  break;
-        case 2:  op = EOpConstructBVec2; break;
-        case 3:  op = EOpConstructBVec3; break;
-        case 4:  op = EOpConstructBVec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    default:
-        break;
+    if (location.size() == 0 || location[0] != 'c') {
+        error(loc, "expected 'c'", "packoffset", "");
+        return;
+    }
+    if (location.size() == 1)
+        return;
+    if (! isdigit(location[1])) {
+        error(loc, "expected number after 'c'", "packoffset", "");
+        return;
     }
 
-    return op;
+    type.getQualifier().layoutOffset = 16 * atoi(location.substr(1, location.size()).c_str());
+    if (component != nullptr) {
+        int componentOffset = 0;
+        switch ((*component)[0]) {
+        case 'x': componentOffset =  0; break;
+        case 'y': componentOffset =  4; break;
+        case 'z': componentOffset =  8; break;
+        case 'w': componentOffset = 12; break;
+        default:
+            componentOffset = -1;
+            break;
+        }
+        if (componentOffset < 0 || component->size() > 1) {
+            error(loc, "expected {x, y, z, w} for component", "packoffset", "");
+            return;
+        }
+        type.getQualifier().layoutOffset += componentOffset;
+    }
+}
+
+//
+// Handle seeing something like "REGISTER LEFT_PAREN [shader_profile,] Type# RIGHT_PAREN"
+//
+// 'profile' points to the shader_profile part, or nullptr if not present.
+// 'desc' is the type# part.
+//
+void HlslParseContext::handleRegister(const TSourceLoc& loc, TType& type, const glslang::TString* profile,
+                                                                          const glslang::TString& desc,
+                                                                          int subComponent)
+{
+    if (profile != nullptr)
+        warn(loc, "ignoring shader_profile", "register", "");
+
+    if (desc.size() < 1) {
+        error(loc, "expected register type", "register", "");
+        return;
+    }
+
+    int regNumber = 0;
+    if (desc.size() > 1) {
+        if (isdigit(desc[1]))
+            regNumber = atoi(desc.substr(1, desc.size()).c_str());
+        else {
+            error(loc, "expected register number after register type", "register", "");
+            return;
+        }
+    }
+
+    // TODO: learn what all these really mean and how they interact with regNumber and subComponent
+    switch (desc[0]) {
+    case 'b':
+    case 't':
+    case 'c':
+    case 's':
+        type.getQualifier().layoutBinding = regNumber + subComponent;
+        break;
+    default:
+        warn(loc, "ignoring unrecognized register type", "register", "%c", desc[0]);
+        break;
+    }
 }
 
 //
@@ -2375,18 +2697,14 @@
     if (dst.storage == EvqTemporary || dst.storage == EvqGlobal)
         dst.storage = src.storage;
     else if ((dst.storage == EvqIn  && src.storage == EvqOut) ||
-        (dst.storage == EvqOut && src.storage == EvqIn))
+             (dst.storage == EvqOut && src.storage == EvqIn))
         dst.storage = EvqInOut;
     else if ((dst.storage == EvqIn    && src.storage == EvqConst) ||
-        (dst.storage == EvqConst && src.storage == EvqIn))
+             (dst.storage == EvqConst && src.storage == EvqIn))
         dst.storage = EvqConstReadOnly;
     else if (src.storage != EvqTemporary && src.storage != EvqGlobal)
         error(loc, "too many storage qualifiers", GetStorageQualifierString(src.storage), "");
 
-    // Precision qualifiers
-    if (dst.precision == EpqNone || (force && src.precision != EpqNone))
-        dst.precision = src.precision;
-
     // Layout qualifiers
     mergeObjectLayoutQualifiers(dst, src, false);
 
@@ -3503,7 +3821,7 @@
                 return nullptr;
         }
 
-        return addConstructor(loc, initList, arrayType, mapTypeToConstructorOp(arrayType));
+        return addConstructor(loc, initList, arrayType);
     } else if (type.isStruct()) {
         if (type.getStruct()->size() != initList->getSequence().size()) {
             error(loc, "wrong number of structure members", "initializer list", "");
@@ -3530,13 +3848,24 @@
             error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str());
             return nullptr;
         }
-    } else {
+    } else if (type.isScalar()) {
+        if ((int)initList->getSequence().size() != 1) {
+            error(loc, "scalar expected one element:", "initializer list", type.getCompleteString().c_str());
+            return nullptr;
+        }
+   } else {
         error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str());
         return nullptr;
     }
 
-    // now that the subtree is processed, process this node
-    return addConstructor(loc, initList, type, mapTypeToConstructorOp(type));
+    // Now that the subtree is processed, process this node as if the
+    // initializer list is a set of arguments to a constructor.
+    TIntermNode* emulatedConstructorArguments;
+    if (initList->getSequence().size() == 1)
+        emulatedConstructorArguments = initList->getSequence()[0];
+    else
+        emulatedConstructorArguments = initList;
+    return addConstructor(loc, emulatedConstructorArguments, type);
 }
 
 //
@@ -3545,12 +3874,13 @@
 //
 // Returns nullptr for an error or the constructed node (aggregate or typed) for no error.
 //
-TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* node, const TType& type, TOperator op)
+TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* node, const TType& type)
 {
     if (node == nullptr || node->getAsTyped() == nullptr)
         return nullptr;
 
     TIntermAggregate* aggrNode = node->getAsAggregate();
+    TOperator op = intermediate.mapTypeToConstructorOp(type);
 
     // Combined texture-sampler constructors are completely semantic checked
     // in constructorTextureSamplerError()
@@ -3740,28 +4070,31 @@
 //
 // Do everything needed to add an interface block.
 //
-void HlslParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes)
+void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TString* instanceName, TArraySizes* arraySizes)
 {
+    assert(type.getWritableStruct() != nullptr);
+
+    TTypeList& typeList = *type.getWritableStruct();
     // fix and check for member storage qualifiers and types that don't belong within a block
     for (unsigned int member = 0; member < typeList.size(); ++member) {
         TType& memberType = *typeList[member].type;
         TQualifier& memberQualifier = memberType.getQualifier();
         const TSourceLoc& memberLoc = typeList[member].loc;
         globalQualifierFix(memberLoc, memberQualifier);
-        memberQualifier.storage = currentBlockQualifier.storage;
+        memberQualifier.storage = type.getQualifier().storage;
     }
 
     // This might be a redeclaration of a built-in block.  If so, redeclareBuiltinBlock() will
     // do all the rest.
-    if (! symbolTable.atBuiltInLevel() && builtInName(*blockName)) {
-        redeclareBuiltinBlock(loc, typeList, *blockName, instanceName, arraySizes);
-        return;
-    }
+    //if (! symbolTable.atBuiltInLevel() && builtInName(*blockName)) {
+    //    redeclareBuiltinBlock(loc, typeList, *blockName, instanceName, arraySizes);
+    //    return;
+    //}
 
     // Make default block qualification, and adjust the member qualifications
 
     TQualifier defaultQualification;
-    switch (currentBlockQualifier.storage) {
+    switch (type.getQualifier().storage) {
     case EvqUniform:    defaultQualification = globalUniformDefaults;    break;
     case EvqBuffer:     defaultQualification = globalBufferDefaults;     break;
     case EvqVaryingIn:  defaultQualification = globalInputDefaults;      break;
@@ -3771,12 +4104,12 @@
 
     // Special case for "push_constant uniform", which has a default of std430,
     // contrary to normal uniform defaults, and can't have a default tracked for it.
-    if (currentBlockQualifier.layoutPushConstant && ! currentBlockQualifier.hasPacking())
-        currentBlockQualifier.layoutPacking = ElpStd430;
+    if (type.getQualifier().layoutPushConstant && ! type.getQualifier().hasPacking())
+        type.getQualifier().layoutPacking = ElpStd430;
 
     // fix and check for member layout qualifiers
 
-    mergeObjectLayoutQualifiers(defaultQualification, currentBlockQualifier, true);
+    mergeObjectLayoutQualifiers(defaultQualification, type.getQualifier(), true);
 
     bool memberWithLocation = false;
     bool memberWithoutLocation = false;
@@ -3800,7 +4133,7 @@
         if (memberQualifier.hasPacking())
             error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), "");
         if (memberQualifier.hasLocation()) {
-            switch (currentBlockQualifier.storage) {
+            switch (type.getQualifier().storage) {
             case EvqVaryingIn:
             case EvqVaryingOut:
                 memberWithLocation = true;
@@ -3821,19 +4154,20 @@
     }
 
     // Process the members
-    fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation);
-    fixBlockXfbOffsets(currentBlockQualifier, typeList);
-    fixBlockUniformOffsets(currentBlockQualifier, typeList);
+    fixBlockLocations(loc, type.getQualifier(), typeList, memberWithLocation, memberWithoutLocation);
+    fixBlockXfbOffsets(type.getQualifier(), typeList);
+    fixBlockUniformOffsets(type.getQualifier(), typeList);
 
     // reverse merge, so that currentBlockQualifier now has all layout information
     // (can't use defaultQualification directly, it's missing other non-layout-default-class qualifiers)
-    mergeObjectLayoutQualifiers(currentBlockQualifier, defaultQualification, true);
+    mergeObjectLayoutQualifiers(type.getQualifier(), defaultQualification, true);
 
     //
     // Build and add the interface block as a new type named 'blockName'
     //
 
-    TType blockType(&typeList, *blockName, currentBlockQualifier);
+    //?? need the block name to be a typename?
+    TType blockType(&typeList, "" /* *blockName */, type.getQualifier());
     if (arraySizes)
         blockType.newArraySizes(*arraySizes);
 
@@ -3850,20 +4184,20 @@
     // 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;
-        }
-    }
+    //??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.
@@ -3873,7 +4207,7 @@
     TVariable& variable = *new TVariable(instanceName, blockType);
     if (! symbolTable.insert(variable)) {
         if (*instanceName == "")
-            error(loc, "nameless block contains a member that already has a name at global scope", blockName->c_str(), "");
+            error(loc, "nameless block contains a member that already has a name at global scope", "" /* blockName->c_str() */, "");
         else
             error(loc, "block instance name redefinition", variable.getName().c_str(), "");
 
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
index f128131..92641a8 100755
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -47,9 +47,10 @@
                      int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&,
                      bool forwardCompatible = false, EShMessages messages = EShMsgDefault);
     virtual ~HlslParseContext();
+    void initializeExtensionBehavior();
+
     void setLimits(const TBuiltInResource&);
     bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false);
-    void getPreamble(std::string&);
 
     void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken,
         const char* szExtraInfoFormat, ...);
@@ -94,6 +95,10 @@
     void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&);
     TFunction* handleConstructorCall(const TSourceLoc&, const TType&);
     void handleSemantic(TType& type, const TString& semantic);
+    void handlePackOffset(const TSourceLoc&, TType& type, const glslang::TString& location,
+                          const glslang::TString* component);
+    void handleRegister(const TSourceLoc&, TType& type, const glslang::TString* profile, const glslang::TString& desc,
+                        int subComponent);
 
     TIntermAggregate* handleSamplerTextureCombine(const TSourceLoc& loc, TIntermTyped* argTex, TIntermTyped* argSampler);
 
@@ -130,10 +135,10 @@
     const TFunction* findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     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);
-    TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&, TOperator);
+    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&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0);
+    void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = 0, TArraySizes* arraySizes = 0);
     void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation);
     void fixBlockXfbOffsets(TQualifier&, TTypeList&);
     void fixBlockUniformOffsets(TQualifier&, TTypeList&);
@@ -160,7 +165,6 @@
     void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool& newDeclaration);
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
-    TOperator mapTypeToConstructorOp(const TType&) const;
     TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage);
     void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
                        const char* szExtraInfoFormat, TPrefixType prefix,
@@ -176,15 +180,12 @@
     bool postMainReturn;         // 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
-    const TString* blockName;
-    TQualifier currentBlockQualifier;
     TBuiltInResource resources;
     TLimits& limits;
 
     HlslParseContext(HlslParseContext&);
     HlslParseContext& operator=(HlslParseContext&);
 
-    TMap<TString, TExtensionBehavior> extensionBehavior;    // for each extension string, what its current behavior is set to
     static const int maxSamplerIndex = EsdNumDims * (EbtNumTypes * (2 * 2 * 2)); // see computeSamplerTypeIndex()
     bool afterEOF;
     TQualifier globalBufferDefaults;
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index d318a86..721da62 100755
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -67,9 +67,14 @@
     }
 }
 
-bool IsTextureType(const char argOrder)    { return argOrder == '%' || argOrder == '@'; }
-bool IsTextureArrayed(const char argOrder) { return argOrder == '@'; }
-bool IsTextureMS(const char /*argOrder*/)      { return false; } // TODO: ...
+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 IsTextureType(const char argOrder)
+{
+    return argOrder == '%' || argOrder == '@' || IsTextureMS(argOrder) || IsBuffer(argOrder);
+}
 
 // Reject certain combinations that are illegal sample methods.  For example,
 // 3D arrays.
@@ -77,34 +82,132 @@
 {
     const bool isArrayed = IsTextureArrayed(*argOrder);
     const bool isMS      = IsTextureMS(*argOrder);
+    const bool isBuffer  = IsBuffer(*argOrder);
 
-    // there are no 3D arrayed textures, or 3D SampleCmp
-    if (dim0 == 3 && (isArrayed || name == "SampleCmp"))
+    // there are no 3D arrayed textures, or 3D SampleCmp(LevelZero)
+    if (dim0 == 3 && (isArrayed || name == "SampleCmp" || name == "SampleCmpLevelZero"))
         return true;
 
     const int numArgs = int(std::count(argOrder, argOrder + strlen(argOrder), ',')) + 1;
 
-    // Reject invalid offset arrayed forms with cubemaps
-    if (isArrayed && dim0 == 4) {
+    // Reject invalid offset forms with cubemaps
+    if (dim0 == 4) {
         if ((name == "Sample"             && numArgs >= 4) ||
             (name == "SampleBias"         && numArgs >= 5) ||
             (name == "SampleCmp"          && numArgs >= 5) ||
-            (name == "SampleCmpLevelZero" && numArgs >= 4) ||
+            (name == "SampleCmpLevelZero" && numArgs >= 5) ||
             (name == "SampleGrad"         && numArgs >= 6) ||
             (name == "SampleLevel"        && numArgs >= 5))
             return true;
     }
 
-    // Reject invalid Loads
-    if (name == "Load") {
-        if ((numArgs >= 3 && !isMS) ||  // Load with sampleindex requires multisample
-            (dim0 == 4))                // Load does not support any cubemaps, arrayed or not.
+    const bool isGather = 
+        (name == "Gather" || 
+         name == "GatherRed" ||
+         name == "GatherGreen" || 
+         name == "GatherBlue"  ||
+         name == "GatherAlpha");
+
+    const bool isGatherCmp = 
+        (name == "GatherCmpRed"   ||
+         name == "GatherCmpGreen" ||
+         name == "GatherCmpBlue"  ||
+         name == "GatherCmpAlpha");
+
+    // Reject invalid Gathers
+    if (isGather || isGatherCmp) {
+        if (dim0 == 1 || dim0 == 3)   // there are no 1D or 3D gathers
             return true;
+
+        // no offset on cube or cube array gathers
+        if (dim0 == 4) {
+            if ((isGather && numArgs > 3) || (isGatherCmp && numArgs > 4))
+                return true;
+        }
     }
 
+    // Reject invalid Loads
+    if (name == "Load" && dim0 == 4)
+        return true; // Load does not support any cubemaps, arrayed or not.
+
+    // Multisample formats are only 2D and 2Darray
+    if (isMS && dim0 != 2)
+        return true;
+
+    // Buffer are only 1D
+    if (isBuffer && dim0 != 1)
+        return true;
+
     return false;
 }
-    
+
+// Return the number of the coordinate arg, if any
+int CoordinateArgPos(const glslang::TString& name, bool isTexture)
+{
+    if (!isTexture || (name == "GetDimensions"))
+        return -1;  // has none
+    else if (name == "Load")
+        return 1;
+    else
+        return 2;  // other texture methods are 2
+}
+
+// Some texture methods use an addition coordinate dimension for the mip
+bool HasMipInCoord(const glslang::TString& name, bool isMS, bool isBuffer)
+{
+    return name == "Load" && !isMS && !isBuffer;
+}
+
+// LOD calculations don't pass the array level in the coordinate.
+bool NoArrayCoord(const glslang::TString& name)
+{
+    return name == "CalculateLevelOfDetail" || name == "CalculateLevelOfDetailUnclamped";
+}
+
+// Handle IO params marked with > or <
+const char* IoParam(glslang::TString& s, const char* nthArgOrder)
+{
+    if (*nthArgOrder == '>') {           // output params
+        ++nthArgOrder;
+        s.append("out ");
+    } else if (*nthArgOrder == '<') {    // input params
+        ++nthArgOrder;
+        s.append("in ");
+    } 
+
+    return nthArgOrder;
+}
+
+// Handle repeated args
+void HandleRepeatArg(const char*& arg, const char*& prev, const char* current)
+{
+    if (*arg == ',' || *arg == '\0')
+        arg = prev;
+    else
+        prev = current;
+}
+
+// Return true for the end of a single argument key, which can be the end of the string, or
+// the comma separator.
+inline bool IsEndOfArg(const char* arg)
+{
+    return arg == nullptr || *arg == '\0' || *arg == ',';
+}
+
+
+// If this is a fixed vector size, such as V3, return the size.  Else return 0.
+int FixedVecSize(const char* arg) 
+{
+    while (!IsEndOfArg(arg)) {
+        if (isdigit(*arg))
+            return *arg - '0';
+        ++arg;
+    }
+
+    return 0; // none found.
+}
+
+
 // Create and return a type name.  This is done in GLSL, not HLSL conventions, until such
 // time as builtins are parsed using the HLSL parser.
 //
@@ -118,19 +221,17 @@
     const bool isMatMul    = (argOrder[0] == '#');
     const bool isTexture   = IsTextureType(argOrder[0]);
     const bool isArrayed   = IsTextureArrayed(argOrder[0]);
-    //const bool isMS        = IsTextureMS(argOrder[0]);
+    const bool isSampler   = IsSamplerType(argType[0]);
+    const bool isMS        = IsTextureMS(argOrder[0]);
+    const bool isBuffer    = IsBuffer(argOrder[0]);
 
-    char order = *argOrder;
     char type  = *argType;
 
     if (isTranspose) {  // Take transpose of matrix dimensions
-        order = *++argOrder;
         std::swap(dim0, dim1); 
     } else if (isMatMul) {
-        order = *++argOrder;
         dim0 = dim1;    // set vector dimension to mat col
     } else if (isTexture) {
-        order = *++argOrder;
         if (type == 'F')       // map base type to texture of that type.
             type = 'T';        // e.g, int -> itexture, uint -> utexture, etc.
         else if (type == 'I')
@@ -139,36 +240,44 @@
             type = 'u';
     }
 
+    if (isTranspose || isMatMul)
+        ++argOrder;
+
+    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 'T': s += "Texture";         break;
-        case 'i': s += "Texture <int4>";  break;
-        case 'u': s += "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 ? "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;
         }
     } else {
         switch (type) {
         case '-': s += "void"; break;
-        case 'F': s += BaseTypeName(order, "float",   "vec",     "mat");     break;
-        case 'D': s += BaseTypeName(order, "double",  "dvec",    "dmat");    break;
-        case 'I': s += BaseTypeName(order, "int",     "ivec",    "imat");    break;
-        case 'U': s += BaseTypeName(order, "uint",    "uvec",    "umat");    break;
-        case 'B': s += BaseTypeName(order, "bool",    "bvec",    "bmat");    break;
-        case 'S': s += "sampler";                                            break;
+        case 'F': s += BaseTypeName(order, "float",  "vec",  "mat");  break;
+        case 'D': s += BaseTypeName(order, "double", "dvec", "dmat"); break;
+        case 'I': s += BaseTypeName(order, "int",    "ivec", "imat"); break;
+        case 'U': s += BaseTypeName(order, "uint",   "uvec", "umat"); break;
+        case 'B': s += BaseTypeName(order, "bool",   "bvec", "bmat"); break;
+        case 'S': s += "sampler";                                     break;
+        case 's': s += "samplerShadow";                               break;
         case 'T': // fall through
         case 'i': // ...
         case 'u': // ...
-            if (type != 'T')
+            if (type != 'T') // create itexture, utexture, etc
                 s += type;
 
-            s += "texture";
+            s += (isBuffer ? "samplerBuffer" : "texture");
             break;
 
         default:  s += "UNKNOWN_TYPE"; break;
@@ -176,19 +285,19 @@
     }
 
     // handle fixed vector sizes, such as float3, and only ever 3.
-    const int fixedVecSize = isdigit(argOrder[1]) ? (argOrder[1] - '0') : 0;
+    const int fixedVecSize = FixedVecSize(argOrder);
     if (fixedVecSize != 0)
         dim0 = dim1 = fixedVecSize;
 
     // Add sampler dimensions
-    if (type == 'S' || isTexture) {
-        if (order == 'V') {
+    if (isSampler || isTexture) {
+        if ((order == 'V' || isTexture) && !isBuffer) {
             switch (dim0) {
-            case 1: s += "1D";   break;
-            case 2: s += "2D";   break;
-            case 3: s += "3D";   break;
-            case 4: s += "Cube"; break;
-            default: s += "UNKNOWN_SAMPLER"; break;
+            case 1: s += "1D";                   break;
+            case 2: s += (isMS ? "2DMS" : "2D"); break;
+            case 3: s += "3D";                   break;
+            case 4: s += "Cube";                 break;
+            default: s += "UNKNOWN_SAMPLER";     break;
             }
         }
     } else {
@@ -213,6 +322,8 @@
                 s += ('0' + char(dim1));
                 break;
             }
+        default:
+            break;
         }
     }
 
@@ -255,14 +366,6 @@
 }
 
 
-// Return true for the end of a single argument key, which can be the end of the string, or
-// the comma separator.
-inline bool IsEndOfArg(const char* arg)
-{
-    return arg == nullptr || *arg == '\0' || *arg == ',';
-}
-
-
 // return position of end of argument specifier
 inline const char* FindEndOfArg(const char* arg)
 {
@@ -272,19 +375,6 @@
     return *arg == '\0' ? nullptr : arg;
 }
 
-// If this is a fixed vector size, such as V3, return the size.  Else return 0.
-int FixedVecSize(const char* arg) 
-{
-    while (!IsEndOfArg(arg)) {
-        if (isdigit(*arg))
-            return *arg - '0';
-        ++arg;
-    }
-
-    return 0; // none found.
-}
-
-
 // Return pointer to beginning of Nth argument specifier in the string.
 inline const char* NthArg(const char* arg, int n)
 {
@@ -362,14 +452,16 @@
 //
 void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, const SpvVersion& /*spvVersion*/)
 {
-    static const EShLanguageMask EShLangAll = EShLanguageMask(EShLangCount - 1);
+    static const EShLanguageMask EShLangAll    = EShLanguageMask(EShLangCount - 1);
+    static const EShLanguageMask EShLangPSCS   = EShLanguageMask(EShLangFragmentMask | EShLangComputeMask);
+    static const EShLanguageMask EShLangVSPSGS = EShLanguageMask(EShLangVertexMask | EShLangFragmentMask | EShLangGeometryMask);
 
     // This structure encodes the prototype information for each HLSL intrinsic.
     // Because explicit enumeration would be cumbersome, it's procedurally generated.
     // orderKey can be:
     //   S = scalar, V = vector, M = matrix, - = void
     // typekey can be:
-    //   D = double, F = float, U = uint, I = int, B = bool, S = sampler
+    //   D = double, F = float, U = uint, I = int, B = bool, S = sampler, s = shadowSampler
     // An empty order or type key repeats the first one.  E.g: SVM,, means 3 args each of SVM.
     // '>' as first letter of order creates an output parameter
     // '<' as first letter of order creates an input parameter
@@ -377,6 +469,8 @@
     // '#' as first letter of order sets rows=cols for mats
     // '%' as first letter of order creates texture of given F/I/U type (texture, itexture, etc)
     // '@' 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
 
     static const struct {
         const char*   name;      // intrinsic name
@@ -386,257 +480,306 @@
         const char*   argType;   // argument type key
         unsigned int  stage;     // stage mask
     } hlslIntrinsics[] = {
-        // name                               retOrd   retType    argOrder      argType   stage mask
+        // name                               retOrd   retType    argOrder          argType   stage mask
         // -----------------------------------------------------------------------------------------------
-        { "abort",                            nullptr, nullptr,   "-",          "-",      EShLangAll },
-        { "abs",                              nullptr, nullptr,   "SVM",        "DFUI",   EShLangAll },
-        { "acos",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "all",                              "S",    "B",        "SVM",        "BFI",    EShLangAll },
-        { "AllMemoryBarrier",                 nullptr, nullptr,   "-",          "-",      EShLangComputeMask },
-        { "AllMemoryBarrierWithGroupSync",    nullptr, nullptr,   "-",          "-",      EShLangComputeMask },
-        { "any",                              "S",     "B",       "SVM",        "BFI",    EShLangAll },
-        { "asdouble",                         "S",     "D",       "S,",         "U,",     EShLangAll },
-        { "asdouble",                         "V2",    "D",       "V2,",        "U,",     EShLangAll },
-        { "asfloat",                          nullptr, "F",       "SVM",        "BFIU",   EShLangAll },
-        { "asin",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "asint",                            nullptr, "I",       "SVM",        "FU",     EShLangAll },
-        { "asuint",                           nullptr, "U",       "SVM",        "FU",     EShLangAll },
-        { "atan",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "atan2",                            nullptr, nullptr,   "SVM,",       "F,",     EShLangAll },
-        { "ceil",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "CheckAccessFullyMapped",           "S",     "B" ,      "S",          "U",      EShLangFragmentMask | EShLangComputeMask },
-        { "clamp",                            nullptr, nullptr,   "SVM,,",      "FUI,,",  EShLangAll },
-        { "clip",                             "-",     "-",       "SVM",        "F",      EShLangFragmentMask },
-        { "cos",                              nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "cosh",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "countbits",                        nullptr, nullptr,   "SV",         "U",      EShLangAll },
-        { "cross",                            nullptr, nullptr,   "V3,",        "F,",     EShLangAll },
-        { "D3DCOLORtoUBYTE4",                 "V4",    "I",       "V4",         "F",      EShLangAll },
-        { "ddx",                              nullptr, nullptr,   "SVM",        "F",      EShLangFragmentMask },
-        { "ddx_coarse",                       nullptr, nullptr,   "SVM",        "F",      EShLangFragmentMask },
-        { "ddx_fine",                         nullptr, nullptr,   "SVM",        "F",      EShLangFragmentMask },
-        { "ddy",                              nullptr, nullptr,   "SVM",        "F",      EShLangFragmentMask },
-        { "ddy_coarse",                       nullptr, nullptr,   "SVM",        "F",      EShLangFragmentMask },
-        { "ddy_fine",                         nullptr, nullptr,   "SVM",        "F",      EShLangFragmentMask },
-        { "degrees",                          nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "determinant",                      "S",     "F",       "M",          "F",      EShLangAll },
-        { "DeviceMemoryBarrier",              nullptr, nullptr,   "-",          "-",      EShLangFragmentMask | EShLangComputeMask },
-        { "DeviceMemoryBarrierWithGroupSync", nullptr, nullptr,   "-",          "-",      EShLangComputeMask },
-        { "distance",                         "S",     "F",       "V,",         "F,",     EShLangAll },
-        { "dot",                              "S",     nullptr,   "V,",         "FI,",    EShLangAll },
-        { "dst",                              nullptr, nullptr,   "V4,V4",      "F,",     EShLangAll },
-        // { "errorf",                           "-",     "-",       "",         "",     EShLangAll }, TODO: varargs
-        { "EvaluateAttributeAtCentroid",      nullptr, nullptr,   "SVM",        "F",      EShLangFragmentMask },
-        { "EvaluateAttributeAtSample",        nullptr, nullptr,   "SVM,S",      "F,U",    EShLangFragmentMask },
-        { "EvaluateAttributeSnapped",         nullptr, nullptr,   "SVM,V2",     "F,I",    EShLangFragmentMask },
-        { "exp",                              nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "exp2",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "f16tof32",                         nullptr, "F",       "SV",         "U",      EShLangAll },
-        { "f32tof16",                         nullptr, "U",       "SV",         "F",      EShLangAll },
-        { "faceforward",                      nullptr, nullptr,   "V,,",        "F,,",    EShLangAll },
-        { "firstbithigh",                     nullptr, nullptr,   "SV",         "UI",     EShLangAll },
-        { "firstbitlow",                      nullptr, nullptr,   "SV",         "UI",     EShLangAll },
-        { "floor",                            nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "fma",                              nullptr, nullptr,   "SVM,,",      "D,,",    EShLangAll },
-        { "fmod",                             nullptr, nullptr,   "SVM,",       "F,",     EShLangAll },
-        { "frac",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "frexp",                            nullptr, nullptr,   "SVM,",       "F,",     EShLangAll },
-        { "fwidth",                           nullptr, nullptr,   "SVM",        "F",      EShLangFragmentMask },
-        { "GetRenderTargetSampleCount",       "S",     "U",       "-",          "-",      EShLangAll },
-        { "GetRenderTargetSamplePosition",    "V2",    "F",       "V1",         "I",      EShLangAll },
-        { "GroupMemoryBarrier",               nullptr, nullptr,   "-",          "-",      EShLangComputeMask },
-        { "GroupMemoryBarrierWithGroupSync",  nullptr, nullptr,   "-",          "-",      EShLangComputeMask },
-        { "InterlockedAdd",                   "-",     "-",       "SVM,,>",     "UI,,",   EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedAdd",                   "-",     "-",       "SVM,",       "UI,",    EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedAnd",                   "-",     "-",       "SVM,,>",     "UI,,",   EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedAnd",                   "-",     "-",       "SVM,",       "UI,",    EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedCompareExchange",       "-",     "-",       "SVM,,,>",    "UI,,,",  EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedCompareStore",          "-",     "-",       "SVM,,",      "UI,,",   EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedExchange",              "-",     "-",       "SVM,,>",     "UI,,",   EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedMax",                   "-",     "-",       "SVM,,>",     "UI,,",   EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedMax",                   "-",     "-",       "SVM,",       "UI,",    EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedMin",                   "-",     "-",       "SVM,,>",     "UI,,",   EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedMin",                   "-",     "-",       "SVM,",       "UI,",    EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedOr",                    "-",     "-",       "SVM,,>",     "UI,,",   EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedOr",                    "-",     "-",       "SVM,",       "UI,",    EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedXor",                   "-",     "-",       "SVM,,>",     "UI,,",   EShLangFragmentMask | EShLangComputeMask },
-        { "InterlockedXor",                   "-",     "-",       "SVM,",       "UI,",    EShLangFragmentMask | EShLangComputeMask },
-        { "isfinite",                         nullptr, "B" ,      "SVM",        "F",      EShLangAll },
-        { "isinf",                            nullptr, "B" ,      "SVM",        "F",      EShLangAll },
-        { "isnan",                            nullptr, "B" ,      "SVM",        "F",      EShLangAll },
-        { "ldexp",                            nullptr, nullptr,   "SVM,",       "F,",     EShLangAll },
-        { "length",                           "S",     "F",       "V",          "F",      EShLangAll },
-        { "lerp",                             nullptr, nullptr,   "SVM,,",      "F,,",    EShLangAll },
-        { "lit",                              "V4",    "F",       "S,,",        "F,,",    EShLangAll },
-        { "log",                              nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "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 },
-        { "msad4",                            "V4",    "U",       "S,V2,V4",    "U,,",    EShLangAll },
-        { "mul",                              "S",     nullptr,   "S,S",        "FI,",    EShLangAll },
-        { "mul",                              "V",     nullptr,   "S,V",        "FI,",    EShLangAll },
-        { "mul",                              "M",     nullptr,   "S,M",        "FI,",    EShLangAll },
-        { "mul",                              "V",     nullptr,   "V,S",        "FI,",    EShLangAll },
-        { "mul",                              "S",     nullptr,   "V,V",        "FI,",    EShLangAll },
-        { "mul",                              "#V",    nullptr,   "V,M",        "FI,",    EShLangAll },
-        { "mul",                              "M",     nullptr,   "M,S",        "FI,",    EShLangAll },
-        { "mul",                              "V",     nullptr,   "M,#V",       "FI,",    EShLangAll },
+        { "abort",                            nullptr, nullptr,   "-",              "-",             EShLangAll },
+        { "abs",                              nullptr, nullptr,   "SVM",            "DFUI",          EShLangAll },
+        { "acos",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "all",                              "S",    "B",        "SVM",            "BFI",           EShLangAll },
+        { "AllMemoryBarrier",                 nullptr, nullptr,   "-",              "-",             EShLangComputeMask },
+        { "AllMemoryBarrierWithGroupSync",    nullptr, nullptr,   "-",              "-",             EShLangComputeMask },
+        { "any",                              "S",     "B",       "SVM",            "BFI",           EShLangAll },
+        { "asdouble",                         "S",     "D",       "S,",             "U,",            EShLangAll },
+        { "asdouble",                         "V2",    "D",       "V2,",            "U,",            EShLangAll },
+        { "asfloat",                          nullptr, "F",       "SVM",            "BFIU",          EShLangAll },
+        { "asin",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "asint",                            nullptr, "I",       "SVM",            "FU",            EShLangAll },
+        { "asuint",                           nullptr, "U",       "SVM",            "FU",            EShLangAll },
+        { "atan",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "atan2",                            nullptr, nullptr,   "SVM,",           "F,",            EShLangAll },
+        { "ceil",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "CheckAccessFullyMapped",           "S",     "B" ,      "S",              "U",             EShLangPSCS },
+        { "clamp",                            nullptr, nullptr,   "SVM,,",          "FUI,,",         EShLangAll },
+        { "clip",                             "-",     "-",       "SVM",            "F",             EShLangFragmentMask },
+        { "cos",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "cosh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "countbits",                        nullptr, nullptr,   "SV",             "U",             EShLangAll },
+        { "cross",                            nullptr, nullptr,   "V3,",            "F,",            EShLangAll },
+        { "D3DCOLORtoUBYTE4",                 "V4",    "I",       "V4",             "F",             EShLangAll },
+        { "ddx",                              nullptr, nullptr,   "SVM",            "F",             EShLangFragmentMask },
+        { "ddx_coarse",                       nullptr, nullptr,   "SVM",            "F",             EShLangFragmentMask },
+        { "ddx_fine",                         nullptr, nullptr,   "SVM",            "F",             EShLangFragmentMask },
+        { "ddy",                              nullptr, nullptr,   "SVM",            "F",             EShLangFragmentMask },
+        { "ddy_coarse",                       nullptr, nullptr,   "SVM",            "F",             EShLangFragmentMask },
+        { "ddy_fine",                         nullptr, nullptr,   "SVM",            "F",             EShLangFragmentMask },
+        { "degrees",                          nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "determinant",                      "S",     "F",       "M",              "F",             EShLangAll },
+        { "DeviceMemoryBarrier",              nullptr, nullptr,   "-",              "-",             EShLangPSCS },
+        { "DeviceMemoryBarrierWithGroupSync", nullptr, nullptr,   "-",              "-",             EShLangComputeMask },
+        { "distance",                         "S",     "F",       "V,",             "F,",            EShLangAll },
+        { "dot",                              "S",     nullptr,   "V,",             "FI,",           EShLangAll },
+        { "dst",                              nullptr, nullptr,   "V4,",            "F,",            EShLangAll },
+        // { "errorf",                           "-",     "-",       "",             "",             EShLangAll }, TODO: varargs
+        { "EvaluateAttributeAtCentroid",      nullptr, nullptr,   "SVM",            "F",             EShLangFragmentMask },
+        { "EvaluateAttributeAtSample",        nullptr, nullptr,   "SVM,S",          "F,U",           EShLangFragmentMask },
+        { "EvaluateAttributeSnapped",         nullptr, nullptr,   "SVM,V2",         "F,I",           EShLangFragmentMask },
+        { "exp",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "exp2",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "f16tof32",                         nullptr, "F",       "SV",             "U",             EShLangAll },
+        { "f32tof16",                         nullptr, "U",       "SV",             "F",             EShLangAll },
+        { "faceforward",                      nullptr, nullptr,   "V,,",            "F,,",           EShLangAll },
+        { "firstbithigh",                     nullptr, nullptr,   "SV",             "UI",            EShLangAll },
+        { "firstbitlow",                      nullptr, nullptr,   "SV",             "UI",            EShLangAll },
+        { "floor",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "fma",                              nullptr, nullptr,   "SVM,,",          "D,,",           EShLangAll },
+        { "fmod",                             nullptr, nullptr,   "SVM,",           "F,",            EShLangAll },
+        { "frac",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "frexp",                            nullptr, nullptr,   "SVM,",           "F,",            EShLangAll },
+        { "fwidth",                           nullptr, nullptr,   "SVM",            "F",             EShLangFragmentMask },
+        { "GetRenderTargetSampleCount",       "S",     "U",       "-",              "-",             EShLangAll },
+        { "GetRenderTargetSamplePosition",    "V2",    "F",       "V1",             "I",             EShLangAll },
+        { "GroupMemoryBarrier",               nullptr, nullptr,   "-",              "-",             EShLangComputeMask },
+        { "GroupMemoryBarrierWithGroupSync",  nullptr, nullptr,   "-",              "-",             EShLangComputeMask },
+        { "InterlockedAdd",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS },
+        { "InterlockedAdd",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS },
+        { "InterlockedAnd",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS },
+        { "InterlockedAnd",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS },
+        { "InterlockedCompareExchange",       "-",     "-",       "SVM,,,>",        "UI,,,",         EShLangPSCS },
+        { "InterlockedCompareStore",          "-",     "-",       "SVM,,",          "UI,,",          EShLangPSCS },
+        { "InterlockedExchange",              "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS },
+        { "InterlockedMax",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS },
+        { "InterlockedMax",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS },
+        { "InterlockedMin",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS },
+        { "InterlockedMin",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS },
+        { "InterlockedOr",                    "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS },
+        { "InterlockedOr",                    "-",     "-",       "SVM,",           "UI,",           EShLangPSCS },
+        { "InterlockedXor",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS },
+        { "InterlockedXor",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS },
+        { "isfinite",                         nullptr, "B" ,      "SVM",            "F",             EShLangAll },
+        { "isinf",                            nullptr, "B" ,      "SVM",            "F",             EShLangAll },
+        { "isnan",                            nullptr, "B" ,      "SVM",            "F",             EShLangAll },
+        { "ldexp",                            nullptr, nullptr,   "SVM,",           "F,",            EShLangAll },
+        { "length",                           "S",     "F",       "V",              "F",             EShLangAll },
+        { "lerp",                             nullptr, nullptr,   "VM,,",           "F,,",           EShLangAll },
+        { "lerp",                             nullptr, nullptr,   "SVM,,S",         "F,,",           EShLangAll },
+        { "lit",                              "V4",    "F",       "S,,",            "F,,",           EShLangAll },
+        { "log",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "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 },
+        { "msad4",                            "V4",    "U",       "S,V2,V4",        "U,,",           EShLangAll },
+        { "mul",                              "S",     nullptr,   "S,S",            "FI,",           EShLangAll },
+        { "mul",                              "V",     nullptr,   "S,V",            "FI,",           EShLangAll },
+        { "mul",                              "M",     nullptr,   "S,M",            "FI,",           EShLangAll },
+        { "mul",                              "V",     nullptr,   "V,S",            "FI,",           EShLangAll },
+        { "mul",                              "S",     nullptr,   "V,V",            "FI,",           EShLangAll },
+        { "mul",                              "#V",    nullptr,   "V,M",            "FI,",           EShLangAll },
+        { "mul",                              "M",     nullptr,   "M,S",            "FI,",           EShLangAll },
+        { "mul",                              "V",     nullptr,   "M,#V",           "FI,",           EShLangAll },
         // mat*mat form of mul is handled in createMatTimesMat()
-        { "noise",                            "S",     "F",       "V",          "F",      EShLangFragmentMask },
-        { "normalize",                        nullptr, nullptr,   "V",          "F",      EShLangAll },
-        { "pow",                              nullptr, nullptr,   "SVM,",       "F,",     EShLangAll },
-        // { "printf",                           "-",     "-",       "",        "",     EShLangAll }, TODO: varargs
-        { "Process2DQuadTessFactorsAvg",      "-",     "-",       "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask },
-        { "Process2DQuadTessFactorsMax",      "-",     "-",       "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask },
-        { "Process2DQuadTessFactorsMin",      "-",     "-",       "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask },
-        { "ProcessIsolineTessFactors",        "-",     "-",       "S,,>,>",  "F,,,",   EShLangTessControlMask },
-        { "ProcessQuadTessFactorsAvg",        "-",     "-",       "V4,S,>V4,>V2,>V2", "F,,,,",  EShLangTessControlMask },
-        { "ProcessQuadTessFactorsMax",        "-",     "-",       "V4,S,>V4,>V2,>V2", "F,,,,",  EShLangTessControlMask },
-        { "ProcessQuadTessFactorsMin",        "-",     "-",       "V4,S,>V4,>V2,>V2", "F,,,,",  EShLangTessControlMask },
-        { "ProcessTriTessFactorsAvg",         "-",     "-",       "V3,S,>V3,>S,>S",   "F,,,,",  EShLangTessControlMask },
-        { "ProcessTriTessFactorsMax",         "-",     "-",       "V3,S,>V3,>S,>S",   "F,,,,",  EShLangTessControlMask },
-        { "ProcessTriTessFactorsMin",         "-",     "-",       "V3,S,>V3,>S,>S",   "F,,,,",  EShLangTessControlMask },
-        { "radians",                          nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "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 },
-        { "round",                            nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "rsqrt",                            nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "saturate",                         nullptr, nullptr ,  "SVM",        "F",      EShLangAll },
-        { "sign",                             nullptr, nullptr,   "SVM",        "FI",     EShLangAll },
-        { "sin",                              nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "sincos",                           "-",     "-",       "SVM,>,>",    "F,,",    EShLangAll },
-        { "sinh",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "smoothstep",                       nullptr, nullptr,   "SVM,,",      "F,,",    EShLangAll },
-        { "sqrt",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "step",                             nullptr, nullptr,   "SVM,",       "F,",     EShLangAll },
-        { "tan",                              nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "tanh",                             nullptr, nullptr,   "SVM",        "F",      EShLangAll },
-        { "tex1D",                            "V4",    "F",       "V1,S",       "S,F",    EShLangFragmentMask },
-        { "tex1D",                            "V4",    "F",       "V1,S,V1,V1", "S,F,F,F",EShLangFragmentMask },
-        { "tex1Dbias",                        "V4",    "F",       "V1,V4",      "S,F",    EShLangFragmentMask },
-        { "tex1Dgrad",                        "V4",    "F",       "V1,V1,V1,V1","S,F,F,F",EShLangFragmentMask },
-        { "tex1Dlod",                         "V4",    "F",       "V1,V4",      "S,F",    EShLangFragmentMask },
-        { "tex1Dproj",                        "V4",    "F",       "V1,V4",      "S,F",    EShLangFragmentMask },
-        { "tex2D",                            "V4",    "F",       "V2,V2",      "S,F",    EShLangFragmentMask },
-        { "tex2D",                            "V4",    "F",       "V2,V2,V2,V2","S,F,F,F",EShLangFragmentMask },
-        { "tex2Dbias",                        "V4",    "F",       "V2,V4",      "S,F",    EShLangFragmentMask },
-        { "tex2Dgrad",                        "V4",    "F",       "V2,V2,V2,V2","S,F,F,F",EShLangFragmentMask },
-        { "tex2Dlod",                         "V4",    "F",       "V2,V4",      "S,F",    EShLangFragmentMask },
-        { "tex2Dproj",                        "V4",    "F",       "V2,V4",      "S,F",    EShLangFragmentMask },
-        { "tex3D",                            "V4",    "F",       "V3,V3",      "S,F",    EShLangFragmentMask },
-        { "tex3D",                            "V4",    "F",       "V3,V3,V3,V3","S,F,F,F",EShLangFragmentMask },
-        { "tex3Dbias",                        "V4",    "F",       "V3,V4",      "S,F",    EShLangFragmentMask },
-        { "tex3Dgrad",                        "V4",    "F",       "V3,V3,V3,V3","S,F,F,F",EShLangFragmentMask },
-        { "tex3Dlod",                         "V4",    "F",       "V3,V4",      "S,F",    EShLangFragmentMask },
-        { "tex3Dproj",                        "V4",    "F",       "V3,V4",      "S,F",    EShLangFragmentMask },
-        { "texCUBE",                          "V4",    "F",       "V4,V3",      "S,F",    EShLangFragmentMask },
-        { "texCUBE",                          "V4",    "F",       "V4,V3,V3,V3","S,F,F,F",EShLangFragmentMask },
-        { "texCUBEbias",                      "V4",    "F",       "V4,V4",      "S,F",    EShLangFragmentMask },
-        { "texCUBEgrad",                      "V4",    "F",       "V4,V3,V3,V3","S,F,F,F",EShLangFragmentMask },
-        { "texCUBElod",                       "V4",    "F",       "V4,V4",      "S,F",    EShLangFragmentMask },
-        { "texCUBEproj",                      "V4",    "F",       "V4,V4",      "S,F",    EShLangFragmentMask },
-        { "transpose",                        "^M",    nullptr,   "M",          "F",      EShLangAll },
-        { "trunc",                            nullptr, nullptr,   "SVM",        "F",      EShLangAll },
+        { "noise",                            "S",     "F",       "V",              "F",             EShLangFragmentMask },
+        { "normalize",                        nullptr, nullptr,   "V",              "F",             EShLangAll },
+        { "pow",                              nullptr, nullptr,   "SVM,",           "F,",            EShLangAll },
+        // { "printf",                           "-",     "-",       "",            "",              EShLangAll }, TODO: varargs
+        { "Process2DQuadTessFactorsAvg",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangTessControlMask },
+        { "Process2DQuadTessFactorsMax",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangTessControlMask },
+        { "Process2DQuadTessFactorsMin",      "-",     "-",       "V4,V2,>V4,>V2,", "F,,,,",         EShLangTessControlMask },
+        { "ProcessIsolineTessFactors",        "-",     "-",       "S,,>,>",         "F,,,",          EShLangTessControlMask },
+        { "ProcessQuadTessFactorsAvg",        "-",     "-",       "V4,S,>V4,>V2,",  "F,,,,",         EShLangTessControlMask },
+        { "ProcessQuadTessFactorsMax",        "-",     "-",       "V4,S,>V4,>V2,",  "F,,,,",         EShLangTessControlMask },
+        { "ProcessQuadTessFactorsMin",        "-",     "-",       "V4,S,>V4,>V2,",  "F,,,,",         EShLangTessControlMask },
+        { "ProcessTriTessFactorsAvg",         "-",     "-",       "V3,S,>V3,>S,",   "F,,,,",         EShLangTessControlMask },
+        { "ProcessTriTessFactorsMax",         "-",     "-",       "V3,S,>V3,>S,",   "F,,,,",         EShLangTessControlMask },
+        { "ProcessTriTessFactorsMin",         "-",     "-",       "V3,S,>V3,>S,",   "F,,,,",         EShLangTessControlMask },
+        { "radians",                          nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "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 },
+        { "round",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "rsqrt",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "saturate",                         nullptr, nullptr ,  "SVM",            "F",             EShLangAll },
+        { "sign",                             nullptr, nullptr,   "SVM",            "FI",            EShLangAll },
+        { "sin",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "sincos",                           "-",     "-",       "SVM,>,>",        "F,,",           EShLangAll },
+        { "sinh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "smoothstep",                       nullptr, nullptr,   "SVM,,",          "F,,",           EShLangAll },
+        { "sqrt",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "step",                             nullptr, nullptr,   "SVM,",           "F,",            EShLangAll },
+        { "tan",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "tanh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
+        { "tex1D",                            "V4",    "F",       "V1,S",           "S,F",           EShLangFragmentMask },
+        { "tex1D",                            "V4",    "F",       "V1,S,V1,",       "S,F,,",         EShLangFragmentMask },
+        { "tex1Dbias",                        "V4",    "F",       "V1,V4",          "S,F",           EShLangFragmentMask },
+        { "tex1Dgrad",                        "V4",    "F",       "V1,,,",          "S,F,,",         EShLangFragmentMask },
+        { "tex1Dlod",                         "V4",    "F",       "V1,V4",          "S,F",           EShLangFragmentMask },
+        { "tex1Dproj",                        "V4",    "F",       "V1,V4",          "S,F",           EShLangFragmentMask },
+        { "tex2D",                            "V4",    "F",       "V2,",            "S,F",           EShLangFragmentMask },
+        { "tex2D",                            "V4",    "F",       "V2,,,",          "S,F,,",         EShLangFragmentMask },
+        { "tex2Dbias",                        "V4",    "F",       "V2,V4",          "S,F",           EShLangFragmentMask },
+        { "tex2Dgrad",                        "V4",    "F",       "V2,,,",          "S,F,,",         EShLangFragmentMask },
+        { "tex2Dlod",                         "V4",    "F",       "V2,V4",          "S,F",           EShLangFragmentMask },
+        { "tex2Dproj",                        "V4",    "F",       "V2,V4",          "S,F",           EShLangFragmentMask },
+        { "tex3D",                            "V4",    "F",       "V3,",            "S,F",           EShLangFragmentMask },
+        { "tex3D",                            "V4",    "F",       "V3,,,",          "S,F,,",         EShLangFragmentMask },
+        { "tex3Dbias",                        "V4",    "F",       "V3,V4",          "S,F",           EShLangFragmentMask },
+        { "tex3Dgrad",                        "V4",    "F",       "V3,,,",          "S,F,,",         EShLangFragmentMask },
+        { "tex3Dlod",                         "V4",    "F",       "V3,V4",          "S,F",           EShLangFragmentMask },
+        { "tex3Dproj",                        "V4",    "F",       "V3,V4",          "S,F",           EShLangFragmentMask },
+        { "texCUBE",                          "V4",    "F",       "V4,V3",          "S,F",           EShLangFragmentMask },
+        { "texCUBE",                          "V4",    "F",       "V4,V3,,",        "S,F,,",         EShLangFragmentMask },
+        { "texCUBEbias",                      "V4",    "F",       "V4,",            "S,F",           EShLangFragmentMask },
+        { "texCUBEgrad",                      "V4",    "F",       "V4,V3,,",        "S,F,,",         EShLangFragmentMask },
+        { "texCUBElod",                       "V4",    "F",       "V4,",            "S,F",           EShLangFragmentMask },
+        { "texCUBEproj",                      "V4",    "F",       "V4,",            "S,F",           EShLangFragmentMask },
+        { "transpose",                        "^M",    nullptr,   "M",              "F",             EShLangAll },
+        { "trunc",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
 
         // Texture object methods.  Return type can be overridden by shader declaration.
-        // !O = no offset, O = offset, !A = no array, A = array
-        { "Sample",             /*!O !A*/     "V4",    nullptr,   "%V,S,V",     "FIU,S,F",     EShLangFragmentMask },
-        { "Sample",             /* O !A*/     "V4",    nullptr,   "%V,S,V,V",   "FIU,S,F,I",   EShLangFragmentMask },
-        { "Sample",             /*!O  A*/     "V4",    nullptr,   "@V,S,V",     "FIU,S,F",     EShLangFragmentMask },
-        { "Sample",             /* O  A*/     "V4",    nullptr,   "@V,S,V,V",   "FIU,S,F,I",   EShLangFragmentMask },
+        // !O = no offset, O = offset
+        { "Sample",             /*!O*/        "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangFragmentMask },
+        { "Sample",             /* O*/        "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",     EShLangFragmentMask },
 
-        { "SampleBias",         /*!O !A*/     "V4",    nullptr,   "%V,S,V,S",   "FIU,S,F,F",   EShLangFragmentMask },
-        { "SampleBias",         /* O !A*/     "V4",    nullptr,   "%V,S,V,S,V", "FIU,S,F,F,I", EShLangFragmentMask },
-        { "SampleBias",         /*!O  A*/     "V4",    nullptr,   "@V,S,V,S",   "FIU,S,F,F",   EShLangFragmentMask },
-        { "SampleBias",         /* O  A*/     "V4",    nullptr,   "@V,S,V,S,V", "FIU,S,F,F,I", EShLangFragmentMask },
+        { "SampleBias",         /*!O*/        "V4",    nullptr,   "%@,S,V,S",       "FIU,S,F,",      EShLangFragmentMask },
+        { "SampleBias",         /* O*/        "V4",    nullptr,   "%@,S,V,S,V",     "FIU,S,F,,I",    EShLangFragmentMask },
 
-        // { "SampleCmp",          /*!O !A*/     "V4",    nullptr,   "%V,S,V,S",   "FIU,S,F,F",   EShLangFragmentMask },
-        // { "SampleCmp",          /* O !A*/     "V4",    nullptr,   "%V,S,V,S,V", "FIU,S,F,F,I", EShLangFragmentMask },
-        // { "SampleCmp",          /*!O  A*/     "V4",    nullptr,   "@V,S,V,S",   "FIU,S,F,F",   EShLangFragmentMask },
-        // { "SampleCmp",          /* O  A*/     "V4",    nullptr,   "@V,S,V,S,V", "FIU,S,F,F,I", EShLangFragmentMask },
+        // TODO: FXC accepts int/uint samplers here.  unclear what that means.
+        { "SampleCmp",          /*!O*/        "S",     "F",       "%@,S,V,S",       "FIU,s,F,",      EShLangFragmentMask },
+        { "SampleCmp",          /* O*/        "S",     "F",       "%@,S,V,S,V",     "FIU,s,F,,I",    EShLangFragmentMask },
 
-        // { "SampleCmpLevelZero", /*!O !A*/     "V4",    nullptr,   "%V,S,V",     "FIU,S,F",     EShLangFragmentMask },
-        // { "SampleCmpLevelZero", /* O !A*/     "V4",    nullptr,   "%V,S,V,V",   "FIU,S,F,I",   EShLangFragmentMask },
-        // { "SampleCmpLevelZero", /*!O  A*/     "V4",    nullptr,   "@V,S,V",     "FIU,S,F",     EShLangFragmentMask },
-        // { "SampleCmpLevelZero", /* O  A*/     "V4",    nullptr,   "@V,S,V,V",   "FIU,S,F,I",   EShLangFragmentMask },
+        // TODO: FXC accepts int/uint samplers here.  unclear what that means.
+        { "SampleCmpLevelZero", /*!O*/        "S",     "F",       "%@,S,V,S",       "FIU,s,F,F",     EShLangFragmentMask },
+        { "SampleCmpLevelZero", /* O*/        "S",     "F",       "%@,S,V,S,V",     "FIU,s,F,F,I",   EShLangFragmentMask },
 
-        { "SampleGrad",         /*!O !A*/     "V4",    nullptr,   "%V,S,V,V,V",   "FIU,S,F,F,F",   EShLangAll },
-        { "SampleGrad",         /* O !A*/     "V4",    nullptr,   "%V,S,V,V,V,V", "FIU,S,F,F,F,I", EShLangAll },
-        { "SampleGrad",         /*!O  A*/     "V4",    nullptr,   "@V,S,V,V,V",   "FIU,S,F,F,F",   EShLangAll },
-        { "SampleGrad",         /* O  A*/     "V4",    nullptr,   "@V,S,V,V,V,V", "FIU,S,F,F,F,I", EShLangAll },
+        { "SampleGrad",         /*!O*/        "V4",    nullptr,   "%@,S,V,,",       "FIU,S,F,,",     EShLangAll },
+        { "SampleGrad",         /* O*/        "V4",    nullptr,   "%@,S,V,,,",      "FIU,S,F,,,I",   EShLangAll },
 
-        // { "SampleLevel",        /*!O !A*/     "V4",    nullptr,   "%V,S,V,S",   "FIU,S,F,F",       EShLangFragmentMask },
-        // { "SampleLevel",        /* O !A*/     "V4",    nullptr,   "%V,S,V,S,V", "FIU,S,F,F,I",     EShLangFragmentMask },
-        // { "SampleLevel",        /*!O  A*/     "V4",    nullptr,   "@V,S,V,S",   "FIU,S,F,F",       EShLangFragmentMask },
-        // { "SampleLevel",        /* O  A*/     "V4",    nullptr,   "@V,S,V,S,V", "FIU,S,F,F,I",     EShLangFragmentMask },
+        { "SampleLevel",        /*!O*/        "V4",    nullptr,   "%@,S,V,S",       "FIU,S,F,",      EShLangAll },
+        { "SampleLevel",        /* O*/        "V4",    nullptr,   "%@,S,V,S,V",     "FIU,S,F,,I",    EShLangAll },
 
-        // TODO: ...
-        // { "Load",                            "V4",    nullptr,   "%V,V",       "FIU,I",           EShLangFragmentMask },
-        // { "Load", /* +sampleidex*/           "V4",    nullptr,   "%V,V,S",     "FIU,I,I",         EShLangFragmentMask },
-        // { "Load", /* +samplindex, offset*/   "V4",    nullptr,   "%V,V,S,V",   "FIU,I,I,I",       EShLangFragmentMask },
-        // { "Load",                            "V4",    nullptr,   "@V,V",       "FIU,I",           EShLangFragmentMask },
-        // { "Load", /* +sampleidex*/           "V4",    nullptr,   "@V,V,S",     "FIU,I,I",         EShLangFragmentMask },
-        // { "Load", /* +samplindex, offset*/   "V4",    nullptr,   "@V,V,S,V",   "FIU,I,I,I",       EShLangFragmentMask },
+        { "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 },
 
-        // table of overloads from: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509693(v=vs.85).aspx
+        { "Gather",             /*!O*/        "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangAll },
+        { "Gather",             /* O*/        "V4",    nullptr,   "%@,S,V,V",       "FIU,S,F,I",     EShLangAll },
+
+        { "CalculateLevelOfDetail",           "S",     "F",       "%@,S,V",         "FUI,S,F",       EShLangFragmentMask },
+        { "CalculateLevelOfDetailUnclamped",  "S",     "F",       "%@,S,V",         "FUI,S,F",       EShLangFragmentMask },
+
+        { "GetSamplePosition",                "V2",    "F",       "$&2,S",          "FUI,I",         EShLangVSPSGS },
+
         // 
         // UINT Width
         // UINT MipLevel, UINT Width, UINT NumberOfLevels
-        { "GetDimensions",   /* 1D */         "-",     "-",       "%V1,>S",             "FUI,U",         EShLangAll },
-        { "GetDimensions",   /* 1D */         "-",     "-",       "%V1,>S",             "FUI,F",         EShLangAll },
-        { "GetDimensions",   /* 1D */         "-",     "-",       "%V1,S,>S,>S",        "FUI,U,U,U",     EShLangAll },
-        { "GetDimensions",   /* 1D */         "-",     "-",       "%V1,S,>S,>S",        "FUI,U,F,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 */    "-",     "-",       "@V1,>S,>S",          "FUI,U,U",       EShLangAll },
-        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@V1,>S,>S",          "FUI,F,F",       EShLangAll },
-        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@V1,S,>S,>S,>S",     "FUI,U,U,U,U",   EShLangAll },
-        { "GetDimensions",   /* 1DArray */    "-",     "-",       "@V1,S,>S,>S,>S",     "FUI,U,F,F,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 */         "-",     "-",       "%V2,>S,>S",          "FUI,U,U",       EShLangAll },
-        { "GetDimensions",   /* 2D */         "-",     "-",       "%V2,>S,>S",          "FUI,F,F",       EShLangAll },
-        { "GetDimensions",   /* 2D */         "-",     "-",       "%V2,S,>S,>S,>S",     "FUI,U,U,U,U",   EShLangAll },
-        { "GetDimensions",   /* 2D */         "-",     "-",       "%V2,S,>S,>S,>S",     "FUI,U,F,F,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 */    "-",     "-",       "@V2,>S,>S,>S",       "FUI,U,U,U",     EShLangAll },
-        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@V2,>S,>S,>S",       "FUI,F,F,F",     EShLangAll },
-        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@V2,S,>S,>S,>S,>S",  "FUI,U,U,U,U,U", EShLangAll },
-        { "GetDimensions",   /* 2DArray */    "-",     "-",       "@V2,S,>S,>S,>S,>S",  "FUI,U,F,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 */         "-",     "-",       "%V3,>S,>S,>S",       "FUI,U,U,U",     EShLangAll },
-        { "GetDimensions",   /* 3D */         "-",     "-",       "%V3,>S,>S,>S",       "FUI,F,F,F",     EShLangAll },
-        { "GetDimensions",   /* 3D */         "-",     "-",       "%V3,S,>S,>S,>S,>S",  "FUI,U,U,U,U,U", EShLangAll },
-        { "GetDimensions",   /* 3D */         "-",     "-",       "%V3,S,>S,>S,>S,>S",  "FUI,U,F,F,F,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 },
 
         // UINT Width, UINT Height
         // UINT MipLevel, UINT Width, UINT Height, UINT NumberOfLevels
-        { "GetDimensions",   /* Cube */       "-",     "-",       "%V4,>S,>S",          "FUI,U,U",       EShLangAll },
-        { "GetDimensions",   /* Cube */       "-",     "-",       "%V4,>S,>S",          "FUI,F,F",       EShLangAll },
-        { "GetDimensions",   /* Cube */       "-",     "-",       "%V4,S,>S,>S,>S",     "FUI,U,U,U,U",   EShLangAll },
-        { "GetDimensions",   /* Cube */       "-",     "-",       "%V4,S,>S,>S,>S",     "FUI,U,F,F,F",   EShLangAll },
+        { "GetDimensions",   /* Cube */       "-",     "-",       "%4,>S,",         "FUI,U,",        EShLangAll },
+        { "GetDimensions",   /* Cube */       "-",     "-",       "%4,>S,",         "FUI,F,",        EShLangAll },
+        { "GetDimensions",   /* Cube */       "-",     "-",       "%4,S,>S,,",      "FUI,U,,,",      EShLangAll },
+        { "GetDimensions",   /* Cube */       "-",     "-",       "%4,S,>S,,",      "FUI,U,F,,",     EShLangAll },
 
         // UINT Width, UINT Height, UINT Elements
         // UINT MipLevel, UINT Width, UINT Height, UINT Elements, UINT NumberOfLevels
-        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@V4,>S,>S,>S",       "FUI,U,U,U",     EShLangAll },
-        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@V4,>S,>S,>S",       "FUI,F,F,F",     EShLangAll },
-        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@V4,S,>S,>S,>S,>S",  "FUI,U,U,U,U,U", EShLangAll },
-        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@V4,S,>S,>S,>S,>S",  "FUI,U,F,F,F,F", EShLangAll },
+        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@4,>S,,",        "FUI,U,,",       EShLangAll },
+        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@4,>S,,",        "FUI,F,,",       EShLangAll },
+        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@4,S,>S,,,",     "FUI,U,,,,",     EShLangAll },
+        { "GetDimensions",   /* CubeArray */  "-",     "-",       "@4,S,>S,,,",     "FUI,U,F,,,",    EShLangAll },
 
-        // TODO: GetDimensions for Texture2DMS, Texture2DMSArray
         // UINT Width, UINT Height, UINT Samples
         // UINT Width, UINT Height, UINT Elements, UINT Samples
+        { "GetDimensions",   /* 2DMS */       "-",     "-",       "$2,>S,,",        "FUI,U,,",       EShLangAll },
+        { "GetDimensions",   /* 2DMS */       "-",     "-",       "$2,>S,,",        "FUI,U,,",       EShLangAll },
+        { "GetDimensions",   /* 2DMSArray */  "-",     "-",       "&2,>S,,,",       "FUI,U,,,",      EShLangAll },
+        { "GetDimensions",   /* 2DMSArray */  "-",     "-",       "&2,>S,,,",       "FUI,U,,,",      EShLangAll },
+
+        // SM5 texture methods
+        { "GatherRed",       /*!O*/           "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangAll },
+        { "GatherRed",       /* O*/           "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",     EShLangAll },
+        { "GatherRed",       /* O, status*/   "V4",    nullptr,   "%@,S,V,,>S",     "FIU,S,F,I,U",   EShLangAll },
+        { "GatherRed",       /* O-4 */        "V4",    nullptr,   "%@,S,V,,,,",     "FIU,S,F,I,,,",  EShLangAll },
+        { "GatherRed",       /* O-4, status */"V4",    nullptr,   "%@,S,V,,,,,S",   "FIU,S,F,I,,,,U",EShLangAll },
+
+        { "GatherGreen",     /*!O*/           "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangAll },
+        { "GatherGreen",     /* O*/           "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",     EShLangAll },
+        { "GatherGreen",     /* O, status*/   "V4",    nullptr,   "%@,S,V,,>S",     "FIU,S,F,I,U",   EShLangAll },
+        { "GatherGreen",     /* O-4 */        "V4",    nullptr,   "%@,S,V,,,,",     "FIU,S,F,I,,,",  EShLangAll },
+        { "GatherGreen",     /* O-4, status */"V4",    nullptr,   "%@,S,V,,,,,S",   "FIU,S,F,I,,,,U",EShLangAll },
+
+        { "GatherBlue",      /*!O*/           "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangAll },
+        { "GatherBlue",      /* O*/           "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",     EShLangAll },
+        { "GatherBlue",      /* O, status*/   "V4",    nullptr,   "%@,S,V,,>S",     "FIU,S,F,I,U",   EShLangAll },
+        { "GatherBlue",      /* O-4 */        "V4",    nullptr,   "%@,S,V,,,,",     "FIU,S,F,I,,,",  EShLangAll },
+        { "GatherBlue",      /* O-4, status */"V4",    nullptr,   "%@,S,V,,,,,S",   "FIU,S,F,I,,,,U",EShLangAll },
+
+        { "GatherAlpha",     /*!O*/           "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangAll },
+        { "GatherAlpha",     /* O*/           "V4",    nullptr,   "%@,S,V,",        "FIU,S,F,I",     EShLangAll },
+        { "GatherAlpha",     /* O, status*/   "V4",    nullptr,   "%@,S,V,,>S",     "FIU,S,F,I,U",   EShLangAll },
+        { "GatherAlpha",     /* O-4 */        "V4",    nullptr,   "%@,S,V,,,,",     "FIU,S,F,I,,,",  EShLangAll },
+        { "GatherAlpha",     /* O-4, status */"V4",    nullptr,   "%@,S,V,,,,,S",   "FIU,S,F,I,,,,U",EShLangAll },
+
+        { "GatherCmpRed",    /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll },
+        { "GatherCmpRed",    /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll },
+        { "GatherCmpRed",    /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll },
+        { "GatherCmpRed",    /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll },
+        { "GatherCmpRed",    /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,V,S","FIU,s,F,,I,,,,U",EShLangAll },
+
+        { "GatherCmpGreen",  /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll },
+        { "GatherCmpGreen",  /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll },
+        { "GatherCmpGreen",  /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll },
+        { "GatherCmpGreen",  /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll },
+        { "GatherCmpGreen",  /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll },
+
+        { "GatherCmpBlue",   /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll },
+        { "GatherCmpBlue",   /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll },
+        { "GatherCmpBlue",   /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll },
+        { "GatherCmpBlue",   /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll },
+        { "GatherCmpBlue",   /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll },
+
+        { "GatherCmpAlpha",  /*!O*/           "V4",    nullptr,   "%@,S,V,S",       "FIU,s,F,",       EShLangAll },
+        { "GatherCmpAlpha",  /* O*/           "V4",    nullptr,   "%@,S,V,S,V",     "FIU,s,F,,I",     EShLangAll },
+        { "GatherCmpAlpha",  /* O, status*/   "V4",    nullptr,   "%@,S,V,S,V,>S",  "FIU,s,F,,I,U",   EShLangAll },
+        { "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
 
         // 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 },
@@ -660,7 +803,11 @@
             for (const char* argOrder = intrinsic.argOrder; !IsEndOfArg(argOrder); ++argOrder) { // for each order...
                 const bool isTexture   = IsTextureType(*argOrder);
                 const bool isArrayed   = IsTextureArrayed(*argOrder);
+                const bool isMS        = IsTextureMS(*argOrder);
+                const bool isBuffer    = IsBuffer(*argOrder);
+                const bool mipInCoord  = HasMipInCoord(intrinsic.name, isMS, isBuffer);
                 const int fixedVecSize = FixedVecSize(argOrder);
+                const int coordArg     = CoordinateArgPos(intrinsic.name, isTexture);
 
                 // calculate min and max vector and matrix dimensions
                 int dim0Min = 1;
@@ -689,6 +836,9 @@
                             s.append(intrinsic.name);                          // intrinsic name
                             s.append("(");                                     // open paren
 
+                            const char* prevArgOrder = nullptr;
+                            const char* prevArgType = nullptr;
+
                             // Append argument types, if any.
                             for (int arg = 0; ; ++arg) {
                                 const char* nthArgOrder(NthArg(argOrder, arg));
@@ -700,42 +850,45 @@
                                 // cube textures use vec3 coordinates
                                 int argDim0 = isTexture && arg > 0 ? std::min(dim0, 3) : dim0;
 
-                                // arrayed textures have one extra coordinate dimension
-                                if (isArrayed && arg == 2)
+                                s.append(arg > 0 ? ", ": "");  // comma separator if needed
+
+                                const char* orderBegin = nthArgOrder;
+                                nthArgOrder = IoParam(s, nthArgOrder);
+
+                                // Comma means use the previous argument order and type.
+                                HandleRepeatArg(nthArgOrder, prevArgOrder, orderBegin);
+                                HandleRepeatArg(nthArgType,  prevArgType, nthArgType);
+
+                                // In case the repeated arg has its own I/O marker
+                                nthArgOrder = IoParam(s, nthArgOrder);
+
+                                // arrayed textures have one extra coordinate dimension, except for
+                                // the CalculateLevelOfDetail family.
+                                if (isArrayed && arg == coordArg && !NoArrayCoord(intrinsic.name))
+                                    argDim0++;
+
+                                // Some texture methods use an addition arg dimension to hold mip
+                                if (arg == coordArg && mipInCoord)
                                     argDim0++;
 
                                 // For textures, the 1D case isn't a 1-vector, but a scalar.
                                 if (isTexture && argDim0 == 1 && arg > 0 && *nthArgOrder == 'V')
                                     nthArgOrder = "S";
 
-                                s.append(arg > 0 ? ", ": "");  // comma separator if needed
-                                
-                                if (*nthArgOrder == '>') {           // output params
-                                    ++nthArgOrder;
-                                    s.append("out ");
-                                } else if (*nthArgOrder == '<') {    // input params
-                                    ++nthArgOrder;
-                                    s.append("in ");
-                                }
-
-                                // Comma means use the 1st argument order and type.
-                                if (*nthArgOrder == ',' || *nthArgOrder == '\0') nthArgOrder = argOrder;
-                                if (*nthArgType == ',' || *nthArgType == '\0') nthArgType = argType;
-
                                 AppendTypeName(s, nthArgOrder, nthArgType, argDim0, dim1); // Add arguments
                             }
                             
                             s.append(");\n");            // close paren and trailing semicolon
-                        }
-                    }
-                }
+                        } // dim 1 loop
+                    } // dim 0 loop
+                } // arg type loop
 
                 // skip over special characters
-                if (isTexture)
+                if (isTexture && isalpha(argOrder[1]))
                     ++argOrder;
                 if (isdigit(argOrder[1]))  
                     ++argOrder;
-            }
+            } // arg order loop
             
             if (intrinsic.stage == EShLangAll) // common builtins are only added once.
                 break;
@@ -916,12 +1069,26 @@
     // Texture methods
     symbolTable.relateToOperator("Sample",                      EOpMethodSample);
     symbolTable.relateToOperator("SampleBias",                  EOpMethodSampleBias);
-    // symbolTable.relateToOperator("SampleCmp",                   EOpMethodSampleCmp);
-    // symbolTable.relateToOperator("SampleCmpLevelZero",          EOpMethodSampleCmpLevelZero);
+    symbolTable.relateToOperator("SampleCmp",                   EOpMethodSampleCmp);
+    symbolTable.relateToOperator("SampleCmpLevelZero",          EOpMethodSampleCmpLevelZero);
     symbolTable.relateToOperator("SampleGrad",                  EOpMethodSampleGrad);
-    // symbolTable.relateToOperator("SampleLevel",                 EOpMethodSampleLevel);
-    // symbolTable.relateToOperator("Load",                        EOpMethodLoad);
+    symbolTable.relateToOperator("SampleLevel",                 EOpMethodSampleLevel);
+    symbolTable.relateToOperator("Load",                        EOpMethodLoad);
     symbolTable.relateToOperator("GetDimensions",               EOpMethodGetDimensions);
+    symbolTable.relateToOperator("GetSamplePosition",           EOpMethodGetSamplePosition);
+    symbolTable.relateToOperator("Gather",                      EOpMethodGather);
+    symbolTable.relateToOperator("CalculateLevelOfDetail",      EOpMethodCalculateLevelOfDetail);
+    symbolTable.relateToOperator("CalculateLevelOfDetailUnclamped", EOpMethodCalculateLevelOfDetailUnclamped);
+
+    // SM5 Texture methods
+    symbolTable.relateToOperator("GatherRed",                   EOpMethodGatherRed);
+    symbolTable.relateToOperator("GatherGreen",                 EOpMethodGatherGreen);
+    symbolTable.relateToOperator("GatherBlue",                  EOpMethodGatherBlue);
+    symbolTable.relateToOperator("GatherAlpha",                 EOpMethodGatherAlpha);
+    symbolTable.relateToOperator("GatherCmpRed",                EOpMethodGatherCmpRed);
+    symbolTable.relateToOperator("GatherCmpGreen",              EOpMethodGatherCmpGreen);
+    symbolTable.relateToOperator("GatherCmpBlue",               EOpMethodGatherCmpBlue);
+    symbolTable.relateToOperator("GatherCmpAlpha",              EOpMethodGatherCmpAlpha);
 }
 
 //
diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp
index 8a4eb73..da39321 100755
--- a/hlsl/hlslScanContext.cpp
+++ b/hlsl/hlslScanContext.cpp
@@ -258,6 +258,8 @@
     (*KeywordMap)["Texture2DMSArray"] =        EHTokTexture2DMSarray;
 
     (*KeywordMap)["struct"] =                  EHTokStruct;
+    (*KeywordMap)["cbuffer"] =                 EHTokCBuffer;
+    (*KeywordMap)["tbuffer"] =                 EHTokTBuffer;
     (*KeywordMap)["typedef"] =                 EHTokTypedef;
 
     (*KeywordMap)["true"] =                    EHTokBoolConstant;
@@ -574,6 +576,9 @@
     // variable, user type, ...
     case EHTokStruct:
     case EHTokTypedef:
+    case EHTokCBuffer:
+    case EHTokTBuffer:
+        return keyword;
 
     case EHTokBoolConstant:
         if (strcmp("true", tokenText) == 0)
diff --git a/hlsl/hlslTokenStream.cpp b/hlsl/hlslTokenStream.cpp
index 47f779a..c915e0b 100755
--- a/hlsl/hlslTokenStream.cpp
+++ b/hlsl/hlslTokenStream.cpp
@@ -39,27 +39,29 @@
 
 void HlslTokenStream::pushPreToken(const HlslToken& tok)
 {
-    assert(preTokenStackSize == 0);
-    preTokenStack = tok;
-    ++preTokenStackSize;
+    assert(preTokenStackSize < tokenBufferSize);
+    preTokenStack[preTokenStackSize++] = tok;
 }
 
 HlslToken HlslTokenStream::popPreToken()
 {
-    assert(preTokenStackSize == 1);
-    --preTokenStackSize;
+    assert(preTokenStackSize > 0);
 
-    return preTokenStack;
+    return preTokenStack[--preTokenStackSize];
 }
 
 void HlslTokenStream::pushTokenBuffer(const HlslToken& tok)
 {
-    tokenBuffer = tok;
+    tokenBuffer[tokenBufferPos] = tok;
+    tokenBufferPos = (tokenBufferPos+1) % tokenBufferSize;
 }
 
 HlslToken HlslTokenStream::popTokenBuffer()
 {
-    return tokenBuffer;
+    // Back up
+    tokenBufferPos = (tokenBufferPos+tokenBufferSize-1) % tokenBufferSize;
+
+    return tokenBuffer[tokenBufferPos];
 }
 
 // Load 'token' with the next token in the stream of tokens.
diff --git a/hlsl/hlslTokenStream.h b/hlsl/hlslTokenStream.h
index 12c2a2a..ec42889 100755
--- a/hlsl/hlslTokenStream.h
+++ b/hlsl/hlslTokenStream.h
@@ -43,7 +43,7 @@
     class HlslTokenStream {
     public:
         explicit HlslTokenStream(HlslScanContext& scanner)
-            : scanner(scanner), preTokenStackSize(0) { }
+            : scanner(scanner), preTokenStackSize(0), tokenBufferPos(0) { }
         virtual ~HlslTokenStream() { }
 
     public:
@@ -62,20 +62,24 @@
 
         HlslScanContext& scanner;         // lexical scanner, to get next token
 
+        // This is the number of tokens we can recedeToken() over.
+        static const int tokenBufferSize = 2;
+
         // Previously scanned tokens, returned for future advances,
         // so logically in front of the token stream.
         // Is logically a stack; needs last in last out semantics.
-        // Currently implemented as a stack of size 1.
-        HlslToken preTokenStack;          
+        // Currently implemented as a stack of size 2.
+        HlslToken preTokenStack[tokenBufferSize];
         int preTokenStackSize;
         void pushPreToken(const HlslToken&);
         HlslToken popPreToken();
 
-        // Previously scanned tokens, not yet return for future advances,
+        // Previously scanned tokens, not yet returned for future advances,
         // but available for that.
         // Is logically a fifo for normal advances, and a stack for recession.
-        // Currently implemented with an intrinsic size of 1.
-        HlslToken tokenBuffer;
+        // Currently implemented with an intrinsic size of 2.
+        HlslToken tokenBuffer[tokenBufferSize];
+        int tokenBufferPos;
         void pushTokenBuffer(const HlslToken&);
         HlslToken popTokenBuffer();
     };
diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h
index 5a5266a..d72b2cd 100755
--- a/hlsl/hlslTokens.h
+++ b/hlsl/hlslTokens.h
@@ -212,6 +212,8 @@
     EHTokIdentifier,
     EHTokTypeName,
     EHTokStruct,
+    EHTokCBuffer,
+    EHTokTBuffer,
     EHTokTypedef,
 
     // constant