Merge remote-tracking branch 'aosp/upstream-master' into update-shaderc

Includes the following:
8ce6e2b Fix non-Windows build error.
f97f2ce HLSL: Support the constructor idiom "(struct type)0".
98ad485 HLSL: Support {...} initializer lists that are too short.
1c98904 Fix crash by returning early from finalCheck() if there is no tree to process.
5307eb2 Non-functional: Change a bunch of 0 to nullptr.
509c421 Non-functional: Fix typos.
e50dc53 Warn on HLSL not finding entry point. Issue #588.
517fe7a Non-functional: Rename some entry-point variables to entryPoint, not main.
fca8262 Always correctly terminate main. Issue #588, PR #600.
1c573fb Merge pull request #601 from BearishSun/master
e122f05 Merge pull request #599 from steve-lunarg/gs
6e848da Merge pull request #596 from steve-lunarg/hlsl-intrinsic-parsing
d347794 Merge pull request #597 from steve-lunarg/sample-keyword-fix
32c294e Adding a way to retrieve vertex attribute TType using TProgram reflection API (required in order to query location attributes).
f49cdf4 WIP: HLSL: Add GS support
75fd223 HLSL: allow "sample" as a valid identifier.
0842dbb HLSL: use HLSL parser to parse HLSL intrinsic prototypes, enable int/bool mats
fabe7d6 Test results: Fix incorrect test result caused by parallel development. Issue #594.
0bf06d3 Merge pull request #576 from steve-lunarg/uav-registers
20b030a Merge pull request #592 from ChrisGautier/barrier-wg
c3f1cdf GLSL: The execution scope for barriers should be Workgroup.
84d11e1 Merge pull request #583 from null77/fix-unref-warning
610ff83 Merge pull request #589 from steve-lunarg/vec1-promotion-fix
d9cb832 HLSL: allow promotion from 1-vector types to scalars, e.g, float<-float1
e69e196 Merge pull request #584 from steve-lunarg/attribute-expressions
a22f7db HLSL: Allow expressions in attributes
57cb69a Fix unrefenced variable warning with AMD_EXTENSIONS disabled.
d3f1122 Whole stack: Fix stale types in the AST linker object nodes, fixing #557.
9088be4 Add UAV (image) binding offset and HLSL register support
e5e58cf Merge pull request #575 from steve-lunarg/iomap-warning-fix
5b2d667 Fix build warnings in remapper, re-indent for glslang standard
89df3c2 Merge pull request #572 from steve-lunarg/numthreads
1061acc Merge pull request #562 from TiemoJung/io_map_control_publish
909b8af Merge pull request #570 from steve-lunarg/mintypes
cf35b17 Merge pull request #574 from dneto0/android-has-no-std-stoi
e301f67 Use std::atoi instead of std::stoi
3226b08 HLSL: Add min*{float,int,uint} types
1868b14 HLSL: implement numthreads for compute shaders
e19e68d Merge pull request #571 from baldurk/explicit-lambda-returns
ca73570 Add explicit lambda return types, for compilers without C++14 support
c2016a5 New uniform mapping handling
9507885 Merge pull request #560 from jeremy-lunarg/pragmas
5163446 Merge pull request #568 from steve-lunarg/logicalop-fix
aba4440 Merge pull request #567 from steve-lunarg/compare-fix
850ac06 Merge pull request #561 from jeremy-lunarg/unused
27939ca HLSL: allow component-wise operations for logical || and &&.
85244d7 HLSL: Enable component-wise vector comparisons from operators
0d628c1 Merge pull request #565 from mre4ce/master
4e3dd20 WIP: avoid strtok
c8e60e2 WIP: apply unused variable
d130075 update
2f4c832 Merge remote-tracking branch 'upstream/master'
8e1e717 fixed MSVC 2015 compile warnings
3fc1543 Merge pull request #559 from steve-lunarg/samplecmp-fix
04e2dc1 Merge pull request #558 from steve-lunarg/image-atomics
921d315 Merge pull request #555 from steve-lunarg/promotion-fixes
720e89b Merge pull request #556 from dneto0/guard-amd-enums
6b59668 HLSL: fix defect in EOpMethodSampleCmp* texture decomposition
6cb1637 Move promote methods to TIntermediate class
2232236 HLSL: phase 4 of rwtexture support: add image atomics
bb5c02f Add missing guard to code that uses AMD extensions
e5921f1 HLSL: Fix unary and binary operator type conversion issues
e07c703 Merge remote-tracking branch 'upstream/master'
5a00501 Merge remote-tracking branch 'upstream/master'
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Test: checkbuild.py on Linux x86; unit tests on Windows
Change-Id: I9f2774801b1feeaf26ad9577507570f61a2ecff5
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 49bb0a1..7abd04d 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -99,7 +99,7 @@
 class TGlslangToSpvTraverser : public glslang::TIntermTraverser {
 public:
     TGlslangToSpvTraverser(const glslang::TIntermediate*, spv::SpvBuildLogger* logger);
-    virtual ~TGlslangToSpvTraverser();
+    virtual ~TGlslangToSpvTraverser() { }
 
     bool visitAggregate(glslang::TVisit, glslang::TIntermAggregate*);
     bool visitBinary(glslang::TVisit, glslang::TIntermBinary*);
@@ -111,6 +111,7 @@
     bool visitLoop(glslang::TVisit, glslang::TIntermLoop*);
     bool visitBranch(glslang::TVisit visit, glslang::TIntermBranch*);
 
+    void finishSpv();
     void dumpSpv(std::vector<unsigned int>& out);
 
 protected:
@@ -181,8 +182,8 @@
 
     // There is a 1:1 mapping between a spv builder and a module; this is thread safe
     spv::Builder builder;
-    bool inMain;
-    bool mainTerminated;
+    bool inEntryPoint;
+    bool entryPointTerminated;
     bool linkageOnly;                  // true when visiting the set of objects in the AST present only for establishing interface, whether or not they were statically used
     std::set<spv::Id> iOSet;           // all input/output variables from either static use or declaration of interface
     const glslang::TIntermediate* glslangIntermediate;
@@ -768,7 +769,7 @@
     : TIntermTraverser(true, false, true), shaderEntry(nullptr), currentFunction(nullptr),
       sequenceDepth(0), logger(buildLogger),
       builder((glslang::GetKhronosToolId() << 16) | GeneratorVersion, logger),
-      inMain(false), mainTerminated(false), linkageOnly(false),
+      inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
       glslangIntermediate(glslangIntermediate)
 {
     spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
@@ -896,27 +897,27 @@
     default:
         break;
     }
-
 }
 
-// Finish everything and dump
-void TGlslangToSpvTraverser::dumpSpv(std::vector<unsigned int>& out)
+// Finish creating SPV, after the traversal is complete.
+void TGlslangToSpvTraverser::finishSpv()
 {
+    if (! entryPointTerminated) {
+        builder.setBuildPoint(shaderEntry->getLastBlock());
+        builder.leaveFunction();
+    }
+
     // finish off the entry-point SPV instruction by adding the Input/Output <id>
     for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it)
         entryPoint->addIdOperand(*it);
 
     builder.eliminateDeadDecorations();
-    builder.dump(out);
 }
 
-TGlslangToSpvTraverser::~TGlslangToSpvTraverser()
+// Write the SPV into 'out'.
+void TGlslangToSpvTraverser::dumpSpv(std::vector<unsigned int>& out)
 {
-    if (! mainTerminated) {
-        spv::Block* lastMainBlock = shaderEntry->getLastBlock();
-        builder.setBuildPoint(lastMainBlock);
-        builder.leaveFunction();
-    }
+    builder.dump(out);
 }
 
 //
@@ -1382,17 +1383,17 @@
     case glslang::EOpFunction:
         if (visit == glslang::EvPreVisit) {
             if (isShaderEntryPoint(node)) {
-                inMain = true;
+                inEntryPoint = true;
                 builder.setBuildPoint(shaderEntry->getLastBlock());
                 currentFunction = shaderEntry;
             } else {
                 handleFunctionEntry(node);
             }
         } else {
-            if (inMain)
-                mainTerminated = true;
+            if (inEntryPoint)
+                entryPointTerminated = true;
             builder.leaveFunction();
-            inMain = false;
+            inEntryPoint = false;
         }
 
         return true;
@@ -4118,11 +4119,9 @@
 // Create group invocation operations.
 spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
 #ifdef AMD_EXTENSIONS
+    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
     bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#else
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
 #endif
 
     spv::Op opCode = spv::OpNop;
@@ -4133,10 +4132,12 @@
         builder.addCapability(spv::CapabilitySubgroupBallotKHR);
     } else {
         builder.addCapability(spv::CapabilityGroups);
+#ifdef AMD_EXTENSIONS
         if (op == glslang::EOpMinInvocationsNonUniform ||
             op == glslang::EOpMaxInvocationsNonUniform ||
             op == glslang::EOpAddInvocationsNonUniform)
             builder.addExtension(spv::E_SPV_AMD_shader_ballot);
+#endif
 
         spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
 #ifdef AMD_EXTENSIONS
@@ -4597,7 +4598,7 @@
         builder.createNoResultOp(spv::OpEndPrimitive);
         return 0;
     case glslang::EOpBarrier:
-        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
         return 0;
     case glslang::EOpMemoryBarrier:
         builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory);
@@ -5120,9 +5121,8 @@
     glslang::GetThreadPoolAllocator().push();
 
     TGlslangToSpvTraverser it(&intermediate, logger);
-
     root->traverse(&it);
-
+    it.finishSpv();
     it.dumpSpv(spirv);
 
     glslang::GetThreadPoolAllocator().pop();
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
index 97b280c..428cfb6 100644
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -32,6 +32,10 @@
 //ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 //POSSIBILITY OF SUCH DAMAGE.
 
+#if _MSC_VER >= 1900
+    #pragma warning(disable : 4464) // relative include path contains '..'
+#endif
+
 #include "../glslang/Include/intermediate.h"
 
 #include <string>
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 4703edc..04b0f04 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -64,7 +64,7 @@
     builderNumber(magicNumber),
     buildPoint(0),
     uniqueId(0),
-    mainFunction(0),
+    entryPointFunction(0),
     generatingOpCodeForSpecConst(false),
     logger(buildLogger)
 {
@@ -967,15 +967,15 @@
 // Comments in header
 Function* Builder::makeEntryPoint(const char* entryPoint)
 {
-    assert(! mainFunction);
+    assert(! entryPointFunction);
 
     Block* entry;
     std::vector<Id> params;
     std::vector<Decoration> precisions;
 
-    mainFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, precisions, &entry);
+    entryPointFunction = makeFunctionEntry(NoPrecision, makeVoidType(), entryPoint, params, precisions, &entry);
 
-    return mainFunction;
+    return entryPointFunction;
 }
 
 // Comments in header
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 0e8d9ca..e8524b2 100755
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -564,7 +564,7 @@
     Module module;
     Block* buildPoint;
     Id uniqueId;
-    Function* mainFunction;
+    Function* entryPointFunction;
     bool generatingOpCodeForSpecConst;
     AccessChain accessChain;
 
diff --git a/StandAlone/ResourceLimits.cpp b/StandAlone/ResourceLimits.cpp
index 8a5e6f3..e22ec80 100644
--- a/StandAlone/ResourceLimits.cpp
+++ b/StandAlone/ResourceLimits.cpp
@@ -35,6 +35,7 @@
 #include <cstdlib>
 #include <cstring>
 #include <sstream>
+#include <cctype>
 
 #include "ResourceLimits.h"
 
@@ -240,208 +241,217 @@
 
 void DecodeResourceLimits(TBuiltInResource* resources, char* config)
 {
-    const char* delims = " \t\n\r";
-#pragma warning(suppress: 4996)
-    const char* token = strtok(config, delims);
-    while (token) {
-#pragma warning(suppress: 4996)
-        const char* valueStr = strtok(0, delims);
-        if (valueStr == 0 || ! (valueStr[0] == '-' || (valueStr[0] >= '0' && valueStr[0] <= '9'))) {
-            printf("Error: '%s' bad .conf file.  Each name must be followed by one number.\n", valueStr ? valueStr : "");
+    static const char* delims = " \t\n\r";
+
+    size_t pos     = 0;
+    std::string configStr(config);
+
+    while ((pos = configStr.find_first_not_of(delims, pos)) != std::string::npos) {
+        const size_t token_s = pos;
+        const size_t token_e = configStr.find_first_of(delims, token_s);
+        const size_t value_s = configStr.find_first_not_of(delims, token_e);
+        const size_t value_e = configStr.find_first_of(delims, value_s);
+        pos = value_e;
+
+        // Faster to use compare(), but prefering readability.
+        const std::string tokenStr = configStr.substr(token_s, token_e-token_s);
+        const std::string valueStr = configStr.substr(value_s, value_e-value_s);
+
+        if (value_s == std::string::npos || ! (valueStr[0] == '-' || isdigit(valueStr[0]))) {
+            printf("Error: '%s' bad .conf file.  Each name must be followed by one number.\n",
+                   valueStr.c_str());
             return;
         }
-        int value = atoi(valueStr);
 
-        if (strcmp(token, "MaxLights") == 0)
+        const int value = std::atoi(valueStr.c_str());
+
+        if (tokenStr == "MaxLights")
             resources->maxLights = value;
-        else if (strcmp(token, "MaxClipPlanes") == 0)
+        else if (tokenStr == "MaxClipPlanes")
             resources->maxClipPlanes = value;
-        else if (strcmp(token, "MaxTextureUnits") == 0)
+        else if (tokenStr == "MaxTextureUnits")
             resources->maxTextureUnits = value;
-        else if (strcmp(token, "MaxTextureCoords") == 0)
+        else if (tokenStr == "MaxTextureCoords")
             resources->maxTextureCoords = value;
-        else if (strcmp(token, "MaxVertexAttribs") == 0)
+        else if (tokenStr == "MaxVertexAttribs")
             resources->maxVertexAttribs = value;
-        else if (strcmp(token, "MaxVertexUniformComponents") == 0)
+        else if (tokenStr == "MaxVertexUniformComponents")
             resources->maxVertexUniformComponents = value;
-        else if (strcmp(token, "MaxVaryingFloats") == 0)
+        else if (tokenStr == "MaxVaryingFloats")
             resources->maxVaryingFloats = value;
-        else if (strcmp(token, "MaxVertexTextureImageUnits") == 0)
+        else if (tokenStr == "MaxVertexTextureImageUnits")
             resources->maxVertexTextureImageUnits = value;
-        else if (strcmp(token, "MaxCombinedTextureImageUnits") == 0)
+        else if (tokenStr == "MaxCombinedTextureImageUnits")
             resources->maxCombinedTextureImageUnits = value;
-        else if (strcmp(token, "MaxTextureImageUnits") == 0)
+        else if (tokenStr == "MaxTextureImageUnits")
             resources->maxTextureImageUnits = value;
-        else if (strcmp(token, "MaxFragmentUniformComponents") == 0)
+        else if (tokenStr == "MaxFragmentUniformComponents")
             resources->maxFragmentUniformComponents = value;
-        else if (strcmp(token, "MaxDrawBuffers") == 0)
+        else if (tokenStr == "MaxDrawBuffers")
             resources->maxDrawBuffers = value;
-        else if (strcmp(token, "MaxVertexUniformVectors") == 0)
+        else if (tokenStr == "MaxVertexUniformVectors")
             resources->maxVertexUniformVectors = value;
-        else if (strcmp(token, "MaxVaryingVectors") == 0)
+        else if (tokenStr == "MaxVaryingVectors")
             resources->maxVaryingVectors = value;
-        else if (strcmp(token, "MaxFragmentUniformVectors") == 0)
+        else if (tokenStr == "MaxFragmentUniformVectors")
             resources->maxFragmentUniformVectors = value;
-        else if (strcmp(token, "MaxVertexOutputVectors") == 0)
+        else if (tokenStr == "MaxVertexOutputVectors")
             resources->maxVertexOutputVectors = value;
-        else if (strcmp(token, "MaxFragmentInputVectors") == 0)
+        else if (tokenStr == "MaxFragmentInputVectors")
             resources->maxFragmentInputVectors = value;
-        else if (strcmp(token, "MinProgramTexelOffset") == 0)
+        else if (tokenStr == "MinProgramTexelOffset")
             resources->minProgramTexelOffset = value;
-        else if (strcmp(token, "MaxProgramTexelOffset") == 0)
+        else if (tokenStr == "MaxProgramTexelOffset")
             resources->maxProgramTexelOffset = value;
-        else if (strcmp(token, "MaxClipDistances") == 0)
+        else if (tokenStr == "MaxClipDistances")
             resources->maxClipDistances = value;
-        else if (strcmp(token, "MaxComputeWorkGroupCountX") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupCountX")
             resources->maxComputeWorkGroupCountX = value;
-        else if (strcmp(token, "MaxComputeWorkGroupCountY") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupCountY")
             resources->maxComputeWorkGroupCountY = value;
-        else if (strcmp(token, "MaxComputeWorkGroupCountZ") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupCountZ")
             resources->maxComputeWorkGroupCountZ = value;
-        else if (strcmp(token, "MaxComputeWorkGroupSizeX") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupSizeX")
             resources->maxComputeWorkGroupSizeX = value;
-        else if (strcmp(token, "MaxComputeWorkGroupSizeY") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupSizeY")
             resources->maxComputeWorkGroupSizeY = value;
-        else if (strcmp(token, "MaxComputeWorkGroupSizeZ") == 0)
+        else if (tokenStr == "MaxComputeWorkGroupSizeZ")
             resources->maxComputeWorkGroupSizeZ = value;
-        else if (strcmp(token, "MaxComputeUniformComponents") == 0)
+        else if (tokenStr == "MaxComputeUniformComponents")
             resources->maxComputeUniformComponents = value;
-        else if (strcmp(token, "MaxComputeTextureImageUnits") == 0)
+        else if (tokenStr == "MaxComputeTextureImageUnits")
             resources->maxComputeTextureImageUnits = value;
-        else if (strcmp(token, "MaxComputeImageUniforms") == 0)
+        else if (tokenStr == "MaxComputeImageUniforms")
             resources->maxComputeImageUniforms = value;
-        else if (strcmp(token, "MaxComputeAtomicCounters") == 0)
+        else if (tokenStr == "MaxComputeAtomicCounters")
             resources->maxComputeAtomicCounters = value;
-        else if (strcmp(token, "MaxComputeAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxComputeAtomicCounterBuffers")
             resources->maxComputeAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxVaryingComponents") == 0)
+        else if (tokenStr == "MaxVaryingComponents")
             resources->maxVaryingComponents = value;
-        else if (strcmp(token, "MaxVertexOutputComponents") == 0)
+        else if (tokenStr == "MaxVertexOutputComponents")
             resources->maxVertexOutputComponents = value;
-        else if (strcmp(token, "MaxGeometryInputComponents") == 0)
+        else if (tokenStr == "MaxGeometryInputComponents")
             resources->maxGeometryInputComponents = value;
-        else if (strcmp(token, "MaxGeometryOutputComponents") == 0)
+        else if (tokenStr == "MaxGeometryOutputComponents")
             resources->maxGeometryOutputComponents = value;
-        else if (strcmp(token, "MaxFragmentInputComponents") == 0)
+        else if (tokenStr == "MaxFragmentInputComponents")
             resources->maxFragmentInputComponents = value;
-        else if (strcmp(token, "MaxImageUnits") == 0)
+        else if (tokenStr == "MaxImageUnits")
             resources->maxImageUnits = value;
-        else if (strcmp(token, "MaxCombinedImageUnitsAndFragmentOutputs") == 0)
+        else if (tokenStr == "MaxCombinedImageUnitsAndFragmentOutputs")
             resources->maxCombinedImageUnitsAndFragmentOutputs = value;
-        else if (strcmp(token, "MaxCombinedShaderOutputResources") == 0)
+        else if (tokenStr == "MaxCombinedShaderOutputResources")
             resources->maxCombinedShaderOutputResources = value;
-        else if (strcmp(token, "MaxImageSamples") == 0)
+        else if (tokenStr == "MaxImageSamples")
             resources->maxImageSamples = value;
-        else if (strcmp(token, "MaxVertexImageUniforms") == 0)
+        else if (tokenStr == "MaxVertexImageUniforms")
             resources->maxVertexImageUniforms = value;
-        else if (strcmp(token, "MaxTessControlImageUniforms") == 0)
+        else if (tokenStr == "MaxTessControlImageUniforms")
             resources->maxTessControlImageUniforms = value;
-        else if (strcmp(token, "MaxTessEvaluationImageUniforms") == 0)
+        else if (tokenStr == "MaxTessEvaluationImageUniforms")
             resources->maxTessEvaluationImageUniforms = value;
-        else if (strcmp(token, "MaxGeometryImageUniforms") == 0)
+        else if (tokenStr == "MaxGeometryImageUniforms")
             resources->maxGeometryImageUniforms = value;
-        else if (strcmp(token, "MaxFragmentImageUniforms") == 0)
+        else if (tokenStr == "MaxFragmentImageUniforms")
             resources->maxFragmentImageUniforms = value;
-        else if (strcmp(token, "MaxCombinedImageUniforms") == 0)
+        else if (tokenStr == "MaxCombinedImageUniforms")
             resources->maxCombinedImageUniforms = value;
-        else if (strcmp(token, "MaxGeometryTextureImageUnits") == 0)
+        else if (tokenStr == "MaxGeometryTextureImageUnits")
             resources->maxGeometryTextureImageUnits = value;
-        else if (strcmp(token, "MaxGeometryOutputVertices") == 0)
+        else if (tokenStr == "MaxGeometryOutputVertices")
             resources->maxGeometryOutputVertices = value;
-        else if (strcmp(token, "MaxGeometryTotalOutputComponents") == 0)
+        else if (tokenStr == "MaxGeometryTotalOutputComponents")
             resources->maxGeometryTotalOutputComponents = value;
-        else if (strcmp(token, "MaxGeometryUniformComponents") == 0)
+        else if (tokenStr == "MaxGeometryUniformComponents")
             resources->maxGeometryUniformComponents = value;
-        else if (strcmp(token, "MaxGeometryVaryingComponents") == 0)
+        else if (tokenStr == "MaxGeometryVaryingComponents")
             resources->maxGeometryVaryingComponents = value;
-        else if (strcmp(token, "MaxTessControlInputComponents") == 0)
+        else if (tokenStr == "MaxTessControlInputComponents")
             resources->maxTessControlInputComponents = value;
-        else if (strcmp(token, "MaxTessControlOutputComponents") == 0)
+        else if (tokenStr == "MaxTessControlOutputComponents")
             resources->maxTessControlOutputComponents = value;
-        else if (strcmp(token, "MaxTessControlTextureImageUnits") == 0)
+        else if (tokenStr == "MaxTessControlTextureImageUnits")
             resources->maxTessControlTextureImageUnits = value;
-        else if (strcmp(token, "MaxTessControlUniformComponents") == 0)
+        else if (tokenStr == "MaxTessControlUniformComponents")
             resources->maxTessControlUniformComponents = value;
-        else if (strcmp(token, "MaxTessControlTotalOutputComponents") == 0)
+        else if (tokenStr == "MaxTessControlTotalOutputComponents")
             resources->maxTessControlTotalOutputComponents = value;
-        else if (strcmp(token, "MaxTessEvaluationInputComponents") == 0)
+        else if (tokenStr == "MaxTessEvaluationInputComponents")
             resources->maxTessEvaluationInputComponents = value;
-        else if (strcmp(token, "MaxTessEvaluationOutputComponents") == 0)
+        else if (tokenStr == "MaxTessEvaluationOutputComponents")
             resources->maxTessEvaluationOutputComponents = value;
-        else if (strcmp(token, "MaxTessEvaluationTextureImageUnits") == 0)
+        else if (tokenStr == "MaxTessEvaluationTextureImageUnits")
             resources->maxTessEvaluationTextureImageUnits = value;
-        else if (strcmp(token, "MaxTessEvaluationUniformComponents") == 0)
+        else if (tokenStr == "MaxTessEvaluationUniformComponents")
             resources->maxTessEvaluationUniformComponents = value;
-        else if (strcmp(token, "MaxTessPatchComponents") == 0)
+        else if (tokenStr == "MaxTessPatchComponents")
             resources->maxTessPatchComponents = value;
-        else if (strcmp(token, "MaxPatchVertices") == 0)
+        else if (tokenStr == "MaxPatchVertices")
             resources->maxPatchVertices = value;
-        else if (strcmp(token, "MaxTessGenLevel") == 0)
+        else if (tokenStr == "MaxTessGenLevel")
             resources->maxTessGenLevel = value;
-        else if (strcmp(token, "MaxViewports") == 0)
+        else if (tokenStr == "MaxViewports")
             resources->maxViewports = value;
-        else if (strcmp(token, "MaxVertexAtomicCounters") == 0)
+        else if (tokenStr == "MaxVertexAtomicCounters")
             resources->maxVertexAtomicCounters = value;
-        else if (strcmp(token, "MaxTessControlAtomicCounters") == 0)
+        else if (tokenStr == "MaxTessControlAtomicCounters")
             resources->maxTessControlAtomicCounters = value;
-        else if (strcmp(token, "MaxTessEvaluationAtomicCounters") == 0)
+        else if (tokenStr == "MaxTessEvaluationAtomicCounters")
             resources->maxTessEvaluationAtomicCounters = value;
-        else if (strcmp(token, "MaxGeometryAtomicCounters") == 0)
+        else if (tokenStr == "MaxGeometryAtomicCounters")
             resources->maxGeometryAtomicCounters = value;
-        else if (strcmp(token, "MaxFragmentAtomicCounters") == 0)
+        else if (tokenStr == "MaxFragmentAtomicCounters")
             resources->maxFragmentAtomicCounters = value;
-        else if (strcmp(token, "MaxCombinedAtomicCounters") == 0)
+        else if (tokenStr == "MaxCombinedAtomicCounters")
             resources->maxCombinedAtomicCounters = value;
-        else if (strcmp(token, "MaxAtomicCounterBindings") == 0)
+        else if (tokenStr == "MaxAtomicCounterBindings")
             resources->maxAtomicCounterBindings = value;
-        else if (strcmp(token, "MaxVertexAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxVertexAtomicCounterBuffers")
             resources->maxVertexAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxTessControlAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxTessControlAtomicCounterBuffers")
             resources->maxTessControlAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxTessEvaluationAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxTessEvaluationAtomicCounterBuffers")
             resources->maxTessEvaluationAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxGeometryAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxGeometryAtomicCounterBuffers")
             resources->maxGeometryAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxFragmentAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxFragmentAtomicCounterBuffers")
             resources->maxFragmentAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxCombinedAtomicCounterBuffers") == 0)
+        else if (tokenStr == "MaxCombinedAtomicCounterBuffers")
             resources->maxCombinedAtomicCounterBuffers = value;
-        else if (strcmp(token, "MaxAtomicCounterBufferSize") == 0)
+        else if (tokenStr == "MaxAtomicCounterBufferSize")
             resources->maxAtomicCounterBufferSize = value;
-        else if (strcmp(token, "MaxTransformFeedbackBuffers") == 0)
+        else if (tokenStr == "MaxTransformFeedbackBuffers")
             resources->maxTransformFeedbackBuffers = value;
-        else if (strcmp(token, "MaxTransformFeedbackInterleavedComponents") == 0)
+        else if (tokenStr == "MaxTransformFeedbackInterleavedComponents")
             resources->maxTransformFeedbackInterleavedComponents = value;
-        else if (strcmp(token, "MaxCullDistances") == 0)
+        else if (tokenStr == "MaxCullDistances")
             resources->maxCullDistances = value;
-        else if (strcmp(token, "MaxCombinedClipAndCullDistances") == 0)
+        else if (tokenStr == "MaxCombinedClipAndCullDistances")
             resources->maxCombinedClipAndCullDistances = value;
-        else if (strcmp(token, "MaxSamples") == 0)
+        else if (tokenStr == "MaxSamples")
             resources->maxSamples = value;
-
-        else if (strcmp(token, "nonInductiveForLoops") == 0)
+        else if (tokenStr == "nonInductiveForLoops")
             resources->limits.nonInductiveForLoops = (value != 0);
-        else if (strcmp(token, "whileLoops") == 0)
+        else if (tokenStr == "whileLoops")
             resources->limits.whileLoops = (value != 0);
-        else if (strcmp(token, "doWhileLoops") == 0)
+        else if (tokenStr == "doWhileLoops")
             resources->limits.doWhileLoops = (value != 0);
-        else if (strcmp(token, "generalUniformIndexing") == 0)
+        else if (tokenStr == "generalUniformIndexing")
             resources->limits.generalUniformIndexing = (value != 0);
-        else if (strcmp(token, "generalAttributeMatrixVectorIndexing") == 0)
+        else if (tokenStr == "generalAttributeMatrixVectorIndexing")
             resources->limits.generalAttributeMatrixVectorIndexing = (value != 0);
-        else if (strcmp(token, "generalVaryingIndexing") == 0)
+        else if (tokenStr == "generalVaryingIndexing")
             resources->limits.generalVaryingIndexing = (value != 0);
-        else if (strcmp(token, "generalSamplerIndexing") == 0)
+        else if (tokenStr == "generalSamplerIndexing")
             resources->limits.generalSamplerIndexing = (value != 0);
-        else if (strcmp(token, "generalVariableIndexing") == 0)
+        else if (tokenStr == "generalVariableIndexing")
             resources->limits.generalVariableIndexing = (value != 0);
-        else if (strcmp(token, "generalConstantMatrixVectorIndexing") == 0)
+        else if (tokenStr == "generalConstantMatrixVectorIndexing")
             resources->limits.generalConstantMatrixVectorIndexing = (value != 0);
         else
-            printf("Warning: unrecognized limit (%s) in configuration file.\n", token);
+            printf("Warning: unrecognized limit (%s) in configuration file.\n", tokenStr.c_str());
 
-#pragma warning(suppress: 4996)
-        token = strtok(0, delims);
     }
 }
 
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 0ac72d3..377e7cb 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -164,6 +164,7 @@
 
 std::array<unsigned int, EShLangCount> baseSamplerBinding;
 std::array<unsigned int, EShLangCount> baseTextureBinding;
+std::array<unsigned int, EShLangCount> baseImageBinding;
 std::array<unsigned int, EShLangCount> baseUboBinding;
 
 //
@@ -252,6 +253,7 @@
 {
     baseSamplerBinding.fill(0);
     baseTextureBinding.fill(0);
+    baseImageBinding.fill(0);
     baseUboBinding.fill(0);
 
     ExecutableName = argv[0];
@@ -279,6 +281,10 @@
                                lowerword == "shift-texture-binding"  ||
                                lowerword == "stb") {
                         ProcessBindingBase(argc, argv, baseTextureBinding);
+                    } else if (lowerword == "shift-image-bindings" ||  // synonyms
+                               lowerword == "shift-image-binding"  ||
+                               lowerword == "sib") {
+                        ProcessBindingBase(argc, argv, baseImageBinding);
                     } else if (lowerword == "shift-ubo-bindings" ||  // synonyms
                                lowerword == "shift-ubo-binding"  ||
                                lowerword == "sub") {
@@ -544,6 +550,7 @@
 
         shader->setShiftSamplerBinding(baseSamplerBinding[compUnit.stage]);
         shader->setShiftTextureBinding(baseTextureBinding[compUnit.stage]);
+        shader->setShiftImageBinding(baseImageBinding[compUnit.stage]);
         shader->setShiftUboBinding(baseUboBinding[compUnit.stage]);
         shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
         shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0);
@@ -941,6 +948,9 @@
            "  --shift-texture-binding [stage] num     set base binding number for textures\n"
            "  --stb [stage] num                       synonym for --shift-texture-binding\n"
            "\n"
+           "  --shift-image-binding [stage] num       set base binding number for images (uav)\n"
+           "  --sib [stage] num                       synonym for --shift-image-binding\n"
+           "\n"
            "  --shift-UBO-binding [stage] num         set base binding number for UBOs\n"
            "  --sub [stage] num                       synonym for --shift-UBO-binding\n"
            "\n"
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index edd65ab..74a597f 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -393,13 +393,13 @@
 0:?     'a' (global 3-element array of mediump int)
 0:?     'uint' (global mediump int)
 0:?     'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:?     'f' (global mediump float)
+0:?     'f' (invariant global mediump float)
 0:?     'anon@0' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform mediump int x})
 0:?     'fa' (global implicitly-sized array of mediump float)
-0:?     'f13' (global mediump float)
+0:?     'f13' (invariant global mediump float)
 0:?     'fi' (invariant temp mediump float)
-0:?     'av' (smooth in mediump 4-component vector of float)
-0:?     'uv2' (uniform mediump 2-component vector of float)
+0:?     'av' (invariant smooth in mediump 4-component vector of float)
+0:?     'uv2' (invariant uniform mediump 2-component vector of float)
 0:?     'uv3' (invariant uniform mediump 3-component vector of float)
 0:?     'glob2D' (global lowp sampler2D)
 0:?     'vary2D' (smooth in lowp sampler2D)
@@ -731,13 +731,13 @@
 0:?     'a' (global 3-element array of mediump int)
 0:?     'uint' (global mediump int)
 0:?     'v' (smooth in 3-element array of mediump 4-component vector of float)
-0:?     'f' (global mediump float)
+0:?     'f' (invariant global mediump float)
 0:?     'anon@0' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform mediump int x})
 0:?     'fa' (global 1-element array of mediump float)
-0:?     'f13' (global mediump float)
+0:?     'f13' (invariant global mediump float)
 0:?     'fi' (invariant temp mediump float)
-0:?     'av' (smooth in mediump 4-component vector of float)
-0:?     'uv2' (uniform mediump 2-component vector of float)
+0:?     'av' (invariant smooth in mediump 4-component vector of float)
+0:?     'uv2' (invariant uniform mediump 2-component vector of float)
 0:?     'uv3' (invariant uniform mediump 3-component vector of float)
 0:?     'glob2D' (global lowp sampler2D)
 0:?     'vary2D' (smooth in lowp sampler2D)
diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out
index 73ced6a..18fb221 100644
--- a/Test/baseResults/120.vert.out
+++ b/Test/baseResults/120.vert.out
@@ -420,7 +420,6 @@
 0:?     'concall' (const float)
 0:?       0.295520
 0:?     'gl_TexCoord' (smooth out 35-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth out 35-element array of 4-component vector of float TexCoord)
 0:?     'c' (uniform int)
 0:?     'x' (in 2-component vector of int)
 0:?     'v2a' (in 2-component vector of float)
@@ -772,7 +771,6 @@
 0:?     'concall' (const float)
 0:?       0.295520
 0:?     'gl_TexCoord' (smooth out 35-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth out 35-element array of 4-component vector of float TexCoord)
 0:?     'c' (uniform int)
 0:?     'x' (in 2-component vector of int)
 0:?     'v2a' (in 2-component vector of float)
diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out
index b2b4dd0..a28908e 100644
--- a/Test/baseResults/130.frag.out
+++ b/Test/baseResults/130.frag.out
@@ -383,8 +383,7 @@
 0:?     'fnop' (noperspective in float)
 0:?     'gl_ClipDistance' (smooth in implicitly-sized array of float ClipDistance)
 0:?     'sampC' (uniform samplerCube)
-0:?     'gl_Color' (smooth in 4-component vector of float Color)
-0:?     'gl_Color' (flat in 4-component vector of float Color)
+0:?     'gl_Color' (in 4-component vector of float Color)
 0:?     'samp2D' (uniform sampler2D)
 0:?     'samp2DS' (uniform sampler2DShadow)
 0:?     'samp2DR' (uniform sampler2DRect)
@@ -759,8 +758,7 @@
 0:?     'fnop' (noperspective in float)
 0:?     'gl_ClipDistance' (smooth in 4-element array of float ClipDistance)
 0:?     'sampC' (uniform samplerCube)
-0:?     'gl_Color' (smooth in 4-component vector of float Color)
-0:?     'gl_Color' (flat in 4-component vector of float Color)
+0:?     'gl_Color' (in 4-component vector of float Color)
 0:?     'samp2D' (uniform sampler2D)
 0:?     'samp2DS' (uniform sampler2DShadow)
 0:?     'samp2DR' (uniform sampler2DRect)
diff --git a/Test/baseResults/140.frag.out b/Test/baseResults/140.frag.out
index fbeee83..38c3b9f 100644
--- a/Test/baseResults/140.frag.out
+++ b/Test/baseResults/140.frag.out
@@ -104,7 +104,6 @@
 0:?     'i' (smooth in 4-component vector of float)
 0:?     'o' (out 4-component vector of float)
 0:?     'gl_ClipDistance' (smooth in 5-element array of float ClipDistance)
-0:?     'gl_ClipDistance' (smooth in 5-element array of float ClipDistance)
 0:?     's' (smooth in structure{global float f})
 0:?     'patch' (global float)
 0:?     'vl' (layout(location=3 ) smooth in 4-component vector of float)
@@ -211,7 +210,6 @@
 0:?     'i' (smooth in 4-component vector of float)
 0:?     'o' (out 4-component vector of float)
 0:?     'gl_ClipDistance' (smooth in 5-element array of float ClipDistance)
-0:?     'gl_ClipDistance' (smooth in 5-element array of float ClipDistance)
 0:?     's' (smooth in structure{global float f})
 0:?     'patch' (global float)
 0:?     'vl' (layout(location=3 ) smooth in 4-component vector of float)
diff --git a/Test/baseResults/140.vert.out b/Test/baseResults/140.vert.out
index 634458c..365a0aa 100644
--- a/Test/baseResults/140.vert.out
+++ b/Test/baseResults/140.vert.out
@@ -124,10 +124,7 @@
 0:?     'locBad' (layout(location=9 ) in 4-component vector of float)
 0:?     'loc' (layout(location=9 ) in 4-component vector of float)
 0:?     'gl_PointSize' (gl_PointSize float PointSize)
-0:?     'gl_PointSize' (gl_PointSize float PointSize)
 0:?     'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
-0:?     'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
-0:?     'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:?     'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:?     's2dr' (uniform sampler2DRect)
 0:?     's2drs' (uniform sampler2DRectShadow)
@@ -254,10 +251,7 @@
 0:?     'locBad' (layout(location=9 ) in 4-component vector of float)
 0:?     'loc' (layout(location=9 ) in 4-component vector of float)
 0:?     'gl_PointSize' (gl_PointSize float PointSize)
-0:?     'gl_PointSize' (gl_PointSize float PointSize)
 0:?     'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
-0:?     'gl_ClipVertex' (gl_ClipVertex 4-component vector of float ClipVertex)
-0:?     'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:?     'gl_FogFragCoord' (smooth out float FogFragCoord)
 0:?     's2dr' (uniform sampler2DRect)
 0:?     's2drs' (uniform sampler2DRectShadow)
diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out
index 082a827..0972fdc 100644
--- a/Test/baseResults/150.frag.out
+++ b/Test/baseResults/150.frag.out
@@ -108,7 +108,6 @@
 0:49        'gl_PrimitiveID' (flat in int PrimitiveID)
 0:?   Linker Objects
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' (smooth in 4-component vector of float)
 0:?     's' (smooth in structure{global float f})
 0:?     'patch' (global float)
@@ -228,7 +227,6 @@
 0:49        'gl_PrimitiveID' (flat in int PrimitiveID)
 0:?   Linker Objects
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' (smooth in 4-component vector of float)
 0:?     's' (smooth in structure{global float f})
 0:?     'patch' (global float)
diff --git a/Test/baseResults/300.vert.out b/Test/baseResults/300.vert.out
index ecfa3d5..d35929f 100644
--- a/Test/baseResults/300.vert.out
+++ b/Test/baseResults/300.vert.out
@@ -308,9 +308,9 @@
 0:?     'badsize2' (global implicitly-sized array of highp float)
 0:?     'ubInst' (layout(column_major shared ) uniform implicitly-sized array of block{layout(column_major shared ) uniform implicitly-sized array of highp int a})
 0:?     'okayA' (global 2-element array of highp float)
-0:?     'newV' (smooth out highp 3-component vector of float)
-0:?     'invIn' (in highp 4-component vector of float)
-0:?     's2' (smooth out structure{global highp 3-component vector of float c, global highp float f})
+0:?     'newV' (invariant smooth out highp 3-component vector of float)
+0:?     'invIn' (invariant in highp 4-component vector of float)
+0:?     's2' (invariant smooth out structure{global highp 3-component vector of float c, global highp float f})
 0:?     's3' (invariant smooth out structure{global highp 3-component vector of float c, global highp float f})
 0:?     'a' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform highp float f})
 0:?     'anon@0' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform bool b23})
@@ -592,9 +592,9 @@
 0:?     'badsize2' (global 1-element array of highp float)
 0:?     'ubInst' (layout(column_major shared ) uniform 1-element array of block{layout(column_major shared ) uniform 1-element array of highp int a})
 0:?     'okayA' (global 2-element array of highp float)
-0:?     'newV' (smooth out highp 3-component vector of float)
-0:?     'invIn' (in highp 4-component vector of float)
-0:?     's2' (smooth out structure{global highp 3-component vector of float c, global highp float f})
+0:?     'newV' (invariant smooth out highp 3-component vector of float)
+0:?     'invIn' (invariant in highp 4-component vector of float)
+0:?     's2' (invariant smooth out structure{global highp 3-component vector of float c, global highp float f})
 0:?     's3' (invariant smooth out structure{global highp 3-component vector of float c, global highp float f})
 0:?     'a' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform highp float f})
 0:?     'anon@0' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform bool b23})
diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out
index 6cfd3f4..66d6ae0 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -963,7 +963,6 @@
 0:?     'aliased' (layout(location=13 ) smooth in mediump 4-component vector of float)
 0:?     'arrayedInst' (in 4-element array of block{in mediump float f})
 0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 0:?     'inf' (smooth in mediump 2-component vector of float)
 0:?     'ing' (smooth in mediump 2-component vector of float)
 0:?     'offsets' (uniform 4-element array of mediump 2-component vector of int)
@@ -1844,7 +1843,6 @@
 0:?     'aliased' (layout(location=13 ) smooth in mediump 4-component vector of float)
 0:?     'arrayedInst' (in 4-element array of block{in mediump float f})
 0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 0:?     'inf' (smooth in mediump 2-component vector of float)
 0:?     'ing' (smooth in mediump 2-component vector of float)
 0:?     'offsets' (uniform 4-element array of mediump 2-component vector of int)
diff --git a/Test/baseResults/310AofA.vert.out b/Test/baseResults/310AofA.vert.out
index 83f105c..28592d5 100644
--- a/Test/baseResults/310AofA.vert.out
+++ b/Test/baseResults/310AofA.vert.out
@@ -5,7 +5,7 @@
 ERROR: 0:28: '[]' : only outermost dimension of an array of arrays can be implicitly sized 
 ERROR: 0:40: '' : array size required 
 ERROR: 0:48: 'constructor' : constructing non-array constituent from array argument 
-ERROR: 0:49: 'constructior' : array constructor argument not correct type to construct array element 
+ERROR: 0:49: 'constructor' : array constructor argument not correct type to construct array element 
 ERROR: 0:62: '[' :  array index out of range '4'
 ERROR: 0:78: 'assign' :  cannot convert from 'global 4-element array of 7-element array of highp float' to 'global 5-element array of 7-element array of highp float'
 ERROR: 0:79: 'assign' :  cannot convert from 'global 4-element array of 7-element array of highp float' to 'global implicitly-sized array of 7-element array of highp float'
diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out
index 33a8c9a..9090414 100644
--- a/Test/baseResults/400.frag.out
+++ b/Test/baseResults/400.frag.out
@@ -481,8 +481,6 @@
 0:?     'vl2' (layout(location=6 ) smooth in 4-component vector of float)
 0:?     'uv3' (layout(location=3 ) uniform 3-component vector of float)
 0:?     'anon@0' (in block{in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
-0:?     'anon@0' (in block{in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'u2drs' (uniform sampler2DRectShadow)
 0:?     'patchIn' (smooth patch in 4-component vector of float)
@@ -962,8 +960,6 @@
 0:?     'vl2' (layout(location=6 ) smooth in 4-component vector of float)
 0:?     'uv3' (layout(location=3 ) uniform 3-component vector of float)
 0:?     'anon@0' (in block{in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
-0:?     'anon@0' (in block{in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'u2drs' (uniform sampler2DRectShadow)
 0:?     'patchIn' (smooth patch in 4-component vector of float)
diff --git a/Test/baseResults/420.frag.out b/Test/baseResults/420.frag.out
index 784cdb4..3b4c9be 100644
--- a/Test/baseResults/420.frag.out
+++ b/Test/baseResults/420.frag.out
@@ -19,7 +19,6 @@
 0:8          0.300000
 0:?   Linker Objects
 0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
 0:?     'depth' (smooth in float)
 0:?     'a' (layout(binding=0 offset=0 ) uniform implicitly-sized array of atomic_uint)
 
@@ -39,7 +38,6 @@
 0:8          0.300000
 0:?   Linker Objects
 0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
 0:?     'depth' (smooth in float)
 0:?     'a' (layout(binding=0 offset=0 ) uniform 1-element array of atomic_uint)
 
diff --git a/Test/baseResults/430AofA.frag.out b/Test/baseResults/430AofA.frag.out
index 68285f7..f3bbfb8 100644
--- a/Test/baseResults/430AofA.frag.out
+++ b/Test/baseResults/430AofA.frag.out
@@ -2,7 +2,7 @@
 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
 ERROR: 0:6: '[]' : only outermost dimension of an array of arrays can be implicitly sized 
 ERROR: 0:14: 'constructor' : constructing non-array constituent from array argument 
-ERROR: 0:15: 'constructior' : array constructor argument not correct type to construct array element 
+ERROR: 0:15: 'constructor' : array constructor argument not correct type to construct array element 
 ERROR: 0:28: '[' :  array index out of range '4'
 ERROR: 0:56: 'constructor' :  cannot convert parameter 2 from 'const 3-element array of 4-component vector of float' to 'temp 2-element array of 4-component vector of float'
 ERROR: 0:60: 'constructor' :  cannot convert parameter 2 from 'const 2-element array of 4-component vector of float' to 'temp 3-element array of 4-component vector of float'
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
index 1be5906..44d7655 100755
--- a/Test/baseResults/hlsl.amend.frag.out
+++ b/Test/baseResults/hlsl.amend.frag.out
@@ -58,7 +58,7 @@
 0:25          Constant:
 0:25            0 (const uint)
 0:?   Linker Objects
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-component vector of float a, layout(offset=16 ) uniform float b, layout(offset=32 ) uniform 3-component vector of float c, layout(offset=44 ) uniform int d, uniform int e})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float a, layout(offset=16 ) uniform float b, layout(offset=32 ) uniform 3-component vector of float c, layout(offset=44 ) uniform int d, uniform int e})
 
 
 Linked fragment stage:
@@ -123,7 +123,7 @@
 0:25          Constant:
 0:25            0 (const uint)
 0:?   Linker Objects
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-component vector of float a, layout(offset=16 ) uniform float b, layout(offset=32 ) uniform 3-component vector of float c, layout(offset=44 ) uniform int d, uniform int e})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float a, layout(offset=16 ) uniform float b, layout(offset=32 ) uniform 3-component vector of float c, layout(offset=44 ) uniform int d, uniform int e})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.array.flatten.frag.out b/Test/baseResults/hlsl.array.flatten.frag.out
index cbfb0ef..74a348a 100644
--- a/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/Test/baseResults/hlsl.array.flatten.frag.out
@@ -138,6 +138,7 @@
 0:?                   'g_samp[2]' (uniform sampler)
 0:37              'aggShadow' (temp 3-element array of sampler)
 0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tex[0]' (uniform texture1D)
 0:?     'g_tex[1]' (uniform texture1D)
 0:?     'g_tex[2]' (uniform texture1D)
@@ -150,9 +151,8 @@
 0:?     'g_samp_explicit[0]' (layout(binding=5 ) uniform sampler)
 0:?     'g_samp_explicit[1]' (layout(binding=6 ) uniform sampler)
 0:?     'g_samp_explicit[2]' (layout(binding=7 ) uniform sampler)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
 0:?     'not_flattened_a' (global 5-element array of int)
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 
 Linked fragment stage:
@@ -297,6 +297,7 @@
 0:?                   'g_samp[2]' (uniform sampler)
 0:37              'aggShadow' (temp 3-element array of sampler)
 0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tex[0]' (uniform texture1D)
 0:?     'g_tex[1]' (uniform texture1D)
 0:?     'g_tex[2]' (uniform texture1D)
@@ -309,9 +310,8 @@
 0:?     'g_samp_explicit[0]' (layout(binding=5 ) uniform sampler)
 0:?     'g_samp_explicit[1]' (layout(binding=6 ) uniform sampler)
 0:?     'g_samp_explicit[2]' (layout(binding=7 ) uniform sampler)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
 0:?     'not_flattened_a' (global 5-element array of int)
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 00aedb3..e04a5e8 100755
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -57,9 +57,9 @@
 0:10        Branch: Return
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
 0:?     'i' (layout(location=0 ) in int)
 0:?     'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
 
 
 Linked fragment stage:
@@ -123,9 +123,9 @@
 0:10        Branch: Return
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
 0:?     'i' (layout(location=0 ) in int)
 0:?     'input' (layout(location=1 ) in 3-element array of 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 4-component vector of float a, layout(offset=64 ) uniform 11-element array of structure{temp 7-element array of 4-component vector of float m} s})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out
index d8e0ed8..5674cb4 100644
--- a/Test/baseResults/hlsl.array.implicit-size.frag.out
+++ b/Test/baseResults/hlsl.array.implicit-size.frag.out
@@ -81,6 +81,7 @@
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -234,6 +235,7 @@
                               Store 18(g_array) 24
                               Store 28(g_array_unused) 31
                               Store 37(g_mystruct) 42
+                              Return
                               FunctionEnd
 12(main(struct-PS_OUTPUT-vf41;):           2 Function None 10
    11(ps_output):      9(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.array.multidim.frag.out b/Test/baseResults/hlsl.array.multidim.frag.out
index a2df1a8..66890b5 100644
--- a/Test/baseResults/hlsl.array.multidim.frag.out
+++ b/Test/baseResults/hlsl.array.multidim.frag.out
@@ -59,7 +59,7 @@
 0:19        Branch: Return
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 5-element array of 4-element array of 3-element array of float float_array})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 5-element array of 4-element array of 3-element array of float float_array})
 
 
 Linked fragment stage:
@@ -125,7 +125,7 @@
 0:19        Branch: Return
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 5-element array of 4-element array of 3-element array of float float_array})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 5-element array of 4-element array of 3-element array of float float_array})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out
new file mode 100644
index 0000000..2316cd9
--- /dev/null
+++ b/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -0,0 +1,138 @@
+hlsl.attribute.expression.comp
+Shader version: 450
+local_size = (4, 6, 8)
+0:? Sequence
+0:9  Function Definition: main( (temp 4-component vector of float)
+0:9    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp int)
+0:11          'x' (temp int)
+0:11          Constant:
+0:11            0 (const int)
+0:11        Loop with condition tested first
+0:11          Loop Condition
+0:11          Compare Less Than (temp bool)
+0:11            'x' (temp int)
+0:11            bound: direct index for structure (layout(offset=0 ) uniform int)
+0:11              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int bound})
+0:11              Constant:
+0:11                0 (const uint)
+0:11          No loop body
+0:11          Loop Terminal Expression
+0:11          Pre-Increment (temp int)
+0:11            'x' (temp int)
+0:14      Sequence
+0:14        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:14        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int bound})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+local_size = (4, 6, 8)
+0:? Sequence
+0:9  Function Definition: main( (temp 4-component vector of float)
+0:9    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp int)
+0:11          'x' (temp int)
+0:11          Constant:
+0:11            0 (const int)
+0:11        Loop with condition tested first
+0:11          Loop Condition
+0:11          Compare Less Than (temp bool)
+0:11            'x' (temp int)
+0:11            bound: direct index for structure (layout(offset=0 ) uniform int)
+0:11              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int bound})
+0:11              Constant:
+0:11                0 (const uint)
+0:11          No loop body
+0:11          Loop Terminal Expression
+0:11          Pre-Increment (temp int)
+0:11            'x' (temp int)
+0:14      Sequence
+0:14        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:14        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int bound})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 34
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 30
+                              ExecutionMode 4 LocalSize 4 6 8
+                              Name 4  "main"
+                              Name 8  "x"
+                              Name 16  "$Global"
+                              MemberName 16($Global) 0  "bound"
+                              Name 18  ""
+                              Name 30  "@entryPointOutput"
+                              MemberDecorate 16($Global) 0 Offset 0
+                              Decorate 16($Global) Block
+                              Decorate 18 DescriptorSet 0
+                              Decorate 30(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+     16($Global):             TypeStruct 6(int)
+              17:             TypePointer Uniform 16($Global)
+              18:     17(ptr) Variable Uniform
+              19:             TypePointer Uniform 6(int)
+              22:             TypeBool
+              25:      6(int) Constant 1
+              27:             TypeFloat 32
+              28:             TypeVector 27(float) 4
+              29:             TypePointer Output 28(fvec4)
+30(@entryPointOutput):     29(ptr) Variable Output
+              31:   27(float) Constant 0
+              32:   28(fvec4) ConstantComposite 31 31 31 31
+         4(main):           2 Function None 3
+               5:             Label
+            8(x):      7(ptr) Variable Function
+                              Store 8(x) 9
+                              Branch 10
+              10:             Label
+                              LoopMerge 12 13 None
+                              Branch 14
+              14:             Label
+              15:      6(int) Load 8(x)
+              20:     19(ptr) AccessChain 18 9
+              21:      6(int) Load 20
+              23:    22(bool) SLessThan 15 21
+                              BranchConditional 23 11 12
+              11:               Label
+                                Branch 13
+              13:               Label
+              24:      6(int)   Load 8(x)
+              26:      6(int)   IAdd 24 25
+                                Store 8(x) 26
+                                Branch 10
+              12:             Label
+                              Store 30(@entryPointOutput) 32
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
index c6dc3e5..9101e22 100755
--- a/Test/baseResults/hlsl.basic.comp.out
+++ b/Test/baseResults/hlsl.basic.comp.out
@@ -8,8 +8,8 @@
 0:?     Sequence
 0:5      'dti' (in int LocalInvocationID)
 0:?   Linker Objects
-0:?     'a' (shared 100-element array of 4-component vector of float)
 0:?     'dti' (in int LocalInvocationID)
+0:?     'a' (shared 100-element array of 4-component vector of float)
 
 
 Linked compute stage:
@@ -24,8 +24,8 @@
 0:?     Sequence
 0:5      'dti' (in int LocalInvocationID)
 0:?   Linker Objects
-0:?     'a' (shared 100-element array of 4-component vector of float)
 0:?     'dti' (in int LocalInvocationID)
+0:?     'a' (shared 100-element array of 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.basic.geom.out b/Test/baseResults/hlsl.basic.geom.out
new file mode 100644
index 0000000..2c20b43
--- /dev/null
+++ b/Test/baseResults/hlsl.basic.geom.out
@@ -0,0 +1,201 @@
+hlsl.basic.geom
+Shader version: 450
+invocations = -1
+max_vertices = 4
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:16  Function Definition: main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
+0:16    Function Parameters: 
+0:16      'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:16      'test' (layout(location=3 ) in 3-element array of uint)
+0:16      'OutputStream' (out structure{temp float myfloat, temp int something})
+0:?     Sequence
+0:19      move second child to first child (temp float)
+0:19        myfloat: direct index for structure (temp float)
+0:19          'Vert' (temp structure{temp float myfloat, temp int something})
+0:19          Constant:
+0:19            0 (const int)
+0:19        Convert uint to float (temp float)
+0:19          add (temp uint)
+0:19            add (temp uint)
+0:19              direct index (layout(location=3 ) temp uint)
+0:19                'test' (layout(location=3 ) in 3-element array of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19              direct index (layout(location=3 ) temp uint)
+0:19                'test' (layout(location=3 ) in 3-element array of uint)
+0:19                Constant:
+0:19                  1 (const int)
+0:19            direct index (layout(location=3 ) temp uint)
+0:19              'test' (layout(location=3 ) in 3-element array of uint)
+0:19              Constant:
+0:19                2 (const int)
+0:20      move second child to first child (temp int)
+0:20        something: direct index for structure (temp int)
+0:20          'Vert' (temp structure{temp float myfloat, temp int something})
+0:20          Constant:
+0:20            1 (const int)
+0:20        Convert uint to int (temp int)
+0:20          direct index (layout(location=0 ) temp uint)
+0:20            'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:20            Constant:
+0:20              0 (const int)
+0:22      Sequence
+0:22        move second child to first child (temp structure{temp float myfloat, temp int something})
+0:22          'OutputStream' (out structure{temp float myfloat, temp int something})
+0:22          'Vert' (temp structure{temp float myfloat, temp int something})
+0:22        EmitVertex (temp void)
+0:23      Sequence
+0:23        move second child to first child (temp structure{temp float myfloat, temp int something})
+0:23          'OutputStream' (out structure{temp float myfloat, temp int something})
+0:23          'Vert' (temp structure{temp float myfloat, temp int something})
+0:23        EmitVertex (temp void)
+0:24      EndPrimitive (temp void)
+0:?   Linker Objects
+0:?     'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:?     'test' (layout(location=3 ) in 3-element array of uint)
+0:?     'myfloat' (layout(location=0 ) out float)
+0:?     'something' (layout(location=1 ) out int)
+
+
+Linked geometry stage:
+
+
+Shader version: 450
+invocations = 1
+max_vertices = 4
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:16  Function Definition: main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
+0:16    Function Parameters: 
+0:16      'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:16      'test' (layout(location=3 ) in 3-element array of uint)
+0:16      'OutputStream' (out structure{temp float myfloat, temp int something})
+0:?     Sequence
+0:19      move second child to first child (temp float)
+0:19        myfloat: direct index for structure (temp float)
+0:19          'Vert' (temp structure{temp float myfloat, temp int something})
+0:19          Constant:
+0:19            0 (const int)
+0:19        Convert uint to float (temp float)
+0:19          add (temp uint)
+0:19            add (temp uint)
+0:19              direct index (layout(location=3 ) temp uint)
+0:19                'test' (layout(location=3 ) in 3-element array of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19              direct index (layout(location=3 ) temp uint)
+0:19                'test' (layout(location=3 ) in 3-element array of uint)
+0:19                Constant:
+0:19                  1 (const int)
+0:19            direct index (layout(location=3 ) temp uint)
+0:19              'test' (layout(location=3 ) in 3-element array of uint)
+0:19              Constant:
+0:19                2 (const int)
+0:20      move second child to first child (temp int)
+0:20        something: direct index for structure (temp int)
+0:20          'Vert' (temp structure{temp float myfloat, temp int something})
+0:20          Constant:
+0:20            1 (const int)
+0:20        Convert uint to int (temp int)
+0:20          direct index (layout(location=0 ) temp uint)
+0:20            'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:20            Constant:
+0:20              0 (const int)
+0:22      Sequence
+0:22        move second child to first child (temp structure{temp float myfloat, temp int something})
+0:22          'OutputStream' (out structure{temp float myfloat, temp int something})
+0:22          'Vert' (temp structure{temp float myfloat, temp int something})
+0:22        EmitVertex (temp void)
+0:23      Sequence
+0:23        move second child to first child (temp structure{temp float myfloat, temp int something})
+0:23          'OutputStream' (out structure{temp float myfloat, temp int something})
+0:23          'Vert' (temp structure{temp float myfloat, temp int something})
+0:23        EmitVertex (temp void)
+0:24      EndPrimitive (temp void)
+0:?   Linker Objects
+0:?     'VertexID' (layout(location=0 ) in 3-element array of uint)
+0:?     'test' (layout(location=3 ) in 3-element array of uint)
+0:?     'myfloat' (layout(location=0 ) out float)
+0:?     'something' (layout(location=1 ) out int)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 45
+
+                              Capability Geometry
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 16 31 38 42 44
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputLineStrip
+                              ExecutionMode 4 OutputVertices 4
+                              Name 4  "main"
+                              Name 8  "PSInput"
+                              MemberName 8(PSInput) 0  "myfloat"
+                              MemberName 8(PSInput) 1  "something"
+                              Name 10  "Vert"
+                              Name 16  "test"
+                              Name 31  "VertexID"
+                              Name 38  "OutputStream"
+                              Name 42  "myfloat"
+                              Name 44  "something"
+                              Decorate 16(test) Location 3
+                              Decorate 31(VertexID) Location 0
+                              Decorate 42(myfloat) Location 0
+                              Decorate 44(something) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeInt 32 1
+      8(PSInput):             TypeStruct 6(float) 7(int)
+               9:             TypePointer Function 8(PSInput)
+              11:      7(int) Constant 0
+              12:             TypeInt 32 0
+              13:     12(int) Constant 3
+              14:             TypeArray 12(int) 13
+              15:             TypePointer Input 14
+        16(test):     15(ptr) Variable Input
+              17:             TypePointer Input 12(int)
+              20:      7(int) Constant 1
+              24:      7(int) Constant 2
+              29:             TypePointer Function 6(float)
+    31(VertexID):     15(ptr) Variable Input
+              35:             TypePointer Function 7(int)
+              37:             TypePointer Output 8(PSInput)
+38(OutputStream):     37(ptr) Variable Output
+              41:             TypePointer Output 6(float)
+     42(myfloat):     41(ptr) Variable Output
+              43:             TypePointer Output 7(int)
+   44(something):     43(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+        10(Vert):      9(ptr) Variable Function
+              18:     17(ptr) AccessChain 16(test) 11
+              19:     12(int) Load 18
+              21:     17(ptr) AccessChain 16(test) 20
+              22:     12(int) Load 21
+              23:     12(int) IAdd 19 22
+              25:     17(ptr) AccessChain 16(test) 24
+              26:     12(int) Load 25
+              27:     12(int) IAdd 23 26
+              28:    6(float) ConvertUToF 27
+              30:     29(ptr) AccessChain 10(Vert) 11
+                              Store 30 28
+              32:     17(ptr) AccessChain 31(VertexID) 11
+              33:     12(int) Load 32
+              34:      7(int) Bitcast 33
+              36:     35(ptr) AccessChain 10(Vert) 20
+                              Store 36 34
+              39:  8(PSInput) Load 10(Vert)
+                              Store 38(OutputStream) 39
+                              EmitVertex
+              40:  8(PSInput) Load 10(Vert)
+                              Store 38(OutputStream) 40
+                              EmitVertex
+                              EndPrimitive
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index 2eb1f9c..dbb2b5e 100755
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -32,12 +32,12 @@
 0:31                0 (const uint)
 0:31        Branch: Return
 0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v1})
 0:?     'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer 4-component vector of float v2})
 0:?     'anon@2' (layout(set=10 binding=2 row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v3, layout(row_major std140 offset=20 ) uniform int i3})
 0:?     'anon@3' (layout(binding=8 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v4, layout(row_major std430 offset=48 ) buffer int i4, layout(row_major std430 offset=60 ) buffer float f1, layout(row_major std430 offset=64 ) buffer float f3, layout(row_major std430 offset=68 ) buffer float f4, layout(row_major std430 offset=72 ) buffer float f5, layout(row_major std430 ) buffer float f6, layout(row_major std430 ) buffer float f7, layout(row_major std430 ) buffer 3X4 matrix of float m1, layout(column_major std430 ) buffer 3X4 matrix of float m2, layout(row_major std430 ) buffer 3X4 matrix of float m3, ...})
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 
 Linked fragment stage:
@@ -76,12 +76,12 @@
 0:31                0 (const uint)
 0:31        Branch: Return
 0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v1})
 0:?     'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer 4-component vector of float v2})
 0:?     'anon@2' (layout(set=10 binding=2 row_major std140 ) uniform block{layout(row_major std140 ) uniform 4-component vector of float v3, layout(row_major std140 offset=20 ) uniform int i3})
 0:?     'anon@3' (layout(binding=8 row_major std430 ) buffer block{layout(row_major std430 offset=16 ) buffer 4-component vector of float v4, layout(row_major std430 offset=48 ) buffer int i4, layout(row_major std430 offset=60 ) buffer float f1, layout(row_major std430 offset=64 ) buffer float f3, layout(row_major std430 offset=68 ) buffer float f4, layout(row_major std430 offset=72 ) buffer float f5, layout(row_major std430 ) buffer float f6, layout(row_major std430 ) buffer float f7, layout(row_major std430 ) buffer 3X4 matrix of float m1, layout(column_major std430 ) buffer 3X4 matrix of float m2, layout(row_major std430 ) buffer 3X4 matrix of float m3, ...})
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index ff18441..56a2ce8 100644
--- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -155,6 +155,8 @@
 0:43                1 (const int)
 0:43        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -166,8 +168,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -329,6 +329,8 @@
 0:43                1 (const int)
 0:43        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -340,8 +342,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index ecd1f0d..799dcc3 100644
--- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -167,6 +167,8 @@
 0:43                1 (const int)
 0:43        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -178,8 +180,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -341,6 +341,8 @@
 0:43                1 (const int)
 0:43        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -352,7 +354,5 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
new file mode 100644
index 0000000..1bf63ec
--- /dev/null
+++ b/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -0,0 +1,402 @@
+hlsl.comparison.vec.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Function Definition: Bug1(vf4; (temp void)
+0:4    Function Parameters: 
+0:4      'a' (in 4-component vector of float)
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child (temp 4-component vector of float)
+0:5          'v04' (temp 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:6      Sequence
+0:6        move second child to first child (temp float)
+0:6          'v01' (temp float)
+0:6          Constant:
+0:6            0.000000
+0:8      Sequence
+0:8        move second child to first child (temp 4-component vector of bool)
+0:8          'r00' (temp 4-component vector of bool)
+0:8          Equal (temp 4-component vector of bool)
+0:8            'a' (in 4-component vector of float)
+0:8            'v04' (temp 4-component vector of float)
+0:9      Sequence
+0:9        move second child to first child (temp 4-component vector of bool)
+0:9          'r01' (temp 4-component vector of bool)
+0:9          NotEqual (temp 4-component vector of bool)
+0:9            'a' (in 4-component vector of float)
+0:9            'v04' (temp 4-component vector of float)
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of bool)
+0:10          'r02' (temp 4-component vector of bool)
+0:10          Compare Less Than (temp 4-component vector of bool)
+0:10            'a' (in 4-component vector of float)
+0:10            'v04' (temp 4-component vector of float)
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of bool)
+0:11          'r03' (temp 4-component vector of bool)
+0:11          Compare Greater Than (temp 4-component vector of bool)
+0:11            'a' (in 4-component vector of float)
+0:11            'v04' (temp 4-component vector of float)
+0:13      Sequence
+0:13        move second child to first child (temp 4-component vector of bool)
+0:13          'r10' (temp 4-component vector of bool)
+0:13          Equal (temp 4-component vector of bool)
+0:13            'a' (in 4-component vector of float)
+0:13            Construct vec4 (in 4-component vector of float)
+0:13              'v01' (temp float)
+0:14      Sequence
+0:14        move second child to first child (temp 4-component vector of bool)
+0:14          'r11' (temp 4-component vector of bool)
+0:14          NotEqual (temp 4-component vector of bool)
+0:14            'a' (in 4-component vector of float)
+0:14            Construct vec4 (in 4-component vector of float)
+0:14              'v01' (temp float)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of bool)
+0:15          'r12' (temp 4-component vector of bool)
+0:15          Compare Less Than (temp 4-component vector of bool)
+0:15            'a' (in 4-component vector of float)
+0:15            Construct vec4 (in 4-component vector of float)
+0:15              'v01' (temp float)
+0:16      Sequence
+0:16        move second child to first child (temp 4-component vector of bool)
+0:16          'r13' (temp 4-component vector of bool)
+0:16          Compare Greater Than (temp 4-component vector of bool)
+0:16            'a' (in 4-component vector of float)
+0:16            Construct vec4 (in 4-component vector of float)
+0:16              'v01' (temp float)
+0:18      Sequence
+0:18        move second child to first child (temp 4-component vector of bool)
+0:18          'r20' (temp 4-component vector of bool)
+0:18          Equal (temp 4-component vector of bool)
+0:18            Construct vec4 (in 4-component vector of float)
+0:18              'v01' (temp float)
+0:18            'a' (in 4-component vector of float)
+0:19      Sequence
+0:19        move second child to first child (temp 4-component vector of bool)
+0:19          'r21' (temp 4-component vector of bool)
+0:19          NotEqual (temp 4-component vector of bool)
+0:19            Construct vec4 (in 4-component vector of float)
+0:19              'v01' (temp float)
+0:19            'a' (in 4-component vector of float)
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of bool)
+0:20          'r22' (temp 4-component vector of bool)
+0:20          Compare Less Than (temp 4-component vector of bool)
+0:20            Construct vec4 (in 4-component vector of float)
+0:20              'v01' (temp float)
+0:20            'a' (in 4-component vector of float)
+0:21      Sequence
+0:21        move second child to first child (temp 4-component vector of bool)
+0:21          'r23' (temp 4-component vector of bool)
+0:21          Compare Greater Than (temp 4-component vector of bool)
+0:21            Construct vec4 (in 4-component vector of float)
+0:21              'v01' (temp float)
+0:21            'a' (in 4-component vector of float)
+0:30  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:30    Function Parameters: 
+0:?     Sequence
+0:32      move second child to first child (temp 4-component vector of float)
+0:32        Color: direct index for structure (temp 4-component vector of float)
+0:32          'psout' (temp structure{temp 4-component vector of float Color})
+0:32          Constant:
+0:32            0 (const int)
+0:32        Constant:
+0:32          0.000000
+0:32          0.000000
+0:32          0.000000
+0:32          0.000000
+0:33      Sequence
+0:33        Sequence
+0:33          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:33            Color: direct index for structure (temp 4-component vector of float)
+0:33              'psout' (temp structure{temp 4-component vector of float Color})
+0:33              Constant:
+0:33                0 (const int)
+0:33        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float uf4})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Function Definition: Bug1(vf4; (temp void)
+0:4    Function Parameters: 
+0:4      'a' (in 4-component vector of float)
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child (temp 4-component vector of float)
+0:5          'v04' (temp 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:6      Sequence
+0:6        move second child to first child (temp float)
+0:6          'v01' (temp float)
+0:6          Constant:
+0:6            0.000000
+0:8      Sequence
+0:8        move second child to first child (temp 4-component vector of bool)
+0:8          'r00' (temp 4-component vector of bool)
+0:8          Equal (temp 4-component vector of bool)
+0:8            'a' (in 4-component vector of float)
+0:8            'v04' (temp 4-component vector of float)
+0:9      Sequence
+0:9        move second child to first child (temp 4-component vector of bool)
+0:9          'r01' (temp 4-component vector of bool)
+0:9          NotEqual (temp 4-component vector of bool)
+0:9            'a' (in 4-component vector of float)
+0:9            'v04' (temp 4-component vector of float)
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of bool)
+0:10          'r02' (temp 4-component vector of bool)
+0:10          Compare Less Than (temp 4-component vector of bool)
+0:10            'a' (in 4-component vector of float)
+0:10            'v04' (temp 4-component vector of float)
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of bool)
+0:11          'r03' (temp 4-component vector of bool)
+0:11          Compare Greater Than (temp 4-component vector of bool)
+0:11            'a' (in 4-component vector of float)
+0:11            'v04' (temp 4-component vector of float)
+0:13      Sequence
+0:13        move second child to first child (temp 4-component vector of bool)
+0:13          'r10' (temp 4-component vector of bool)
+0:13          Equal (temp 4-component vector of bool)
+0:13            'a' (in 4-component vector of float)
+0:13            Construct vec4 (in 4-component vector of float)
+0:13              'v01' (temp float)
+0:14      Sequence
+0:14        move second child to first child (temp 4-component vector of bool)
+0:14          'r11' (temp 4-component vector of bool)
+0:14          NotEqual (temp 4-component vector of bool)
+0:14            'a' (in 4-component vector of float)
+0:14            Construct vec4 (in 4-component vector of float)
+0:14              'v01' (temp float)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of bool)
+0:15          'r12' (temp 4-component vector of bool)
+0:15          Compare Less Than (temp 4-component vector of bool)
+0:15            'a' (in 4-component vector of float)
+0:15            Construct vec4 (in 4-component vector of float)
+0:15              'v01' (temp float)
+0:16      Sequence
+0:16        move second child to first child (temp 4-component vector of bool)
+0:16          'r13' (temp 4-component vector of bool)
+0:16          Compare Greater Than (temp 4-component vector of bool)
+0:16            'a' (in 4-component vector of float)
+0:16            Construct vec4 (in 4-component vector of float)
+0:16              'v01' (temp float)
+0:18      Sequence
+0:18        move second child to first child (temp 4-component vector of bool)
+0:18          'r20' (temp 4-component vector of bool)
+0:18          Equal (temp 4-component vector of bool)
+0:18            Construct vec4 (in 4-component vector of float)
+0:18              'v01' (temp float)
+0:18            'a' (in 4-component vector of float)
+0:19      Sequence
+0:19        move second child to first child (temp 4-component vector of bool)
+0:19          'r21' (temp 4-component vector of bool)
+0:19          NotEqual (temp 4-component vector of bool)
+0:19            Construct vec4 (in 4-component vector of float)
+0:19              'v01' (temp float)
+0:19            'a' (in 4-component vector of float)
+0:20      Sequence
+0:20        move second child to first child (temp 4-component vector of bool)
+0:20          'r22' (temp 4-component vector of bool)
+0:20          Compare Less Than (temp 4-component vector of bool)
+0:20            Construct vec4 (in 4-component vector of float)
+0:20              'v01' (temp float)
+0:20            'a' (in 4-component vector of float)
+0:21      Sequence
+0:21        move second child to first child (temp 4-component vector of bool)
+0:21          'r23' (temp 4-component vector of bool)
+0:21          Compare Greater Than (temp 4-component vector of bool)
+0:21            Construct vec4 (in 4-component vector of float)
+0:21              'v01' (temp float)
+0:21            'a' (in 4-component vector of float)
+0:30  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:30    Function Parameters: 
+0:?     Sequence
+0:32      move second child to first child (temp 4-component vector of float)
+0:32        Color: direct index for structure (temp 4-component vector of float)
+0:32          'psout' (temp structure{temp 4-component vector of float Color})
+0:32          Constant:
+0:32            0 (const int)
+0:32        Constant:
+0:32          0.000000
+0:32          0.000000
+0:32          0.000000
+0:32          0.000000
+0:33      Sequence
+0:33        Sequence
+0:33          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:33            Color: direct index for structure (temp 4-component vector of float)
+0:33              'psout' (temp structure{temp 4-component vector of float Color})
+0:33              Constant:
+0:33                0 (const int)
+0:33        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float uf4})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 91
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 84
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 11  "Bug1(vf4;"
+                              Name 10  "a"
+                              Name 13  "v04"
+                              Name 17  "v01"
+                              Name 21  "r00"
+                              Name 25  "r01"
+                              Name 29  "r02"
+                              Name 33  "r03"
+                              Name 37  "r10"
+                              Name 42  "r11"
+                              Name 47  "r12"
+                              Name 52  "r13"
+                              Name 57  "r20"
+                              Name 62  "r21"
+                              Name 67  "r22"
+                              Name 72  "r23"
+                              Name 77  "PS_OUTPUT"
+                              MemberName 77(PS_OUTPUT) 0  "Color"
+                              Name 79  "psout"
+                              Name 84  "Color"
+                              Name 88  "$Global"
+                              MemberName 88($Global) 0  "uf4"
+                              Name 90  ""
+                              Decorate 84(Color) Location 0
+                              MemberDecorate 88($Global) 0 Offset 0
+                              Decorate 88($Global) Block
+                              Decorate 90 DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 2 8(ptr)
+              14:    6(float) Constant 0
+              15:    7(fvec4) ConstantComposite 14 14 14 14
+              16:             TypePointer Function 6(float)
+              18:             TypeBool
+              19:             TypeVector 18(bool) 4
+              20:             TypePointer Function 19(bvec4)
+   77(PS_OUTPUT):             TypeStruct 7(fvec4)
+              78:             TypePointer Function 77(PS_OUTPUT)
+              80:             TypeInt 32 1
+              81:     80(int) Constant 0
+              83:             TypePointer Output 7(fvec4)
+       84(Color):     83(ptr) Variable Output
+     88($Global):             TypeStruct 7(fvec4)
+              89:             TypePointer Uniform 88($Global)
+              90:     89(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+       79(psout):     78(ptr) Variable Function
+              82:      8(ptr) AccessChain 79(psout) 81
+                              Store 82 15
+              85:      8(ptr) AccessChain 79(psout) 81
+              86:    7(fvec4) Load 85
+                              Store 84(Color) 86
+                              Return
+                              FunctionEnd
+   11(Bug1(vf4;):           2 Function None 9
+           10(a):      8(ptr) FunctionParameter
+              12:             Label
+         13(v04):      8(ptr) Variable Function
+         17(v01):     16(ptr) Variable Function
+         21(r00):     20(ptr) Variable Function
+         25(r01):     20(ptr) Variable Function
+         29(r02):     20(ptr) Variable Function
+         33(r03):     20(ptr) Variable Function
+         37(r10):     20(ptr) Variable Function
+         42(r11):     20(ptr) Variable Function
+         47(r12):     20(ptr) Variable Function
+         52(r13):     20(ptr) Variable Function
+         57(r20):     20(ptr) Variable Function
+         62(r21):     20(ptr) Variable Function
+         67(r22):     20(ptr) Variable Function
+         72(r23):     20(ptr) Variable Function
+                              Store 13(v04) 15
+                              Store 17(v01) 14
+              22:    7(fvec4) Load 10(a)
+              23:    7(fvec4) Load 13(v04)
+              24:   19(bvec4) FOrdEqual 22 23
+                              Store 21(r00) 24
+              26:    7(fvec4) Load 10(a)
+              27:    7(fvec4) Load 13(v04)
+              28:   19(bvec4) FOrdNotEqual 26 27
+                              Store 25(r01) 28
+              30:    7(fvec4) Load 10(a)
+              31:    7(fvec4) Load 13(v04)
+              32:   19(bvec4) FOrdLessThan 30 31
+                              Store 29(r02) 32
+              34:    7(fvec4) Load 10(a)
+              35:    7(fvec4) Load 13(v04)
+              36:   19(bvec4) FOrdGreaterThan 34 35
+                              Store 33(r03) 36
+              38:    7(fvec4) Load 10(a)
+              39:    6(float) Load 17(v01)
+              40:    7(fvec4) CompositeConstruct 39 39 39 39
+              41:   19(bvec4) FOrdEqual 38 40
+                              Store 37(r10) 41
+              43:    7(fvec4) Load 10(a)
+              44:    6(float) Load 17(v01)
+              45:    7(fvec4) CompositeConstruct 44 44 44 44
+              46:   19(bvec4) FOrdNotEqual 43 45
+                              Store 42(r11) 46
+              48:    7(fvec4) Load 10(a)
+              49:    6(float) Load 17(v01)
+              50:    7(fvec4) CompositeConstruct 49 49 49 49
+              51:   19(bvec4) FOrdLessThan 48 50
+                              Store 47(r12) 51
+              53:    7(fvec4) Load 10(a)
+              54:    6(float) Load 17(v01)
+              55:    7(fvec4) CompositeConstruct 54 54 54 54
+              56:   19(bvec4) FOrdGreaterThan 53 55
+                              Store 52(r13) 56
+              58:    6(float) Load 17(v01)
+              59:    7(fvec4) CompositeConstruct 58 58 58 58
+              60:    7(fvec4) Load 10(a)
+              61:   19(bvec4) FOrdEqual 59 60
+                              Store 57(r20) 61
+              63:    6(float) Load 17(v01)
+              64:    7(fvec4) CompositeConstruct 63 63 63 63
+              65:    7(fvec4) Load 10(a)
+              66:   19(bvec4) FOrdNotEqual 64 65
+                              Store 62(r21) 66
+              68:    6(float) Load 17(v01)
+              69:    7(fvec4) CompositeConstruct 68 68 68 68
+              70:    7(fvec4) Load 10(a)
+              71:   19(bvec4) FOrdLessThan 69 70
+                              Store 67(r22) 71
+              73:    6(float) Load 17(v01)
+              74:    7(fvec4) CompositeConstruct 73 73 73 73
+              75:    7(fvec4) Load 10(a)
+              76:   19(bvec4) FOrdGreaterThan 74 75
+                              Store 72(r23) 76
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out
index 2d5a8fb..c060cdc 100755
--- a/Test/baseResults/hlsl.doLoop.frag.out
+++ b/Test/baseResults/hlsl.doLoop.frag.out
@@ -18,9 +18,10 @@
 0:4        No loop body
 0:5      Loop with condition not tested first
 0:5        Loop Condition
-0:5        Compare Equal (temp bool)
-0:5          'input' (layout(location=0 ) in 4-component vector of float)
-0:5          'input' (layout(location=0 ) in 4-component vector of float)
+0:5        all (temp bool)
+0:5          Equal (temp 4-component vector of bool)
+0:5            'input' (layout(location=0 ) in 4-component vector of float)
+0:5            'input' (layout(location=0 ) in 4-component vector of float)
 0:5        Loop Body
 0:5        Sequence
 0:5          move second child to first child (temp 4-component vector of float)
@@ -54,9 +55,10 @@
 0:4        No loop body
 0:5      Loop with condition not tested first
 0:5        Loop Condition
-0:5        Compare Equal (temp bool)
-0:5          'input' (layout(location=0 ) in 4-component vector of float)
-0:5          'input' (layout(location=0 ) in 4-component vector of float)
+0:5        all (temp bool)
+0:5          Equal (temp 4-component vector of bool)
+0:5            'input' (layout(location=0 ) in 4-component vector of float)
+0:5            'input' (layout(location=0 ) in 4-component vector of float)
 0:5        Loop Body
 0:5        Sequence
 0:5          move second child to first child (temp 4-component vector of float)
diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out
index 83a243f..641febd 100755
--- a/Test/baseResults/hlsl.float1.frag.out
+++ b/Test/baseResults/hlsl.float1.frag.out
@@ -32,6 +32,7 @@
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -92,6 +93,7 @@
                5:             Label
                               Store 14(f1) 15
                               Store 16(scalar) 17
+                              Return
                               FunctionEnd
 11(ShaderFunction(vf1;f1;):    6(float) Function None 8
      9(inFloat1):      7(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
index 6caac24..27c9a5c 100755
--- a/Test/baseResults/hlsl.float4.frag.out
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -17,11 +17,12 @@
 0:10            Constant:
 0:10              0 (const uint)
 0:?   Linker Objects
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool Face ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool Face ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
 
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -38,7 +39,7 @@
 0:10            Constant:
 0:10              0 (const uint)
 0:?   Linker Objects
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool Face ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool Face ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -82,6 +83,7 @@
               20:             TypePointer Uniform 7(fvec4)
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 11(ShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out
index cc47578..85b8fb2 100755
--- a/Test/baseResults/hlsl.forLoop.frag.out
+++ b/Test/baseResults/hlsl.forLoop.frag.out
@@ -19,16 +19,18 @@
 0:?       Sequence
 0:5        Loop with condition tested first
 0:5          Loop Condition
-0:5          Compare Not Equal (temp bool)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
+0:5          any (temp bool)
+0:5            NotEqual (temp 4-component vector of bool)
+0:5              'input' (layout(location=0 ) in 4-component vector of float)
+0:5              'input' (layout(location=0 ) in 4-component vector of float)
 0:5          No loop body
 0:?       Sequence
 0:6        Loop with condition tested first
 0:6          Loop Condition
-0:6          Compare Not Equal (temp bool)
-0:6            'input' (layout(location=0 ) in 4-component vector of float)
-0:6            'input' (layout(location=0 ) in 4-component vector of float)
+0:6          any (temp bool)
+0:6            NotEqual (temp 4-component vector of bool)
+0:6              'input' (layout(location=0 ) in 4-component vector of float)
+0:6              'input' (layout(location=0 ) in 4-component vector of float)
 0:6          Loop Body
 0:?           Sequence
 0:6            Sequence
@@ -42,9 +44,10 @@
 0:7          'input' (layout(location=0 ) in 4-component vector of float)
 0:7        Loop with condition tested first
 0:7          Loop Condition
-0:7          Compare Not Equal (temp bool)
-0:7            'input' (layout(location=0 ) in 4-component vector of float)
-0:7            'input' (layout(location=0 ) in 4-component vector of float)
+0:7          any (temp bool)
+0:7            NotEqual (temp 4-component vector of bool)
+0:7              'input' (layout(location=0 ) in 4-component vector of float)
+0:7              'input' (layout(location=0 ) in 4-component vector of float)
 0:7          Loop Body
 0:?           Sequence
 0:7            Sequence
@@ -141,16 +144,18 @@
 0:?       Sequence
 0:5        Loop with condition tested first
 0:5          Loop Condition
-0:5          Compare Not Equal (temp bool)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
-0:5            'input' (layout(location=0 ) in 4-component vector of float)
+0:5          any (temp bool)
+0:5            NotEqual (temp 4-component vector of bool)
+0:5              'input' (layout(location=0 ) in 4-component vector of float)
+0:5              'input' (layout(location=0 ) in 4-component vector of float)
 0:5          No loop body
 0:?       Sequence
 0:6        Loop with condition tested first
 0:6          Loop Condition
-0:6          Compare Not Equal (temp bool)
-0:6            'input' (layout(location=0 ) in 4-component vector of float)
-0:6            'input' (layout(location=0 ) in 4-component vector of float)
+0:6          any (temp bool)
+0:6            NotEqual (temp 4-component vector of bool)
+0:6              'input' (layout(location=0 ) in 4-component vector of float)
+0:6              'input' (layout(location=0 ) in 4-component vector of float)
 0:6          Loop Body
 0:?           Sequence
 0:6            Sequence
@@ -164,9 +169,10 @@
 0:7          'input' (layout(location=0 ) in 4-component vector of float)
 0:7        Loop with condition tested first
 0:7          Loop Condition
-0:7          Compare Not Equal (temp bool)
-0:7            'input' (layout(location=0 ) in 4-component vector of float)
-0:7            'input' (layout(location=0 ) in 4-component vector of float)
+0:7          any (temp bool)
+0:7            NotEqual (temp 4-component vector of bool)
+0:7              'input' (layout(location=0 ) in 4-component vector of float)
+0:7              'input' (layout(location=0 ) in 4-component vector of float)
 0:7          Loop Body
 0:?           Sequence
 0:7            Sequence
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
index a09b87c..ee550d1 100644
--- a/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -8,7 +8,7 @@
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of float)
 0:29          'txval20' (temp 4-component vector of float)
-0:29          textureGather (global 4-component vector of float)
+0:29          textureGather (temp 4-component vector of float)
 0:29            Construct combined texture-sampler (temp sampler2DArray)
 0:29              'g_tTex2df4a' (uniform texture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -19,7 +19,7 @@
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of int)
 0:30          'txval21' (temp 4-component vector of int)
-0:30          textureGather (global 4-component vector of int)
+0:30          textureGather (temp 4-component vector of int)
 0:30            Construct combined texture-sampler (temp isampler2DArray)
 0:30              'g_tTex2di4a' (uniform itexture2DArray)
 0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -30,7 +30,7 @@
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of uint)
 0:31          'txval22' (temp 4-component vector of uint)
-0:31          textureGather (global 4-component vector of uint)
+0:31          textureGather (temp 4-component vector of uint)
 0:31            Construct combined texture-sampler (temp usampler2DArray)
 0:31              'g_tTex2du4a' (uniform utexture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -41,7 +41,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          textureGather (global 4-component vector of float)
+0:35          textureGather (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4a' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -53,7 +53,7 @@
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          textureGather (global 4-component vector of int)
+0:36          textureGather (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -65,7 +65,7 @@
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          textureGather (global 4-component vector of uint)
+0:37          textureGather (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -107,6 +107,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -118,8 +120,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -134,7 +134,7 @@
 0:29      Sequence
 0:29        move second child to first child (temp 4-component vector of float)
 0:29          'txval20' (temp 4-component vector of float)
-0:29          textureGather (global 4-component vector of float)
+0:29          textureGather (temp 4-component vector of float)
 0:29            Construct combined texture-sampler (temp sampler2DArray)
 0:29              'g_tTex2df4a' (uniform texture2DArray)
 0:29              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -145,7 +145,7 @@
 0:30      Sequence
 0:30        move second child to first child (temp 4-component vector of int)
 0:30          'txval21' (temp 4-component vector of int)
-0:30          textureGather (global 4-component vector of int)
+0:30          textureGather (temp 4-component vector of int)
 0:30            Construct combined texture-sampler (temp isampler2DArray)
 0:30              'g_tTex2di4a' (uniform itexture2DArray)
 0:30              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -156,7 +156,7 @@
 0:31      Sequence
 0:31        move second child to first child (temp 4-component vector of uint)
 0:31          'txval22' (temp 4-component vector of uint)
-0:31          textureGather (global 4-component vector of uint)
+0:31          textureGather (temp 4-component vector of uint)
 0:31            Construct combined texture-sampler (temp usampler2DArray)
 0:31              'g_tTex2du4a' (uniform utexture2DArray)
 0:31              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -167,7 +167,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of float)
 0:35          'txval40' (temp 4-component vector of float)
-0:35          textureGather (global 4-component vector of float)
+0:35          textureGather (temp 4-component vector of float)
 0:35            Construct combined texture-sampler (temp samplerCubeArray)
 0:35              'g_tTexcdf4a' (uniform textureCubeArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -179,7 +179,7 @@
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of int)
 0:36          'txval41' (temp 4-component vector of int)
-0:36          textureGather (global 4-component vector of int)
+0:36          textureGather (temp 4-component vector of int)
 0:36            Construct combined texture-sampler (temp isamplerCubeArray)
 0:36              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -191,7 +191,7 @@
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of uint)
 0:37          'txval42' (temp 4-component vector of uint)
-0:37          textureGather (global 4-component vector of uint)
+0:37          textureGather (temp 4-component vector of uint)
 0:37            Construct combined texture-sampler (temp usamplerCubeArray)
 0:37              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -233,6 +233,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -244,8 +246,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 467ccf4..86e106c 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -8,7 +8,7 @@
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of float)
 0:34          'txval20' (temp 4-component vector of float)
-0:34          textureGather (global 4-component vector of float)
+0:34          textureGather (temp 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -18,7 +18,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of int)
 0:35          'txval21' (temp 4-component vector of int)
-0:35          textureGather (global 4-component vector of int)
+0:35          textureGather (temp 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -28,7 +28,7 @@
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of uint)
 0:36          'txval22' (temp 4-component vector of uint)
-0:36          textureGather (global 4-component vector of uint)
+0:36          textureGather (temp 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -38,7 +38,7 @@
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval40' (temp 4-component vector of float)
-0:40          textureGather (global 4-component vector of float)
+0:40          textureGather (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp samplerCube)
 0:40              'g_tTexcdf4' (uniform textureCube)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -49,7 +49,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval41' (temp 4-component vector of int)
-0:41          textureGather (global 4-component vector of int)
+0:41          textureGather (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isamplerCube)
 0:41              'g_tTexcdi4' (uniform itextureCube)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -60,7 +60,7 @@
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval42' (temp 4-component vector of uint)
-0:42          textureGather (global 4-component vector of uint)
+0:42          textureGather (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usamplerCube)
 0:42              'g_tTexcdu4' (uniform utextureCube)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -101,6 +101,8 @@
 0:47                1 (const int)
 0:47        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -116,8 +118,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -132,7 +132,7 @@
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of float)
 0:34          'txval20' (temp 4-component vector of float)
-0:34          textureGather (global 4-component vector of float)
+0:34          textureGather (temp 4-component vector of float)
 0:34            Construct combined texture-sampler (temp sampler2D)
 0:34              'g_tTex2df4' (uniform texture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -142,7 +142,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of int)
 0:35          'txval21' (temp 4-component vector of int)
-0:35          textureGather (global 4-component vector of int)
+0:35          textureGather (temp 4-component vector of int)
 0:35            Construct combined texture-sampler (temp isampler2D)
 0:35              'g_tTex2di4' (uniform itexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -152,7 +152,7 @@
 0:36      Sequence
 0:36        move second child to first child (temp 4-component vector of uint)
 0:36          'txval22' (temp 4-component vector of uint)
-0:36          textureGather (global 4-component vector of uint)
+0:36          textureGather (temp 4-component vector of uint)
 0:36            Construct combined texture-sampler (temp usampler2D)
 0:36              'g_tTex2du4' (uniform utexture2D)
 0:36              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -162,7 +162,7 @@
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval40' (temp 4-component vector of float)
-0:40          textureGather (global 4-component vector of float)
+0:40          textureGather (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp samplerCube)
 0:40              'g_tTexcdf4' (uniform textureCube)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -173,7 +173,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval41' (temp 4-component vector of int)
-0:41          textureGather (global 4-component vector of int)
+0:41          textureGather (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isamplerCube)
 0:41              'g_tTexcdi4' (uniform itextureCube)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -184,7 +184,7 @@
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval42' (temp 4-component vector of uint)
-0:42          textureGather (global 4-component vector of uint)
+0:42          textureGather (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usamplerCube)
 0:42              'g_tTexcdu4' (uniform utextureCube)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -225,6 +225,8 @@
 0:47                1 (const int)
 0:47        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -240,8 +242,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index d08a57e..a893675 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -7,7 +7,7 @@
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval20' (temp 4-component vector of float)
-0:33          textureGather (global 4-component vector of float)
+0:33          textureGather (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2D)
 0:33              'g_tTex2df4' (uniform texture2D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -17,7 +17,7 @@
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval21' (temp 4-component vector of int)
-0:34          textureGather (global 4-component vector of int)
+0:34          textureGather (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2D)
 0:34              'g_tTex2di4' (uniform itexture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -27,7 +27,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval22' (temp 4-component vector of uint)
-0:35          textureGather (global 4-component vector of uint)
+0:35          textureGather (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2D)
 0:35              'g_tTex2du4' (uniform utexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -37,7 +37,7 @@
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval40' (temp 4-component vector of float)
-0:39          textureGather (global 4-component vector of float)
+0:39          textureGather (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp samplerCube)
 0:39              'g_tTexcdf4' (uniform textureCube)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -48,7 +48,7 @@
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval41' (temp 4-component vector of int)
-0:40          textureGather (global 4-component vector of int)
+0:40          textureGather (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isamplerCube)
 0:40              'g_tTexcdi4' (uniform itextureCube)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -59,7 +59,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval42' (temp 4-component vector of uint)
-0:41          textureGather (global 4-component vector of uint)
+0:41          textureGather (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usamplerCube)
 0:41              'g_tTexcdu4' (uniform utextureCube)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -87,6 +87,7 @@
 0:45                0 (const int)
 0:45        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -102,7 +103,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 
 Linked vertex stage:
@@ -116,7 +116,7 @@
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval20' (temp 4-component vector of float)
-0:33          textureGather (global 4-component vector of float)
+0:33          textureGather (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2D)
 0:33              'g_tTex2df4' (uniform texture2D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -126,7 +126,7 @@
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval21' (temp 4-component vector of int)
-0:34          textureGather (global 4-component vector of int)
+0:34          textureGather (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2D)
 0:34              'g_tTex2di4' (uniform itexture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -136,7 +136,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval22' (temp 4-component vector of uint)
-0:35          textureGather (global 4-component vector of uint)
+0:35          textureGather (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2D)
 0:35              'g_tTex2du4' (uniform utexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -146,7 +146,7 @@
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval40' (temp 4-component vector of float)
-0:39          textureGather (global 4-component vector of float)
+0:39          textureGather (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp samplerCube)
 0:39              'g_tTexcdf4' (uniform textureCube)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -157,7 +157,7 @@
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval41' (temp 4-component vector of int)
-0:40          textureGather (global 4-component vector of int)
+0:40          textureGather (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isamplerCube)
 0:40              'g_tTexcdi4' (uniform itextureCube)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -168,7 +168,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval42' (temp 4-component vector of uint)
-0:41          textureGather (global 4-component vector of uint)
+0:41          textureGather (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usamplerCube)
 0:41              'g_tTexcdu4' (uniform utextureCube)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -196,6 +196,7 @@
 0:45                0 (const int)
 0:45        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -211,7 +212,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index ff7eb39..5b48bf3 100644
--- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -8,7 +8,7 @@
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval20' (temp 4-component vector of float)
-0:33          textureGatherOffset (global 4-component vector of float)
+0:33          textureGatherOffset (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2D)
 0:33              'g_tTex2df4' (uniform texture2D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -21,7 +21,7 @@
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval21' (temp 4-component vector of int)
-0:34          textureGatherOffset (global 4-component vector of int)
+0:34          textureGatherOffset (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2D)
 0:34              'g_tTex2di4' (uniform itexture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -34,7 +34,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval22' (temp 4-component vector of uint)
-0:35          textureGatherOffset (global 4-component vector of uint)
+0:35          textureGatherOffset (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2D)
 0:35              'g_tTex2du4' (uniform utexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -77,6 +77,8 @@
 0:43                1 (const int)
 0:43        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -91,8 +93,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -107,7 +107,7 @@
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval20' (temp 4-component vector of float)
-0:33          textureGatherOffset (global 4-component vector of float)
+0:33          textureGatherOffset (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2D)
 0:33              'g_tTex2df4' (uniform texture2D)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -120,7 +120,7 @@
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval21' (temp 4-component vector of int)
-0:34          textureGatherOffset (global 4-component vector of int)
+0:34          textureGatherOffset (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2D)
 0:34              'g_tTex2di4' (uniform itexture2D)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -133,7 +133,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval22' (temp 4-component vector of uint)
-0:35          textureGatherOffset (global 4-component vector of uint)
+0:35          textureGatherOffset (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2D)
 0:35              'g_tTex2du4' (uniform utexture2D)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -176,6 +176,8 @@
 0:43                1 (const int)
 0:43        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -190,8 +192,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index dc64a80..a7589cd 100644
--- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -8,7 +8,7 @@
 0:25      Sequence
 0:25        move second child to first child (temp 4-component vector of float)
 0:25          'txval20' (temp 4-component vector of float)
-0:25          textureGatherOffset (global 4-component vector of float)
+0:25          textureGatherOffset (temp 4-component vector of float)
 0:25            Construct combined texture-sampler (temp sampler2DArray)
 0:25              'g_tTex2df4' (uniform texture2DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -22,7 +22,7 @@
 0:26      Sequence
 0:26        move second child to first child (temp 4-component vector of int)
 0:26          'txval21' (temp 4-component vector of int)
-0:26          textureGatherOffset (global 4-component vector of int)
+0:26          textureGatherOffset (temp 4-component vector of int)
 0:26            Construct combined texture-sampler (temp isampler2DArray)
 0:26              'g_tTex2di4' (uniform itexture2DArray)
 0:26              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -36,7 +36,7 @@
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of uint)
 0:27          'txval22' (temp 4-component vector of uint)
-0:27          textureGatherOffset (global 4-component vector of uint)
+0:27          textureGatherOffset (temp 4-component vector of uint)
 0:27            Construct combined texture-sampler (temp usampler2DArray)
 0:27              'g_tTex2du4' (uniform utexture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -80,6 +80,8 @@
 0:35                1 (const int)
 0:35        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -88,8 +90,6 @@
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -104,7 +104,7 @@
 0:25      Sequence
 0:25        move second child to first child (temp 4-component vector of float)
 0:25          'txval20' (temp 4-component vector of float)
-0:25          textureGatherOffset (global 4-component vector of float)
+0:25          textureGatherOffset (temp 4-component vector of float)
 0:25            Construct combined texture-sampler (temp sampler2DArray)
 0:25              'g_tTex2df4' (uniform texture2DArray)
 0:25              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -118,7 +118,7 @@
 0:26      Sequence
 0:26        move second child to first child (temp 4-component vector of int)
 0:26          'txval21' (temp 4-component vector of int)
-0:26          textureGatherOffset (global 4-component vector of int)
+0:26          textureGatherOffset (temp 4-component vector of int)
 0:26            Construct combined texture-sampler (temp isampler2DArray)
 0:26              'g_tTex2di4' (uniform itexture2DArray)
 0:26              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -132,7 +132,7 @@
 0:27      Sequence
 0:27        move second child to first child (temp 4-component vector of uint)
 0:27          'txval22' (temp 4-component vector of uint)
-0:27          textureGatherOffset (global 4-component vector of uint)
+0:27          textureGatherOffset (temp 4-component vector of uint)
 0:27            Construct combined texture-sampler (temp usampler2DArray)
 0:27              'g_tTex2du4' (uniform utexture2DArray)
 0:27              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -176,6 +176,8 @@
 0:35                1 (const int)
 0:35        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -184,8 +186,6 @@
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index 4e78cda..b04a857 100644
--- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -8,7 +8,7 @@
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval00' (temp 4-component vector of float)
-0:33          textureGather (global 4-component vector of float)
+0:33          textureGather (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2DArray)
 0:33              'g_tTex2df4a' (uniform texture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -21,7 +21,7 @@
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval01' (temp 4-component vector of int)
-0:34          textureGather (global 4-component vector of int)
+0:34          textureGather (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2DArray)
 0:34              'g_tTex2di4a' (uniform itexture2DArray)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -34,7 +34,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval02' (temp 4-component vector of uint)
-0:35          textureGather (global 4-component vector of uint)
+0:35          textureGather (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2DArray)
 0:35              'g_tTex2du4a' (uniform utexture2DArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -47,7 +47,7 @@
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of float)
 0:37          'txval10' (temp 4-component vector of float)
-0:37          textureGather (global 4-component vector of float)
+0:37          textureGather (temp 4-component vector of float)
 0:37            Construct combined texture-sampler (temp sampler2DArray)
 0:37              'g_tTex2df4a' (uniform texture2DArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -60,7 +60,7 @@
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of int)
 0:38          'txval11' (temp 4-component vector of int)
-0:38          textureGather (global 4-component vector of int)
+0:38          textureGather (temp 4-component vector of int)
 0:38            Construct combined texture-sampler (temp isampler2DArray)
 0:38              'g_tTex2di4a' (uniform itexture2DArray)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -73,7 +73,7 @@
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of uint)
 0:39          'txval12' (temp 4-component vector of uint)
-0:39          textureGather (global 4-component vector of uint)
+0:39          textureGather (temp 4-component vector of uint)
 0:39            Construct combined texture-sampler (temp usampler2DArray)
 0:39              'g_tTex2du4a' (uniform utexture2DArray)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -86,7 +86,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of float)
 0:41          'txval20' (temp 4-component vector of float)
-0:41          textureGather (global 4-component vector of float)
+0:41          textureGather (temp 4-component vector of float)
 0:41            Construct combined texture-sampler (temp sampler2DArray)
 0:41              'g_tTex2df4a' (uniform texture2DArray)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -99,7 +99,7 @@
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of int)
 0:42          'txval21' (temp 4-component vector of int)
-0:42          textureGather (global 4-component vector of int)
+0:42          textureGather (temp 4-component vector of int)
 0:42            Construct combined texture-sampler (temp isampler2DArray)
 0:42              'g_tTex2di4a' (uniform itexture2DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -112,7 +112,7 @@
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of uint)
 0:43          'txval22' (temp 4-component vector of uint)
-0:43          textureGather (global 4-component vector of uint)
+0:43          textureGather (temp 4-component vector of uint)
 0:43            Construct combined texture-sampler (temp usampler2DArray)
 0:43              'g_tTex2du4a' (uniform utexture2DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -125,7 +125,7 @@
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of float)
 0:45          'txval30' (temp 4-component vector of float)
-0:45          textureGather (global 4-component vector of float)
+0:45          textureGather (temp 4-component vector of float)
 0:45            Construct combined texture-sampler (temp sampler2DArray)
 0:45              'g_tTex2df4a' (uniform texture2DArray)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -138,7 +138,7 @@
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of int)
 0:46          'txval31' (temp 4-component vector of int)
-0:46          textureGather (global 4-component vector of int)
+0:46          textureGather (temp 4-component vector of int)
 0:46            Construct combined texture-sampler (temp isampler2DArray)
 0:46              'g_tTex2di4a' (uniform itexture2DArray)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -151,7 +151,7 @@
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of uint)
 0:47          'txval32' (temp 4-component vector of uint)
-0:47          textureGather (global 4-component vector of uint)
+0:47          textureGather (temp 4-component vector of uint)
 0:47            Construct combined texture-sampler (temp usampler2DArray)
 0:47              'g_tTex2du4a' (uniform utexture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -164,7 +164,7 @@
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of float)
 0:51          'txval40' (temp 4-component vector of float)
-0:51          textureGather (global 4-component vector of float)
+0:51          textureGather (temp 4-component vector of float)
 0:51            Construct combined texture-sampler (temp samplerCubeArray)
 0:51              'g_tTexcdf4a' (uniform textureCubeArray)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -177,7 +177,7 @@
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of int)
 0:52          'txval41' (temp 4-component vector of int)
-0:52          textureGather (global 4-component vector of int)
+0:52          textureGather (temp 4-component vector of int)
 0:52            Construct combined texture-sampler (temp isamplerCubeArray)
 0:52              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -190,7 +190,7 @@
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of uint)
 0:53          'txval42' (temp 4-component vector of uint)
-0:53          textureGather (global 4-component vector of uint)
+0:53          textureGather (temp 4-component vector of uint)
 0:53            Construct combined texture-sampler (temp usamplerCubeArray)
 0:53              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -203,7 +203,7 @@
 0:55      Sequence
 0:55        move second child to first child (temp 4-component vector of float)
 0:55          'txval50' (temp 4-component vector of float)
-0:55          textureGather (global 4-component vector of float)
+0:55          textureGather (temp 4-component vector of float)
 0:55            Construct combined texture-sampler (temp samplerCubeArray)
 0:55              'g_tTexcdf4a' (uniform textureCubeArray)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -216,7 +216,7 @@
 0:56      Sequence
 0:56        move second child to first child (temp 4-component vector of int)
 0:56          'txval51' (temp 4-component vector of int)
-0:56          textureGather (global 4-component vector of int)
+0:56          textureGather (temp 4-component vector of int)
 0:56            Construct combined texture-sampler (temp isamplerCubeArray)
 0:56              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:56              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -229,7 +229,7 @@
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of uint)
 0:57          'txval52' (temp 4-component vector of uint)
-0:57          textureGather (global 4-component vector of uint)
+0:57          textureGather (temp 4-component vector of uint)
 0:57            Construct combined texture-sampler (temp usamplerCubeArray)
 0:57              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -242,7 +242,7 @@
 0:59      Sequence
 0:59        move second child to first child (temp 4-component vector of float)
 0:59          'txval60' (temp 4-component vector of float)
-0:59          textureGather (global 4-component vector of float)
+0:59          textureGather (temp 4-component vector of float)
 0:59            Construct combined texture-sampler (temp samplerCubeArray)
 0:59              'g_tTexcdf4a' (uniform textureCubeArray)
 0:59              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -255,7 +255,7 @@
 0:60      Sequence
 0:60        move second child to first child (temp 4-component vector of int)
 0:60          'txval61' (temp 4-component vector of int)
-0:60          textureGather (global 4-component vector of int)
+0:60          textureGather (temp 4-component vector of int)
 0:60            Construct combined texture-sampler (temp isamplerCubeArray)
 0:60              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:60              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -268,7 +268,7 @@
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of uint)
 0:61          'txval62' (temp 4-component vector of uint)
-0:61          textureGather (global 4-component vector of uint)
+0:61          textureGather (temp 4-component vector of uint)
 0:61            Construct combined texture-sampler (temp usamplerCubeArray)
 0:61              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -281,7 +281,7 @@
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of float)
 0:63          'txval70' (temp 4-component vector of float)
-0:63          textureGather (global 4-component vector of float)
+0:63          textureGather (temp 4-component vector of float)
 0:63            Construct combined texture-sampler (temp samplerCubeArray)
 0:63              'g_tTexcdf4a' (uniform textureCubeArray)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -294,7 +294,7 @@
 0:64      Sequence
 0:64        move second child to first child (temp 4-component vector of int)
 0:64          'txval71' (temp 4-component vector of int)
-0:64          textureGather (global 4-component vector of int)
+0:64          textureGather (temp 4-component vector of int)
 0:64            Construct combined texture-sampler (temp isamplerCubeArray)
 0:64              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:64              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -307,7 +307,7 @@
 0:65      Sequence
 0:65        move second child to first child (temp 4-component vector of uint)
 0:65          'txval72' (temp 4-component vector of uint)
-0:65          textureGather (global 4-component vector of uint)
+0:65          textureGather (temp 4-component vector of uint)
 0:65            Construct combined texture-sampler (temp usamplerCubeArray)
 0:65              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:65              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -350,6 +350,8 @@
 0:70                1 (const int)
 0:70        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=0 ) uniform texture1DArray)
@@ -361,9 +363,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
 
 
 Linked fragment stage:
@@ -378,7 +378,7 @@
 0:33      Sequence
 0:33        move second child to first child (temp 4-component vector of float)
 0:33          'txval00' (temp 4-component vector of float)
-0:33          textureGather (global 4-component vector of float)
+0:33          textureGather (temp 4-component vector of float)
 0:33            Construct combined texture-sampler (temp sampler2DArray)
 0:33              'g_tTex2df4a' (uniform texture2DArray)
 0:33              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -391,7 +391,7 @@
 0:34      Sequence
 0:34        move second child to first child (temp 4-component vector of int)
 0:34          'txval01' (temp 4-component vector of int)
-0:34          textureGather (global 4-component vector of int)
+0:34          textureGather (temp 4-component vector of int)
 0:34            Construct combined texture-sampler (temp isampler2DArray)
 0:34              'g_tTex2di4a' (uniform itexture2DArray)
 0:34              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -404,7 +404,7 @@
 0:35      Sequence
 0:35        move second child to first child (temp 4-component vector of uint)
 0:35          'txval02' (temp 4-component vector of uint)
-0:35          textureGather (global 4-component vector of uint)
+0:35          textureGather (temp 4-component vector of uint)
 0:35            Construct combined texture-sampler (temp usampler2DArray)
 0:35              'g_tTex2du4a' (uniform utexture2DArray)
 0:35              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -417,7 +417,7 @@
 0:37      Sequence
 0:37        move second child to first child (temp 4-component vector of float)
 0:37          'txval10' (temp 4-component vector of float)
-0:37          textureGather (global 4-component vector of float)
+0:37          textureGather (temp 4-component vector of float)
 0:37            Construct combined texture-sampler (temp sampler2DArray)
 0:37              'g_tTex2df4a' (uniform texture2DArray)
 0:37              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -430,7 +430,7 @@
 0:38      Sequence
 0:38        move second child to first child (temp 4-component vector of int)
 0:38          'txval11' (temp 4-component vector of int)
-0:38          textureGather (global 4-component vector of int)
+0:38          textureGather (temp 4-component vector of int)
 0:38            Construct combined texture-sampler (temp isampler2DArray)
 0:38              'g_tTex2di4a' (uniform itexture2DArray)
 0:38              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -443,7 +443,7 @@
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of uint)
 0:39          'txval12' (temp 4-component vector of uint)
-0:39          textureGather (global 4-component vector of uint)
+0:39          textureGather (temp 4-component vector of uint)
 0:39            Construct combined texture-sampler (temp usampler2DArray)
 0:39              'g_tTex2du4a' (uniform utexture2DArray)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -456,7 +456,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of float)
 0:41          'txval20' (temp 4-component vector of float)
-0:41          textureGather (global 4-component vector of float)
+0:41          textureGather (temp 4-component vector of float)
 0:41            Construct combined texture-sampler (temp sampler2DArray)
 0:41              'g_tTex2df4a' (uniform texture2DArray)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -469,7 +469,7 @@
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of int)
 0:42          'txval21' (temp 4-component vector of int)
-0:42          textureGather (global 4-component vector of int)
+0:42          textureGather (temp 4-component vector of int)
 0:42            Construct combined texture-sampler (temp isampler2DArray)
 0:42              'g_tTex2di4a' (uniform itexture2DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -482,7 +482,7 @@
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of uint)
 0:43          'txval22' (temp 4-component vector of uint)
-0:43          textureGather (global 4-component vector of uint)
+0:43          textureGather (temp 4-component vector of uint)
 0:43            Construct combined texture-sampler (temp usampler2DArray)
 0:43              'g_tTex2du4a' (uniform utexture2DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -495,7 +495,7 @@
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of float)
 0:45          'txval30' (temp 4-component vector of float)
-0:45          textureGather (global 4-component vector of float)
+0:45          textureGather (temp 4-component vector of float)
 0:45            Construct combined texture-sampler (temp sampler2DArray)
 0:45              'g_tTex2df4a' (uniform texture2DArray)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -508,7 +508,7 @@
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of int)
 0:46          'txval31' (temp 4-component vector of int)
-0:46          textureGather (global 4-component vector of int)
+0:46          textureGather (temp 4-component vector of int)
 0:46            Construct combined texture-sampler (temp isampler2DArray)
 0:46              'g_tTex2di4a' (uniform itexture2DArray)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -521,7 +521,7 @@
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of uint)
 0:47          'txval32' (temp 4-component vector of uint)
-0:47          textureGather (global 4-component vector of uint)
+0:47          textureGather (temp 4-component vector of uint)
 0:47            Construct combined texture-sampler (temp usampler2DArray)
 0:47              'g_tTex2du4a' (uniform utexture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -534,7 +534,7 @@
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of float)
 0:51          'txval40' (temp 4-component vector of float)
-0:51          textureGather (global 4-component vector of float)
+0:51          textureGather (temp 4-component vector of float)
 0:51            Construct combined texture-sampler (temp samplerCubeArray)
 0:51              'g_tTexcdf4a' (uniform textureCubeArray)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -547,7 +547,7 @@
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of int)
 0:52          'txval41' (temp 4-component vector of int)
-0:52          textureGather (global 4-component vector of int)
+0:52          textureGather (temp 4-component vector of int)
 0:52            Construct combined texture-sampler (temp isamplerCubeArray)
 0:52              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -560,7 +560,7 @@
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of uint)
 0:53          'txval42' (temp 4-component vector of uint)
-0:53          textureGather (global 4-component vector of uint)
+0:53          textureGather (temp 4-component vector of uint)
 0:53            Construct combined texture-sampler (temp usamplerCubeArray)
 0:53              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -573,7 +573,7 @@
 0:55      Sequence
 0:55        move second child to first child (temp 4-component vector of float)
 0:55          'txval50' (temp 4-component vector of float)
-0:55          textureGather (global 4-component vector of float)
+0:55          textureGather (temp 4-component vector of float)
 0:55            Construct combined texture-sampler (temp samplerCubeArray)
 0:55              'g_tTexcdf4a' (uniform textureCubeArray)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -586,7 +586,7 @@
 0:56      Sequence
 0:56        move second child to first child (temp 4-component vector of int)
 0:56          'txval51' (temp 4-component vector of int)
-0:56          textureGather (global 4-component vector of int)
+0:56          textureGather (temp 4-component vector of int)
 0:56            Construct combined texture-sampler (temp isamplerCubeArray)
 0:56              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:56              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -599,7 +599,7 @@
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of uint)
 0:57          'txval52' (temp 4-component vector of uint)
-0:57          textureGather (global 4-component vector of uint)
+0:57          textureGather (temp 4-component vector of uint)
 0:57            Construct combined texture-sampler (temp usamplerCubeArray)
 0:57              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -612,7 +612,7 @@
 0:59      Sequence
 0:59        move second child to first child (temp 4-component vector of float)
 0:59          'txval60' (temp 4-component vector of float)
-0:59          textureGather (global 4-component vector of float)
+0:59          textureGather (temp 4-component vector of float)
 0:59            Construct combined texture-sampler (temp samplerCubeArray)
 0:59              'g_tTexcdf4a' (uniform textureCubeArray)
 0:59              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -625,7 +625,7 @@
 0:60      Sequence
 0:60        move second child to first child (temp 4-component vector of int)
 0:60          'txval61' (temp 4-component vector of int)
-0:60          textureGather (global 4-component vector of int)
+0:60          textureGather (temp 4-component vector of int)
 0:60            Construct combined texture-sampler (temp isamplerCubeArray)
 0:60              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:60              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -638,7 +638,7 @@
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of uint)
 0:61          'txval62' (temp 4-component vector of uint)
-0:61          textureGather (global 4-component vector of uint)
+0:61          textureGather (temp 4-component vector of uint)
 0:61            Construct combined texture-sampler (temp usamplerCubeArray)
 0:61              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -651,7 +651,7 @@
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of float)
 0:63          'txval70' (temp 4-component vector of float)
-0:63          textureGather (global 4-component vector of float)
+0:63          textureGather (temp 4-component vector of float)
 0:63            Construct combined texture-sampler (temp samplerCubeArray)
 0:63              'g_tTexcdf4a' (uniform textureCubeArray)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -664,7 +664,7 @@
 0:64      Sequence
 0:64        move second child to first child (temp 4-component vector of int)
 0:64          'txval71' (temp 4-component vector of int)
-0:64          textureGather (global 4-component vector of int)
+0:64          textureGather (temp 4-component vector of int)
 0:64            Construct combined texture-sampler (temp isamplerCubeArray)
 0:64              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:64              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -677,7 +677,7 @@
 0:65      Sequence
 0:65        move second child to first child (temp 4-component vector of uint)
 0:65          'txval72' (temp 4-component vector of uint)
-0:65          textureGather (global 4-component vector of uint)
+0:65          textureGather (temp 4-component vector of uint)
 0:65            Construct combined texture-sampler (temp usamplerCubeArray)
 0:65              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:65              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -720,6 +720,8 @@
 0:70                1 (const int)
 0:70        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=0 ) uniform texture1DArray)
@@ -731,9 +733,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index ef1e7e0..d2fb0b1 100644
--- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -8,7 +8,7 @@
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval00' (temp 4-component vector of float)
-0:39          textureGather (global 4-component vector of float)
+0:39          textureGather (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler2D)
 0:39              'g_tTex2df4' (uniform texture2D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -21,7 +21,7 @@
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval01' (temp 4-component vector of int)
-0:40          textureGather (global 4-component vector of int)
+0:40          textureGather (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler2D)
 0:40              'g_tTex2di4' (uniform itexture2D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -34,7 +34,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval02' (temp 4-component vector of uint)
-0:41          textureGather (global 4-component vector of uint)
+0:41          textureGather (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler2D)
 0:41              'g_tTex2du4' (uniform utexture2D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -47,7 +47,7 @@
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of float)
 0:43          'txval10' (temp 4-component vector of float)
-0:43          textureGather (global 4-component vector of float)
+0:43          textureGather (temp 4-component vector of float)
 0:43            Construct combined texture-sampler (temp sampler2D)
 0:43              'g_tTex2df4' (uniform texture2D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -60,7 +60,7 @@
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of int)
 0:44          'txval11' (temp 4-component vector of int)
-0:44          textureGather (global 4-component vector of int)
+0:44          textureGather (temp 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isampler2D)
 0:44              'g_tTex2di4' (uniform itexture2D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -73,7 +73,7 @@
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of uint)
 0:45          'txval12' (temp 4-component vector of uint)
-0:45          textureGather (global 4-component vector of uint)
+0:45          textureGather (temp 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usampler2D)
 0:45              'g_tTex2du4' (uniform utexture2D)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -86,7 +86,7 @@
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of float)
 0:47          'txval20' (temp 4-component vector of float)
-0:47          textureGather (global 4-component vector of float)
+0:47          textureGather (temp 4-component vector of float)
 0:47            Construct combined texture-sampler (temp sampler2D)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -99,7 +99,7 @@
 0:48      Sequence
 0:48        move second child to first child (temp 4-component vector of int)
 0:48          'txval21' (temp 4-component vector of int)
-0:48          textureGather (global 4-component vector of int)
+0:48          textureGather (temp 4-component vector of int)
 0:48            Construct combined texture-sampler (temp isampler2D)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -112,7 +112,7 @@
 0:49      Sequence
 0:49        move second child to first child (temp 4-component vector of uint)
 0:49          'txval22' (temp 4-component vector of uint)
-0:49          textureGather (global 4-component vector of uint)
+0:49          textureGather (temp 4-component vector of uint)
 0:49            Construct combined texture-sampler (temp usampler2D)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -125,7 +125,7 @@
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of float)
 0:51          'txval30' (temp 4-component vector of float)
-0:51          textureGather (global 4-component vector of float)
+0:51          textureGather (temp 4-component vector of float)
 0:51            Construct combined texture-sampler (temp sampler2D)
 0:51              'g_tTex2df4' (uniform texture2D)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -138,7 +138,7 @@
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of int)
 0:52          'txval31' (temp 4-component vector of int)
-0:52          textureGather (global 4-component vector of int)
+0:52          textureGather (temp 4-component vector of int)
 0:52            Construct combined texture-sampler (temp isampler2D)
 0:52              'g_tTex2di4' (uniform itexture2D)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -151,7 +151,7 @@
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of uint)
 0:53          'txval32' (temp 4-component vector of uint)
-0:53          textureGather (global 4-component vector of uint)
+0:53          textureGather (temp 4-component vector of uint)
 0:53            Construct combined texture-sampler (temp usampler2D)
 0:53              'g_tTex2du4' (uniform utexture2D)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -164,7 +164,7 @@
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of float)
 0:57          'txval40' (temp 4-component vector of float)
-0:57          textureGather (global 4-component vector of float)
+0:57          textureGather (temp 4-component vector of float)
 0:57            Construct combined texture-sampler (temp samplerCube)
 0:57              'g_tTexcdf4' (uniform textureCube)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -177,7 +177,7 @@
 0:58      Sequence
 0:58        move second child to first child (temp 4-component vector of int)
 0:58          'txval41' (temp 4-component vector of int)
-0:58          textureGather (global 4-component vector of int)
+0:58          textureGather (temp 4-component vector of int)
 0:58            Construct combined texture-sampler (temp isamplerCube)
 0:58              'g_tTexcdi4' (uniform itextureCube)
 0:58              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -190,7 +190,7 @@
 0:59      Sequence
 0:59        move second child to first child (temp 4-component vector of uint)
 0:59          'txval42' (temp 4-component vector of uint)
-0:59          textureGather (global 4-component vector of uint)
+0:59          textureGather (temp 4-component vector of uint)
 0:59            Construct combined texture-sampler (temp usamplerCube)
 0:59              'g_tTexcdu4' (uniform utextureCube)
 0:59              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -203,7 +203,7 @@
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of float)
 0:61          'txval50' (temp 4-component vector of float)
-0:61          textureGather (global 4-component vector of float)
+0:61          textureGather (temp 4-component vector of float)
 0:61            Construct combined texture-sampler (temp samplerCube)
 0:61              'g_tTexcdf4' (uniform textureCube)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -216,7 +216,7 @@
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of int)
 0:62          'txval51' (temp 4-component vector of int)
-0:62          textureGather (global 4-component vector of int)
+0:62          textureGather (temp 4-component vector of int)
 0:62            Construct combined texture-sampler (temp isamplerCube)
 0:62              'g_tTexcdi4' (uniform itextureCube)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -229,7 +229,7 @@
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of uint)
 0:63          'txval52' (temp 4-component vector of uint)
-0:63          textureGather (global 4-component vector of uint)
+0:63          textureGather (temp 4-component vector of uint)
 0:63            Construct combined texture-sampler (temp usamplerCube)
 0:63              'g_tTexcdu4' (uniform utextureCube)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -242,7 +242,7 @@
 0:65      Sequence
 0:65        move second child to first child (temp 4-component vector of float)
 0:65          'txval60' (temp 4-component vector of float)
-0:65          textureGather (global 4-component vector of float)
+0:65          textureGather (temp 4-component vector of float)
 0:65            Construct combined texture-sampler (temp samplerCube)
 0:65              'g_tTexcdf4' (uniform textureCube)
 0:65              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -255,7 +255,7 @@
 0:66      Sequence
 0:66        move second child to first child (temp 4-component vector of int)
 0:66          'txval61' (temp 4-component vector of int)
-0:66          textureGather (global 4-component vector of int)
+0:66          textureGather (temp 4-component vector of int)
 0:66            Construct combined texture-sampler (temp isamplerCube)
 0:66              'g_tTexcdi4' (uniform itextureCube)
 0:66              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -268,7 +268,7 @@
 0:67      Sequence
 0:67        move second child to first child (temp 4-component vector of uint)
 0:67          'txval62' (temp 4-component vector of uint)
-0:67          textureGather (global 4-component vector of uint)
+0:67          textureGather (temp 4-component vector of uint)
 0:67            Construct combined texture-sampler (temp usamplerCube)
 0:67              'g_tTexcdu4' (uniform utextureCube)
 0:67              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -281,7 +281,7 @@
 0:69      Sequence
 0:69        move second child to first child (temp 4-component vector of float)
 0:69          'txval70' (temp 4-component vector of float)
-0:69          textureGather (global 4-component vector of float)
+0:69          textureGather (temp 4-component vector of float)
 0:69            Construct combined texture-sampler (temp samplerCube)
 0:69              'g_tTexcdf4' (uniform textureCube)
 0:69              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -294,7 +294,7 @@
 0:70      Sequence
 0:70        move second child to first child (temp 4-component vector of int)
 0:70          'txval71' (temp 4-component vector of int)
-0:70          textureGather (global 4-component vector of int)
+0:70          textureGather (temp 4-component vector of int)
 0:70            Construct combined texture-sampler (temp isamplerCube)
 0:70              'g_tTexcdi4' (uniform itextureCube)
 0:70              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -307,7 +307,7 @@
 0:71      Sequence
 0:71        move second child to first child (temp 4-component vector of uint)
 0:71          'txval72' (temp 4-component vector of uint)
-0:71          textureGather (global 4-component vector of uint)
+0:71          textureGather (temp 4-component vector of uint)
 0:71            Construct combined texture-sampler (temp usamplerCube)
 0:71              'g_tTexcdu4' (uniform utextureCube)
 0:71              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -350,6 +350,8 @@
 0:76                1 (const int)
 0:76        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -365,9 +367,7 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
 
 
 Linked fragment stage:
@@ -382,7 +382,7 @@
 0:39      Sequence
 0:39        move second child to first child (temp 4-component vector of float)
 0:39          'txval00' (temp 4-component vector of float)
-0:39          textureGather (global 4-component vector of float)
+0:39          textureGather (temp 4-component vector of float)
 0:39            Construct combined texture-sampler (temp sampler2D)
 0:39              'g_tTex2df4' (uniform texture2D)
 0:39              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -395,7 +395,7 @@
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of int)
 0:40          'txval01' (temp 4-component vector of int)
-0:40          textureGather (global 4-component vector of int)
+0:40          textureGather (temp 4-component vector of int)
 0:40            Construct combined texture-sampler (temp isampler2D)
 0:40              'g_tTex2di4' (uniform itexture2D)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -408,7 +408,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of uint)
 0:41          'txval02' (temp 4-component vector of uint)
-0:41          textureGather (global 4-component vector of uint)
+0:41          textureGather (temp 4-component vector of uint)
 0:41            Construct combined texture-sampler (temp usampler2D)
 0:41              'g_tTex2du4' (uniform utexture2D)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -421,7 +421,7 @@
 0:43      Sequence
 0:43        move second child to first child (temp 4-component vector of float)
 0:43          'txval10' (temp 4-component vector of float)
-0:43          textureGather (global 4-component vector of float)
+0:43          textureGather (temp 4-component vector of float)
 0:43            Construct combined texture-sampler (temp sampler2D)
 0:43              'g_tTex2df4' (uniform texture2D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -434,7 +434,7 @@
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of int)
 0:44          'txval11' (temp 4-component vector of int)
-0:44          textureGather (global 4-component vector of int)
+0:44          textureGather (temp 4-component vector of int)
 0:44            Construct combined texture-sampler (temp isampler2D)
 0:44              'g_tTex2di4' (uniform itexture2D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -447,7 +447,7 @@
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of uint)
 0:45          'txval12' (temp 4-component vector of uint)
-0:45          textureGather (global 4-component vector of uint)
+0:45          textureGather (temp 4-component vector of uint)
 0:45            Construct combined texture-sampler (temp usampler2D)
 0:45              'g_tTex2du4' (uniform utexture2D)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -460,7 +460,7 @@
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of float)
 0:47          'txval20' (temp 4-component vector of float)
-0:47          textureGather (global 4-component vector of float)
+0:47          textureGather (temp 4-component vector of float)
 0:47            Construct combined texture-sampler (temp sampler2D)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -473,7 +473,7 @@
 0:48      Sequence
 0:48        move second child to first child (temp 4-component vector of int)
 0:48          'txval21' (temp 4-component vector of int)
-0:48          textureGather (global 4-component vector of int)
+0:48          textureGather (temp 4-component vector of int)
 0:48            Construct combined texture-sampler (temp isampler2D)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -486,7 +486,7 @@
 0:49      Sequence
 0:49        move second child to first child (temp 4-component vector of uint)
 0:49          'txval22' (temp 4-component vector of uint)
-0:49          textureGather (global 4-component vector of uint)
+0:49          textureGather (temp 4-component vector of uint)
 0:49            Construct combined texture-sampler (temp usampler2D)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -499,7 +499,7 @@
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of float)
 0:51          'txval30' (temp 4-component vector of float)
-0:51          textureGather (global 4-component vector of float)
+0:51          textureGather (temp 4-component vector of float)
 0:51            Construct combined texture-sampler (temp sampler2D)
 0:51              'g_tTex2df4' (uniform texture2D)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -512,7 +512,7 @@
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of int)
 0:52          'txval31' (temp 4-component vector of int)
-0:52          textureGather (global 4-component vector of int)
+0:52          textureGather (temp 4-component vector of int)
 0:52            Construct combined texture-sampler (temp isampler2D)
 0:52              'g_tTex2di4' (uniform itexture2D)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -525,7 +525,7 @@
 0:53      Sequence
 0:53        move second child to first child (temp 4-component vector of uint)
 0:53          'txval32' (temp 4-component vector of uint)
-0:53          textureGather (global 4-component vector of uint)
+0:53          textureGather (temp 4-component vector of uint)
 0:53            Construct combined texture-sampler (temp usampler2D)
 0:53              'g_tTex2du4' (uniform utexture2D)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -538,7 +538,7 @@
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of float)
 0:57          'txval40' (temp 4-component vector of float)
-0:57          textureGather (global 4-component vector of float)
+0:57          textureGather (temp 4-component vector of float)
 0:57            Construct combined texture-sampler (temp samplerCube)
 0:57              'g_tTexcdf4' (uniform textureCube)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -551,7 +551,7 @@
 0:58      Sequence
 0:58        move second child to first child (temp 4-component vector of int)
 0:58          'txval41' (temp 4-component vector of int)
-0:58          textureGather (global 4-component vector of int)
+0:58          textureGather (temp 4-component vector of int)
 0:58            Construct combined texture-sampler (temp isamplerCube)
 0:58              'g_tTexcdi4' (uniform itextureCube)
 0:58              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -564,7 +564,7 @@
 0:59      Sequence
 0:59        move second child to first child (temp 4-component vector of uint)
 0:59          'txval42' (temp 4-component vector of uint)
-0:59          textureGather (global 4-component vector of uint)
+0:59          textureGather (temp 4-component vector of uint)
 0:59            Construct combined texture-sampler (temp usamplerCube)
 0:59              'g_tTexcdu4' (uniform utextureCube)
 0:59              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -577,7 +577,7 @@
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of float)
 0:61          'txval50' (temp 4-component vector of float)
-0:61          textureGather (global 4-component vector of float)
+0:61          textureGather (temp 4-component vector of float)
 0:61            Construct combined texture-sampler (temp samplerCube)
 0:61              'g_tTexcdf4' (uniform textureCube)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -590,7 +590,7 @@
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of int)
 0:62          'txval51' (temp 4-component vector of int)
-0:62          textureGather (global 4-component vector of int)
+0:62          textureGather (temp 4-component vector of int)
 0:62            Construct combined texture-sampler (temp isamplerCube)
 0:62              'g_tTexcdi4' (uniform itextureCube)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -603,7 +603,7 @@
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of uint)
 0:63          'txval52' (temp 4-component vector of uint)
-0:63          textureGather (global 4-component vector of uint)
+0:63          textureGather (temp 4-component vector of uint)
 0:63            Construct combined texture-sampler (temp usamplerCube)
 0:63              'g_tTexcdu4' (uniform utextureCube)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -616,7 +616,7 @@
 0:65      Sequence
 0:65        move second child to first child (temp 4-component vector of float)
 0:65          'txval60' (temp 4-component vector of float)
-0:65          textureGather (global 4-component vector of float)
+0:65          textureGather (temp 4-component vector of float)
 0:65            Construct combined texture-sampler (temp samplerCube)
 0:65              'g_tTexcdf4' (uniform textureCube)
 0:65              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -629,7 +629,7 @@
 0:66      Sequence
 0:66        move second child to first child (temp 4-component vector of int)
 0:66          'txval61' (temp 4-component vector of int)
-0:66          textureGather (global 4-component vector of int)
+0:66          textureGather (temp 4-component vector of int)
 0:66            Construct combined texture-sampler (temp isamplerCube)
 0:66              'g_tTexcdi4' (uniform itextureCube)
 0:66              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -642,7 +642,7 @@
 0:67      Sequence
 0:67        move second child to first child (temp 4-component vector of uint)
 0:67          'txval62' (temp 4-component vector of uint)
-0:67          textureGather (global 4-component vector of uint)
+0:67          textureGather (temp 4-component vector of uint)
 0:67            Construct combined texture-sampler (temp usamplerCube)
 0:67              'g_tTexcdu4' (uniform utextureCube)
 0:67              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -655,7 +655,7 @@
 0:69      Sequence
 0:69        move second child to first child (temp 4-component vector of float)
 0:69          'txval70' (temp 4-component vector of float)
-0:69          textureGather (global 4-component vector of float)
+0:69          textureGather (temp 4-component vector of float)
 0:69            Construct combined texture-sampler (temp samplerCube)
 0:69              'g_tTexcdf4' (uniform textureCube)
 0:69              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -668,7 +668,7 @@
 0:70      Sequence
 0:70        move second child to first child (temp 4-component vector of int)
 0:70          'txval71' (temp 4-component vector of int)
-0:70          textureGather (global 4-component vector of int)
+0:70          textureGather (temp 4-component vector of int)
 0:70            Construct combined texture-sampler (temp isamplerCube)
 0:70              'g_tTexcdi4' (uniform itextureCube)
 0:70              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -681,7 +681,7 @@
 0:71      Sequence
 0:71        move second child to first child (temp 4-component vector of uint)
 0:71          'txval72' (temp 4-component vector of uint)
-0:71          textureGather (global 4-component vector of uint)
+0:71          textureGather (temp 4-component vector of uint)
 0:71            Construct combined texture-sampler (temp usamplerCube)
 0:71              'g_tTexcdu4' (uniform utextureCube)
 0:71              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -724,6 +724,8 @@
 0:76                1 (const int)
 0:76        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -739,9 +741,7 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index f178c3b..4339574 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -8,7 +8,7 @@
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of float)
 0:46          'txval001' (temp 4-component vector of float)
-0:46          textureGatherOffset (global 4-component vector of float)
+0:46          textureGatherOffset (temp 4-component vector of float)
 0:46            Construct combined texture-sampler (temp sampler2D)
 0:46              'g_tTex2df4' (uniform texture2D)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -25,7 +25,7 @@
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of int)
 0:47          'txval011' (temp 4-component vector of int)
-0:47          textureGatherOffset (global 4-component vector of int)
+0:47          textureGatherOffset (temp 4-component vector of int)
 0:47            Construct combined texture-sampler (temp isampler2D)
 0:47              'g_tTex2di4' (uniform itexture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -42,7 +42,7 @@
 0:48      Sequence
 0:48        move second child to first child (temp 4-component vector of uint)
 0:48          'txval021' (temp 4-component vector of uint)
-0:48          textureGatherOffset (global 4-component vector of uint)
+0:48          textureGatherOffset (temp 4-component vector of uint)
 0:48            Construct combined texture-sampler (temp usampler2D)
 0:48              'g_tTex2du4' (uniform utexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -59,7 +59,7 @@
 0:50      Sequence
 0:50        move second child to first child (temp 4-component vector of float)
 0:50          'txval004' (temp 4-component vector of float)
-0:50          textureGatherOffsets (global 4-component vector of float)
+0:50          textureGatherOffsets (temp 4-component vector of float)
 0:50            Construct combined texture-sampler (temp sampler2D)
 0:50              'g_tTex2df4' (uniform texture2D)
 0:50              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -89,7 +89,7 @@
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of int)
 0:51          'txval014' (temp 4-component vector of int)
-0:51          textureGatherOffsets (global 4-component vector of int)
+0:51          textureGatherOffsets (temp 4-component vector of int)
 0:51            Construct combined texture-sampler (temp isampler2D)
 0:51              'g_tTex2di4' (uniform itexture2D)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -119,7 +119,7 @@
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of uint)
 0:52          'txval024' (temp 4-component vector of uint)
-0:52          textureGatherOffsets (global 4-component vector of uint)
+0:52          textureGatherOffsets (temp 4-component vector of uint)
 0:52            Construct combined texture-sampler (temp usampler2D)
 0:52              'g_tTex2du4' (uniform utexture2D)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -149,7 +149,7 @@
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of float)
 0:62          'txval101' (temp 4-component vector of float)
-0:62          textureGatherOffset (global 4-component vector of float)
+0:62          textureGatherOffset (temp 4-component vector of float)
 0:62            Construct combined texture-sampler (temp sampler2D)
 0:62              'g_tTex2df4' (uniform texture2D)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -166,7 +166,7 @@
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of int)
 0:63          'txval111' (temp 4-component vector of int)
-0:63          textureGatherOffset (global 4-component vector of int)
+0:63          textureGatherOffset (temp 4-component vector of int)
 0:63            Construct combined texture-sampler (temp isampler2D)
 0:63              'g_tTex2di4' (uniform itexture2D)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -183,7 +183,7 @@
 0:64      Sequence
 0:64        move second child to first child (temp 4-component vector of uint)
 0:64          'txval121' (temp 4-component vector of uint)
-0:64          textureGatherOffset (global 4-component vector of uint)
+0:64          textureGatherOffset (temp 4-component vector of uint)
 0:64            Construct combined texture-sampler (temp usampler2D)
 0:64              'g_tTex2du4' (uniform utexture2D)
 0:64              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -200,7 +200,7 @@
 0:66      Sequence
 0:66        move second child to first child (temp 4-component vector of float)
 0:66          'txval104' (temp 4-component vector of float)
-0:66          textureGatherOffsets (global 4-component vector of float)
+0:66          textureGatherOffsets (temp 4-component vector of float)
 0:66            Construct combined texture-sampler (temp sampler2D)
 0:66              'g_tTex2df4' (uniform texture2D)
 0:66              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -230,7 +230,7 @@
 0:67      Sequence
 0:67        move second child to first child (temp 4-component vector of int)
 0:67          'txval114' (temp 4-component vector of int)
-0:67          textureGatherOffsets (global 4-component vector of int)
+0:67          textureGatherOffsets (temp 4-component vector of int)
 0:67            Construct combined texture-sampler (temp isampler2D)
 0:67              'g_tTex2di4' (uniform itexture2D)
 0:67              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -260,7 +260,7 @@
 0:68      Sequence
 0:68        move second child to first child (temp 4-component vector of uint)
 0:68          'txval124' (temp 4-component vector of uint)
-0:68          textureGatherOffsets (global 4-component vector of uint)
+0:68          textureGatherOffsets (temp 4-component vector of uint)
 0:68            Construct combined texture-sampler (temp usampler2D)
 0:68              'g_tTex2du4' (uniform utexture2D)
 0:68              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -290,7 +290,7 @@
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of float)
 0:78          'txval201' (temp 4-component vector of float)
-0:78          textureGatherOffset (global 4-component vector of float)
+0:78          textureGatherOffset (temp 4-component vector of float)
 0:78            Construct combined texture-sampler (temp sampler2D)
 0:78              'g_tTex2df4' (uniform texture2D)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -307,7 +307,7 @@
 0:79      Sequence
 0:79        move second child to first child (temp 4-component vector of int)
 0:79          'txval211' (temp 4-component vector of int)
-0:79          textureGatherOffset (global 4-component vector of int)
+0:79          textureGatherOffset (temp 4-component vector of int)
 0:79            Construct combined texture-sampler (temp isampler2D)
 0:79              'g_tTex2di4' (uniform itexture2D)
 0:79              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -324,7 +324,7 @@
 0:80      Sequence
 0:80        move second child to first child (temp 4-component vector of uint)
 0:80          'txval221' (temp 4-component vector of uint)
-0:80          textureGatherOffset (global 4-component vector of uint)
+0:80          textureGatherOffset (temp 4-component vector of uint)
 0:80            Construct combined texture-sampler (temp usampler2D)
 0:80              'g_tTex2du4' (uniform utexture2D)
 0:80              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -341,7 +341,7 @@
 0:82      Sequence
 0:82        move second child to first child (temp 4-component vector of float)
 0:82          'txval204' (temp 4-component vector of float)
-0:82          textureGatherOffsets (global 4-component vector of float)
+0:82          textureGatherOffsets (temp 4-component vector of float)
 0:82            Construct combined texture-sampler (temp sampler2D)
 0:82              'g_tTex2df4' (uniform texture2D)
 0:82              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -371,7 +371,7 @@
 0:83      Sequence
 0:83        move second child to first child (temp 4-component vector of int)
 0:83          'txval214' (temp 4-component vector of int)
-0:83          textureGatherOffsets (global 4-component vector of int)
+0:83          textureGatherOffsets (temp 4-component vector of int)
 0:83            Construct combined texture-sampler (temp isampler2D)
 0:83              'g_tTex2di4' (uniform itexture2D)
 0:83              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -401,7 +401,7 @@
 0:84      Sequence
 0:84        move second child to first child (temp 4-component vector of uint)
 0:84          'txval224' (temp 4-component vector of uint)
-0:84          textureGatherOffsets (global 4-component vector of uint)
+0:84          textureGatherOffsets (temp 4-component vector of uint)
 0:84            Construct combined texture-sampler (temp usampler2D)
 0:84              'g_tTex2du4' (uniform utexture2D)
 0:84              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -431,7 +431,7 @@
 0:94      Sequence
 0:94        move second child to first child (temp 4-component vector of float)
 0:94          'txval301' (temp 4-component vector of float)
-0:94          textureGatherOffset (global 4-component vector of float)
+0:94          textureGatherOffset (temp 4-component vector of float)
 0:94            Construct combined texture-sampler (temp sampler2D)
 0:94              'g_tTex2df4' (uniform texture2D)
 0:94              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -448,7 +448,7 @@
 0:95      Sequence
 0:95        move second child to first child (temp 4-component vector of int)
 0:95          'txval311' (temp 4-component vector of int)
-0:95          textureGatherOffset (global 4-component vector of int)
+0:95          textureGatherOffset (temp 4-component vector of int)
 0:95            Construct combined texture-sampler (temp isampler2D)
 0:95              'g_tTex2di4' (uniform itexture2D)
 0:95              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -465,7 +465,7 @@
 0:96      Sequence
 0:96        move second child to first child (temp 4-component vector of uint)
 0:96          'txval321' (temp 4-component vector of uint)
-0:96          textureGatherOffset (global 4-component vector of uint)
+0:96          textureGatherOffset (temp 4-component vector of uint)
 0:96            Construct combined texture-sampler (temp usampler2D)
 0:96              'g_tTex2du4' (uniform utexture2D)
 0:96              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -482,7 +482,7 @@
 0:98      Sequence
 0:98        move second child to first child (temp 4-component vector of float)
 0:98          'txval304' (temp 4-component vector of float)
-0:98          textureGatherOffsets (global 4-component vector of float)
+0:98          textureGatherOffsets (temp 4-component vector of float)
 0:98            Construct combined texture-sampler (temp sampler2D)
 0:98              'g_tTex2df4' (uniform texture2D)
 0:98              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -512,7 +512,7 @@
 0:99      Sequence
 0:99        move second child to first child (temp 4-component vector of int)
 0:99          'txval314' (temp 4-component vector of int)
-0:99          textureGatherOffsets (global 4-component vector of int)
+0:99          textureGatherOffsets (temp 4-component vector of int)
 0:99            Construct combined texture-sampler (temp isampler2D)
 0:99              'g_tTex2di4' (uniform itexture2D)
 0:99              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -542,7 +542,7 @@
 0:100      Sequence
 0:100        move second child to first child (temp 4-component vector of uint)
 0:100          'txval324' (temp 4-component vector of uint)
-0:100          textureGatherOffsets (global 4-component vector of uint)
+0:100          textureGatherOffsets (temp 4-component vector of uint)
 0:100            Construct combined texture-sampler (temp usampler2D)
 0:100              'g_tTex2du4' (uniform utexture2D)
 0:100              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -602,6 +602,8 @@
 0:115                1 (const int)
 0:115        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -617,9 +619,7 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -634,7 +634,7 @@
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of float)
 0:46          'txval001' (temp 4-component vector of float)
-0:46          textureGatherOffset (global 4-component vector of float)
+0:46          textureGatherOffset (temp 4-component vector of float)
 0:46            Construct combined texture-sampler (temp sampler2D)
 0:46              'g_tTex2df4' (uniform texture2D)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -651,7 +651,7 @@
 0:47      Sequence
 0:47        move second child to first child (temp 4-component vector of int)
 0:47          'txval011' (temp 4-component vector of int)
-0:47          textureGatherOffset (global 4-component vector of int)
+0:47          textureGatherOffset (temp 4-component vector of int)
 0:47            Construct combined texture-sampler (temp isampler2D)
 0:47              'g_tTex2di4' (uniform itexture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -668,7 +668,7 @@
 0:48      Sequence
 0:48        move second child to first child (temp 4-component vector of uint)
 0:48          'txval021' (temp 4-component vector of uint)
-0:48          textureGatherOffset (global 4-component vector of uint)
+0:48          textureGatherOffset (temp 4-component vector of uint)
 0:48            Construct combined texture-sampler (temp usampler2D)
 0:48              'g_tTex2du4' (uniform utexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -685,7 +685,7 @@
 0:50      Sequence
 0:50        move second child to first child (temp 4-component vector of float)
 0:50          'txval004' (temp 4-component vector of float)
-0:50          textureGatherOffsets (global 4-component vector of float)
+0:50          textureGatherOffsets (temp 4-component vector of float)
 0:50            Construct combined texture-sampler (temp sampler2D)
 0:50              'g_tTex2df4' (uniform texture2D)
 0:50              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -715,7 +715,7 @@
 0:51      Sequence
 0:51        move second child to first child (temp 4-component vector of int)
 0:51          'txval014' (temp 4-component vector of int)
-0:51          textureGatherOffsets (global 4-component vector of int)
+0:51          textureGatherOffsets (temp 4-component vector of int)
 0:51            Construct combined texture-sampler (temp isampler2D)
 0:51              'g_tTex2di4' (uniform itexture2D)
 0:51              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -745,7 +745,7 @@
 0:52      Sequence
 0:52        move second child to first child (temp 4-component vector of uint)
 0:52          'txval024' (temp 4-component vector of uint)
-0:52          textureGatherOffsets (global 4-component vector of uint)
+0:52          textureGatherOffsets (temp 4-component vector of uint)
 0:52            Construct combined texture-sampler (temp usampler2D)
 0:52              'g_tTex2du4' (uniform utexture2D)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -775,7 +775,7 @@
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of float)
 0:62          'txval101' (temp 4-component vector of float)
-0:62          textureGatherOffset (global 4-component vector of float)
+0:62          textureGatherOffset (temp 4-component vector of float)
 0:62            Construct combined texture-sampler (temp sampler2D)
 0:62              'g_tTex2df4' (uniform texture2D)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -792,7 +792,7 @@
 0:63      Sequence
 0:63        move second child to first child (temp 4-component vector of int)
 0:63          'txval111' (temp 4-component vector of int)
-0:63          textureGatherOffset (global 4-component vector of int)
+0:63          textureGatherOffset (temp 4-component vector of int)
 0:63            Construct combined texture-sampler (temp isampler2D)
 0:63              'g_tTex2di4' (uniform itexture2D)
 0:63              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -809,7 +809,7 @@
 0:64      Sequence
 0:64        move second child to first child (temp 4-component vector of uint)
 0:64          'txval121' (temp 4-component vector of uint)
-0:64          textureGatherOffset (global 4-component vector of uint)
+0:64          textureGatherOffset (temp 4-component vector of uint)
 0:64            Construct combined texture-sampler (temp usampler2D)
 0:64              'g_tTex2du4' (uniform utexture2D)
 0:64              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -826,7 +826,7 @@
 0:66      Sequence
 0:66        move second child to first child (temp 4-component vector of float)
 0:66          'txval104' (temp 4-component vector of float)
-0:66          textureGatherOffsets (global 4-component vector of float)
+0:66          textureGatherOffsets (temp 4-component vector of float)
 0:66            Construct combined texture-sampler (temp sampler2D)
 0:66              'g_tTex2df4' (uniform texture2D)
 0:66              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -856,7 +856,7 @@
 0:67      Sequence
 0:67        move second child to first child (temp 4-component vector of int)
 0:67          'txval114' (temp 4-component vector of int)
-0:67          textureGatherOffsets (global 4-component vector of int)
+0:67          textureGatherOffsets (temp 4-component vector of int)
 0:67            Construct combined texture-sampler (temp isampler2D)
 0:67              'g_tTex2di4' (uniform itexture2D)
 0:67              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -886,7 +886,7 @@
 0:68      Sequence
 0:68        move second child to first child (temp 4-component vector of uint)
 0:68          'txval124' (temp 4-component vector of uint)
-0:68          textureGatherOffsets (global 4-component vector of uint)
+0:68          textureGatherOffsets (temp 4-component vector of uint)
 0:68            Construct combined texture-sampler (temp usampler2D)
 0:68              'g_tTex2du4' (uniform utexture2D)
 0:68              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -916,7 +916,7 @@
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of float)
 0:78          'txval201' (temp 4-component vector of float)
-0:78          textureGatherOffset (global 4-component vector of float)
+0:78          textureGatherOffset (temp 4-component vector of float)
 0:78            Construct combined texture-sampler (temp sampler2D)
 0:78              'g_tTex2df4' (uniform texture2D)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -933,7 +933,7 @@
 0:79      Sequence
 0:79        move second child to first child (temp 4-component vector of int)
 0:79          'txval211' (temp 4-component vector of int)
-0:79          textureGatherOffset (global 4-component vector of int)
+0:79          textureGatherOffset (temp 4-component vector of int)
 0:79            Construct combined texture-sampler (temp isampler2D)
 0:79              'g_tTex2di4' (uniform itexture2D)
 0:79              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -950,7 +950,7 @@
 0:80      Sequence
 0:80        move second child to first child (temp 4-component vector of uint)
 0:80          'txval221' (temp 4-component vector of uint)
-0:80          textureGatherOffset (global 4-component vector of uint)
+0:80          textureGatherOffset (temp 4-component vector of uint)
 0:80            Construct combined texture-sampler (temp usampler2D)
 0:80              'g_tTex2du4' (uniform utexture2D)
 0:80              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -967,7 +967,7 @@
 0:82      Sequence
 0:82        move second child to first child (temp 4-component vector of float)
 0:82          'txval204' (temp 4-component vector of float)
-0:82          textureGatherOffsets (global 4-component vector of float)
+0:82          textureGatherOffsets (temp 4-component vector of float)
 0:82            Construct combined texture-sampler (temp sampler2D)
 0:82              'g_tTex2df4' (uniform texture2D)
 0:82              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -997,7 +997,7 @@
 0:83      Sequence
 0:83        move second child to first child (temp 4-component vector of int)
 0:83          'txval214' (temp 4-component vector of int)
-0:83          textureGatherOffsets (global 4-component vector of int)
+0:83          textureGatherOffsets (temp 4-component vector of int)
 0:83            Construct combined texture-sampler (temp isampler2D)
 0:83              'g_tTex2di4' (uniform itexture2D)
 0:83              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1027,7 +1027,7 @@
 0:84      Sequence
 0:84        move second child to first child (temp 4-component vector of uint)
 0:84          'txval224' (temp 4-component vector of uint)
-0:84          textureGatherOffsets (global 4-component vector of uint)
+0:84          textureGatherOffsets (temp 4-component vector of uint)
 0:84            Construct combined texture-sampler (temp usampler2D)
 0:84              'g_tTex2du4' (uniform utexture2D)
 0:84              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1057,7 +1057,7 @@
 0:94      Sequence
 0:94        move second child to first child (temp 4-component vector of float)
 0:94          'txval301' (temp 4-component vector of float)
-0:94          textureGatherOffset (global 4-component vector of float)
+0:94          textureGatherOffset (temp 4-component vector of float)
 0:94            Construct combined texture-sampler (temp sampler2D)
 0:94              'g_tTex2df4' (uniform texture2D)
 0:94              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1074,7 +1074,7 @@
 0:95      Sequence
 0:95        move second child to first child (temp 4-component vector of int)
 0:95          'txval311' (temp 4-component vector of int)
-0:95          textureGatherOffset (global 4-component vector of int)
+0:95          textureGatherOffset (temp 4-component vector of int)
 0:95            Construct combined texture-sampler (temp isampler2D)
 0:95              'g_tTex2di4' (uniform itexture2D)
 0:95              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1091,7 +1091,7 @@
 0:96      Sequence
 0:96        move second child to first child (temp 4-component vector of uint)
 0:96          'txval321' (temp 4-component vector of uint)
-0:96          textureGatherOffset (global 4-component vector of uint)
+0:96          textureGatherOffset (temp 4-component vector of uint)
 0:96            Construct combined texture-sampler (temp usampler2D)
 0:96              'g_tTex2du4' (uniform utexture2D)
 0:96              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1108,7 +1108,7 @@
 0:98      Sequence
 0:98        move second child to first child (temp 4-component vector of float)
 0:98          'txval304' (temp 4-component vector of float)
-0:98          textureGatherOffsets (global 4-component vector of float)
+0:98          textureGatherOffsets (temp 4-component vector of float)
 0:98            Construct combined texture-sampler (temp sampler2D)
 0:98              'g_tTex2df4' (uniform texture2D)
 0:98              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1138,7 +1138,7 @@
 0:99      Sequence
 0:99        move second child to first child (temp 4-component vector of int)
 0:99          'txval314' (temp 4-component vector of int)
-0:99          textureGatherOffsets (global 4-component vector of int)
+0:99          textureGatherOffsets (temp 4-component vector of int)
 0:99            Construct combined texture-sampler (temp isampler2D)
 0:99              'g_tTex2di4' (uniform itexture2D)
 0:99              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1168,7 +1168,7 @@
 0:100      Sequence
 0:100        move second child to first child (temp 4-component vector of uint)
 0:100          'txval324' (temp 4-component vector of uint)
-0:100          textureGatherOffsets (global 4-component vector of uint)
+0:100          textureGatherOffsets (temp 4-component vector of uint)
 0:100            Construct combined texture-sampler (temp usampler2D)
 0:100              'g_tTex2du4' (uniform utexture2D)
 0:100              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1228,6 +1228,8 @@
 0:115                1 (const int)
 0:115        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -1243,9 +1245,7 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index f565379..4722cff 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -8,7 +8,7 @@
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval001' (temp 4-component vector of float)
-0:40          textureGatherOffset (global 4-component vector of float)
+0:40          textureGatherOffset (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp sampler2DArray)
 0:40              'g_tTex2df4a' (uniform texture2DArray)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -25,7 +25,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval011' (temp 4-component vector of int)
-0:41          textureGatherOffset (global 4-component vector of int)
+0:41          textureGatherOffset (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isampler2DArray)
 0:41              'g_tTex2di4a' (uniform itexture2DArray)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -42,7 +42,7 @@
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval021' (temp 4-component vector of uint)
-0:42          textureGatherOffset (global 4-component vector of uint)
+0:42          textureGatherOffset (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usampler2DArray)
 0:42              'g_tTex2du4a' (uniform utexture2DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -59,7 +59,7 @@
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of float)
 0:44          'txval004' (temp 4-component vector of float)
-0:44          textureGatherOffsets (global 4-component vector of float)
+0:44          textureGatherOffsets (temp 4-component vector of float)
 0:44            Construct combined texture-sampler (temp sampler2DArray)
 0:44              'g_tTex2df4a' (uniform texture2DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -89,7 +89,7 @@
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of int)
 0:45          'txval014' (temp 4-component vector of int)
-0:45          textureGatherOffsets (global 4-component vector of int)
+0:45          textureGatherOffsets (temp 4-component vector of int)
 0:45            Construct combined texture-sampler (temp isampler2DArray)
 0:45              'g_tTex2di4a' (uniform itexture2DArray)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -119,7 +119,7 @@
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of uint)
 0:46          'txval024' (temp 4-component vector of uint)
-0:46          textureGatherOffsets (global 4-component vector of uint)
+0:46          textureGatherOffsets (temp 4-component vector of uint)
 0:46            Construct combined texture-sampler (temp usampler2DArray)
 0:46              'g_tTex2du4a' (uniform utexture2DArray)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -149,7 +149,7 @@
 0:56      Sequence
 0:56        move second child to first child (temp 4-component vector of float)
 0:56          'txval101' (temp 4-component vector of float)
-0:56          textureGatherOffset (global 4-component vector of float)
+0:56          textureGatherOffset (temp 4-component vector of float)
 0:56            Construct combined texture-sampler (temp sampler2DArray)
 0:56              'g_tTex2df4a' (uniform texture2DArray)
 0:56              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -166,7 +166,7 @@
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of int)
 0:57          'txval111' (temp 4-component vector of int)
-0:57          textureGatherOffset (global 4-component vector of int)
+0:57          textureGatherOffset (temp 4-component vector of int)
 0:57            Construct combined texture-sampler (temp isampler2DArray)
 0:57              'g_tTex2di4a' (uniform itexture2DArray)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -183,7 +183,7 @@
 0:58      Sequence
 0:58        move second child to first child (temp 4-component vector of uint)
 0:58          'txval121' (temp 4-component vector of uint)
-0:58          textureGatherOffset (global 4-component vector of uint)
+0:58          textureGatherOffset (temp 4-component vector of uint)
 0:58            Construct combined texture-sampler (temp usampler2DArray)
 0:58              'g_tTex2du4a' (uniform utexture2DArray)
 0:58              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -200,7 +200,7 @@
 0:60      Sequence
 0:60        move second child to first child (temp 4-component vector of float)
 0:60          'txval104' (temp 4-component vector of float)
-0:60          textureGatherOffsets (global 4-component vector of float)
+0:60          textureGatherOffsets (temp 4-component vector of float)
 0:60            Construct combined texture-sampler (temp sampler2DArray)
 0:60              'g_tTex2df4a' (uniform texture2DArray)
 0:60              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -230,7 +230,7 @@
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of int)
 0:61          'txval114' (temp 4-component vector of int)
-0:61          textureGatherOffsets (global 4-component vector of int)
+0:61          textureGatherOffsets (temp 4-component vector of int)
 0:61            Construct combined texture-sampler (temp isampler2DArray)
 0:61              'g_tTex2di4a' (uniform itexture2DArray)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -260,7 +260,7 @@
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of uint)
 0:62          'txval124' (temp 4-component vector of uint)
-0:62          textureGatherOffsets (global 4-component vector of uint)
+0:62          textureGatherOffsets (temp 4-component vector of uint)
 0:62            Construct combined texture-sampler (temp usampler2DArray)
 0:62              'g_tTex2du4a' (uniform utexture2DArray)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -290,7 +290,7 @@
 0:72      Sequence
 0:72        move second child to first child (temp 4-component vector of float)
 0:72          'txval201' (temp 4-component vector of float)
-0:72          textureGatherOffset (global 4-component vector of float)
+0:72          textureGatherOffset (temp 4-component vector of float)
 0:72            Construct combined texture-sampler (temp sampler2DArray)
 0:72              'g_tTex2df4a' (uniform texture2DArray)
 0:72              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -307,7 +307,7 @@
 0:73      Sequence
 0:73        move second child to first child (temp 4-component vector of int)
 0:73          'txval211' (temp 4-component vector of int)
-0:73          textureGatherOffset (global 4-component vector of int)
+0:73          textureGatherOffset (temp 4-component vector of int)
 0:73            Construct combined texture-sampler (temp isampler2DArray)
 0:73              'g_tTex2di4a' (uniform itexture2DArray)
 0:73              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -324,7 +324,7 @@
 0:74      Sequence
 0:74        move second child to first child (temp 4-component vector of uint)
 0:74          'txval221' (temp 4-component vector of uint)
-0:74          textureGatherOffset (global 4-component vector of uint)
+0:74          textureGatherOffset (temp 4-component vector of uint)
 0:74            Construct combined texture-sampler (temp usampler2DArray)
 0:74              'g_tTex2du4a' (uniform utexture2DArray)
 0:74              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -341,7 +341,7 @@
 0:76      Sequence
 0:76        move second child to first child (temp 4-component vector of float)
 0:76          'txval204' (temp 4-component vector of float)
-0:76          textureGatherOffsets (global 4-component vector of float)
+0:76          textureGatherOffsets (temp 4-component vector of float)
 0:76            Construct combined texture-sampler (temp sampler2DArray)
 0:76              'g_tTex2df4a' (uniform texture2DArray)
 0:76              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -371,7 +371,7 @@
 0:77      Sequence
 0:77        move second child to first child (temp 4-component vector of int)
 0:77          'txval214' (temp 4-component vector of int)
-0:77          textureGatherOffsets (global 4-component vector of int)
+0:77          textureGatherOffsets (temp 4-component vector of int)
 0:77            Construct combined texture-sampler (temp isampler2DArray)
 0:77              'g_tTex2di4a' (uniform itexture2DArray)
 0:77              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -401,7 +401,7 @@
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of uint)
 0:78          'txval224' (temp 4-component vector of uint)
-0:78          textureGatherOffsets (global 4-component vector of uint)
+0:78          textureGatherOffsets (temp 4-component vector of uint)
 0:78            Construct combined texture-sampler (temp usampler2DArray)
 0:78              'g_tTex2du4a' (uniform utexture2DArray)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -431,7 +431,7 @@
 0:88      Sequence
 0:88        move second child to first child (temp 4-component vector of float)
 0:88          'txval301' (temp 4-component vector of float)
-0:88          textureGatherOffset (global 4-component vector of float)
+0:88          textureGatherOffset (temp 4-component vector of float)
 0:88            Construct combined texture-sampler (temp sampler2DArray)
 0:88              'g_tTex2df4a' (uniform texture2DArray)
 0:88              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -448,7 +448,7 @@
 0:89      Sequence
 0:89        move second child to first child (temp 4-component vector of int)
 0:89          'txval311' (temp 4-component vector of int)
-0:89          textureGatherOffset (global 4-component vector of int)
+0:89          textureGatherOffset (temp 4-component vector of int)
 0:89            Construct combined texture-sampler (temp isampler2DArray)
 0:89              'g_tTex2di4a' (uniform itexture2DArray)
 0:89              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -465,7 +465,7 @@
 0:90      Sequence
 0:90        move second child to first child (temp 4-component vector of uint)
 0:90          'txval321' (temp 4-component vector of uint)
-0:90          textureGatherOffset (global 4-component vector of uint)
+0:90          textureGatherOffset (temp 4-component vector of uint)
 0:90            Construct combined texture-sampler (temp usampler2DArray)
 0:90              'g_tTex2du4a' (uniform utexture2DArray)
 0:90              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -482,7 +482,7 @@
 0:92      Sequence
 0:92        move second child to first child (temp 4-component vector of float)
 0:92          'txval304' (temp 4-component vector of float)
-0:92          textureGatherOffsets (global 4-component vector of float)
+0:92          textureGatherOffsets (temp 4-component vector of float)
 0:92            Construct combined texture-sampler (temp sampler2DArray)
 0:92              'g_tTex2df4a' (uniform texture2DArray)
 0:92              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -512,7 +512,7 @@
 0:93      Sequence
 0:93        move second child to first child (temp 4-component vector of int)
 0:93          'txval314' (temp 4-component vector of int)
-0:93          textureGatherOffsets (global 4-component vector of int)
+0:93          textureGatherOffsets (temp 4-component vector of int)
 0:93            Construct combined texture-sampler (temp isampler2DArray)
 0:93              'g_tTex2di4a' (uniform itexture2DArray)
 0:93              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -542,7 +542,7 @@
 0:94      Sequence
 0:94        move second child to first child (temp 4-component vector of uint)
 0:94          'txval324' (temp 4-component vector of uint)
-0:94          textureGatherOffsets (global 4-component vector of uint)
+0:94          textureGatherOffsets (temp 4-component vector of uint)
 0:94            Construct combined texture-sampler (temp usampler2DArray)
 0:94              'g_tTex2du4a' (uniform utexture2DArray)
 0:94              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -602,6 +602,8 @@
 0:109                1 (const int)
 0:109        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=0 ) uniform texture1DArray)
@@ -613,9 +615,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -630,7 +630,7 @@
 0:40      Sequence
 0:40        move second child to first child (temp 4-component vector of float)
 0:40          'txval001' (temp 4-component vector of float)
-0:40          textureGatherOffset (global 4-component vector of float)
+0:40          textureGatherOffset (temp 4-component vector of float)
 0:40            Construct combined texture-sampler (temp sampler2DArray)
 0:40              'g_tTex2df4a' (uniform texture2DArray)
 0:40              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -647,7 +647,7 @@
 0:41      Sequence
 0:41        move second child to first child (temp 4-component vector of int)
 0:41          'txval011' (temp 4-component vector of int)
-0:41          textureGatherOffset (global 4-component vector of int)
+0:41          textureGatherOffset (temp 4-component vector of int)
 0:41            Construct combined texture-sampler (temp isampler2DArray)
 0:41              'g_tTex2di4a' (uniform itexture2DArray)
 0:41              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -664,7 +664,7 @@
 0:42      Sequence
 0:42        move second child to first child (temp 4-component vector of uint)
 0:42          'txval021' (temp 4-component vector of uint)
-0:42          textureGatherOffset (global 4-component vector of uint)
+0:42          textureGatherOffset (temp 4-component vector of uint)
 0:42            Construct combined texture-sampler (temp usampler2DArray)
 0:42              'g_tTex2du4a' (uniform utexture2DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -681,7 +681,7 @@
 0:44      Sequence
 0:44        move second child to first child (temp 4-component vector of float)
 0:44          'txval004' (temp 4-component vector of float)
-0:44          textureGatherOffsets (global 4-component vector of float)
+0:44          textureGatherOffsets (temp 4-component vector of float)
 0:44            Construct combined texture-sampler (temp sampler2DArray)
 0:44              'g_tTex2df4a' (uniform texture2DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -711,7 +711,7 @@
 0:45      Sequence
 0:45        move second child to first child (temp 4-component vector of int)
 0:45          'txval014' (temp 4-component vector of int)
-0:45          textureGatherOffsets (global 4-component vector of int)
+0:45          textureGatherOffsets (temp 4-component vector of int)
 0:45            Construct combined texture-sampler (temp isampler2DArray)
 0:45              'g_tTex2di4a' (uniform itexture2DArray)
 0:45              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -741,7 +741,7 @@
 0:46      Sequence
 0:46        move second child to first child (temp 4-component vector of uint)
 0:46          'txval024' (temp 4-component vector of uint)
-0:46          textureGatherOffsets (global 4-component vector of uint)
+0:46          textureGatherOffsets (temp 4-component vector of uint)
 0:46            Construct combined texture-sampler (temp usampler2DArray)
 0:46              'g_tTex2du4a' (uniform utexture2DArray)
 0:46              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -771,7 +771,7 @@
 0:56      Sequence
 0:56        move second child to first child (temp 4-component vector of float)
 0:56          'txval101' (temp 4-component vector of float)
-0:56          textureGatherOffset (global 4-component vector of float)
+0:56          textureGatherOffset (temp 4-component vector of float)
 0:56            Construct combined texture-sampler (temp sampler2DArray)
 0:56              'g_tTex2df4a' (uniform texture2DArray)
 0:56              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -788,7 +788,7 @@
 0:57      Sequence
 0:57        move second child to first child (temp 4-component vector of int)
 0:57          'txval111' (temp 4-component vector of int)
-0:57          textureGatherOffset (global 4-component vector of int)
+0:57          textureGatherOffset (temp 4-component vector of int)
 0:57            Construct combined texture-sampler (temp isampler2DArray)
 0:57              'g_tTex2di4a' (uniform itexture2DArray)
 0:57              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -805,7 +805,7 @@
 0:58      Sequence
 0:58        move second child to first child (temp 4-component vector of uint)
 0:58          'txval121' (temp 4-component vector of uint)
-0:58          textureGatherOffset (global 4-component vector of uint)
+0:58          textureGatherOffset (temp 4-component vector of uint)
 0:58            Construct combined texture-sampler (temp usampler2DArray)
 0:58              'g_tTex2du4a' (uniform utexture2DArray)
 0:58              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -822,7 +822,7 @@
 0:60      Sequence
 0:60        move second child to first child (temp 4-component vector of float)
 0:60          'txval104' (temp 4-component vector of float)
-0:60          textureGatherOffsets (global 4-component vector of float)
+0:60          textureGatherOffsets (temp 4-component vector of float)
 0:60            Construct combined texture-sampler (temp sampler2DArray)
 0:60              'g_tTex2df4a' (uniform texture2DArray)
 0:60              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -852,7 +852,7 @@
 0:61      Sequence
 0:61        move second child to first child (temp 4-component vector of int)
 0:61          'txval114' (temp 4-component vector of int)
-0:61          textureGatherOffsets (global 4-component vector of int)
+0:61          textureGatherOffsets (temp 4-component vector of int)
 0:61            Construct combined texture-sampler (temp isampler2DArray)
 0:61              'g_tTex2di4a' (uniform itexture2DArray)
 0:61              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -882,7 +882,7 @@
 0:62      Sequence
 0:62        move second child to first child (temp 4-component vector of uint)
 0:62          'txval124' (temp 4-component vector of uint)
-0:62          textureGatherOffsets (global 4-component vector of uint)
+0:62          textureGatherOffsets (temp 4-component vector of uint)
 0:62            Construct combined texture-sampler (temp usampler2DArray)
 0:62              'g_tTex2du4a' (uniform utexture2DArray)
 0:62              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -912,7 +912,7 @@
 0:72      Sequence
 0:72        move second child to first child (temp 4-component vector of float)
 0:72          'txval201' (temp 4-component vector of float)
-0:72          textureGatherOffset (global 4-component vector of float)
+0:72          textureGatherOffset (temp 4-component vector of float)
 0:72            Construct combined texture-sampler (temp sampler2DArray)
 0:72              'g_tTex2df4a' (uniform texture2DArray)
 0:72              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -929,7 +929,7 @@
 0:73      Sequence
 0:73        move second child to first child (temp 4-component vector of int)
 0:73          'txval211' (temp 4-component vector of int)
-0:73          textureGatherOffset (global 4-component vector of int)
+0:73          textureGatherOffset (temp 4-component vector of int)
 0:73            Construct combined texture-sampler (temp isampler2DArray)
 0:73              'g_tTex2di4a' (uniform itexture2DArray)
 0:73              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -946,7 +946,7 @@
 0:74      Sequence
 0:74        move second child to first child (temp 4-component vector of uint)
 0:74          'txval221' (temp 4-component vector of uint)
-0:74          textureGatherOffset (global 4-component vector of uint)
+0:74          textureGatherOffset (temp 4-component vector of uint)
 0:74            Construct combined texture-sampler (temp usampler2DArray)
 0:74              'g_tTex2du4a' (uniform utexture2DArray)
 0:74              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -963,7 +963,7 @@
 0:76      Sequence
 0:76        move second child to first child (temp 4-component vector of float)
 0:76          'txval204' (temp 4-component vector of float)
-0:76          textureGatherOffsets (global 4-component vector of float)
+0:76          textureGatherOffsets (temp 4-component vector of float)
 0:76            Construct combined texture-sampler (temp sampler2DArray)
 0:76              'g_tTex2df4a' (uniform texture2DArray)
 0:76              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -993,7 +993,7 @@
 0:77      Sequence
 0:77        move second child to first child (temp 4-component vector of int)
 0:77          'txval214' (temp 4-component vector of int)
-0:77          textureGatherOffsets (global 4-component vector of int)
+0:77          textureGatherOffsets (temp 4-component vector of int)
 0:77            Construct combined texture-sampler (temp isampler2DArray)
 0:77              'g_tTex2di4a' (uniform itexture2DArray)
 0:77              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1023,7 +1023,7 @@
 0:78      Sequence
 0:78        move second child to first child (temp 4-component vector of uint)
 0:78          'txval224' (temp 4-component vector of uint)
-0:78          textureGatherOffsets (global 4-component vector of uint)
+0:78          textureGatherOffsets (temp 4-component vector of uint)
 0:78            Construct combined texture-sampler (temp usampler2DArray)
 0:78              'g_tTex2du4a' (uniform utexture2DArray)
 0:78              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1053,7 +1053,7 @@
 0:88      Sequence
 0:88        move second child to first child (temp 4-component vector of float)
 0:88          'txval301' (temp 4-component vector of float)
-0:88          textureGatherOffset (global 4-component vector of float)
+0:88          textureGatherOffset (temp 4-component vector of float)
 0:88            Construct combined texture-sampler (temp sampler2DArray)
 0:88              'g_tTex2df4a' (uniform texture2DArray)
 0:88              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1070,7 +1070,7 @@
 0:89      Sequence
 0:89        move second child to first child (temp 4-component vector of int)
 0:89          'txval311' (temp 4-component vector of int)
-0:89          textureGatherOffset (global 4-component vector of int)
+0:89          textureGatherOffset (temp 4-component vector of int)
 0:89            Construct combined texture-sampler (temp isampler2DArray)
 0:89              'g_tTex2di4a' (uniform itexture2DArray)
 0:89              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1087,7 +1087,7 @@
 0:90      Sequence
 0:90        move second child to first child (temp 4-component vector of uint)
 0:90          'txval321' (temp 4-component vector of uint)
-0:90          textureGatherOffset (global 4-component vector of uint)
+0:90          textureGatherOffset (temp 4-component vector of uint)
 0:90            Construct combined texture-sampler (temp usampler2DArray)
 0:90              'g_tTex2du4a' (uniform utexture2DArray)
 0:90              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1104,7 +1104,7 @@
 0:92      Sequence
 0:92        move second child to first child (temp 4-component vector of float)
 0:92          'txval304' (temp 4-component vector of float)
-0:92          textureGatherOffsets (global 4-component vector of float)
+0:92          textureGatherOffsets (temp 4-component vector of float)
 0:92            Construct combined texture-sampler (temp sampler2DArray)
 0:92              'g_tTex2df4a' (uniform texture2DArray)
 0:92              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1134,7 +1134,7 @@
 0:93      Sequence
 0:93        move second child to first child (temp 4-component vector of int)
 0:93          'txval314' (temp 4-component vector of int)
-0:93          textureGatherOffsets (global 4-component vector of int)
+0:93          textureGatherOffsets (temp 4-component vector of int)
 0:93            Construct combined texture-sampler (temp isampler2DArray)
 0:93              'g_tTex2di4a' (uniform itexture2DArray)
 0:93              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1164,7 +1164,7 @@
 0:94      Sequence
 0:94        move second child to first child (temp 4-component vector of uint)
 0:94          'txval324' (temp 4-component vector of uint)
-0:94          textureGatherOffsets (global 4-component vector of uint)
+0:94          textureGatherOffsets (temp 4-component vector of uint)
 0:94            Construct combined texture-sampler (temp usampler2DArray)
 0:94              'g_tTex2du4a' (uniform utexture2DArray)
 0:94              'g_sSamp' (layout(binding=0 ) uniform sampler)
@@ -1224,6 +1224,8 @@
 0:109                1 (const int)
 0:109        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=0 ) uniform texture1DArray)
@@ -1235,9 +1237,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index 3a55d68..0c488cf 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -1076,6 +1076,8 @@
 0:279                1 (const int)
 0:279        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -1104,8 +1106,6 @@
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -2188,6 +2188,8 @@
 0:279                1 (const int)
 0:279        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -2216,8 +2218,6 @@
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index 3a05bca..c1c90f4 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -46,9 +46,9 @@
 0:26                0 (const int)
 0:26        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
-0:?     'Pos' (out 4-component vector of float Position)
 
 
 Linked vertex stage:
@@ -101,9 +101,9 @@
 0:26                0 (const int)
 0:26        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
-0:?     'Pos' (out 4-component vector of float Position)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
index 717c376..918246b 100644
--- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -326,6 +326,8 @@
 0:95                1 (const int)
 0:95        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -345,9 +347,7 @@
 0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
 0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
 0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -680,6 +680,8 @@
 0:95                1 (const int)
 0:95        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -699,9 +701,7 @@
 0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
 0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
 0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -796,6 +796,14 @@
                               Decorate 214(Depth) BuiltIn FragDepth
                               Decorate 220(g_sSamp) DescriptorSet 0
                               Decorate 220(g_sSamp) Binding 0
+                              MemberDecorate 222($Global) 0 Offset 0
+                              MemberDecorate 222($Global) 1 Offset 8
+                              MemberDecorate 222($Global) 2 Offset 16
+                              MemberDecorate 222($Global) 3 Offset 32
+                              MemberDecorate 222($Global) 4 Offset 48
+                              MemberDecorate 222($Global) 5 Offset 56
+                              MemberDecorate 222($Global) 6 Offset 64
+                              MemberDecorate 222($Global) 7 Offset 80
                               Decorate 222($Global) Block
                               Decorate 224 DescriptorSet 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index 9465c62..5985ead 100644
--- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -14,7 +14,7 @@
 0:16        move second child to first child (temp 2-component vector of float)
 0:16          'r00' (temp 2-component vector of float)
 0:16          ERROR: Bad aggregation op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:16            'g_tTex2dmsf4' (uniform texture2DMS)
 0:16            Constant:
 0:16              1 (const int)
@@ -22,7 +22,7 @@
 0:17        move second child to first child (temp 2-component vector of float)
 0:17          'r01' (temp 2-component vector of float)
 0:17          ERROR: Bad aggregation op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:17            'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:17            Constant:
 0:17              2 (const int)
@@ -59,11 +59,11 @@
 0:22                1 (const int)
 0:22        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex2dmsf4' (uniform texture2DMS)
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -79,7 +79,7 @@
 0:16        move second child to first child (temp 2-component vector of float)
 0:16          'r00' (temp 2-component vector of float)
 0:16          ERROR: Bad aggregation op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:16            'g_tTex2dmsf4' (uniform texture2DMS)
 0:16            Constant:
 0:16              1 (const int)
@@ -87,7 +87,7 @@
 0:17        move second child to first child (temp 2-component vector of float)
 0:17          'r01' (temp 2-component vector of float)
 0:17          ERROR: Bad aggregation op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:17            'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:17            Constant:
 0:17              2 (const int)
@@ -124,10 +124,10 @@
 0:22                1 (const int)
 0:22        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex2dmsf4' (uniform texture2DMS)
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out
new file mode 100644
index 0000000..8e74081
--- /dev/null
+++ b/Test/baseResults/hlsl.identifier.sample.frag.out
@@ -0,0 +1,103 @@
+hlsl.identifier.sample.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Function Definition: sample(i1; (temp int)
+0:9    Function Parameters: 
+0:9      'x' (in int)
+0:?     Sequence
+0:9      Branch: Return with expression
+0:9        'x' (in int)
+0:12  Function Definition: main( (temp 4-component vector of float)
+0:12    Function Parameters: 
+0:?     Sequence
+0:15      Sequence
+0:15        move second child to first child (temp int)
+0:15          'sample' (temp int)
+0:15          Constant:
+0:15            3 (const int)
+0:17      Sequence
+0:17        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:17        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Function Definition: sample(i1; (temp int)
+0:9    Function Parameters: 
+0:9      'x' (in int)
+0:?     Sequence
+0:9      Branch: Return with expression
+0:9        'x' (in int)
+0:12  Function Definition: main( (temp 4-component vector of float)
+0:12    Function Parameters: 
+0:?     Sequence
+0:15      Sequence
+0:15        move second child to first child (temp int)
+0:15          'sample' (temp int)
+0:15          Constant:
+0:15            3 (const int)
+0:17      Sequence
+0:17        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:17        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 24
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 20
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 10  "sample(i1;"
+                              Name 9  "x"
+                              Name 15  "sample"
+                              Name 20  "@entryPointOutput"
+                              Decorate 20(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               8:             TypeFunction 6(int) 7(ptr)
+              16:      6(int) Constant 3
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypePointer Output 18(fvec4)
+20(@entryPointOutput):     19(ptr) Variable Output
+              21:   17(float) Constant 0
+              22:   18(fvec4) ConstantComposite 21 21 21 21
+         4(main):           2 Function None 3
+               5:             Label
+      15(sample):      7(ptr) Variable Function
+                              Store 15(sample) 16
+                              Store 20(@entryPointOutput) 22
+                              Return
+                              FunctionEnd
+  10(sample(i1;):      6(int) Function None 8
+            9(x):      7(ptr) FunctionParameter
+              11:             Label
+              12:      6(int) Load 9(x)
+                              ReturnValue 12
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out
index 3b329ae..c37bff6 100755
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -8,9 +8,10 @@
 0:?     Sequence
 0:3      Test condition and select (temp void)
 0:3        Condition
-0:3        Compare Equal (temp bool)
-0:3          'input' (layout(location=0 ) in 4-component vector of float)
-0:3          'input' (layout(location=0 ) in 4-component vector of float)
+0:3        all (temp bool)
+0:3          Equal (temp 4-component vector of bool)
+0:3            'input' (layout(location=0 ) in 4-component vector of float)
+0:3            'input' (layout(location=0 ) in 4-component vector of float)
 0:3        true case
 0:4        Sequence
 0:4          move second child to first child (temp 4-component vector of float)
@@ -19,9 +20,10 @@
 0:4          Branch: Return
 0:6      Test condition and select (temp void)
 0:6        Condition
-0:6        Compare Equal (temp bool)
-0:6          'input' (layout(location=0 ) in 4-component vector of float)
-0:6          'input' (layout(location=0 ) in 4-component vector of float)
+0:6        all (temp bool)
+0:6          Equal (temp 4-component vector of bool)
+0:6            'input' (layout(location=0 ) in 4-component vector of float)
+0:6            'input' (layout(location=0 ) in 4-component vector of float)
 0:6        true case
 0:7        Sequence
 0:7          move second child to first child (temp 4-component vector of float)
@@ -37,21 +39,24 @@
 0:9          Branch: Return
 0:11      Test condition and select (temp void)
 0:11        Condition
-0:11        Compare Equal (temp bool)
-0:11          'input' (layout(location=0 ) in 4-component vector of float)
-0:11          'input' (layout(location=0 ) in 4-component vector of float)
+0:11        all (temp bool)
+0:11          Equal (temp 4-component vector of bool)
+0:11            'input' (layout(location=0 ) in 4-component vector of float)
+0:11            'input' (layout(location=0 ) in 4-component vector of float)
 0:11        true case is null
 0:14      Test condition and select (temp void)
 0:14        Condition
-0:14        Compare Equal (temp bool)
-0:14          'input' (layout(location=0 ) in 4-component vector of float)
-0:14          'input' (layout(location=0 ) in 4-component vector of float)
+0:14        all (temp bool)
+0:14          Equal (temp 4-component vector of bool)
+0:14            'input' (layout(location=0 ) in 4-component vector of float)
+0:14            'input' (layout(location=0 ) in 4-component vector of float)
 0:14        true case is null
 0:19      Test condition and select (temp void)
 0:19        Condition
-0:19        Compare Equal (temp bool)
-0:19          'input' (layout(location=0 ) in 4-component vector of float)
-0:19          'input' (layout(location=0 ) in 4-component vector of float)
+0:19        all (temp bool)
+0:19          Equal (temp 4-component vector of bool)
+0:19            'input' (layout(location=0 ) in 4-component vector of float)
+0:19            'input' (layout(location=0 ) in 4-component vector of float)
 0:19        true case
 0:?         Sequence
 0:20          Sequence
@@ -61,9 +66,10 @@
 0:20            Branch: Return
 0:23      Test condition and select (temp void)
 0:23        Condition
-0:23        Compare Equal (temp bool)
-0:23          'input' (layout(location=0 ) in 4-component vector of float)
-0:23          'input' (layout(location=0 ) in 4-component vector of float)
+0:23        all (temp bool)
+0:23          Equal (temp 4-component vector of bool)
+0:23            'input' (layout(location=0 ) in 4-component vector of float)
+0:23            'input' (layout(location=0 ) in 4-component vector of float)
 0:23        true case
 0:?         Sequence
 0:24          Sequence
@@ -109,9 +115,10 @@
 0:?     Sequence
 0:3      Test condition and select (temp void)
 0:3        Condition
-0:3        Compare Equal (temp bool)
-0:3          'input' (layout(location=0 ) in 4-component vector of float)
-0:3          'input' (layout(location=0 ) in 4-component vector of float)
+0:3        all (temp bool)
+0:3          Equal (temp 4-component vector of bool)
+0:3            'input' (layout(location=0 ) in 4-component vector of float)
+0:3            'input' (layout(location=0 ) in 4-component vector of float)
 0:3        true case
 0:4        Sequence
 0:4          move second child to first child (temp 4-component vector of float)
@@ -120,9 +127,10 @@
 0:4          Branch: Return
 0:6      Test condition and select (temp void)
 0:6        Condition
-0:6        Compare Equal (temp bool)
-0:6          'input' (layout(location=0 ) in 4-component vector of float)
-0:6          'input' (layout(location=0 ) in 4-component vector of float)
+0:6        all (temp bool)
+0:6          Equal (temp 4-component vector of bool)
+0:6            'input' (layout(location=0 ) in 4-component vector of float)
+0:6            'input' (layout(location=0 ) in 4-component vector of float)
 0:6        true case
 0:7        Sequence
 0:7          move second child to first child (temp 4-component vector of float)
@@ -138,21 +146,24 @@
 0:9          Branch: Return
 0:11      Test condition and select (temp void)
 0:11        Condition
-0:11        Compare Equal (temp bool)
-0:11          'input' (layout(location=0 ) in 4-component vector of float)
-0:11          'input' (layout(location=0 ) in 4-component vector of float)
+0:11        all (temp bool)
+0:11          Equal (temp 4-component vector of bool)
+0:11            'input' (layout(location=0 ) in 4-component vector of float)
+0:11            'input' (layout(location=0 ) in 4-component vector of float)
 0:11        true case is null
 0:14      Test condition and select (temp void)
 0:14        Condition
-0:14        Compare Equal (temp bool)
-0:14          'input' (layout(location=0 ) in 4-component vector of float)
-0:14          'input' (layout(location=0 ) in 4-component vector of float)
+0:14        all (temp bool)
+0:14          Equal (temp 4-component vector of bool)
+0:14            'input' (layout(location=0 ) in 4-component vector of float)
+0:14            'input' (layout(location=0 ) in 4-component vector of float)
 0:14        true case is null
 0:19      Test condition and select (temp void)
 0:19        Condition
-0:19        Compare Equal (temp bool)
-0:19          'input' (layout(location=0 ) in 4-component vector of float)
-0:19          'input' (layout(location=0 ) in 4-component vector of float)
+0:19        all (temp bool)
+0:19          Equal (temp 4-component vector of bool)
+0:19            'input' (layout(location=0 ) in 4-component vector of float)
+0:19            'input' (layout(location=0 ) in 4-component vector of float)
 0:19        true case
 0:?         Sequence
 0:20          Sequence
@@ -162,9 +173,10 @@
 0:20            Branch: Return
 0:23      Test condition and select (temp void)
 0:23        Condition
-0:23        Compare Equal (temp bool)
-0:23          'input' (layout(location=0 ) in 4-component vector of float)
-0:23          'input' (layout(location=0 ) in 4-component vector of float)
+0:23        all (temp bool)
+0:23          Equal (temp 4-component vector of bool)
+0:23            'input' (layout(location=0 ) in 4-component vector of float)
+0:23            'input' (layout(location=0 ) in 4-component vector of float)
 0:23        true case
 0:?         Sequence
 0:24          Sequence
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
index b31921b..42f94ca 100755
--- a/Test/baseResults/hlsl.init.frag.out
+++ b/Test/baseResults/hlsl.init.frag.out
@@ -132,6 +132,8 @@
 0:35            'a1' (global 4-component vector of float)
 0:35        Branch: Return
 0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'a1' (global 4-component vector of float)
 0:?     'b1' (global 4-component vector of float)
 0:?     'a1i' (global 4-component vector of float)
@@ -150,8 +152,6 @@
 0:?     'single2' (global structure{temp 2-component vector of uint v})
 0:?     'single3' (global structure{temp structure{temp int f} s1})
 0:?     'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 
 Linked fragment stage:
@@ -290,6 +290,8 @@
 0:35            'a1' (global 4-component vector of float)
 0:35        Branch: Return
 0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'a1' (global 4-component vector of float)
 0:?     'b1' (global 4-component vector of float)
 0:?     'a1i' (global 4-component vector of float)
@@ -308,8 +310,6 @@
 0:?     'single2' (global structure{temp 2-component vector of uint v})
 0:?     'single3' (global structure{temp structure{temp int f} s1})
 0:?     'single4' (global structure{temp structure{temp 2-component vector of uint v} s1})
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'input' (layout(location=0 ) in 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
index 5d92dd1..07bd370 100644
--- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -5,12 +5,12 @@
 0:3  Function Definition: ComputeShaderFunction( (temp float)
 0:3    Function Parameters: 
 0:?     Sequence
-0:4      MemoryBarrier (global void)
-0:5      AllMemoryBarrierWithGroupSync (global void)
-0:6      GroupMemoryBarrier (global void)
-0:7      GroupMemoryBarrierWithGroupSync (global void)
-0:8      WorkgroupMemoryBarrier (global void)
-0:9      WorkgroupMemoryBarrierWithGroupSync (global void)
+0:4      MemoryBarrier (temp void)
+0:5      AllMemoryBarrierWithGroupSync (temp void)
+0:6      GroupMemoryBarrier (temp void)
+0:7      GroupMemoryBarrierWithGroupSync (temp void)
+0:8      WorkgroupMemoryBarrier (temp void)
+0:9      WorkgroupMemoryBarrierWithGroupSync (temp void)
 0:11      Sequence
 0:11        move second child to first child (temp float)
 0:?           '@entryPointOutput' (layout(location=0 ) out float)
@@ -30,12 +30,12 @@
 0:3  Function Definition: ComputeShaderFunction( (temp float)
 0:3    Function Parameters: 
 0:?     Sequence
-0:4      MemoryBarrier (global void)
-0:5      AllMemoryBarrierWithGroupSync (global void)
-0:6      GroupMemoryBarrier (global void)
-0:7      GroupMemoryBarrierWithGroupSync (global void)
-0:8      WorkgroupMemoryBarrier (global void)
-0:9      WorkgroupMemoryBarrierWithGroupSync (global void)
+0:4      MemoryBarrier (temp void)
+0:5      AllMemoryBarrierWithGroupSync (temp void)
+0:6      GroupMemoryBarrier (temp void)
+0:7      GroupMemoryBarrierWithGroupSync (temp void)
+0:8      WorkgroupMemoryBarrier (temp void)
+0:9      WorkgroupMemoryBarrierWithGroupSync (temp void)
 0:11      Sequence
 0:11        move second child to first child (temp float)
 0:?           '@entryPointOutput' (layout(location=0 ) out float)
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index cd366fc..42ad973 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -10,9 +10,9 @@
 0:17      'inU0' (in uint)
 0:17      'inU1' (in uint)
 0:?     Sequence
-0:21      all (global bool)
+0:21      all (temp bool)
 0:21        'inF0' (in float)
-0:24      AtomicAdd (global void)
+0:24      AtomicAdd (temp void)
 0:24        'gs_ua' (shared uint)
 0:24        'gs_ub' (shared uint)
 0:25      move second child to first child (temp uint)
@@ -20,7 +20,7 @@
 0:25        AtomicAdd (temp uint)
 0:25          'gs_ua' (shared uint)
 0:25          'gs_ub' (shared uint)
-0:26      AtomicAnd (global void)
+0:26      AtomicAnd (temp void)
 0:26        'gs_ua' (shared uint)
 0:26        'gs_ub' (shared uint)
 0:27      move second child to first child (temp uint)
@@ -39,7 +39,7 @@
 0:29        AtomicExchange (temp uint)
 0:29          'gs_ua' (shared uint)
 0:29          'gs_ub' (shared uint)
-0:30      AtomicMax (global void)
+0:30      AtomicMax (temp void)
 0:30        'gs_ua' (shared uint)
 0:30        'gs_ub' (shared uint)
 0:31      move second child to first child (temp uint)
@@ -47,7 +47,7 @@
 0:31        AtomicMax (temp uint)
 0:31          'gs_ua' (shared uint)
 0:31          'gs_ub' (shared uint)
-0:32      AtomicMin (global void)
+0:32      AtomicMin (temp void)
 0:32        'gs_ua' (shared uint)
 0:32        'gs_ub' (shared uint)
 0:33      move second child to first child (temp uint)
@@ -55,7 +55,7 @@
 0:33        AtomicMin (temp uint)
 0:33          'gs_ua' (shared uint)
 0:33          'gs_ub' (shared uint)
-0:34      AtomicOr (global void)
+0:34      AtomicOr (temp void)
 0:34        'gs_ua' (shared uint)
 0:34        'gs_ub' (shared uint)
 0:35      move second child to first child (temp uint)
@@ -63,7 +63,7 @@
 0:35        AtomicOr (temp uint)
 0:35          'gs_ua' (shared uint)
 0:35          'gs_ub' (shared uint)
-0:36      AtomicXor (global void)
+0:36      AtomicXor (temp void)
 0:36        'gs_ua' (shared uint)
 0:36        'gs_ub' (shared uint)
 0:37      move second child to first child (temp uint)
@@ -91,9 +91,9 @@
 0:51      'inU0' (in 2-component vector of uint)
 0:51      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:55      all (global bool)
+0:55      all (temp bool)
 0:55        'inF0' (in 2-component vector of float)
-0:58      AtomicAdd (global void)
+0:58      AtomicAdd (temp void)
 0:58        'gs_ua2' (shared 2-component vector of uint)
 0:58        'gs_ub2' (shared 2-component vector of uint)
 0:59      move second child to first child (temp 2-component vector of uint)
@@ -101,7 +101,7 @@
 0:59        AtomicAdd (temp 2-component vector of uint)
 0:59          'gs_ua2' (shared 2-component vector of uint)
 0:59          'gs_ub2' (shared 2-component vector of uint)
-0:60      AtomicAnd (global void)
+0:60      AtomicAnd (temp void)
 0:60        'gs_ua2' (shared 2-component vector of uint)
 0:60        'gs_ub2' (shared 2-component vector of uint)
 0:61      move second child to first child (temp 2-component vector of uint)
@@ -120,7 +120,7 @@
 0:63        AtomicExchange (temp 2-component vector of uint)
 0:63          'gs_ua2' (shared 2-component vector of uint)
 0:63          'gs_ub2' (shared 2-component vector of uint)
-0:64      AtomicMax (global void)
+0:64      AtomicMax (temp void)
 0:64        'gs_ua2' (shared 2-component vector of uint)
 0:64        'gs_ub2' (shared 2-component vector of uint)
 0:65      move second child to first child (temp 2-component vector of uint)
@@ -128,7 +128,7 @@
 0:65        AtomicMax (temp 2-component vector of uint)
 0:65          'gs_ua2' (shared 2-component vector of uint)
 0:65          'gs_ub2' (shared 2-component vector of uint)
-0:66      AtomicMin (global void)
+0:66      AtomicMin (temp void)
 0:66        'gs_ua2' (shared 2-component vector of uint)
 0:66        'gs_ub2' (shared 2-component vector of uint)
 0:67      move second child to first child (temp 2-component vector of uint)
@@ -136,7 +136,7 @@
 0:67        AtomicMin (temp 2-component vector of uint)
 0:67          'gs_ua2' (shared 2-component vector of uint)
 0:67          'gs_ub2' (shared 2-component vector of uint)
-0:68      AtomicOr (global void)
+0:68      AtomicOr (temp void)
 0:68        'gs_ua2' (shared 2-component vector of uint)
 0:68        'gs_ub2' (shared 2-component vector of uint)
 0:69      move second child to first child (temp 2-component vector of uint)
@@ -144,7 +144,7 @@
 0:69        AtomicOr (temp 2-component vector of uint)
 0:69          'gs_ua2' (shared 2-component vector of uint)
 0:69          'gs_ub2' (shared 2-component vector of uint)
-0:70      AtomicXor (global void)
+0:70      AtomicXor (temp void)
 0:70        'gs_ua2' (shared 2-component vector of uint)
 0:70        'gs_ub2' (shared 2-component vector of uint)
 0:71      move second child to first child (temp 2-component vector of uint)
@@ -164,9 +164,9 @@
 0:78      'inU0' (in 3-component vector of uint)
 0:78      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:82      all (global bool)
+0:82      all (temp bool)
 0:82        'inF0' (in 3-component vector of float)
-0:85      AtomicAdd (global void)
+0:85      AtomicAdd (temp void)
 0:85        'gs_ua3' (shared 3-component vector of uint)
 0:85        'gs_ub3' (shared 3-component vector of uint)
 0:86      move second child to first child (temp 3-component vector of uint)
@@ -174,7 +174,7 @@
 0:86        AtomicAdd (temp 3-component vector of uint)
 0:86          'gs_ua3' (shared 3-component vector of uint)
 0:86          'gs_ub3' (shared 3-component vector of uint)
-0:87      AtomicAnd (global void)
+0:87      AtomicAnd (temp void)
 0:87        'gs_ua3' (shared 3-component vector of uint)
 0:87        'gs_ub3' (shared 3-component vector of uint)
 0:88      move second child to first child (temp 3-component vector of uint)
@@ -193,7 +193,7 @@
 0:90        AtomicExchange (temp 3-component vector of uint)
 0:90          'gs_ua3' (shared 3-component vector of uint)
 0:90          'gs_ub3' (shared 3-component vector of uint)
-0:91      AtomicMax (global void)
+0:91      AtomicMax (temp void)
 0:91        'gs_ua3' (shared 3-component vector of uint)
 0:91        'gs_ub3' (shared 3-component vector of uint)
 0:92      move second child to first child (temp 3-component vector of uint)
@@ -201,7 +201,7 @@
 0:92        AtomicMax (temp 3-component vector of uint)
 0:92          'gs_ua3' (shared 3-component vector of uint)
 0:92          'gs_ub3' (shared 3-component vector of uint)
-0:93      AtomicMin (global void)
+0:93      AtomicMin (temp void)
 0:93        'gs_ua3' (shared 3-component vector of uint)
 0:93        'gs_ub3' (shared 3-component vector of uint)
 0:94      move second child to first child (temp 3-component vector of uint)
@@ -209,7 +209,7 @@
 0:94        AtomicMin (temp 3-component vector of uint)
 0:94          'gs_ua3' (shared 3-component vector of uint)
 0:94          'gs_ub3' (shared 3-component vector of uint)
-0:95      AtomicOr (global void)
+0:95      AtomicOr (temp void)
 0:95        'gs_ua3' (shared 3-component vector of uint)
 0:95        'gs_ub3' (shared 3-component vector of uint)
 0:96      move second child to first child (temp 3-component vector of uint)
@@ -217,7 +217,7 @@
 0:96        AtomicOr (temp 3-component vector of uint)
 0:96          'gs_ua3' (shared 3-component vector of uint)
 0:96          'gs_ub3' (shared 3-component vector of uint)
-0:97      AtomicXor (global void)
+0:97      AtomicXor (temp void)
 0:97        'gs_ua3' (shared 3-component vector of uint)
 0:97        'gs_ub3' (shared 3-component vector of uint)
 0:98      move second child to first child (temp 3-component vector of uint)
@@ -238,9 +238,9 @@
 0:105      'inU0' (layout(location=3 ) in 4-component vector of uint)
 0:105      'inU1' (layout(location=4 ) in 4-component vector of uint)
 0:?     Sequence
-0:109      all (global bool)
+0:109      all (temp bool)
 0:109        'inF0' (layout(location=0 ) in 4-component vector of float)
-0:112      AtomicAdd (global void)
+0:112      AtomicAdd (temp void)
 0:112        'gs_ua4' (shared 4-component vector of uint)
 0:112        'gs_ub4' (shared 4-component vector of uint)
 0:113      move second child to first child (temp 4-component vector of uint)
@@ -248,7 +248,7 @@
 0:113        AtomicAdd (temp 4-component vector of uint)
 0:113          'gs_ua4' (shared 4-component vector of uint)
 0:113          'gs_ub4' (shared 4-component vector of uint)
-0:114      AtomicAnd (global void)
+0:114      AtomicAnd (temp void)
 0:114        'gs_ua4' (shared 4-component vector of uint)
 0:114        'gs_ub4' (shared 4-component vector of uint)
 0:115      move second child to first child (temp 4-component vector of uint)
@@ -267,7 +267,7 @@
 0:117        AtomicExchange (temp 4-component vector of uint)
 0:117          'gs_ua4' (shared 4-component vector of uint)
 0:117          'gs_ub4' (shared 4-component vector of uint)
-0:118      AtomicMax (global void)
+0:118      AtomicMax (temp void)
 0:118        'gs_ua4' (shared 4-component vector of uint)
 0:118        'gs_ub4' (shared 4-component vector of uint)
 0:119      move second child to first child (temp 4-component vector of uint)
@@ -275,7 +275,7 @@
 0:119        AtomicMax (temp 4-component vector of uint)
 0:119          'gs_ua4' (shared 4-component vector of uint)
 0:119          'gs_ub4' (shared 4-component vector of uint)
-0:120      AtomicMin (global void)
+0:120      AtomicMin (temp void)
 0:120        'gs_ua4' (shared 4-component vector of uint)
 0:120        'gs_ub4' (shared 4-component vector of uint)
 0:121      move second child to first child (temp 4-component vector of uint)
@@ -283,7 +283,7 @@
 0:121        AtomicMin (temp 4-component vector of uint)
 0:121          'gs_ua4' (shared 4-component vector of uint)
 0:121          'gs_ub4' (shared 4-component vector of uint)
-0:122      AtomicOr (global void)
+0:122      AtomicOr (temp void)
 0:122        'gs_ua4' (shared 4-component vector of uint)
 0:122        'gs_ub4' (shared 4-component vector of uint)
 0:123      move second child to first child (temp 4-component vector of uint)
@@ -291,7 +291,7 @@
 0:123        AtomicOr (temp 4-component vector of uint)
 0:123          'gs_ua4' (shared 4-component vector of uint)
 0:123          'gs_ub4' (shared 4-component vector of uint)
-0:124      AtomicXor (global void)
+0:124      AtomicXor (temp void)
 0:124        'gs_ua4' (shared 4-component vector of uint)
 0:124        'gs_ub4' (shared 4-component vector of uint)
 0:125      move second child to first child (temp 4-component vector of uint)
@@ -309,6 +309,12 @@
 0:?             4.000000
 0:128        Branch: Return
 0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
+0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
+0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
+0:?     'inU0' (layout(location=3 ) in 4-component vector of uint)
+0:?     'inU1' (layout(location=4 ) in 4-component vector of uint)
 0:?     'gs_ua' (shared uint)
 0:?     'gs_ub' (shared uint)
 0:?     'gs_uc' (shared uint)
@@ -321,12 +327,6 @@
 0:?     'gs_ua4' (shared 4-component vector of uint)
 0:?     'gs_ub4' (shared 4-component vector of uint)
 0:?     'gs_uc4' (shared 4-component vector of uint)
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
-0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
-0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
-0:?     'inU0' (layout(location=3 ) in 4-component vector of uint)
-0:?     'inU1' (layout(location=4 ) in 4-component vector of uint)
 
 
 Linked compute stage:
@@ -343,9 +343,9 @@
 0:17      'inU0' (in uint)
 0:17      'inU1' (in uint)
 0:?     Sequence
-0:21      all (global bool)
+0:21      all (temp bool)
 0:21        'inF0' (in float)
-0:24      AtomicAdd (global void)
+0:24      AtomicAdd (temp void)
 0:24        'gs_ua' (shared uint)
 0:24        'gs_ub' (shared uint)
 0:25      move second child to first child (temp uint)
@@ -353,7 +353,7 @@
 0:25        AtomicAdd (temp uint)
 0:25          'gs_ua' (shared uint)
 0:25          'gs_ub' (shared uint)
-0:26      AtomicAnd (global void)
+0:26      AtomicAnd (temp void)
 0:26        'gs_ua' (shared uint)
 0:26        'gs_ub' (shared uint)
 0:27      move second child to first child (temp uint)
@@ -372,7 +372,7 @@
 0:29        AtomicExchange (temp uint)
 0:29          'gs_ua' (shared uint)
 0:29          'gs_ub' (shared uint)
-0:30      AtomicMax (global void)
+0:30      AtomicMax (temp void)
 0:30        'gs_ua' (shared uint)
 0:30        'gs_ub' (shared uint)
 0:31      move second child to first child (temp uint)
@@ -380,7 +380,7 @@
 0:31        AtomicMax (temp uint)
 0:31          'gs_ua' (shared uint)
 0:31          'gs_ub' (shared uint)
-0:32      AtomicMin (global void)
+0:32      AtomicMin (temp void)
 0:32        'gs_ua' (shared uint)
 0:32        'gs_ub' (shared uint)
 0:33      move second child to first child (temp uint)
@@ -388,7 +388,7 @@
 0:33        AtomicMin (temp uint)
 0:33          'gs_ua' (shared uint)
 0:33          'gs_ub' (shared uint)
-0:34      AtomicOr (global void)
+0:34      AtomicOr (temp void)
 0:34        'gs_ua' (shared uint)
 0:34        'gs_ub' (shared uint)
 0:35      move second child to first child (temp uint)
@@ -396,7 +396,7 @@
 0:35        AtomicOr (temp uint)
 0:35          'gs_ua' (shared uint)
 0:35          'gs_ub' (shared uint)
-0:36      AtomicXor (global void)
+0:36      AtomicXor (temp void)
 0:36        'gs_ua' (shared uint)
 0:36        'gs_ub' (shared uint)
 0:37      move second child to first child (temp uint)
@@ -424,9 +424,9 @@
 0:51      'inU0' (in 2-component vector of uint)
 0:51      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:55      all (global bool)
+0:55      all (temp bool)
 0:55        'inF0' (in 2-component vector of float)
-0:58      AtomicAdd (global void)
+0:58      AtomicAdd (temp void)
 0:58        'gs_ua2' (shared 2-component vector of uint)
 0:58        'gs_ub2' (shared 2-component vector of uint)
 0:59      move second child to first child (temp 2-component vector of uint)
@@ -434,7 +434,7 @@
 0:59        AtomicAdd (temp 2-component vector of uint)
 0:59          'gs_ua2' (shared 2-component vector of uint)
 0:59          'gs_ub2' (shared 2-component vector of uint)
-0:60      AtomicAnd (global void)
+0:60      AtomicAnd (temp void)
 0:60        'gs_ua2' (shared 2-component vector of uint)
 0:60        'gs_ub2' (shared 2-component vector of uint)
 0:61      move second child to first child (temp 2-component vector of uint)
@@ -453,7 +453,7 @@
 0:63        AtomicExchange (temp 2-component vector of uint)
 0:63          'gs_ua2' (shared 2-component vector of uint)
 0:63          'gs_ub2' (shared 2-component vector of uint)
-0:64      AtomicMax (global void)
+0:64      AtomicMax (temp void)
 0:64        'gs_ua2' (shared 2-component vector of uint)
 0:64        'gs_ub2' (shared 2-component vector of uint)
 0:65      move second child to first child (temp 2-component vector of uint)
@@ -461,7 +461,7 @@
 0:65        AtomicMax (temp 2-component vector of uint)
 0:65          'gs_ua2' (shared 2-component vector of uint)
 0:65          'gs_ub2' (shared 2-component vector of uint)
-0:66      AtomicMin (global void)
+0:66      AtomicMin (temp void)
 0:66        'gs_ua2' (shared 2-component vector of uint)
 0:66        'gs_ub2' (shared 2-component vector of uint)
 0:67      move second child to first child (temp 2-component vector of uint)
@@ -469,7 +469,7 @@
 0:67        AtomicMin (temp 2-component vector of uint)
 0:67          'gs_ua2' (shared 2-component vector of uint)
 0:67          'gs_ub2' (shared 2-component vector of uint)
-0:68      AtomicOr (global void)
+0:68      AtomicOr (temp void)
 0:68        'gs_ua2' (shared 2-component vector of uint)
 0:68        'gs_ub2' (shared 2-component vector of uint)
 0:69      move second child to first child (temp 2-component vector of uint)
@@ -477,7 +477,7 @@
 0:69        AtomicOr (temp 2-component vector of uint)
 0:69          'gs_ua2' (shared 2-component vector of uint)
 0:69          'gs_ub2' (shared 2-component vector of uint)
-0:70      AtomicXor (global void)
+0:70      AtomicXor (temp void)
 0:70        'gs_ua2' (shared 2-component vector of uint)
 0:70        'gs_ub2' (shared 2-component vector of uint)
 0:71      move second child to first child (temp 2-component vector of uint)
@@ -497,9 +497,9 @@
 0:78      'inU0' (in 3-component vector of uint)
 0:78      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:82      all (global bool)
+0:82      all (temp bool)
 0:82        'inF0' (in 3-component vector of float)
-0:85      AtomicAdd (global void)
+0:85      AtomicAdd (temp void)
 0:85        'gs_ua3' (shared 3-component vector of uint)
 0:85        'gs_ub3' (shared 3-component vector of uint)
 0:86      move second child to first child (temp 3-component vector of uint)
@@ -507,7 +507,7 @@
 0:86        AtomicAdd (temp 3-component vector of uint)
 0:86          'gs_ua3' (shared 3-component vector of uint)
 0:86          'gs_ub3' (shared 3-component vector of uint)
-0:87      AtomicAnd (global void)
+0:87      AtomicAnd (temp void)
 0:87        'gs_ua3' (shared 3-component vector of uint)
 0:87        'gs_ub3' (shared 3-component vector of uint)
 0:88      move second child to first child (temp 3-component vector of uint)
@@ -526,7 +526,7 @@
 0:90        AtomicExchange (temp 3-component vector of uint)
 0:90          'gs_ua3' (shared 3-component vector of uint)
 0:90          'gs_ub3' (shared 3-component vector of uint)
-0:91      AtomicMax (global void)
+0:91      AtomicMax (temp void)
 0:91        'gs_ua3' (shared 3-component vector of uint)
 0:91        'gs_ub3' (shared 3-component vector of uint)
 0:92      move second child to first child (temp 3-component vector of uint)
@@ -534,7 +534,7 @@
 0:92        AtomicMax (temp 3-component vector of uint)
 0:92          'gs_ua3' (shared 3-component vector of uint)
 0:92          'gs_ub3' (shared 3-component vector of uint)
-0:93      AtomicMin (global void)
+0:93      AtomicMin (temp void)
 0:93        'gs_ua3' (shared 3-component vector of uint)
 0:93        'gs_ub3' (shared 3-component vector of uint)
 0:94      move second child to first child (temp 3-component vector of uint)
@@ -542,7 +542,7 @@
 0:94        AtomicMin (temp 3-component vector of uint)
 0:94          'gs_ua3' (shared 3-component vector of uint)
 0:94          'gs_ub3' (shared 3-component vector of uint)
-0:95      AtomicOr (global void)
+0:95      AtomicOr (temp void)
 0:95        'gs_ua3' (shared 3-component vector of uint)
 0:95        'gs_ub3' (shared 3-component vector of uint)
 0:96      move second child to first child (temp 3-component vector of uint)
@@ -550,7 +550,7 @@
 0:96        AtomicOr (temp 3-component vector of uint)
 0:96          'gs_ua3' (shared 3-component vector of uint)
 0:96          'gs_ub3' (shared 3-component vector of uint)
-0:97      AtomicXor (global void)
+0:97      AtomicXor (temp void)
 0:97        'gs_ua3' (shared 3-component vector of uint)
 0:97        'gs_ub3' (shared 3-component vector of uint)
 0:98      move second child to first child (temp 3-component vector of uint)
@@ -571,9 +571,9 @@
 0:105      'inU0' (layout(location=3 ) in 4-component vector of uint)
 0:105      'inU1' (layout(location=4 ) in 4-component vector of uint)
 0:?     Sequence
-0:109      all (global bool)
+0:109      all (temp bool)
 0:109        'inF0' (layout(location=0 ) in 4-component vector of float)
-0:112      AtomicAdd (global void)
+0:112      AtomicAdd (temp void)
 0:112        'gs_ua4' (shared 4-component vector of uint)
 0:112        'gs_ub4' (shared 4-component vector of uint)
 0:113      move second child to first child (temp 4-component vector of uint)
@@ -581,7 +581,7 @@
 0:113        AtomicAdd (temp 4-component vector of uint)
 0:113          'gs_ua4' (shared 4-component vector of uint)
 0:113          'gs_ub4' (shared 4-component vector of uint)
-0:114      AtomicAnd (global void)
+0:114      AtomicAnd (temp void)
 0:114        'gs_ua4' (shared 4-component vector of uint)
 0:114        'gs_ub4' (shared 4-component vector of uint)
 0:115      move second child to first child (temp 4-component vector of uint)
@@ -600,7 +600,7 @@
 0:117        AtomicExchange (temp 4-component vector of uint)
 0:117          'gs_ua4' (shared 4-component vector of uint)
 0:117          'gs_ub4' (shared 4-component vector of uint)
-0:118      AtomicMax (global void)
+0:118      AtomicMax (temp void)
 0:118        'gs_ua4' (shared 4-component vector of uint)
 0:118        'gs_ub4' (shared 4-component vector of uint)
 0:119      move second child to first child (temp 4-component vector of uint)
@@ -608,7 +608,7 @@
 0:119        AtomicMax (temp 4-component vector of uint)
 0:119          'gs_ua4' (shared 4-component vector of uint)
 0:119          'gs_ub4' (shared 4-component vector of uint)
-0:120      AtomicMin (global void)
+0:120      AtomicMin (temp void)
 0:120        'gs_ua4' (shared 4-component vector of uint)
 0:120        'gs_ub4' (shared 4-component vector of uint)
 0:121      move second child to first child (temp 4-component vector of uint)
@@ -616,7 +616,7 @@
 0:121        AtomicMin (temp 4-component vector of uint)
 0:121          'gs_ua4' (shared 4-component vector of uint)
 0:121          'gs_ub4' (shared 4-component vector of uint)
-0:122      AtomicOr (global void)
+0:122      AtomicOr (temp void)
 0:122        'gs_ua4' (shared 4-component vector of uint)
 0:122        'gs_ub4' (shared 4-component vector of uint)
 0:123      move second child to first child (temp 4-component vector of uint)
@@ -624,7 +624,7 @@
 0:123        AtomicOr (temp 4-component vector of uint)
 0:123          'gs_ua4' (shared 4-component vector of uint)
 0:123          'gs_ub4' (shared 4-component vector of uint)
-0:124      AtomicXor (global void)
+0:124      AtomicXor (temp void)
 0:124        'gs_ua4' (shared 4-component vector of uint)
 0:124        'gs_ub4' (shared 4-component vector of uint)
 0:125      move second child to first child (temp 4-component vector of uint)
@@ -642,6 +642,12 @@
 0:?             4.000000
 0:128        Branch: Return
 0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
+0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
+0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
+0:?     'inU0' (layout(location=3 ) in 4-component vector of uint)
+0:?     'inU1' (layout(location=4 ) in 4-component vector of uint)
 0:?     'gs_ua' (shared uint)
 0:?     'gs_ub' (shared uint)
 0:?     'gs_uc' (shared uint)
@@ -654,12 +660,6 @@
 0:?     'gs_ua4' (shared 4-component vector of uint)
 0:?     'gs_ub4' (shared 4-component vector of uint)
 0:?     'gs_uc4' (shared 4-component vector of uint)
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
-0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
-0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
-0:?     'inU0' (layout(location=3 ) in 4-component vector of uint)
-0:?     'inU1' (layout(location=4 ) in 4-component vector of uint)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.intrinsics.double.frag.out b/Test/baseResults/hlsl.intrinsics.double.frag.out
index 554e552..91abf73 100644
--- a/Test/baseResults/hlsl.intrinsics.double.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.double.frag.out
@@ -16,7 +16,7 @@
 0:6      Sequence
 0:6        move second child to first child (temp double)
 0:6          'r00' (temp double)
-0:6          fma (global double)
+0:6          fma (temp double)
 0:6            'inDV1a' (layout(location=0 ) in double)
 0:6            'inDV1b' (layout(location=1 ) in double)
 0:6            'inDV1c' (layout(location=2 ) in double)
@@ -65,7 +65,7 @@
 0:6      Sequence
 0:6        move second child to first child (temp double)
 0:6          'r00' (temp double)
-0:6          fma (global double)
+0:6          fma (temp double)
 0:6            'inDV1a' (layout(location=0 ) in double)
 0:6            'inDV1b' (layout(location=1 ) in double)
 0:6            'inDV1c' (layout(location=2 ) in double)
diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
index 5fcb5f9..0b4c074 100644
--- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -14,7 +14,7 @@
 0:2      'inF0' (in float)
 0:?     Sequence
 0:3      ERROR: Bad unary op
- (global uint)
+ (temp uint)
 0:3        'inF0' (in float)
 0:5      Branch: Return with expression
 0:5        Constant:
@@ -31,7 +31,7 @@
 0:15      'inF0' (in 2-component vector of float)
 0:?     Sequence
 0:16      ERROR: Bad unary op
- (global 2-component vector of uint)
+ (temp 2-component vector of uint)
 0:16        'inF0' (in 2-component vector of float)
 0:18      Branch: Return with expression
 0:?         Constant:
@@ -42,7 +42,7 @@
 0:22      'inF0' (in 3-component vector of float)
 0:?     Sequence
 0:23      ERROR: Bad unary op
- (global 3-component vector of uint)
+ (temp 3-component vector of uint)
 0:23        'inF0' (in 3-component vector of float)
 0:25      Branch: Return with expression
 0:?         Constant:
@@ -54,7 +54,7 @@
 0:29      'inF0' (layout(location=0 ) in 4-component vector of float)
 0:?     Sequence
 0:30      ERROR: Bad unary op
- (global 4-component vector of uint)
+ (temp 4-component vector of uint)
 0:30        'inF0' (layout(location=0 ) in 4-component vector of float)
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of float)
@@ -81,7 +81,7 @@
 0:2      'inF0' (in float)
 0:?     Sequence
 0:3      ERROR: Bad unary op
- (global uint)
+ (temp uint)
 0:3        'inF0' (in float)
 0:5      Branch: Return with expression
 0:5        Constant:
@@ -98,7 +98,7 @@
 0:15      'inF0' (in 2-component vector of float)
 0:?     Sequence
 0:16      ERROR: Bad unary op
- (global 2-component vector of uint)
+ (temp 2-component vector of uint)
 0:16        'inF0' (in 2-component vector of float)
 0:18      Branch: Return with expression
 0:?         Constant:
@@ -109,7 +109,7 @@
 0:22      'inF0' (in 3-component vector of float)
 0:?     Sequence
 0:23      ERROR: Bad unary op
- (global 3-component vector of uint)
+ (temp 3-component vector of uint)
 0:23        'inF0' (in 3-component vector of float)
 0:25      Branch: Return with expression
 0:?         Constant:
@@ -121,7 +121,7 @@
 0:29      'inF0' (layout(location=0 ) in 4-component vector of float)
 0:?     Sequence
 0:30      ERROR: Bad unary op
- (global 4-component vector of uint)
+ (temp 4-component vector of uint)
 0:30        'inF0' (layout(location=0 ) in 4-component vector of float)
 0:32      Sequence
 0:32        move second child to first child (temp 4-component vector of float)
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index d5a0f99..8a1935e 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -13,63 +13,63 @@
 0:20      Sequence
 0:20        move second child to first child (temp bool)
 0:20          'r000' (temp bool)
-0:20          all (global bool)
+0:20          all (temp bool)
 0:20            'inF0' (in float)
 0:21      Sequence
 0:21        move second child to first child (temp float)
 0:21          'r001' (temp float)
-0:21          Absolute value (global float)
+0:21          Absolute value (temp float)
 0:21            'inF0' (in float)
 0:22      Sequence
 0:22        move second child to first child (temp float)
 0:22          'r002' (temp float)
-0:22          arc cosine (global float)
+0:22          arc cosine (temp float)
 0:22            'inF0' (in float)
 0:23      Sequence
 0:23        move second child to first child (temp bool)
 0:23          'r003' (temp bool)
-0:23          any (global bool)
+0:23          any (temp bool)
 0:23            'inF0' (in float)
 0:24      Sequence
 0:24        move second child to first child (temp float)
 0:24          'r004' (temp float)
-0:24          arc sine (global float)
+0:24          arc sine (temp float)
 0:24            'inF0' (in float)
 0:25      Sequence
 0:25        move second child to first child (temp int)
 0:25          'r005' (temp int)
-0:25          floatBitsToInt (global int)
+0:25          floatBitsToInt (temp int)
 0:25            'inF0' (in float)
 0:26      Sequence
 0:26        move second child to first child (temp uint)
 0:26          'r006' (temp uint)
-0:26          floatBitsToUint (global uint)
+0:26          floatBitsToUint (temp uint)
 0:26            'inF0' (in float)
 0:27      Sequence
 0:27        move second child to first child (temp float)
 0:27          'r007' (temp float)
-0:27          intBitsToFloat (global float)
+0:27          intBitsToFloat (temp float)
 0:27            'inU0' (in uint)
 0:29      Sequence
 0:29        move second child to first child (temp float)
 0:29          'r009' (temp float)
-0:29          arc tangent (global float)
+0:29          arc tangent (temp float)
 0:29            'inF0' (in float)
 0:30      Sequence
 0:30        move second child to first child (temp float)
 0:30          'r010' (temp float)
-0:30          arc tangent (global float)
+0:30          arc tangent (temp float)
 0:30            'inF0' (in float)
 0:30            'inF1' (in float)
 0:31      Sequence
 0:31        move second child to first child (temp float)
 0:31          'r011' (temp float)
-0:31          Ceiling (global float)
+0:31          Ceiling (temp float)
 0:31            'inF0' (in float)
 0:32      Sequence
 0:32        move second child to first child (temp float)
 0:32          'r012' (temp float)
-0:32          clamp (global float)
+0:32          clamp (temp float)
 0:32            'inF0' (in float)
 0:32            'inF1' (in float)
 0:32            'inF2' (in float)
@@ -84,132 +84,132 @@
 0:34      Sequence
 0:34        move second child to first child (temp float)
 0:34          'r014' (temp float)
-0:34          cosine (global float)
+0:34          cosine (temp float)
 0:34            'inF0' (in float)
 0:35      Sequence
 0:35        move second child to first child (temp float)
 0:35          'r015' (temp float)
-0:35          hyp. cosine (global float)
+0:35          hyp. cosine (temp float)
 0:35            'inF0' (in float)
 0:36      Sequence
 0:36        move second child to first child (temp uint)
 0:36          'r016' (temp uint)
-0:36          bitCount (global uint)
+0:36          bitCount (temp uint)
 0:36            Constant:
 0:36              7 (const uint)
 0:37      Sequence
 0:37        move second child to first child (temp float)
 0:37          'r017' (temp float)
-0:37          dPdx (global float)
+0:37          dPdx (temp float)
 0:37            'inF0' (in float)
 0:38      Sequence
 0:38        move second child to first child (temp float)
 0:38          'r018' (temp float)
-0:38          dPdxCoarse (global float)
+0:38          dPdxCoarse (temp float)
 0:38            'inF0' (in float)
 0:39      Sequence
 0:39        move second child to first child (temp float)
 0:39          'r019' (temp float)
-0:39          dPdxFine (global float)
+0:39          dPdxFine (temp float)
 0:39            'inF0' (in float)
 0:40      Sequence
 0:40        move second child to first child (temp float)
 0:40          'r020' (temp float)
-0:40          dPdy (global float)
+0:40          dPdy (temp float)
 0:40            'inF0' (in float)
 0:41      Sequence
 0:41        move second child to first child (temp float)
 0:41          'r021' (temp float)
-0:41          dPdyCoarse (global float)
+0:41          dPdyCoarse (temp float)
 0:41            'inF0' (in float)
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r022' (temp float)
-0:42          dPdyFine (global float)
+0:42          dPdyFine (temp float)
 0:42            'inF0' (in float)
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r023' (temp float)
-0:43          degrees (global float)
+0:43          degrees (temp float)
 0:43            'inF0' (in float)
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r027' (temp float)
-0:47          exp (global float)
+0:47          exp (temp float)
 0:47            'inF0' (in float)
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r028' (temp float)
-0:48          exp2 (global float)
+0:48          exp2 (temp float)
 0:48            'inF0' (in float)
 0:49      Sequence
 0:49        move second child to first child (temp uint)
 0:49          'r029' (temp uint)
 0:49          Convert int to uint (temp uint)
-0:49            findMSB (global int)
+0:49            findMSB (temp int)
 0:49              Constant:
 0:49                7 (const int)
 0:50      Sequence
 0:50        move second child to first child (temp uint)
 0:50          'r030' (temp uint)
 0:50          Convert int to uint (temp uint)
-0:50            findLSB (global int)
+0:50            findLSB (temp int)
 0:50              Constant:
 0:50                7 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp float)
 0:51          'r031' (temp float)
-0:51          Floor (global float)
+0:51          Floor (temp float)
 0:51            'inF0' (in float)
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r033' (temp float)
-0:53          mod (global float)
+0:53          mod (temp float)
 0:53            'inF0' (in float)
 0:53            'inF1' (in float)
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r034' (temp float)
-0:54          Fraction (global float)
+0:54          Fraction (temp float)
 0:54            'inF0' (in float)
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r035' (temp float)
-0:55          frexp (global float)
+0:55          frexp (temp float)
 0:55            'inF0' (in float)
 0:55            'inF1' (in float)
 0:56      Sequence
 0:56        move second child to first child (temp float)
 0:56          'r036' (temp float)
-0:56          fwidth (global float)
+0:56          fwidth (temp float)
 0:56            'inF0' (in float)
 0:57      Sequence
 0:57        move second child to first child (temp bool)
 0:57          'r037' (temp bool)
-0:57          isinf (global bool)
+0:57          isinf (temp bool)
 0:57            'inF0' (in float)
 0:58      Sequence
 0:58        move second child to first child (temp bool)
 0:58          'r038' (temp bool)
-0:58          isnan (global bool)
+0:58          isnan (temp bool)
 0:58            'inF0' (in float)
 0:59      Sequence
 0:59        move second child to first child (temp float)
 0:59          'r039' (temp float)
-0:59          ldexp (global float)
+0:59          ldexp (temp float)
 0:59            'inF0' (in float)
 0:59            'inF1' (in float)
 0:60      Sequence
 0:60        move second child to first child (temp float)
 0:60          'r039a' (temp float)
-0:60          mix (global float)
+0:60          mix (temp float)
 0:60            'inF0' (in float)
 0:60            'inF1' (in float)
 0:60            'inF2' (in float)
 0:61      Sequence
 0:61        move second child to first child (temp float)
 0:61          'r040' (temp float)
-0:61          log (global float)
+0:61          log (temp float)
 0:61            'inF0' (in float)
 0:62      Sequence
 0:62        move second child to first child (temp float)
@@ -222,30 +222,30 @@
 0:63      Sequence
 0:63        move second child to first child (temp float)
 0:63          'r042' (temp float)
-0:63          log2 (global float)
+0:63          log2 (temp float)
 0:63            'inF0' (in float)
 0:64      Sequence
 0:64        move second child to first child (temp float)
 0:64          'r043' (temp float)
-0:64          max (global float)
+0:64          max (temp float)
 0:64            'inF0' (in float)
 0:64            'inF1' (in float)
 0:65      Sequence
 0:65        move second child to first child (temp float)
 0:65          'r044' (temp float)
-0:65          min (global float)
+0:65          min (temp float)
 0:65            'inF0' (in float)
 0:65            'inF1' (in float)
 0:66      Sequence
 0:66        move second child to first child (temp float)
 0:66          'r045' (temp float)
-0:66          pow (global float)
+0:66          pow (temp float)
 0:66            'inF0' (in float)
 0:66            'inF1' (in float)
 0:67      Sequence
 0:67        move second child to first child (temp float)
 0:67          'r046' (temp float)
-0:67          radians (global float)
+0:67          radians (temp float)
 0:67            'inF0' (in float)
 0:68      Sequence
 0:68        move second child to first child (temp float)
@@ -257,18 +257,18 @@
 0:69      Sequence
 0:69        move second child to first child (temp uint)
 0:69          'r048' (temp uint)
-0:69          bitFieldReverse (global uint)
+0:69          bitFieldReverse (temp uint)
 0:69            Constant:
 0:69              2 (const uint)
 0:70      Sequence
 0:70        move second child to first child (temp float)
 0:70          'r049' (temp float)
-0:70          roundEven (global float)
+0:70          roundEven (temp float)
 0:70            'inF0' (in float)
 0:71      Sequence
 0:71        move second child to first child (temp float)
 0:71          'r050' (temp float)
-0:71          inverse sqrt (global float)
+0:71          inverse sqrt (temp float)
 0:71            'inF0' (in float)
 0:72      Sequence
 0:72        move second child to first child (temp float)
@@ -282,12 +282,12 @@
 0:73      Sequence
 0:73        move second child to first child (temp float)
 0:73          'r052' (temp float)
-0:73          Sign (global float)
+0:73          Sign (temp float)
 0:73            'inF0' (in float)
 0:74      Sequence
 0:74        move second child to first child (temp float)
 0:74          'r053' (temp float)
-0:74          sine (global float)
+0:74          sine (temp float)
 0:74            'inF0' (in float)
 0:75      Sequence
 0:75        move second child to first child (temp float)
@@ -301,40 +301,40 @@
 0:76      Sequence
 0:76        move second child to first child (temp float)
 0:76          'r055' (temp float)
-0:76          hyp. sine (global float)
+0:76          hyp. sine (temp float)
 0:76            'inF0' (in float)
 0:77      Sequence
 0:77        move second child to first child (temp float)
 0:77          'r056' (temp float)
-0:77          smoothstep (global float)
+0:77          smoothstep (temp float)
 0:77            'inF0' (in float)
 0:77            'inF1' (in float)
 0:77            'inF2' (in float)
 0:78      Sequence
 0:78        move second child to first child (temp float)
 0:78          'r057' (temp float)
-0:78          sqrt (global float)
+0:78          sqrt (temp float)
 0:78            'inF0' (in float)
 0:79      Sequence
 0:79        move second child to first child (temp float)
 0:79          'r058' (temp float)
-0:79          step (global float)
+0:79          step (temp float)
 0:79            'inF0' (in float)
 0:79            'inF1' (in float)
 0:80      Sequence
 0:80        move second child to first child (temp float)
 0:80          'r059' (temp float)
-0:80          tangent (global float)
+0:80          tangent (temp float)
 0:80            'inF0' (in float)
 0:81      Sequence
 0:81        move second child to first child (temp float)
 0:81          'r060' (temp float)
-0:81          hyp. tangent (global float)
+0:81          hyp. tangent (temp float)
 0:81            'inF0' (in float)
 0:83      Sequence
 0:83        move second child to first child (temp float)
 0:83          'r061' (temp float)
-0:83          trunc (global float)
+0:83          trunc (temp float)
 0:83            'inF0' (in float)
 0:85      Branch: Return with expression
 0:85        Constant:
@@ -359,63 +359,63 @@
 0:98      Sequence
 0:98        move second child to first child (temp bool)
 0:98          'r000' (temp bool)
-0:98          all (global bool)
+0:98          all (temp bool)
 0:98            'inF0' (in 2-component vector of float)
 0:99      Sequence
 0:99        move second child to first child (temp 2-component vector of float)
 0:99          'r001' (temp 2-component vector of float)
-0:99          Absolute value (global 2-component vector of float)
+0:99          Absolute value (temp 2-component vector of float)
 0:99            'inF0' (in 2-component vector of float)
 0:100      Sequence
 0:100        move second child to first child (temp 2-component vector of float)
 0:100          'r002' (temp 2-component vector of float)
-0:100          arc cosine (global 2-component vector of float)
+0:100          arc cosine (temp 2-component vector of float)
 0:100            'inF0' (in 2-component vector of float)
 0:101      Sequence
 0:101        move second child to first child (temp bool)
 0:101          'r003' (temp bool)
-0:101          any (global bool)
+0:101          any (temp bool)
 0:101            'inF0' (in 2-component vector of float)
 0:102      Sequence
 0:102        move second child to first child (temp 2-component vector of float)
 0:102          'r004' (temp 2-component vector of float)
-0:102          arc sine (global 2-component vector of float)
+0:102          arc sine (temp 2-component vector of float)
 0:102            'inF0' (in 2-component vector of float)
 0:103      Sequence
 0:103        move second child to first child (temp 2-component vector of int)
 0:103          'r005' (temp 2-component vector of int)
-0:103          floatBitsToInt (global 2-component vector of int)
+0:103          floatBitsToInt (temp 2-component vector of int)
 0:103            'inF0' (in 2-component vector of float)
 0:104      Sequence
 0:104        move second child to first child (temp 2-component vector of uint)
 0:104          'r006' (temp 2-component vector of uint)
-0:104          floatBitsToUint (global 2-component vector of uint)
+0:104          floatBitsToUint (temp 2-component vector of uint)
 0:104            'inF0' (in 2-component vector of float)
 0:105      Sequence
 0:105        move second child to first child (temp 2-component vector of float)
 0:105          'r007' (temp 2-component vector of float)
-0:105          intBitsToFloat (global 2-component vector of float)
+0:105          intBitsToFloat (temp 2-component vector of float)
 0:105            'inU0' (in 2-component vector of uint)
 0:107      Sequence
 0:107        move second child to first child (temp 2-component vector of float)
 0:107          'r009' (temp 2-component vector of float)
-0:107          arc tangent (global 2-component vector of float)
+0:107          arc tangent (temp 2-component vector of float)
 0:107            'inF0' (in 2-component vector of float)
 0:108      Sequence
 0:108        move second child to first child (temp 2-component vector of float)
 0:108          'r010' (temp 2-component vector of float)
-0:108          arc tangent (global 2-component vector of float)
+0:108          arc tangent (temp 2-component vector of float)
 0:108            'inF0' (in 2-component vector of float)
 0:108            'inF1' (in 2-component vector of float)
 0:109      Sequence
 0:109        move second child to first child (temp 2-component vector of float)
 0:109          'r011' (temp 2-component vector of float)
-0:109          Ceiling (global 2-component vector of float)
+0:109          Ceiling (temp 2-component vector of float)
 0:109            'inF0' (in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child (temp 2-component vector of float)
 0:110          'r012' (temp 2-component vector of float)
-0:110          clamp (global 2-component vector of float)
+0:110          clamp (temp 2-component vector of float)
 0:110            'inF0' (in 2-component vector of float)
 0:110            'inF1' (in 2-component vector of float)
 0:110            'inF2' (in 2-component vector of float)
@@ -432,157 +432,157 @@
 0:112      Sequence
 0:112        move second child to first child (temp 2-component vector of float)
 0:112          'r013' (temp 2-component vector of float)
-0:112          cosine (global 2-component vector of float)
+0:112          cosine (temp 2-component vector of float)
 0:112            'inF0' (in 2-component vector of float)
 0:113      Sequence
 0:113        move second child to first child (temp 2-component vector of float)
 0:113          'r015' (temp 2-component vector of float)
-0:113          hyp. cosine (global 2-component vector of float)
+0:113          hyp. cosine (temp 2-component vector of float)
 0:113            'inF0' (in 2-component vector of float)
 0:114      Sequence
 0:114        move second child to first child (temp 2-component vector of uint)
 0:114          'r016' (temp 2-component vector of uint)
-0:?           bitCount (global 2-component vector of uint)
+0:?           bitCount (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:115      Sequence
 0:115        move second child to first child (temp 2-component vector of float)
 0:115          'r017' (temp 2-component vector of float)
-0:115          dPdx (global 2-component vector of float)
+0:115          dPdx (temp 2-component vector of float)
 0:115            'inF0' (in 2-component vector of float)
 0:116      Sequence
 0:116        move second child to first child (temp 2-component vector of float)
 0:116          'r018' (temp 2-component vector of float)
-0:116          dPdxCoarse (global 2-component vector of float)
+0:116          dPdxCoarse (temp 2-component vector of float)
 0:116            'inF0' (in 2-component vector of float)
 0:117      Sequence
 0:117        move second child to first child (temp 2-component vector of float)
 0:117          'r019' (temp 2-component vector of float)
-0:117          dPdxFine (global 2-component vector of float)
+0:117          dPdxFine (temp 2-component vector of float)
 0:117            'inF0' (in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child (temp 2-component vector of float)
 0:118          'r020' (temp 2-component vector of float)
-0:118          dPdy (global 2-component vector of float)
+0:118          dPdy (temp 2-component vector of float)
 0:118            'inF0' (in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child (temp 2-component vector of float)
 0:119          'r021' (temp 2-component vector of float)
-0:119          dPdyCoarse (global 2-component vector of float)
+0:119          dPdyCoarse (temp 2-component vector of float)
 0:119            'inF0' (in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child (temp 2-component vector of float)
 0:120          'r022' (temp 2-component vector of float)
-0:120          dPdyFine (global 2-component vector of float)
+0:120          dPdyFine (temp 2-component vector of float)
 0:120            'inF0' (in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child (temp 2-component vector of float)
 0:121          'r023' (temp 2-component vector of float)
-0:121          degrees (global 2-component vector of float)
+0:121          degrees (temp 2-component vector of float)
 0:121            'inF0' (in 2-component vector of float)
 0:125      Sequence
 0:125        move second child to first child (temp float)
 0:125          'r026' (temp float)
-0:125          distance (global float)
+0:125          distance (temp float)
 0:125            'inF0' (in 2-component vector of float)
 0:125            'inF1' (in 2-component vector of float)
 0:126      Sequence
 0:126        move second child to first child (temp float)
 0:126          'r027' (temp float)
-0:126          dot-product (global float)
+0:126          dot-product (temp float)
 0:126            'inF0' (in 2-component vector of float)
 0:126            'inF1' (in 2-component vector of float)
 0:130      Sequence
 0:130        move second child to first child (temp 2-component vector of float)
 0:130          'r028' (temp 2-component vector of float)
-0:130          exp (global 2-component vector of float)
+0:130          exp (temp 2-component vector of float)
 0:130            'inF0' (in 2-component vector of float)
 0:131      Sequence
 0:131        move second child to first child (temp 2-component vector of float)
 0:131          'r029' (temp 2-component vector of float)
-0:131          exp2 (global 2-component vector of float)
+0:131          exp2 (temp 2-component vector of float)
 0:131            'inF0' (in 2-component vector of float)
 0:132      Sequence
 0:132        move second child to first child (temp 2-component vector of float)
 0:132          'r030' (temp 2-component vector of float)
-0:132          face-forward (global 2-component vector of float)
+0:132          face-forward (temp 2-component vector of float)
 0:132            'inF0' (in 2-component vector of float)
 0:132            'inF1' (in 2-component vector of float)
 0:132            'inF2' (in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child (temp 2-component vector of uint)
 0:133          'r031' (temp 2-component vector of uint)
-0:?           findMSB (global 2-component vector of uint)
+0:?           findMSB (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:134      Sequence
 0:134        move second child to first child (temp 2-component vector of uint)
 0:134          'r032' (temp 2-component vector of uint)
-0:?           findLSB (global 2-component vector of uint)
+0:?           findLSB (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:135      Sequence
 0:135        move second child to first child (temp 2-component vector of float)
 0:135          'r033' (temp 2-component vector of float)
-0:135          Floor (global 2-component vector of float)
+0:135          Floor (temp 2-component vector of float)
 0:135            'inF0' (in 2-component vector of float)
 0:137      Sequence
 0:137        move second child to first child (temp 2-component vector of float)
 0:137          'r035' (temp 2-component vector of float)
-0:137          mod (global 2-component vector of float)
+0:137          mod (temp 2-component vector of float)
 0:137            'inF0' (in 2-component vector of float)
 0:137            'inF1' (in 2-component vector of float)
 0:138      Sequence
 0:138        move second child to first child (temp 2-component vector of float)
 0:138          'r036' (temp 2-component vector of float)
-0:138          Fraction (global 2-component vector of float)
+0:138          Fraction (temp 2-component vector of float)
 0:138            'inF0' (in 2-component vector of float)
 0:139      Sequence
 0:139        move second child to first child (temp 2-component vector of float)
 0:139          'r037' (temp 2-component vector of float)
-0:139          frexp (global 2-component vector of float)
+0:139          frexp (temp 2-component vector of float)
 0:139            'inF0' (in 2-component vector of float)
 0:139            'inF1' (in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child (temp 2-component vector of float)
 0:140          'r038' (temp 2-component vector of float)
-0:140          fwidth (global 2-component vector of float)
+0:140          fwidth (temp 2-component vector of float)
 0:140            'inF0' (in 2-component vector of float)
 0:141      Sequence
 0:141        move second child to first child (temp 2-component vector of bool)
 0:141          'r039' (temp 2-component vector of bool)
-0:141          isinf (global 2-component vector of bool)
+0:141          isinf (temp 2-component vector of bool)
 0:141            'inF0' (in 2-component vector of float)
 0:142      Sequence
 0:142        move second child to first child (temp 2-component vector of bool)
 0:142          'r040' (temp 2-component vector of bool)
-0:142          isnan (global 2-component vector of bool)
+0:142          isnan (temp 2-component vector of bool)
 0:142            'inF0' (in 2-component vector of float)
 0:143      Sequence
 0:143        move second child to first child (temp 2-component vector of float)
 0:143          'r041' (temp 2-component vector of float)
-0:143          ldexp (global 2-component vector of float)
+0:143          ldexp (temp 2-component vector of float)
 0:143            'inF0' (in 2-component vector of float)
 0:143            'inF1' (in 2-component vector of float)
 0:144      Sequence
 0:144        move second child to first child (temp 2-component vector of float)
 0:144          'r039a' (temp 2-component vector of float)
-0:144          mix (global 2-component vector of float)
+0:144          mix (temp 2-component vector of float)
 0:144            'inF0' (in 2-component vector of float)
 0:144            'inF1' (in 2-component vector of float)
 0:144            'inF2' (in 2-component vector of float)
 0:145      Sequence
 0:145        move second child to first child (temp float)
 0:145          'r042' (temp float)
-0:145          length (global float)
+0:145          length (temp float)
 0:145            'inF0' (in 2-component vector of float)
 0:146      Sequence
 0:146        move second child to first child (temp 2-component vector of float)
 0:146          'r043' (temp 2-component vector of float)
-0:146          log (global 2-component vector of float)
+0:146          log (temp 2-component vector of float)
 0:146            'inF0' (in 2-component vector of float)
 0:147      Sequence
 0:147        move second child to first child (temp 2-component vector of float)
@@ -595,35 +595,35 @@
 0:148      Sequence
 0:148        move second child to first child (temp 2-component vector of float)
 0:148          'r045' (temp 2-component vector of float)
-0:148          log2 (global 2-component vector of float)
+0:148          log2 (temp 2-component vector of float)
 0:148            'inF0' (in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child (temp 2-component vector of float)
 0:149          'r046' (temp 2-component vector of float)
-0:149          max (global 2-component vector of float)
+0:149          max (temp 2-component vector of float)
 0:149            'inF0' (in 2-component vector of float)
 0:149            'inF1' (in 2-component vector of float)
 0:150      Sequence
 0:150        move second child to first child (temp 2-component vector of float)
 0:150          'r047' (temp 2-component vector of float)
-0:150          min (global 2-component vector of float)
+0:150          min (temp 2-component vector of float)
 0:150            'inF0' (in 2-component vector of float)
 0:150            'inF1' (in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child (temp 2-component vector of float)
 0:151          'r048' (temp 2-component vector of float)
-0:151          normalize (global 2-component vector of float)
+0:151          normalize (temp 2-component vector of float)
 0:151            'inF0' (in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child (temp 2-component vector of float)
 0:152          'r049' (temp 2-component vector of float)
-0:152          pow (global 2-component vector of float)
+0:152          pow (temp 2-component vector of float)
 0:152            'inF0' (in 2-component vector of float)
 0:152            'inF1' (in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child (temp 2-component vector of float)
 0:153          'r050' (temp 2-component vector of float)
-0:153          radians (global 2-component vector of float)
+0:153          radians (temp 2-component vector of float)
 0:153            'inF0' (in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child (temp 2-component vector of float)
@@ -635,13 +635,13 @@
 0:155      Sequence
 0:155        move second child to first child (temp 2-component vector of float)
 0:155          'r052' (temp 2-component vector of float)
-0:155          reflect (global 2-component vector of float)
+0:155          reflect (temp 2-component vector of float)
 0:155            'inF0' (in 2-component vector of float)
 0:155            'inF1' (in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child (temp 2-component vector of float)
 0:156          'r053' (temp 2-component vector of float)
-0:156          refract (global 2-component vector of float)
+0:156          refract (temp 2-component vector of float)
 0:156            'inF0' (in 2-component vector of float)
 0:156            'inF1' (in 2-component vector of float)
 0:156            Constant:
@@ -649,19 +649,19 @@
 0:157      Sequence
 0:157        move second child to first child (temp 2-component vector of uint)
 0:157          'r054' (temp 2-component vector of uint)
-0:?           bitFieldReverse (global 2-component vector of uint)
+0:?           bitFieldReverse (temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:158      Sequence
 0:158        move second child to first child (temp 2-component vector of float)
 0:158          'r055' (temp 2-component vector of float)
-0:158          roundEven (global 2-component vector of float)
+0:158          roundEven (temp 2-component vector of float)
 0:158            'inF0' (in 2-component vector of float)
 0:159      Sequence
 0:159        move second child to first child (temp 2-component vector of float)
 0:159          'r056' (temp 2-component vector of float)
-0:159          inverse sqrt (global 2-component vector of float)
+0:159          inverse sqrt (temp 2-component vector of float)
 0:159            'inF0' (in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child (temp 2-component vector of float)
@@ -675,12 +675,12 @@
 0:161      Sequence
 0:161        move second child to first child (temp 2-component vector of float)
 0:161          'r058' (temp 2-component vector of float)
-0:161          Sign (global 2-component vector of float)
+0:161          Sign (temp 2-component vector of float)
 0:161            'inF0' (in 2-component vector of float)
 0:162      Sequence
 0:162        move second child to first child (temp 2-component vector of float)
 0:162          'r059' (temp 2-component vector of float)
-0:162          sine (global 2-component vector of float)
+0:162          sine (temp 2-component vector of float)
 0:162            'inF0' (in 2-component vector of float)
 0:163      Sequence
 0:163        move second child to first child (temp 2-component vector of float)
@@ -694,40 +694,40 @@
 0:164      Sequence
 0:164        move second child to first child (temp 2-component vector of float)
 0:164          'r060' (temp 2-component vector of float)
-0:164          hyp. sine (global 2-component vector of float)
+0:164          hyp. sine (temp 2-component vector of float)
 0:164            'inF0' (in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child (temp 2-component vector of float)
 0:165          'r061' (temp 2-component vector of float)
-0:165          smoothstep (global 2-component vector of float)
+0:165          smoothstep (temp 2-component vector of float)
 0:165            'inF0' (in 2-component vector of float)
 0:165            'inF1' (in 2-component vector of float)
 0:165            'inF2' (in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child (temp 2-component vector of float)
 0:166          'r062' (temp 2-component vector of float)
-0:166          sqrt (global 2-component vector of float)
+0:166          sqrt (temp 2-component vector of float)
 0:166            'inF0' (in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child (temp 2-component vector of float)
 0:167          'r063' (temp 2-component vector of float)
-0:167          step (global 2-component vector of float)
+0:167          step (temp 2-component vector of float)
 0:167            'inF0' (in 2-component vector of float)
 0:167            'inF1' (in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child (temp 2-component vector of float)
 0:168          'r064' (temp 2-component vector of float)
-0:168          tangent (global 2-component vector of float)
+0:168          tangent (temp 2-component vector of float)
 0:168            'inF0' (in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child (temp 2-component vector of float)
 0:169          'r065' (temp 2-component vector of float)
-0:169          hyp. tangent (global 2-component vector of float)
+0:169          hyp. tangent (temp 2-component vector of float)
 0:169            'inF0' (in 2-component vector of float)
 0:171      Sequence
 0:171        move second child to first child (temp 2-component vector of float)
 0:171          'r066' (temp 2-component vector of float)
-0:171          trunc (global 2-component vector of float)
+0:171          trunc (temp 2-component vector of float)
 0:171            'inF0' (in 2-component vector of float)
 0:174      Branch: Return with expression
 0:?         Constant:
@@ -744,63 +744,63 @@
 0:181      Sequence
 0:181        move second child to first child (temp bool)
 0:181          'r000' (temp bool)
-0:181          all (global bool)
+0:181          all (temp bool)
 0:181            'inF0' (in 3-component vector of float)
 0:182      Sequence
 0:182        move second child to first child (temp 3-component vector of float)
 0:182          'r001' (temp 3-component vector of float)
-0:182          Absolute value (global 3-component vector of float)
+0:182          Absolute value (temp 3-component vector of float)
 0:182            'inF0' (in 3-component vector of float)
 0:183      Sequence
 0:183        move second child to first child (temp 3-component vector of float)
 0:183          'r002' (temp 3-component vector of float)
-0:183          arc cosine (global 3-component vector of float)
+0:183          arc cosine (temp 3-component vector of float)
 0:183            'inF0' (in 3-component vector of float)
 0:184      Sequence
 0:184        move second child to first child (temp bool)
 0:184          'r003' (temp bool)
-0:184          any (global bool)
+0:184          any (temp bool)
 0:184            'inF0' (in 3-component vector of float)
 0:185      Sequence
 0:185        move second child to first child (temp 3-component vector of float)
 0:185          'r004' (temp 3-component vector of float)
-0:185          arc sine (global 3-component vector of float)
+0:185          arc sine (temp 3-component vector of float)
 0:185            'inF0' (in 3-component vector of float)
 0:186      Sequence
 0:186        move second child to first child (temp 3-component vector of int)
 0:186          'r005' (temp 3-component vector of int)
-0:186          floatBitsToInt (global 3-component vector of int)
+0:186          floatBitsToInt (temp 3-component vector of int)
 0:186            'inF0' (in 3-component vector of float)
 0:187      Sequence
 0:187        move second child to first child (temp 3-component vector of uint)
 0:187          'r006' (temp 3-component vector of uint)
-0:187          floatBitsToUint (global 3-component vector of uint)
+0:187          floatBitsToUint (temp 3-component vector of uint)
 0:187            'inF0' (in 3-component vector of float)
 0:188      Sequence
 0:188        move second child to first child (temp 3-component vector of float)
 0:188          'r007' (temp 3-component vector of float)
-0:188          intBitsToFloat (global 3-component vector of float)
+0:188          intBitsToFloat (temp 3-component vector of float)
 0:188            'inU0' (in 3-component vector of uint)
 0:190      Sequence
 0:190        move second child to first child (temp 3-component vector of float)
 0:190          'r009' (temp 3-component vector of float)
-0:190          arc tangent (global 3-component vector of float)
+0:190          arc tangent (temp 3-component vector of float)
 0:190            'inF0' (in 3-component vector of float)
 0:191      Sequence
 0:191        move second child to first child (temp 3-component vector of float)
 0:191          'r010' (temp 3-component vector of float)
-0:191          arc tangent (global 3-component vector of float)
+0:191          arc tangent (temp 3-component vector of float)
 0:191            'inF0' (in 3-component vector of float)
 0:191            'inF1' (in 3-component vector of float)
 0:192      Sequence
 0:192        move second child to first child (temp 3-component vector of float)
 0:192          'r011' (temp 3-component vector of float)
-0:192          Ceiling (global 3-component vector of float)
+0:192          Ceiling (temp 3-component vector of float)
 0:192            'inF0' (in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child (temp 3-component vector of float)
 0:193          'r012' (temp 3-component vector of float)
-0:193          clamp (global 3-component vector of float)
+0:193          clamp (temp 3-component vector of float)
 0:193            'inF0' (in 3-component vector of float)
 0:193            'inF1' (in 3-component vector of float)
 0:193            'inF2' (in 3-component vector of float)
@@ -818,17 +818,17 @@
 0:195      Sequence
 0:195        move second child to first child (temp 3-component vector of float)
 0:195          'r013' (temp 3-component vector of float)
-0:195          cosine (global 3-component vector of float)
+0:195          cosine (temp 3-component vector of float)
 0:195            'inF0' (in 3-component vector of float)
 0:196      Sequence
 0:196        move second child to first child (temp 3-component vector of float)
 0:196          'r014' (temp 3-component vector of float)
-0:196          hyp. cosine (global 3-component vector of float)
+0:196          hyp. cosine (temp 3-component vector of float)
 0:196            'inF0' (in 3-component vector of float)
 0:197      Sequence
 0:197        move second child to first child (temp 3-component vector of uint)
 0:197          'r015' (temp 3-component vector of uint)
-0:?           bitCount (global 3-component vector of uint)
+0:?           bitCount (temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
@@ -836,77 +836,77 @@
 0:198      Sequence
 0:198        move second child to first child (temp 3-component vector of float)
 0:198          'r016' (temp 3-component vector of float)
-0:198          cross-product (global 3-component vector of float)
+0:198          cross-product (temp 3-component vector of float)
 0:198            'inF0' (in 3-component vector of float)
 0:198            'inF1' (in 3-component vector of float)
 0:199      Sequence
 0:199        move second child to first child (temp 3-component vector of float)
 0:199          'r017' (temp 3-component vector of float)
-0:199          dPdx (global 3-component vector of float)
+0:199          dPdx (temp 3-component vector of float)
 0:199            'inF0' (in 3-component vector of float)
 0:200      Sequence
 0:200        move second child to first child (temp 3-component vector of float)
 0:200          'r018' (temp 3-component vector of float)
-0:200          dPdxCoarse (global 3-component vector of float)
+0:200          dPdxCoarse (temp 3-component vector of float)
 0:200            'inF0' (in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child (temp 3-component vector of float)
 0:201          'r019' (temp 3-component vector of float)
-0:201          dPdxFine (global 3-component vector of float)
+0:201          dPdxFine (temp 3-component vector of float)
 0:201            'inF0' (in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child (temp 3-component vector of float)
 0:202          'r020' (temp 3-component vector of float)
-0:202          dPdy (global 3-component vector of float)
+0:202          dPdy (temp 3-component vector of float)
 0:202            'inF0' (in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child (temp 3-component vector of float)
 0:203          'r021' (temp 3-component vector of float)
-0:203          dPdyCoarse (global 3-component vector of float)
+0:203          dPdyCoarse (temp 3-component vector of float)
 0:203            'inF0' (in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child (temp 3-component vector of float)
 0:204          'r022' (temp 3-component vector of float)
-0:204          dPdyFine (global 3-component vector of float)
+0:204          dPdyFine (temp 3-component vector of float)
 0:204            'inF0' (in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child (temp 3-component vector of float)
 0:205          'r023' (temp 3-component vector of float)
-0:205          degrees (global 3-component vector of float)
+0:205          degrees (temp 3-component vector of float)
 0:205            'inF0' (in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child (temp float)
 0:206          'r024' (temp float)
-0:206          distance (global float)
+0:206          distance (temp float)
 0:206            'inF0' (in 3-component vector of float)
 0:206            'inF1' (in 3-component vector of float)
 0:207      Sequence
 0:207        move second child to first child (temp float)
 0:207          'r025' (temp float)
-0:207          dot-product (global float)
+0:207          dot-product (temp float)
 0:207            'inF0' (in 3-component vector of float)
 0:207            'inF1' (in 3-component vector of float)
 0:211      Sequence
 0:211        move second child to first child (temp 3-component vector of float)
 0:211          'r029' (temp 3-component vector of float)
-0:211          exp (global 3-component vector of float)
+0:211          exp (temp 3-component vector of float)
 0:211            'inF0' (in 3-component vector of float)
 0:212      Sequence
 0:212        move second child to first child (temp 3-component vector of float)
 0:212          'r030' (temp 3-component vector of float)
-0:212          exp2 (global 3-component vector of float)
+0:212          exp2 (temp 3-component vector of float)
 0:212            'inF0' (in 3-component vector of float)
 0:213      Sequence
 0:213        move second child to first child (temp 3-component vector of float)
 0:213          'r031' (temp 3-component vector of float)
-0:213          face-forward (global 3-component vector of float)
+0:213          face-forward (temp 3-component vector of float)
 0:213            'inF0' (in 3-component vector of float)
 0:213            'inF1' (in 3-component vector of float)
 0:213            'inF2' (in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child (temp 3-component vector of uint)
 0:214          'r032' (temp 3-component vector of uint)
-0:?           findMSB (global 3-component vector of uint)
+0:?           findMSB (temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
@@ -914,7 +914,7 @@
 0:215      Sequence
 0:215        move second child to first child (temp 3-component vector of uint)
 0:215          'r033' (temp 3-component vector of uint)
-0:?           findLSB (global 3-component vector of uint)
+0:?           findLSB (temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
@@ -922,57 +922,57 @@
 0:216      Sequence
 0:216        move second child to first child (temp 3-component vector of float)
 0:216          'r034' (temp 3-component vector of float)
-0:216          Floor (global 3-component vector of float)
+0:216          Floor (temp 3-component vector of float)
 0:216            'inF0' (in 3-component vector of float)
 0:218      Sequence
 0:218        move second child to first child (temp 3-component vector of float)
 0:218          'r036' (temp 3-component vector of float)
-0:218          mod (global 3-component vector of float)
+0:218          mod (temp 3-component vector of float)
 0:218            'inF0' (in 3-component vector of float)
 0:218            'inF1' (in 3-component vector of float)
 0:219      Sequence
 0:219        move second child to first child (temp 3-component vector of float)
 0:219          'r037' (temp 3-component vector of float)
-0:219          Fraction (global 3-component vector of float)
+0:219          Fraction (temp 3-component vector of float)
 0:219            'inF0' (in 3-component vector of float)
 0:220      Sequence
 0:220        move second child to first child (temp 3-component vector of float)
 0:220          'r038' (temp 3-component vector of float)
-0:220          frexp (global 3-component vector of float)
+0:220          frexp (temp 3-component vector of float)
 0:220            'inF0' (in 3-component vector of float)
 0:220            'inF1' (in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child (temp 3-component vector of float)
 0:221          'r039' (temp 3-component vector of float)
-0:221          fwidth (global 3-component vector of float)
+0:221          fwidth (temp 3-component vector of float)
 0:221            'inF0' (in 3-component vector of float)
 0:222      Sequence
 0:222        move second child to first child (temp 3-component vector of bool)
 0:222          'r040' (temp 3-component vector of bool)
-0:222          isinf (global 3-component vector of bool)
+0:222          isinf (temp 3-component vector of bool)
 0:222            'inF0' (in 3-component vector of float)
 0:223      Sequence
 0:223        move second child to first child (temp 3-component vector of bool)
 0:223          'r041' (temp 3-component vector of bool)
-0:223          isnan (global 3-component vector of bool)
+0:223          isnan (temp 3-component vector of bool)
 0:223            'inF0' (in 3-component vector of float)
 0:224      Sequence
 0:224        move second child to first child (temp 3-component vector of float)
 0:224          'r042' (temp 3-component vector of float)
-0:224          ldexp (global 3-component vector of float)
+0:224          ldexp (temp 3-component vector of float)
 0:224            'inF0' (in 3-component vector of float)
 0:224            'inF1' (in 3-component vector of float)
 0:225      Sequence
 0:225        move second child to first child (temp 3-component vector of float)
 0:225          'r039a' (temp 3-component vector of float)
-0:225          mix (global 3-component vector of float)
+0:225          mix (temp 3-component vector of float)
 0:225            'inF0' (in 3-component vector of float)
 0:225            'inF1' (in 3-component vector of float)
 0:225            'inF2' (in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child (temp 3-component vector of float)
 0:226          'r039b' (temp 3-component vector of float)
-0:226          mix (global 3-component vector of float)
+0:226          mix (temp 3-component vector of float)
 0:226            'inF0' (in 3-component vector of float)
 0:226            'inF1' (in 3-component vector of float)
 0:226            Constant:
@@ -980,12 +980,12 @@
 0:227      Sequence
 0:227        move second child to first child (temp float)
 0:227          'r043' (temp float)
-0:227          length (global float)
+0:227          length (temp float)
 0:227            'inF0' (in 3-component vector of float)
 0:228      Sequence
 0:228        move second child to first child (temp 3-component vector of float)
 0:228          'r044' (temp 3-component vector of float)
-0:228          log (global 3-component vector of float)
+0:228          log (temp 3-component vector of float)
 0:228            'inF0' (in 3-component vector of float)
 0:229      Sequence
 0:229        move second child to first child (temp 3-component vector of float)
@@ -998,35 +998,35 @@
 0:230      Sequence
 0:230        move second child to first child (temp 3-component vector of float)
 0:230          'r046' (temp 3-component vector of float)
-0:230          log2 (global 3-component vector of float)
+0:230          log2 (temp 3-component vector of float)
 0:230            'inF0' (in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child (temp 3-component vector of float)
 0:231          'r047' (temp 3-component vector of float)
-0:231          max (global 3-component vector of float)
+0:231          max (temp 3-component vector of float)
 0:231            'inF0' (in 3-component vector of float)
 0:231            'inF1' (in 3-component vector of float)
 0:232      Sequence
 0:232        move second child to first child (temp 3-component vector of float)
 0:232          'r048' (temp 3-component vector of float)
-0:232          min (global 3-component vector of float)
+0:232          min (temp 3-component vector of float)
 0:232            'inF0' (in 3-component vector of float)
 0:232            'inF1' (in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child (temp 3-component vector of float)
 0:233          'r049' (temp 3-component vector of float)
-0:233          normalize (global 3-component vector of float)
+0:233          normalize (temp 3-component vector of float)
 0:233            'inF0' (in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child (temp 3-component vector of float)
 0:234          'r050' (temp 3-component vector of float)
-0:234          pow (global 3-component vector of float)
+0:234          pow (temp 3-component vector of float)
 0:234            'inF0' (in 3-component vector of float)
 0:234            'inF1' (in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child (temp 3-component vector of float)
 0:235          'r051' (temp 3-component vector of float)
-0:235          radians (global 3-component vector of float)
+0:235          radians (temp 3-component vector of float)
 0:235            'inF0' (in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child (temp 3-component vector of float)
@@ -1038,13 +1038,13 @@
 0:237      Sequence
 0:237        move second child to first child (temp 3-component vector of float)
 0:237          'r053' (temp 3-component vector of float)
-0:237          reflect (global 3-component vector of float)
+0:237          reflect (temp 3-component vector of float)
 0:237            'inF0' (in 3-component vector of float)
 0:237            'inF1' (in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child (temp 3-component vector of float)
 0:238          'r054' (temp 3-component vector of float)
-0:238          refract (global 3-component vector of float)
+0:238          refract (temp 3-component vector of float)
 0:238            'inF0' (in 3-component vector of float)
 0:238            'inF1' (in 3-component vector of float)
 0:238            Constant:
@@ -1052,7 +1052,7 @@
 0:239      Sequence
 0:239        move second child to first child (temp 3-component vector of uint)
 0:239          'r055' (temp 3-component vector of uint)
-0:?           bitFieldReverse (global 3-component vector of uint)
+0:?           bitFieldReverse (temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
@@ -1060,12 +1060,12 @@
 0:240      Sequence
 0:240        move second child to first child (temp 3-component vector of float)
 0:240          'r056' (temp 3-component vector of float)
-0:240          roundEven (global 3-component vector of float)
+0:240          roundEven (temp 3-component vector of float)
 0:240            'inF0' (in 3-component vector of float)
 0:241      Sequence
 0:241        move second child to first child (temp 3-component vector of float)
 0:241          'r057' (temp 3-component vector of float)
-0:241          inverse sqrt (global 3-component vector of float)
+0:241          inverse sqrt (temp 3-component vector of float)
 0:241            'inF0' (in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child (temp 3-component vector of float)
@@ -1079,12 +1079,12 @@
 0:243      Sequence
 0:243        move second child to first child (temp 3-component vector of float)
 0:243          'r059' (temp 3-component vector of float)
-0:243          Sign (global 3-component vector of float)
+0:243          Sign (temp 3-component vector of float)
 0:243            'inF0' (in 3-component vector of float)
 0:244      Sequence
 0:244        move second child to first child (temp 3-component vector of float)
 0:244          'r060' (temp 3-component vector of float)
-0:244          sine (global 3-component vector of float)
+0:244          sine (temp 3-component vector of float)
 0:244            'inF0' (in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child (temp 3-component vector of float)
@@ -1098,40 +1098,40 @@
 0:246      Sequence
 0:246        move second child to first child (temp 3-component vector of float)
 0:246          'r061' (temp 3-component vector of float)
-0:246          hyp. sine (global 3-component vector of float)
+0:246          hyp. sine (temp 3-component vector of float)
 0:246            'inF0' (in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child (temp 3-component vector of float)
 0:247          'r062' (temp 3-component vector of float)
-0:247          smoothstep (global 3-component vector of float)
+0:247          smoothstep (temp 3-component vector of float)
 0:247            'inF0' (in 3-component vector of float)
 0:247            'inF1' (in 3-component vector of float)
 0:247            'inF2' (in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child (temp 3-component vector of float)
 0:248          'r063' (temp 3-component vector of float)
-0:248          sqrt (global 3-component vector of float)
+0:248          sqrt (temp 3-component vector of float)
 0:248            'inF0' (in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child (temp 3-component vector of float)
 0:249          'r064' (temp 3-component vector of float)
-0:249          step (global 3-component vector of float)
+0:249          step (temp 3-component vector of float)
 0:249            'inF0' (in 3-component vector of float)
 0:249            'inF1' (in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child (temp 3-component vector of float)
 0:250          'r065' (temp 3-component vector of float)
-0:250          tangent (global 3-component vector of float)
+0:250          tangent (temp 3-component vector of float)
 0:250            'inF0' (in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child (temp 3-component vector of float)
 0:251          'r066' (temp 3-component vector of float)
-0:251          hyp. tangent (global 3-component vector of float)
+0:251          hyp. tangent (temp 3-component vector of float)
 0:251            'inF0' (in 3-component vector of float)
 0:253      Sequence
 0:253        move second child to first child (temp 3-component vector of float)
 0:253          'r067' (temp 3-component vector of float)
-0:253          trunc (global 3-component vector of float)
+0:253          trunc (temp 3-component vector of float)
 0:253            'inF0' (in 3-component vector of float)
 0:256      Branch: Return with expression
 0:?         Constant:
@@ -1149,63 +1149,63 @@
 0:263      Sequence
 0:263        move second child to first child (temp bool)
 0:263          'r000' (temp bool)
-0:263          all (global bool)
+0:263          all (temp bool)
 0:263            'inF0' (in 4-component vector of float)
 0:264      Sequence
 0:264        move second child to first child (temp 4-component vector of float)
 0:264          'r001' (temp 4-component vector of float)
-0:264          Absolute value (global 4-component vector of float)
+0:264          Absolute value (temp 4-component vector of float)
 0:264            'inF0' (in 4-component vector of float)
 0:265      Sequence
 0:265        move second child to first child (temp 4-component vector of float)
 0:265          'r002' (temp 4-component vector of float)
-0:265          arc cosine (global 4-component vector of float)
+0:265          arc cosine (temp 4-component vector of float)
 0:265            'inF0' (in 4-component vector of float)
 0:266      Sequence
 0:266        move second child to first child (temp bool)
 0:266          'r003' (temp bool)
-0:266          any (global bool)
+0:266          any (temp bool)
 0:266            'inF0' (in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child (temp 4-component vector of float)
 0:267          'r004' (temp 4-component vector of float)
-0:267          arc sine (global 4-component vector of float)
+0:267          arc sine (temp 4-component vector of float)
 0:267            'inF0' (in 4-component vector of float)
 0:268      Sequence
 0:268        move second child to first child (temp 4-component vector of int)
 0:268          'r005' (temp 4-component vector of int)
-0:268          floatBitsToInt (global 4-component vector of int)
+0:268          floatBitsToInt (temp 4-component vector of int)
 0:268            'inF0' (in 4-component vector of float)
 0:269      Sequence
 0:269        move second child to first child (temp 4-component vector of uint)
 0:269          'r006' (temp 4-component vector of uint)
-0:269          floatBitsToUint (global 4-component vector of uint)
+0:269          floatBitsToUint (temp 4-component vector of uint)
 0:269            'inF0' (in 4-component vector of float)
 0:270      Sequence
 0:270        move second child to first child (temp 4-component vector of float)
 0:270          'r007' (temp 4-component vector of float)
-0:270          intBitsToFloat (global 4-component vector of float)
+0:270          intBitsToFloat (temp 4-component vector of float)
 0:270            'inU0' (in 4-component vector of uint)
 0:272      Sequence
 0:272        move second child to first child (temp 4-component vector of float)
 0:272          'r009' (temp 4-component vector of float)
-0:272          arc tangent (global 4-component vector of float)
+0:272          arc tangent (temp 4-component vector of float)
 0:272            'inF0' (in 4-component vector of float)
 0:273      Sequence
 0:273        move second child to first child (temp 4-component vector of float)
 0:273          'r010' (temp 4-component vector of float)
-0:273          arc tangent (global 4-component vector of float)
+0:273          arc tangent (temp 4-component vector of float)
 0:273            'inF0' (in 4-component vector of float)
 0:273            'inF1' (in 4-component vector of float)
 0:274      Sequence
 0:274        move second child to first child (temp 4-component vector of float)
 0:274          'r011' (temp 4-component vector of float)
-0:274          Ceiling (global 4-component vector of float)
+0:274          Ceiling (temp 4-component vector of float)
 0:274            'inF0' (in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child (temp 4-component vector of float)
 0:275          'r012' (temp 4-component vector of float)
-0:275          clamp (global 4-component vector of float)
+0:275          clamp (temp 4-component vector of float)
 0:275            'inF0' (in 4-component vector of float)
 0:275            'inF1' (in 4-component vector of float)
 0:275            'inF2' (in 4-component vector of float)
@@ -1224,17 +1224,17 @@
 0:277      Sequence
 0:277        move second child to first child (temp 4-component vector of float)
 0:277          'r013' (temp 4-component vector of float)
-0:277          cosine (global 4-component vector of float)
+0:277          cosine (temp 4-component vector of float)
 0:277            'inF0' (in 4-component vector of float)
 0:278      Sequence
 0:278        move second child to first child (temp 4-component vector of float)
 0:278          'r014' (temp 4-component vector of float)
-0:278          hyp. cosine (global 4-component vector of float)
+0:278          hyp. cosine (temp 4-component vector of float)
 0:278            'inF0' (in 4-component vector of float)
 0:279      Sequence
 0:279        move second child to first child (temp 4-component vector of uint)
 0:279          'r015' (temp 4-component vector of uint)
-0:?           bitCount (global 4-component vector of uint)
+0:?           bitCount (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
@@ -1243,48 +1243,48 @@
 0:280      Sequence
 0:280        move second child to first child (temp 4-component vector of float)
 0:280          'r016' (temp 4-component vector of float)
-0:280          dPdx (global 4-component vector of float)
+0:280          dPdx (temp 4-component vector of float)
 0:280            'inF0' (in 4-component vector of float)
 0:281      Sequence
 0:281        move second child to first child (temp 4-component vector of float)
 0:281          'r017' (temp 4-component vector of float)
-0:281          dPdxCoarse (global 4-component vector of float)
+0:281          dPdxCoarse (temp 4-component vector of float)
 0:281            'inF0' (in 4-component vector of float)
 0:282      Sequence
 0:282        move second child to first child (temp 4-component vector of float)
 0:282          'r018' (temp 4-component vector of float)
-0:282          dPdxFine (global 4-component vector of float)
+0:282          dPdxFine (temp 4-component vector of float)
 0:282            'inF0' (in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child (temp 4-component vector of float)
 0:283          'r019' (temp 4-component vector of float)
-0:283          dPdy (global 4-component vector of float)
+0:283          dPdy (temp 4-component vector of float)
 0:283            'inF0' (in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child (temp 4-component vector of float)
 0:284          'r020' (temp 4-component vector of float)
-0:284          dPdyCoarse (global 4-component vector of float)
+0:284          dPdyCoarse (temp 4-component vector of float)
 0:284            'inF0' (in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child (temp 4-component vector of float)
 0:285          'r021' (temp 4-component vector of float)
-0:285          dPdyFine (global 4-component vector of float)
+0:285          dPdyFine (temp 4-component vector of float)
 0:285            'inF0' (in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child (temp 4-component vector of float)
 0:286          'r022' (temp 4-component vector of float)
-0:286          degrees (global 4-component vector of float)
+0:286          degrees (temp 4-component vector of float)
 0:286            'inF0' (in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child (temp float)
 0:287          'r023' (temp float)
-0:287          distance (global float)
+0:287          distance (temp float)
 0:287            'inF0' (in 4-component vector of float)
 0:287            'inF1' (in 4-component vector of float)
 0:288      Sequence
 0:288        move second child to first child (temp float)
 0:288          'r024' (temp float)
-0:288          dot-product (global float)
+0:288          dot-product (temp float)
 0:288            'inF0' (in 4-component vector of float)
 0:288            'inF1' (in 4-component vector of float)
 0:289      Sequence
@@ -1313,24 +1313,24 @@
 0:293      Sequence
 0:293        move second child to first child (temp 4-component vector of float)
 0:293          'r029' (temp 4-component vector of float)
-0:293          exp (global 4-component vector of float)
+0:293          exp (temp 4-component vector of float)
 0:293            'inF0' (in 4-component vector of float)
 0:294      Sequence
 0:294        move second child to first child (temp 4-component vector of float)
 0:294          'r030' (temp 4-component vector of float)
-0:294          exp2 (global 4-component vector of float)
+0:294          exp2 (temp 4-component vector of float)
 0:294            'inF0' (in 4-component vector of float)
 0:295      Sequence
 0:295        move second child to first child (temp 4-component vector of float)
 0:295          'r031' (temp 4-component vector of float)
-0:295          face-forward (global 4-component vector of float)
+0:295          face-forward (temp 4-component vector of float)
 0:295            'inF0' (in 4-component vector of float)
 0:295            'inF1' (in 4-component vector of float)
 0:295            'inF2' (in 4-component vector of float)
 0:296      Sequence
 0:296        move second child to first child (temp 4-component vector of uint)
 0:296          'r032' (temp 4-component vector of uint)
-0:?           findMSB (global 4-component vector of uint)
+0:?           findMSB (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
@@ -1339,7 +1339,7 @@
 0:297      Sequence
 0:297        move second child to first child (temp 4-component vector of uint)
 0:297          'r033' (temp 4-component vector of uint)
-0:?           findLSB (global 4-component vector of uint)
+0:?           findLSB (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
@@ -1348,62 +1348,62 @@
 0:298      Sequence
 0:298        move second child to first child (temp 4-component vector of float)
 0:298          'r034' (temp 4-component vector of float)
-0:298          Floor (global 4-component vector of float)
+0:298          Floor (temp 4-component vector of float)
 0:298            'inF0' (in 4-component vector of float)
 0:300      Sequence
 0:300        move second child to first child (temp 4-component vector of float)
 0:300          'r036' (temp 4-component vector of float)
-0:300          mod (global 4-component vector of float)
+0:300          mod (temp 4-component vector of float)
 0:300            'inF0' (in 4-component vector of float)
 0:300            'inF1' (in 4-component vector of float)
 0:301      Sequence
 0:301        move second child to first child (temp 4-component vector of float)
 0:301          'r037' (temp 4-component vector of float)
-0:301          Fraction (global 4-component vector of float)
+0:301          Fraction (temp 4-component vector of float)
 0:301            'inF0' (in 4-component vector of float)
 0:302      Sequence
 0:302        move second child to first child (temp 4-component vector of float)
 0:302          'r038' (temp 4-component vector of float)
-0:302          frexp (global 4-component vector of float)
+0:302          frexp (temp 4-component vector of float)
 0:302            'inF0' (in 4-component vector of float)
 0:302            'inF1' (in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child (temp 4-component vector of float)
 0:303          'r039' (temp 4-component vector of float)
-0:303          fwidth (global 4-component vector of float)
+0:303          fwidth (temp 4-component vector of float)
 0:303            'inF0' (in 4-component vector of float)
 0:304      Sequence
 0:304        move second child to first child (temp 4-component vector of bool)
 0:304          'r040' (temp 4-component vector of bool)
-0:304          isinf (global 4-component vector of bool)
+0:304          isinf (temp 4-component vector of bool)
 0:304            'inF0' (in 4-component vector of float)
 0:305      Sequence
 0:305        move second child to first child (temp 4-component vector of bool)
 0:305          'r041' (temp 4-component vector of bool)
-0:305          isnan (global 4-component vector of bool)
+0:305          isnan (temp 4-component vector of bool)
 0:305            'inF0' (in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child (temp 4-component vector of float)
 0:306          'r042' (temp 4-component vector of float)
-0:306          ldexp (global 4-component vector of float)
+0:306          ldexp (temp 4-component vector of float)
 0:306            'inF0' (in 4-component vector of float)
 0:306            'inF1' (in 4-component vector of float)
 0:307      Sequence
 0:307        move second child to first child (temp 4-component vector of float)
 0:307          'r039a' (temp 4-component vector of float)
-0:307          mix (global 4-component vector of float)
+0:307          mix (temp 4-component vector of float)
 0:307            'inF0' (in 4-component vector of float)
 0:307            'inF1' (in 4-component vector of float)
 0:307            'inF2' (in 4-component vector of float)
 0:308      Sequence
 0:308        move second child to first child (temp float)
 0:308          'r043' (temp float)
-0:308          length (global float)
+0:308          length (temp float)
 0:308            'inF0' (in 4-component vector of float)
 0:309      Sequence
 0:309        move second child to first child (temp 4-component vector of float)
 0:309          'r044' (temp 4-component vector of float)
-0:309          log (global 4-component vector of float)
+0:309          log (temp 4-component vector of float)
 0:309            'inF0' (in 4-component vector of float)
 0:310      Sequence
 0:310        move second child to first child (temp 4-component vector of float)
@@ -1416,35 +1416,35 @@
 0:311      Sequence
 0:311        move second child to first child (temp 4-component vector of float)
 0:311          'r046' (temp 4-component vector of float)
-0:311          log2 (global 4-component vector of float)
+0:311          log2 (temp 4-component vector of float)
 0:311            'inF0' (in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child (temp 4-component vector of float)
 0:312          'r047' (temp 4-component vector of float)
-0:312          max (global 4-component vector of float)
+0:312          max (temp 4-component vector of float)
 0:312            'inF0' (in 4-component vector of float)
 0:312            'inF1' (in 4-component vector of float)
 0:313      Sequence
 0:313        move second child to first child (temp 4-component vector of float)
 0:313          'r048' (temp 4-component vector of float)
-0:313          min (global 4-component vector of float)
+0:313          min (temp 4-component vector of float)
 0:313            'inF0' (in 4-component vector of float)
 0:313            'inF1' (in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child (temp 4-component vector of float)
 0:314          'r049' (temp 4-component vector of float)
-0:314          normalize (global 4-component vector of float)
+0:314          normalize (temp 4-component vector of float)
 0:314            'inF0' (in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child (temp 4-component vector of float)
 0:315          'r050' (temp 4-component vector of float)
-0:315          pow (global 4-component vector of float)
+0:315          pow (temp 4-component vector of float)
 0:315            'inF0' (in 4-component vector of float)
 0:315            'inF1' (in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child (temp 4-component vector of float)
 0:316          'r051' (temp 4-component vector of float)
-0:316          radians (global 4-component vector of float)
+0:316          radians (temp 4-component vector of float)
 0:316            'inF0' (in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child (temp 4-component vector of float)
@@ -1456,13 +1456,13 @@
 0:318      Sequence
 0:318        move second child to first child (temp 4-component vector of float)
 0:318          'r053' (temp 4-component vector of float)
-0:318          reflect (global 4-component vector of float)
+0:318          reflect (temp 4-component vector of float)
 0:318            'inF0' (in 4-component vector of float)
 0:318            'inF1' (in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child (temp 4-component vector of float)
 0:319          'r054' (temp 4-component vector of float)
-0:319          refract (global 4-component vector of float)
+0:319          refract (temp 4-component vector of float)
 0:319            'inF0' (in 4-component vector of float)
 0:319            'inF1' (in 4-component vector of float)
 0:319            Constant:
@@ -1470,7 +1470,7 @@
 0:320      Sequence
 0:320        move second child to first child (temp 4-component vector of uint)
 0:320          'r055' (temp 4-component vector of uint)
-0:?           bitFieldReverse (global 4-component vector of uint)
+0:?           bitFieldReverse (temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
@@ -1479,12 +1479,12 @@
 0:321      Sequence
 0:321        move second child to first child (temp 4-component vector of float)
 0:321          'r056' (temp 4-component vector of float)
-0:321          roundEven (global 4-component vector of float)
+0:321          roundEven (temp 4-component vector of float)
 0:321            'inF0' (in 4-component vector of float)
 0:322      Sequence
 0:322        move second child to first child (temp 4-component vector of float)
 0:322          'r057' (temp 4-component vector of float)
-0:322          inverse sqrt (global 4-component vector of float)
+0:322          inverse sqrt (temp 4-component vector of float)
 0:322            'inF0' (in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child (temp 4-component vector of float)
@@ -1498,12 +1498,12 @@
 0:324      Sequence
 0:324        move second child to first child (temp 4-component vector of float)
 0:324          'r059' (temp 4-component vector of float)
-0:324          Sign (global 4-component vector of float)
+0:324          Sign (temp 4-component vector of float)
 0:324            'inF0' (in 4-component vector of float)
 0:325      Sequence
 0:325        move second child to first child (temp 4-component vector of float)
 0:325          'r060' (temp 4-component vector of float)
-0:325          sine (global 4-component vector of float)
+0:325          sine (temp 4-component vector of float)
 0:325            'inF0' (in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child (temp 4-component vector of float)
@@ -1517,40 +1517,40 @@
 0:327      Sequence
 0:327        move second child to first child (temp 4-component vector of float)
 0:327          'r061' (temp 4-component vector of float)
-0:327          hyp. sine (global 4-component vector of float)
+0:327          hyp. sine (temp 4-component vector of float)
 0:327            'inF0' (in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child (temp 4-component vector of float)
 0:328          'r062' (temp 4-component vector of float)
-0:328          smoothstep (global 4-component vector of float)
+0:328          smoothstep (temp 4-component vector of float)
 0:328            'inF0' (in 4-component vector of float)
 0:328            'inF1' (in 4-component vector of float)
 0:328            'inF2' (in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child (temp 4-component vector of float)
 0:329          'r063' (temp 4-component vector of float)
-0:329          sqrt (global 4-component vector of float)
+0:329          sqrt (temp 4-component vector of float)
 0:329            'inF0' (in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child (temp 4-component vector of float)
 0:330          'r064' (temp 4-component vector of float)
-0:330          step (global 4-component vector of float)
+0:330          step (temp 4-component vector of float)
 0:330            'inF0' (in 4-component vector of float)
 0:330            'inF1' (in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child (temp 4-component vector of float)
 0:331          'r065' (temp 4-component vector of float)
-0:331          tangent (global 4-component vector of float)
+0:331          tangent (temp 4-component vector of float)
 0:331            'inF0' (in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child (temp 4-component vector of float)
 0:332          'r066' (temp 4-component vector of float)
-0:332          hyp. tangent (global 4-component vector of float)
+0:332          hyp. tangent (temp 4-component vector of float)
 0:332            'inF0' (in 4-component vector of float)
 0:334      Sequence
 0:334        move second child to first child (temp 4-component vector of float)
 0:334          'r067' (temp 4-component vector of float)
-0:334          trunc (global 4-component vector of float)
+0:334          trunc (temp 4-component vector of float)
 0:334            'inF0' (in 4-component vector of float)
 0:337      Branch: Return with expression
 0:?         Constant:
@@ -1567,40 +1567,40 @@
 0:403      Sequence
 0:403        move second child to first child (temp bool)
 0:403          'r000' (temp bool)
-0:403          all (global bool)
+0:403          all (temp bool)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r001' (temp 2X2 matrix of float)
-0:403          Absolute value (global 2X2 matrix of float)
+0:403          Absolute value (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
-0:403      arc cosine (global 2X2 matrix of float)
+0:403      arc cosine (temp 2X2 matrix of float)
 0:403        'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp bool)
 0:403          'r003' (temp bool)
-0:403          any (global bool)
+0:403          any (temp bool)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r004' (temp 2X2 matrix of float)
-0:403          arc sine (global 2X2 matrix of float)
+0:403          arc sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r005' (temp 2X2 matrix of float)
-0:403          arc tangent (global 2X2 matrix of float)
+0:403          arc tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r006' (temp 2X2 matrix of float)
-0:403          arc tangent (global 2X2 matrix of float)
+0:403          arc tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r007' (temp 2X2 matrix of float)
-0:403          Ceiling (global 2X2 matrix of float)
+0:403          Ceiling (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Test condition and select (temp void)
 0:403        Condition
@@ -1617,114 +1617,114 @@
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r008' (temp 2X2 matrix of float)
-0:403          clamp (global 2X2 matrix of float)
+0:403          clamp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r009' (temp 2X2 matrix of float)
-0:403          cosine (global 2X2 matrix of float)
+0:403          cosine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r010' (temp 2X2 matrix of float)
-0:403          hyp. cosine (global 2X2 matrix of float)
+0:403          hyp. cosine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r011' (temp 2X2 matrix of float)
-0:403          dPdx (global 2X2 matrix of float)
+0:403          dPdx (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r012' (temp 2X2 matrix of float)
-0:403          dPdxCoarse (global 2X2 matrix of float)
+0:403          dPdxCoarse (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r013' (temp 2X2 matrix of float)
-0:403          dPdxFine (global 2X2 matrix of float)
+0:403          dPdxFine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r014' (temp 2X2 matrix of float)
-0:403          dPdy (global 2X2 matrix of float)
+0:403          dPdy (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r015' (temp 2X2 matrix of float)
-0:403          dPdyCoarse (global 2X2 matrix of float)
+0:403          dPdyCoarse (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r016' (temp 2X2 matrix of float)
-0:403          dPdyFine (global 2X2 matrix of float)
+0:403          dPdyFine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r017' (temp 2X2 matrix of float)
-0:403          degrees (global 2X2 matrix of float)
+0:403          degrees (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp float)
 0:403          'r018' (temp float)
-0:403          determinant (global float)
+0:403          determinant (temp float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r019' (temp 2X2 matrix of float)
-0:403          exp (global 2X2 matrix of float)
+0:403          exp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'R020' (temp 2X2 matrix of float)
-0:403          exp2 (global 2X2 matrix of float)
+0:403          exp2 (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r021' (temp 2X2 matrix of float)
-0:403          Floor (global 2X2 matrix of float)
+0:403          Floor (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r022' (temp 2X2 matrix of float)
-0:403          mod (global 2X2 matrix of float)
+0:403          mod (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r023' (temp 2X2 matrix of float)
-0:403          Fraction (global 2X2 matrix of float)
+0:403          Fraction (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r024' (temp 2X2 matrix of float)
-0:403          frexp (global 2X2 matrix of float)
+0:403          frexp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r025' (temp 2X2 matrix of float)
-0:403          fwidth (global 2X2 matrix of float)
+0:403          fwidth (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r026' (temp 2X2 matrix of float)
-0:403          ldexp (global 2X2 matrix of float)
+0:403          ldexp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r026a' (temp 2X2 matrix of float)
-0:403          mix (global 2X2 matrix of float)
+0:403          mix (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r027' (temp 2X2 matrix of float)
-0:403          log (global 2X2 matrix of float)
+0:403          log (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -1737,40 +1737,40 @@
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r029' (temp 2X2 matrix of float)
-0:403          log2 (global 2X2 matrix of float)
+0:403          log2 (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r030' (temp 2X2 matrix of float)
-0:403          max (global 2X2 matrix of float)
+0:403          max (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r031' (temp 2X2 matrix of float)
-0:403          min (global 2X2 matrix of float)
+0:403          min (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r032' (temp 2X2 matrix of float)
-0:403          pow (global 2X2 matrix of float)
+0:403          pow (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r033' (temp 2X2 matrix of float)
-0:403          radians (global 2X2 matrix of float)
+0:403          radians (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r034' (temp 2X2 matrix of float)
-0:403          roundEven (global 2X2 matrix of float)
+0:403          roundEven (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r035' (temp 2X2 matrix of float)
-0:403          inverse sqrt (global 2X2 matrix of float)
+0:403          inverse sqrt (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -1784,12 +1784,12 @@
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r037' (temp 2X2 matrix of float)
-0:403          Sign (global 2X2 matrix of float)
+0:403          Sign (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r038' (temp 2X2 matrix of float)
-0:403          sine (global 2X2 matrix of float)
+0:403          sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -1803,42 +1803,42 @@
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r039' (temp 2X2 matrix of float)
-0:403          hyp. sine (global 2X2 matrix of float)
+0:403          hyp. sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r049' (temp 2X2 matrix of float)
-0:403          smoothstep (global 2X2 matrix of float)
+0:403          smoothstep (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r041' (temp 2X2 matrix of float)
-0:403          sqrt (global 2X2 matrix of float)
+0:403          sqrt (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r042' (temp 2X2 matrix of float)
-0:403          step (global 2X2 matrix of float)
+0:403          step (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r043' (temp 2X2 matrix of float)
-0:403          tangent (global 2X2 matrix of float)
+0:403          tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r044' (temp 2X2 matrix of float)
-0:403          hyp. tangent (global 2X2 matrix of float)
+0:403          hyp. tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
-0:403      transpose (global 2X2 matrix of float)
+0:403      transpose (temp 2X2 matrix of float)
 0:403        'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r046' (temp 2X2 matrix of float)
-0:403          trunc (global 2X2 matrix of float)
+0:403          trunc (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:406      Branch: Return with expression
 0:?         Constant:
@@ -1855,40 +1855,40 @@
 0:412      Sequence
 0:412        move second child to first child (temp bool)
 0:412          'r000' (temp bool)
-0:412          all (global bool)
+0:412          all (temp bool)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r001' (temp 3X3 matrix of float)
-0:412          Absolute value (global 3X3 matrix of float)
+0:412          Absolute value (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
-0:412      arc cosine (global 3X3 matrix of float)
+0:412      arc cosine (temp 3X3 matrix of float)
 0:412        'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp bool)
 0:412          'r003' (temp bool)
-0:412          any (global bool)
+0:412          any (temp bool)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r004' (temp 3X3 matrix of float)
-0:412          arc sine (global 3X3 matrix of float)
+0:412          arc sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r005' (temp 3X3 matrix of float)
-0:412          arc tangent (global 3X3 matrix of float)
+0:412          arc tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r006' (temp 3X3 matrix of float)
-0:412          arc tangent (global 3X3 matrix of float)
+0:412          arc tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r007' (temp 3X3 matrix of float)
-0:412          Ceiling (global 3X3 matrix of float)
+0:412          Ceiling (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Test condition and select (temp void)
 0:412        Condition
@@ -1910,114 +1910,114 @@
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r008' (temp 3X3 matrix of float)
-0:412          clamp (global 3X3 matrix of float)
+0:412          clamp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r009' (temp 3X3 matrix of float)
-0:412          cosine (global 3X3 matrix of float)
+0:412          cosine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r010' (temp 3X3 matrix of float)
-0:412          hyp. cosine (global 3X3 matrix of float)
+0:412          hyp. cosine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r011' (temp 3X3 matrix of float)
-0:412          dPdx (global 3X3 matrix of float)
+0:412          dPdx (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r012' (temp 3X3 matrix of float)
-0:412          dPdxCoarse (global 3X3 matrix of float)
+0:412          dPdxCoarse (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r013' (temp 3X3 matrix of float)
-0:412          dPdxFine (global 3X3 matrix of float)
+0:412          dPdxFine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r014' (temp 3X3 matrix of float)
-0:412          dPdy (global 3X3 matrix of float)
+0:412          dPdy (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r015' (temp 3X3 matrix of float)
-0:412          dPdyCoarse (global 3X3 matrix of float)
+0:412          dPdyCoarse (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r016' (temp 3X3 matrix of float)
-0:412          dPdyFine (global 3X3 matrix of float)
+0:412          dPdyFine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r017' (temp 3X3 matrix of float)
-0:412          degrees (global 3X3 matrix of float)
+0:412          degrees (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp float)
 0:412          'r018' (temp float)
-0:412          determinant (global float)
+0:412          determinant (temp float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r019' (temp 3X3 matrix of float)
-0:412          exp (global 3X3 matrix of float)
+0:412          exp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'R020' (temp 3X3 matrix of float)
-0:412          exp2 (global 3X3 matrix of float)
+0:412          exp2 (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r021' (temp 3X3 matrix of float)
-0:412          Floor (global 3X3 matrix of float)
+0:412          Floor (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r022' (temp 3X3 matrix of float)
-0:412          mod (global 3X3 matrix of float)
+0:412          mod (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r023' (temp 3X3 matrix of float)
-0:412          Fraction (global 3X3 matrix of float)
+0:412          Fraction (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r024' (temp 3X3 matrix of float)
-0:412          frexp (global 3X3 matrix of float)
+0:412          frexp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r025' (temp 3X3 matrix of float)
-0:412          fwidth (global 3X3 matrix of float)
+0:412          fwidth (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r026' (temp 3X3 matrix of float)
-0:412          ldexp (global 3X3 matrix of float)
+0:412          ldexp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r026a' (temp 3X3 matrix of float)
-0:412          mix (global 3X3 matrix of float)
+0:412          mix (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r027' (temp 3X3 matrix of float)
-0:412          log (global 3X3 matrix of float)
+0:412          log (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -2030,40 +2030,40 @@
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r029' (temp 3X3 matrix of float)
-0:412          log2 (global 3X3 matrix of float)
+0:412          log2 (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r030' (temp 3X3 matrix of float)
-0:412          max (global 3X3 matrix of float)
+0:412          max (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r031' (temp 3X3 matrix of float)
-0:412          min (global 3X3 matrix of float)
+0:412          min (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r032' (temp 3X3 matrix of float)
-0:412          pow (global 3X3 matrix of float)
+0:412          pow (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r033' (temp 3X3 matrix of float)
-0:412          radians (global 3X3 matrix of float)
+0:412          radians (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r034' (temp 3X3 matrix of float)
-0:412          roundEven (global 3X3 matrix of float)
+0:412          roundEven (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r035' (temp 3X3 matrix of float)
-0:412          inverse sqrt (global 3X3 matrix of float)
+0:412          inverse sqrt (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -2077,12 +2077,12 @@
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r037' (temp 3X3 matrix of float)
-0:412          Sign (global 3X3 matrix of float)
+0:412          Sign (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r038' (temp 3X3 matrix of float)
-0:412          sine (global 3X3 matrix of float)
+0:412          sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -2096,42 +2096,42 @@
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r039' (temp 3X3 matrix of float)
-0:412          hyp. sine (global 3X3 matrix of float)
+0:412          hyp. sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r049' (temp 3X3 matrix of float)
-0:412          smoothstep (global 3X3 matrix of float)
+0:412          smoothstep (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r041' (temp 3X3 matrix of float)
-0:412          sqrt (global 3X3 matrix of float)
+0:412          sqrt (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r042' (temp 3X3 matrix of float)
-0:412          step (global 3X3 matrix of float)
+0:412          step (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r043' (temp 3X3 matrix of float)
-0:412          tangent (global 3X3 matrix of float)
+0:412          tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r044' (temp 3X3 matrix of float)
-0:412          hyp. tangent (global 3X3 matrix of float)
+0:412          hyp. tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
-0:412      transpose (global 3X3 matrix of float)
+0:412      transpose (temp 3X3 matrix of float)
 0:412        'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r046' (temp 3X3 matrix of float)
-0:412          trunc (global 3X3 matrix of float)
+0:412          trunc (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:415      Branch: Return with expression
 0:?         Constant:
@@ -2153,40 +2153,40 @@
 0:421      Sequence
 0:421        move second child to first child (temp bool)
 0:421          'r000' (temp bool)
-0:421          all (global bool)
+0:421          all (temp bool)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r001' (temp 4X4 matrix of float)
-0:421          Absolute value (global 4X4 matrix of float)
+0:421          Absolute value (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
-0:421      arc cosine (global 4X4 matrix of float)
+0:421      arc cosine (temp 4X4 matrix of float)
 0:421        'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp bool)
 0:421          'r003' (temp bool)
-0:421          any (global bool)
+0:421          any (temp bool)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r004' (temp 4X4 matrix of float)
-0:421          arc sine (global 4X4 matrix of float)
+0:421          arc sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r005' (temp 4X4 matrix of float)
-0:421          arc tangent (global 4X4 matrix of float)
+0:421          arc tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r006' (temp 4X4 matrix of float)
-0:421          arc tangent (global 4X4 matrix of float)
+0:421          arc tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r007' (temp 4X4 matrix of float)
-0:421          Ceiling (global 4X4 matrix of float)
+0:421          Ceiling (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Test condition and select (temp void)
 0:421        Condition
@@ -2215,114 +2215,114 @@
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r008' (temp 4X4 matrix of float)
-0:421          clamp (global 4X4 matrix of float)
+0:421          clamp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r009' (temp 4X4 matrix of float)
-0:421          cosine (global 4X4 matrix of float)
+0:421          cosine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r010' (temp 4X4 matrix of float)
-0:421          hyp. cosine (global 4X4 matrix of float)
+0:421          hyp. cosine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r011' (temp 4X4 matrix of float)
-0:421          dPdx (global 4X4 matrix of float)
+0:421          dPdx (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r012' (temp 4X4 matrix of float)
-0:421          dPdxCoarse (global 4X4 matrix of float)
+0:421          dPdxCoarse (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r013' (temp 4X4 matrix of float)
-0:421          dPdxFine (global 4X4 matrix of float)
+0:421          dPdxFine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r014' (temp 4X4 matrix of float)
-0:421          dPdy (global 4X4 matrix of float)
+0:421          dPdy (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r015' (temp 4X4 matrix of float)
-0:421          dPdyCoarse (global 4X4 matrix of float)
+0:421          dPdyCoarse (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r016' (temp 4X4 matrix of float)
-0:421          dPdyFine (global 4X4 matrix of float)
+0:421          dPdyFine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r017' (temp 4X4 matrix of float)
-0:421          degrees (global 4X4 matrix of float)
+0:421          degrees (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp float)
 0:421          'r018' (temp float)
-0:421          determinant (global float)
+0:421          determinant (temp float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r019' (temp 4X4 matrix of float)
-0:421          exp (global 4X4 matrix of float)
+0:421          exp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'R020' (temp 4X4 matrix of float)
-0:421          exp2 (global 4X4 matrix of float)
+0:421          exp2 (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r021' (temp 4X4 matrix of float)
-0:421          Floor (global 4X4 matrix of float)
+0:421          Floor (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r022' (temp 4X4 matrix of float)
-0:421          mod (global 4X4 matrix of float)
+0:421          mod (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r023' (temp 4X4 matrix of float)
-0:421          Fraction (global 4X4 matrix of float)
+0:421          Fraction (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r024' (temp 4X4 matrix of float)
-0:421          frexp (global 4X4 matrix of float)
+0:421          frexp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r025' (temp 4X4 matrix of float)
-0:421          fwidth (global 4X4 matrix of float)
+0:421          fwidth (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r026' (temp 4X4 matrix of float)
-0:421          ldexp (global 4X4 matrix of float)
+0:421          ldexp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r026a' (temp 4X4 matrix of float)
-0:421          mix (global 4X4 matrix of float)
+0:421          mix (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r027' (temp 4X4 matrix of float)
-0:421          log (global 4X4 matrix of float)
+0:421          log (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -2335,40 +2335,40 @@
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r029' (temp 4X4 matrix of float)
-0:421          log2 (global 4X4 matrix of float)
+0:421          log2 (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r030' (temp 4X4 matrix of float)
-0:421          max (global 4X4 matrix of float)
+0:421          max (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r031' (temp 4X4 matrix of float)
-0:421          min (global 4X4 matrix of float)
+0:421          min (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r032' (temp 4X4 matrix of float)
-0:421          pow (global 4X4 matrix of float)
+0:421          pow (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r033' (temp 4X4 matrix of float)
-0:421          radians (global 4X4 matrix of float)
+0:421          radians (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r034' (temp 4X4 matrix of float)
-0:421          roundEven (global 4X4 matrix of float)
+0:421          roundEven (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r035' (temp 4X4 matrix of float)
-0:421          inverse sqrt (global 4X4 matrix of float)
+0:421          inverse sqrt (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -2382,12 +2382,12 @@
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r037' (temp 4X4 matrix of float)
-0:421          Sign (global 4X4 matrix of float)
+0:421          Sign (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r038' (temp 4X4 matrix of float)
-0:421          sine (global 4X4 matrix of float)
+0:421          sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -2401,42 +2401,42 @@
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r039' (temp 4X4 matrix of float)
-0:421          hyp. sine (global 4X4 matrix of float)
+0:421          hyp. sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r049' (temp 4X4 matrix of float)
-0:421          smoothstep (global 4X4 matrix of float)
+0:421          smoothstep (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r041' (temp 4X4 matrix of float)
-0:421          sqrt (global 4X4 matrix of float)
+0:421          sqrt (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r042' (temp 4X4 matrix of float)
-0:421          step (global 4X4 matrix of float)
+0:421          step (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r043' (temp 4X4 matrix of float)
-0:421          tangent (global 4X4 matrix of float)
+0:421          tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r044' (temp 4X4 matrix of float)
-0:421          hyp. tangent (global 4X4 matrix of float)
+0:421          hyp. tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
-0:421      transpose (global 4X4 matrix of float)
+0:421      transpose (temp 4X4 matrix of float)
 0:421        'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r046' (temp 4X4 matrix of float)
-0:421          trunc (global 4X4 matrix of float)
+0:421          trunc (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:424      Branch: Return with expression
 0:?         Constant:
@@ -2486,7 +2486,7 @@
 0:443      Sequence
 0:443        move second child to first child (temp float)
 0:443          'r3' (temp float)
-0:443          dot-product (global float)
+0:443          dot-product (temp float)
 0:443            'inFV0' (in 2-component vector of float)
 0:443            'inFV1' (in 2-component vector of float)
 0:443      Sequence
@@ -2549,7 +2549,7 @@
 0:450      Sequence
 0:450        move second child to first child (temp float)
 0:450          'r3' (temp float)
-0:450          dot-product (global float)
+0:450          dot-product (temp float)
 0:450            'inFV0' (in 3-component vector of float)
 0:450            'inFV1' (in 3-component vector of float)
 0:450      Sequence
@@ -2612,7 +2612,7 @@
 0:457      Sequence
 0:457        move second child to first child (temp float)
 0:457          'r3' (temp float)
-0:457          dot-product (global float)
+0:457          dot-product (temp float)
 0:457            'inFV0' (in 4-component vector of float)
 0:457            'inFV1' (in 4-component vector of float)
 0:457      Sequence
@@ -2690,13 +2690,13 @@
 0:472      Sequence
 0:472        move second child to first child (temp float)
 0:472          'r05' (temp float)
-0:472          dot-product (global float)
+0:472          dot-product (temp float)
 0:472            'inFV2' (in 2-component vector of float)
 0:472            'inFV2' (in 2-component vector of float)
 0:473      Sequence
 0:473        move second child to first child (temp float)
 0:473          'r06' (temp float)
-0:473          dot-product (global float)
+0:473          dot-product (temp float)
 0:473            'inFV3' (in 3-component vector of float)
 0:473            'inFV3' (in 3-component vector of float)
 0:474      Sequence
@@ -2782,6 +2782,7 @@
 0:492                0 (const int)
 0:492        Branch: Return
 0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'gs_ua' (shared uint)
 0:?     'gs_ub' (shared uint)
 0:?     'gs_uc' (shared uint)
@@ -2794,7 +2795,6 @@
 0:?     'gs_ua4' (shared 4-component vector of uint)
 0:?     'gs_ub4' (shared 4-component vector of uint)
 0:?     'gs_uc4' (shared 4-component vector of uint)
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 
 Linked fragment stage:
@@ -2814,63 +2814,63 @@
 0:20      Sequence
 0:20        move second child to first child (temp bool)
 0:20          'r000' (temp bool)
-0:20          all (global bool)
+0:20          all (temp bool)
 0:20            'inF0' (in float)
 0:21      Sequence
 0:21        move second child to first child (temp float)
 0:21          'r001' (temp float)
-0:21          Absolute value (global float)
+0:21          Absolute value (temp float)
 0:21            'inF0' (in float)
 0:22      Sequence
 0:22        move second child to first child (temp float)
 0:22          'r002' (temp float)
-0:22          arc cosine (global float)
+0:22          arc cosine (temp float)
 0:22            'inF0' (in float)
 0:23      Sequence
 0:23        move second child to first child (temp bool)
 0:23          'r003' (temp bool)
-0:23          any (global bool)
+0:23          any (temp bool)
 0:23            'inF0' (in float)
 0:24      Sequence
 0:24        move second child to first child (temp float)
 0:24          'r004' (temp float)
-0:24          arc sine (global float)
+0:24          arc sine (temp float)
 0:24            'inF0' (in float)
 0:25      Sequence
 0:25        move second child to first child (temp int)
 0:25          'r005' (temp int)
-0:25          floatBitsToInt (global int)
+0:25          floatBitsToInt (temp int)
 0:25            'inF0' (in float)
 0:26      Sequence
 0:26        move second child to first child (temp uint)
 0:26          'r006' (temp uint)
-0:26          floatBitsToUint (global uint)
+0:26          floatBitsToUint (temp uint)
 0:26            'inF0' (in float)
 0:27      Sequence
 0:27        move second child to first child (temp float)
 0:27          'r007' (temp float)
-0:27          intBitsToFloat (global float)
+0:27          intBitsToFloat (temp float)
 0:27            'inU0' (in uint)
 0:29      Sequence
 0:29        move second child to first child (temp float)
 0:29          'r009' (temp float)
-0:29          arc tangent (global float)
+0:29          arc tangent (temp float)
 0:29            'inF0' (in float)
 0:30      Sequence
 0:30        move second child to first child (temp float)
 0:30          'r010' (temp float)
-0:30          arc tangent (global float)
+0:30          arc tangent (temp float)
 0:30            'inF0' (in float)
 0:30            'inF1' (in float)
 0:31      Sequence
 0:31        move second child to first child (temp float)
 0:31          'r011' (temp float)
-0:31          Ceiling (global float)
+0:31          Ceiling (temp float)
 0:31            'inF0' (in float)
 0:32      Sequence
 0:32        move second child to first child (temp float)
 0:32          'r012' (temp float)
-0:32          clamp (global float)
+0:32          clamp (temp float)
 0:32            'inF0' (in float)
 0:32            'inF1' (in float)
 0:32            'inF2' (in float)
@@ -2885,132 +2885,132 @@
 0:34      Sequence
 0:34        move second child to first child (temp float)
 0:34          'r014' (temp float)
-0:34          cosine (global float)
+0:34          cosine (temp float)
 0:34            'inF0' (in float)
 0:35      Sequence
 0:35        move second child to first child (temp float)
 0:35          'r015' (temp float)
-0:35          hyp. cosine (global float)
+0:35          hyp. cosine (temp float)
 0:35            'inF0' (in float)
 0:36      Sequence
 0:36        move second child to first child (temp uint)
 0:36          'r016' (temp uint)
-0:36          bitCount (global uint)
+0:36          bitCount (temp uint)
 0:36            Constant:
 0:36              7 (const uint)
 0:37      Sequence
 0:37        move second child to first child (temp float)
 0:37          'r017' (temp float)
-0:37          dPdx (global float)
+0:37          dPdx (temp float)
 0:37            'inF0' (in float)
 0:38      Sequence
 0:38        move second child to first child (temp float)
 0:38          'r018' (temp float)
-0:38          dPdxCoarse (global float)
+0:38          dPdxCoarse (temp float)
 0:38            'inF0' (in float)
 0:39      Sequence
 0:39        move second child to first child (temp float)
 0:39          'r019' (temp float)
-0:39          dPdxFine (global float)
+0:39          dPdxFine (temp float)
 0:39            'inF0' (in float)
 0:40      Sequence
 0:40        move second child to first child (temp float)
 0:40          'r020' (temp float)
-0:40          dPdy (global float)
+0:40          dPdy (temp float)
 0:40            'inF0' (in float)
 0:41      Sequence
 0:41        move second child to first child (temp float)
 0:41          'r021' (temp float)
-0:41          dPdyCoarse (global float)
+0:41          dPdyCoarse (temp float)
 0:41            'inF0' (in float)
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r022' (temp float)
-0:42          dPdyFine (global float)
+0:42          dPdyFine (temp float)
 0:42            'inF0' (in float)
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r023' (temp float)
-0:43          degrees (global float)
+0:43          degrees (temp float)
 0:43            'inF0' (in float)
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r027' (temp float)
-0:47          exp (global float)
+0:47          exp (temp float)
 0:47            'inF0' (in float)
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r028' (temp float)
-0:48          exp2 (global float)
+0:48          exp2 (temp float)
 0:48            'inF0' (in float)
 0:49      Sequence
 0:49        move second child to first child (temp uint)
 0:49          'r029' (temp uint)
 0:49          Convert int to uint (temp uint)
-0:49            findMSB (global int)
+0:49            findMSB (temp int)
 0:49              Constant:
 0:49                7 (const int)
 0:50      Sequence
 0:50        move second child to first child (temp uint)
 0:50          'r030' (temp uint)
 0:50          Convert int to uint (temp uint)
-0:50            findLSB (global int)
+0:50            findLSB (temp int)
 0:50              Constant:
 0:50                7 (const int)
 0:51      Sequence
 0:51        move second child to first child (temp float)
 0:51          'r031' (temp float)
-0:51          Floor (global float)
+0:51          Floor (temp float)
 0:51            'inF0' (in float)
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r033' (temp float)
-0:53          mod (global float)
+0:53          mod (temp float)
 0:53            'inF0' (in float)
 0:53            'inF1' (in float)
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r034' (temp float)
-0:54          Fraction (global float)
+0:54          Fraction (temp float)
 0:54            'inF0' (in float)
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r035' (temp float)
-0:55          frexp (global float)
+0:55          frexp (temp float)
 0:55            'inF0' (in float)
 0:55            'inF1' (in float)
 0:56      Sequence
 0:56        move second child to first child (temp float)
 0:56          'r036' (temp float)
-0:56          fwidth (global float)
+0:56          fwidth (temp float)
 0:56            'inF0' (in float)
 0:57      Sequence
 0:57        move second child to first child (temp bool)
 0:57          'r037' (temp bool)
-0:57          isinf (global bool)
+0:57          isinf (temp bool)
 0:57            'inF0' (in float)
 0:58      Sequence
 0:58        move second child to first child (temp bool)
 0:58          'r038' (temp bool)
-0:58          isnan (global bool)
+0:58          isnan (temp bool)
 0:58            'inF0' (in float)
 0:59      Sequence
 0:59        move second child to first child (temp float)
 0:59          'r039' (temp float)
-0:59          ldexp (global float)
+0:59          ldexp (temp float)
 0:59            'inF0' (in float)
 0:59            'inF1' (in float)
 0:60      Sequence
 0:60        move second child to first child (temp float)
 0:60          'r039a' (temp float)
-0:60          mix (global float)
+0:60          mix (temp float)
 0:60            'inF0' (in float)
 0:60            'inF1' (in float)
 0:60            'inF2' (in float)
 0:61      Sequence
 0:61        move second child to first child (temp float)
 0:61          'r040' (temp float)
-0:61          log (global float)
+0:61          log (temp float)
 0:61            'inF0' (in float)
 0:62      Sequence
 0:62        move second child to first child (temp float)
@@ -3023,30 +3023,30 @@
 0:63      Sequence
 0:63        move second child to first child (temp float)
 0:63          'r042' (temp float)
-0:63          log2 (global float)
+0:63          log2 (temp float)
 0:63            'inF0' (in float)
 0:64      Sequence
 0:64        move second child to first child (temp float)
 0:64          'r043' (temp float)
-0:64          max (global float)
+0:64          max (temp float)
 0:64            'inF0' (in float)
 0:64            'inF1' (in float)
 0:65      Sequence
 0:65        move second child to first child (temp float)
 0:65          'r044' (temp float)
-0:65          min (global float)
+0:65          min (temp float)
 0:65            'inF0' (in float)
 0:65            'inF1' (in float)
 0:66      Sequence
 0:66        move second child to first child (temp float)
 0:66          'r045' (temp float)
-0:66          pow (global float)
+0:66          pow (temp float)
 0:66            'inF0' (in float)
 0:66            'inF1' (in float)
 0:67      Sequence
 0:67        move second child to first child (temp float)
 0:67          'r046' (temp float)
-0:67          radians (global float)
+0:67          radians (temp float)
 0:67            'inF0' (in float)
 0:68      Sequence
 0:68        move second child to first child (temp float)
@@ -3058,18 +3058,18 @@
 0:69      Sequence
 0:69        move second child to first child (temp uint)
 0:69          'r048' (temp uint)
-0:69          bitFieldReverse (global uint)
+0:69          bitFieldReverse (temp uint)
 0:69            Constant:
 0:69              2 (const uint)
 0:70      Sequence
 0:70        move second child to first child (temp float)
 0:70          'r049' (temp float)
-0:70          roundEven (global float)
+0:70          roundEven (temp float)
 0:70            'inF0' (in float)
 0:71      Sequence
 0:71        move second child to first child (temp float)
 0:71          'r050' (temp float)
-0:71          inverse sqrt (global float)
+0:71          inverse sqrt (temp float)
 0:71            'inF0' (in float)
 0:72      Sequence
 0:72        move second child to first child (temp float)
@@ -3083,12 +3083,12 @@
 0:73      Sequence
 0:73        move second child to first child (temp float)
 0:73          'r052' (temp float)
-0:73          Sign (global float)
+0:73          Sign (temp float)
 0:73            'inF0' (in float)
 0:74      Sequence
 0:74        move second child to first child (temp float)
 0:74          'r053' (temp float)
-0:74          sine (global float)
+0:74          sine (temp float)
 0:74            'inF0' (in float)
 0:75      Sequence
 0:75        move second child to first child (temp float)
@@ -3102,40 +3102,40 @@
 0:76      Sequence
 0:76        move second child to first child (temp float)
 0:76          'r055' (temp float)
-0:76          hyp. sine (global float)
+0:76          hyp. sine (temp float)
 0:76            'inF0' (in float)
 0:77      Sequence
 0:77        move second child to first child (temp float)
 0:77          'r056' (temp float)
-0:77          smoothstep (global float)
+0:77          smoothstep (temp float)
 0:77            'inF0' (in float)
 0:77            'inF1' (in float)
 0:77            'inF2' (in float)
 0:78      Sequence
 0:78        move second child to first child (temp float)
 0:78          'r057' (temp float)
-0:78          sqrt (global float)
+0:78          sqrt (temp float)
 0:78            'inF0' (in float)
 0:79      Sequence
 0:79        move second child to first child (temp float)
 0:79          'r058' (temp float)
-0:79          step (global float)
+0:79          step (temp float)
 0:79            'inF0' (in float)
 0:79            'inF1' (in float)
 0:80      Sequence
 0:80        move second child to first child (temp float)
 0:80          'r059' (temp float)
-0:80          tangent (global float)
+0:80          tangent (temp float)
 0:80            'inF0' (in float)
 0:81      Sequence
 0:81        move second child to first child (temp float)
 0:81          'r060' (temp float)
-0:81          hyp. tangent (global float)
+0:81          hyp. tangent (temp float)
 0:81            'inF0' (in float)
 0:83      Sequence
 0:83        move second child to first child (temp float)
 0:83          'r061' (temp float)
-0:83          trunc (global float)
+0:83          trunc (temp float)
 0:83            'inF0' (in float)
 0:85      Branch: Return with expression
 0:85        Constant:
@@ -3160,63 +3160,63 @@
 0:98      Sequence
 0:98        move second child to first child (temp bool)
 0:98          'r000' (temp bool)
-0:98          all (global bool)
+0:98          all (temp bool)
 0:98            'inF0' (in 2-component vector of float)
 0:99      Sequence
 0:99        move second child to first child (temp 2-component vector of float)
 0:99          'r001' (temp 2-component vector of float)
-0:99          Absolute value (global 2-component vector of float)
+0:99          Absolute value (temp 2-component vector of float)
 0:99            'inF0' (in 2-component vector of float)
 0:100      Sequence
 0:100        move second child to first child (temp 2-component vector of float)
 0:100          'r002' (temp 2-component vector of float)
-0:100          arc cosine (global 2-component vector of float)
+0:100          arc cosine (temp 2-component vector of float)
 0:100            'inF0' (in 2-component vector of float)
 0:101      Sequence
 0:101        move second child to first child (temp bool)
 0:101          'r003' (temp bool)
-0:101          any (global bool)
+0:101          any (temp bool)
 0:101            'inF0' (in 2-component vector of float)
 0:102      Sequence
 0:102        move second child to first child (temp 2-component vector of float)
 0:102          'r004' (temp 2-component vector of float)
-0:102          arc sine (global 2-component vector of float)
+0:102          arc sine (temp 2-component vector of float)
 0:102            'inF0' (in 2-component vector of float)
 0:103      Sequence
 0:103        move second child to first child (temp 2-component vector of int)
 0:103          'r005' (temp 2-component vector of int)
-0:103          floatBitsToInt (global 2-component vector of int)
+0:103          floatBitsToInt (temp 2-component vector of int)
 0:103            'inF0' (in 2-component vector of float)
 0:104      Sequence
 0:104        move second child to first child (temp 2-component vector of uint)
 0:104          'r006' (temp 2-component vector of uint)
-0:104          floatBitsToUint (global 2-component vector of uint)
+0:104          floatBitsToUint (temp 2-component vector of uint)
 0:104            'inF0' (in 2-component vector of float)
 0:105      Sequence
 0:105        move second child to first child (temp 2-component vector of float)
 0:105          'r007' (temp 2-component vector of float)
-0:105          intBitsToFloat (global 2-component vector of float)
+0:105          intBitsToFloat (temp 2-component vector of float)
 0:105            'inU0' (in 2-component vector of uint)
 0:107      Sequence
 0:107        move second child to first child (temp 2-component vector of float)
 0:107          'r009' (temp 2-component vector of float)
-0:107          arc tangent (global 2-component vector of float)
+0:107          arc tangent (temp 2-component vector of float)
 0:107            'inF0' (in 2-component vector of float)
 0:108      Sequence
 0:108        move second child to first child (temp 2-component vector of float)
 0:108          'r010' (temp 2-component vector of float)
-0:108          arc tangent (global 2-component vector of float)
+0:108          arc tangent (temp 2-component vector of float)
 0:108            'inF0' (in 2-component vector of float)
 0:108            'inF1' (in 2-component vector of float)
 0:109      Sequence
 0:109        move second child to first child (temp 2-component vector of float)
 0:109          'r011' (temp 2-component vector of float)
-0:109          Ceiling (global 2-component vector of float)
+0:109          Ceiling (temp 2-component vector of float)
 0:109            'inF0' (in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child (temp 2-component vector of float)
 0:110          'r012' (temp 2-component vector of float)
-0:110          clamp (global 2-component vector of float)
+0:110          clamp (temp 2-component vector of float)
 0:110            'inF0' (in 2-component vector of float)
 0:110            'inF1' (in 2-component vector of float)
 0:110            'inF2' (in 2-component vector of float)
@@ -3233,157 +3233,157 @@
 0:112      Sequence
 0:112        move second child to first child (temp 2-component vector of float)
 0:112          'r013' (temp 2-component vector of float)
-0:112          cosine (global 2-component vector of float)
+0:112          cosine (temp 2-component vector of float)
 0:112            'inF0' (in 2-component vector of float)
 0:113      Sequence
 0:113        move second child to first child (temp 2-component vector of float)
 0:113          'r015' (temp 2-component vector of float)
-0:113          hyp. cosine (global 2-component vector of float)
+0:113          hyp. cosine (temp 2-component vector of float)
 0:113            'inF0' (in 2-component vector of float)
 0:114      Sequence
 0:114        move second child to first child (temp 2-component vector of uint)
 0:114          'r016' (temp 2-component vector of uint)
-0:?           bitCount (global 2-component vector of uint)
+0:?           bitCount (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:115      Sequence
 0:115        move second child to first child (temp 2-component vector of float)
 0:115          'r017' (temp 2-component vector of float)
-0:115          dPdx (global 2-component vector of float)
+0:115          dPdx (temp 2-component vector of float)
 0:115            'inF0' (in 2-component vector of float)
 0:116      Sequence
 0:116        move second child to first child (temp 2-component vector of float)
 0:116          'r018' (temp 2-component vector of float)
-0:116          dPdxCoarse (global 2-component vector of float)
+0:116          dPdxCoarse (temp 2-component vector of float)
 0:116            'inF0' (in 2-component vector of float)
 0:117      Sequence
 0:117        move second child to first child (temp 2-component vector of float)
 0:117          'r019' (temp 2-component vector of float)
-0:117          dPdxFine (global 2-component vector of float)
+0:117          dPdxFine (temp 2-component vector of float)
 0:117            'inF0' (in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child (temp 2-component vector of float)
 0:118          'r020' (temp 2-component vector of float)
-0:118          dPdy (global 2-component vector of float)
+0:118          dPdy (temp 2-component vector of float)
 0:118            'inF0' (in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child (temp 2-component vector of float)
 0:119          'r021' (temp 2-component vector of float)
-0:119          dPdyCoarse (global 2-component vector of float)
+0:119          dPdyCoarse (temp 2-component vector of float)
 0:119            'inF0' (in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child (temp 2-component vector of float)
 0:120          'r022' (temp 2-component vector of float)
-0:120          dPdyFine (global 2-component vector of float)
+0:120          dPdyFine (temp 2-component vector of float)
 0:120            'inF0' (in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child (temp 2-component vector of float)
 0:121          'r023' (temp 2-component vector of float)
-0:121          degrees (global 2-component vector of float)
+0:121          degrees (temp 2-component vector of float)
 0:121            'inF0' (in 2-component vector of float)
 0:125      Sequence
 0:125        move second child to first child (temp float)
 0:125          'r026' (temp float)
-0:125          distance (global float)
+0:125          distance (temp float)
 0:125            'inF0' (in 2-component vector of float)
 0:125            'inF1' (in 2-component vector of float)
 0:126      Sequence
 0:126        move second child to first child (temp float)
 0:126          'r027' (temp float)
-0:126          dot-product (global float)
+0:126          dot-product (temp float)
 0:126            'inF0' (in 2-component vector of float)
 0:126            'inF1' (in 2-component vector of float)
 0:130      Sequence
 0:130        move second child to first child (temp 2-component vector of float)
 0:130          'r028' (temp 2-component vector of float)
-0:130          exp (global 2-component vector of float)
+0:130          exp (temp 2-component vector of float)
 0:130            'inF0' (in 2-component vector of float)
 0:131      Sequence
 0:131        move second child to first child (temp 2-component vector of float)
 0:131          'r029' (temp 2-component vector of float)
-0:131          exp2 (global 2-component vector of float)
+0:131          exp2 (temp 2-component vector of float)
 0:131            'inF0' (in 2-component vector of float)
 0:132      Sequence
 0:132        move second child to first child (temp 2-component vector of float)
 0:132          'r030' (temp 2-component vector of float)
-0:132          face-forward (global 2-component vector of float)
+0:132          face-forward (temp 2-component vector of float)
 0:132            'inF0' (in 2-component vector of float)
 0:132            'inF1' (in 2-component vector of float)
 0:132            'inF2' (in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child (temp 2-component vector of uint)
 0:133          'r031' (temp 2-component vector of uint)
-0:?           findMSB (global 2-component vector of uint)
+0:?           findMSB (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:134      Sequence
 0:134        move second child to first child (temp 2-component vector of uint)
 0:134          'r032' (temp 2-component vector of uint)
-0:?           findLSB (global 2-component vector of uint)
+0:?           findLSB (temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:135      Sequence
 0:135        move second child to first child (temp 2-component vector of float)
 0:135          'r033' (temp 2-component vector of float)
-0:135          Floor (global 2-component vector of float)
+0:135          Floor (temp 2-component vector of float)
 0:135            'inF0' (in 2-component vector of float)
 0:137      Sequence
 0:137        move second child to first child (temp 2-component vector of float)
 0:137          'r035' (temp 2-component vector of float)
-0:137          mod (global 2-component vector of float)
+0:137          mod (temp 2-component vector of float)
 0:137            'inF0' (in 2-component vector of float)
 0:137            'inF1' (in 2-component vector of float)
 0:138      Sequence
 0:138        move second child to first child (temp 2-component vector of float)
 0:138          'r036' (temp 2-component vector of float)
-0:138          Fraction (global 2-component vector of float)
+0:138          Fraction (temp 2-component vector of float)
 0:138            'inF0' (in 2-component vector of float)
 0:139      Sequence
 0:139        move second child to first child (temp 2-component vector of float)
 0:139          'r037' (temp 2-component vector of float)
-0:139          frexp (global 2-component vector of float)
+0:139          frexp (temp 2-component vector of float)
 0:139            'inF0' (in 2-component vector of float)
 0:139            'inF1' (in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child (temp 2-component vector of float)
 0:140          'r038' (temp 2-component vector of float)
-0:140          fwidth (global 2-component vector of float)
+0:140          fwidth (temp 2-component vector of float)
 0:140            'inF0' (in 2-component vector of float)
 0:141      Sequence
 0:141        move second child to first child (temp 2-component vector of bool)
 0:141          'r039' (temp 2-component vector of bool)
-0:141          isinf (global 2-component vector of bool)
+0:141          isinf (temp 2-component vector of bool)
 0:141            'inF0' (in 2-component vector of float)
 0:142      Sequence
 0:142        move second child to first child (temp 2-component vector of bool)
 0:142          'r040' (temp 2-component vector of bool)
-0:142          isnan (global 2-component vector of bool)
+0:142          isnan (temp 2-component vector of bool)
 0:142            'inF0' (in 2-component vector of float)
 0:143      Sequence
 0:143        move second child to first child (temp 2-component vector of float)
 0:143          'r041' (temp 2-component vector of float)
-0:143          ldexp (global 2-component vector of float)
+0:143          ldexp (temp 2-component vector of float)
 0:143            'inF0' (in 2-component vector of float)
 0:143            'inF1' (in 2-component vector of float)
 0:144      Sequence
 0:144        move second child to first child (temp 2-component vector of float)
 0:144          'r039a' (temp 2-component vector of float)
-0:144          mix (global 2-component vector of float)
+0:144          mix (temp 2-component vector of float)
 0:144            'inF0' (in 2-component vector of float)
 0:144            'inF1' (in 2-component vector of float)
 0:144            'inF2' (in 2-component vector of float)
 0:145      Sequence
 0:145        move second child to first child (temp float)
 0:145          'r042' (temp float)
-0:145          length (global float)
+0:145          length (temp float)
 0:145            'inF0' (in 2-component vector of float)
 0:146      Sequence
 0:146        move second child to first child (temp 2-component vector of float)
 0:146          'r043' (temp 2-component vector of float)
-0:146          log (global 2-component vector of float)
+0:146          log (temp 2-component vector of float)
 0:146            'inF0' (in 2-component vector of float)
 0:147      Sequence
 0:147        move second child to first child (temp 2-component vector of float)
@@ -3396,35 +3396,35 @@
 0:148      Sequence
 0:148        move second child to first child (temp 2-component vector of float)
 0:148          'r045' (temp 2-component vector of float)
-0:148          log2 (global 2-component vector of float)
+0:148          log2 (temp 2-component vector of float)
 0:148            'inF0' (in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child (temp 2-component vector of float)
 0:149          'r046' (temp 2-component vector of float)
-0:149          max (global 2-component vector of float)
+0:149          max (temp 2-component vector of float)
 0:149            'inF0' (in 2-component vector of float)
 0:149            'inF1' (in 2-component vector of float)
 0:150      Sequence
 0:150        move second child to first child (temp 2-component vector of float)
 0:150          'r047' (temp 2-component vector of float)
-0:150          min (global 2-component vector of float)
+0:150          min (temp 2-component vector of float)
 0:150            'inF0' (in 2-component vector of float)
 0:150            'inF1' (in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child (temp 2-component vector of float)
 0:151          'r048' (temp 2-component vector of float)
-0:151          normalize (global 2-component vector of float)
+0:151          normalize (temp 2-component vector of float)
 0:151            'inF0' (in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child (temp 2-component vector of float)
 0:152          'r049' (temp 2-component vector of float)
-0:152          pow (global 2-component vector of float)
+0:152          pow (temp 2-component vector of float)
 0:152            'inF0' (in 2-component vector of float)
 0:152            'inF1' (in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child (temp 2-component vector of float)
 0:153          'r050' (temp 2-component vector of float)
-0:153          radians (global 2-component vector of float)
+0:153          radians (temp 2-component vector of float)
 0:153            'inF0' (in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child (temp 2-component vector of float)
@@ -3436,13 +3436,13 @@
 0:155      Sequence
 0:155        move second child to first child (temp 2-component vector of float)
 0:155          'r052' (temp 2-component vector of float)
-0:155          reflect (global 2-component vector of float)
+0:155          reflect (temp 2-component vector of float)
 0:155            'inF0' (in 2-component vector of float)
 0:155            'inF1' (in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child (temp 2-component vector of float)
 0:156          'r053' (temp 2-component vector of float)
-0:156          refract (global 2-component vector of float)
+0:156          refract (temp 2-component vector of float)
 0:156            'inF0' (in 2-component vector of float)
 0:156            'inF1' (in 2-component vector of float)
 0:156            Constant:
@@ -3450,19 +3450,19 @@
 0:157      Sequence
 0:157        move second child to first child (temp 2-component vector of uint)
 0:157          'r054' (temp 2-component vector of uint)
-0:?           bitFieldReverse (global 2-component vector of uint)
+0:?           bitFieldReverse (temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:158      Sequence
 0:158        move second child to first child (temp 2-component vector of float)
 0:158          'r055' (temp 2-component vector of float)
-0:158          roundEven (global 2-component vector of float)
+0:158          roundEven (temp 2-component vector of float)
 0:158            'inF0' (in 2-component vector of float)
 0:159      Sequence
 0:159        move second child to first child (temp 2-component vector of float)
 0:159          'r056' (temp 2-component vector of float)
-0:159          inverse sqrt (global 2-component vector of float)
+0:159          inverse sqrt (temp 2-component vector of float)
 0:159            'inF0' (in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child (temp 2-component vector of float)
@@ -3476,12 +3476,12 @@
 0:161      Sequence
 0:161        move second child to first child (temp 2-component vector of float)
 0:161          'r058' (temp 2-component vector of float)
-0:161          Sign (global 2-component vector of float)
+0:161          Sign (temp 2-component vector of float)
 0:161            'inF0' (in 2-component vector of float)
 0:162      Sequence
 0:162        move second child to first child (temp 2-component vector of float)
 0:162          'r059' (temp 2-component vector of float)
-0:162          sine (global 2-component vector of float)
+0:162          sine (temp 2-component vector of float)
 0:162            'inF0' (in 2-component vector of float)
 0:163      Sequence
 0:163        move second child to first child (temp 2-component vector of float)
@@ -3495,40 +3495,40 @@
 0:164      Sequence
 0:164        move second child to first child (temp 2-component vector of float)
 0:164          'r060' (temp 2-component vector of float)
-0:164          hyp. sine (global 2-component vector of float)
+0:164          hyp. sine (temp 2-component vector of float)
 0:164            'inF0' (in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child (temp 2-component vector of float)
 0:165          'r061' (temp 2-component vector of float)
-0:165          smoothstep (global 2-component vector of float)
+0:165          smoothstep (temp 2-component vector of float)
 0:165            'inF0' (in 2-component vector of float)
 0:165            'inF1' (in 2-component vector of float)
 0:165            'inF2' (in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child (temp 2-component vector of float)
 0:166          'r062' (temp 2-component vector of float)
-0:166          sqrt (global 2-component vector of float)
+0:166          sqrt (temp 2-component vector of float)
 0:166            'inF0' (in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child (temp 2-component vector of float)
 0:167          'r063' (temp 2-component vector of float)
-0:167          step (global 2-component vector of float)
+0:167          step (temp 2-component vector of float)
 0:167            'inF0' (in 2-component vector of float)
 0:167            'inF1' (in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child (temp 2-component vector of float)
 0:168          'r064' (temp 2-component vector of float)
-0:168          tangent (global 2-component vector of float)
+0:168          tangent (temp 2-component vector of float)
 0:168            'inF0' (in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child (temp 2-component vector of float)
 0:169          'r065' (temp 2-component vector of float)
-0:169          hyp. tangent (global 2-component vector of float)
+0:169          hyp. tangent (temp 2-component vector of float)
 0:169            'inF0' (in 2-component vector of float)
 0:171      Sequence
 0:171        move second child to first child (temp 2-component vector of float)
 0:171          'r066' (temp 2-component vector of float)
-0:171          trunc (global 2-component vector of float)
+0:171          trunc (temp 2-component vector of float)
 0:171            'inF0' (in 2-component vector of float)
 0:174      Branch: Return with expression
 0:?         Constant:
@@ -3545,63 +3545,63 @@
 0:181      Sequence
 0:181        move second child to first child (temp bool)
 0:181          'r000' (temp bool)
-0:181          all (global bool)
+0:181          all (temp bool)
 0:181            'inF0' (in 3-component vector of float)
 0:182      Sequence
 0:182        move second child to first child (temp 3-component vector of float)
 0:182          'r001' (temp 3-component vector of float)
-0:182          Absolute value (global 3-component vector of float)
+0:182          Absolute value (temp 3-component vector of float)
 0:182            'inF0' (in 3-component vector of float)
 0:183      Sequence
 0:183        move second child to first child (temp 3-component vector of float)
 0:183          'r002' (temp 3-component vector of float)
-0:183          arc cosine (global 3-component vector of float)
+0:183          arc cosine (temp 3-component vector of float)
 0:183            'inF0' (in 3-component vector of float)
 0:184      Sequence
 0:184        move second child to first child (temp bool)
 0:184          'r003' (temp bool)
-0:184          any (global bool)
+0:184          any (temp bool)
 0:184            'inF0' (in 3-component vector of float)
 0:185      Sequence
 0:185        move second child to first child (temp 3-component vector of float)
 0:185          'r004' (temp 3-component vector of float)
-0:185          arc sine (global 3-component vector of float)
+0:185          arc sine (temp 3-component vector of float)
 0:185            'inF0' (in 3-component vector of float)
 0:186      Sequence
 0:186        move second child to first child (temp 3-component vector of int)
 0:186          'r005' (temp 3-component vector of int)
-0:186          floatBitsToInt (global 3-component vector of int)
+0:186          floatBitsToInt (temp 3-component vector of int)
 0:186            'inF0' (in 3-component vector of float)
 0:187      Sequence
 0:187        move second child to first child (temp 3-component vector of uint)
 0:187          'r006' (temp 3-component vector of uint)
-0:187          floatBitsToUint (global 3-component vector of uint)
+0:187          floatBitsToUint (temp 3-component vector of uint)
 0:187            'inF0' (in 3-component vector of float)
 0:188      Sequence
 0:188        move second child to first child (temp 3-component vector of float)
 0:188          'r007' (temp 3-component vector of float)
-0:188          intBitsToFloat (global 3-component vector of float)
+0:188          intBitsToFloat (temp 3-component vector of float)
 0:188            'inU0' (in 3-component vector of uint)
 0:190      Sequence
 0:190        move second child to first child (temp 3-component vector of float)
 0:190          'r009' (temp 3-component vector of float)
-0:190          arc tangent (global 3-component vector of float)
+0:190          arc tangent (temp 3-component vector of float)
 0:190            'inF0' (in 3-component vector of float)
 0:191      Sequence
 0:191        move second child to first child (temp 3-component vector of float)
 0:191          'r010' (temp 3-component vector of float)
-0:191          arc tangent (global 3-component vector of float)
+0:191          arc tangent (temp 3-component vector of float)
 0:191            'inF0' (in 3-component vector of float)
 0:191            'inF1' (in 3-component vector of float)
 0:192      Sequence
 0:192        move second child to first child (temp 3-component vector of float)
 0:192          'r011' (temp 3-component vector of float)
-0:192          Ceiling (global 3-component vector of float)
+0:192          Ceiling (temp 3-component vector of float)
 0:192            'inF0' (in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child (temp 3-component vector of float)
 0:193          'r012' (temp 3-component vector of float)
-0:193          clamp (global 3-component vector of float)
+0:193          clamp (temp 3-component vector of float)
 0:193            'inF0' (in 3-component vector of float)
 0:193            'inF1' (in 3-component vector of float)
 0:193            'inF2' (in 3-component vector of float)
@@ -3619,17 +3619,17 @@
 0:195      Sequence
 0:195        move second child to first child (temp 3-component vector of float)
 0:195          'r013' (temp 3-component vector of float)
-0:195          cosine (global 3-component vector of float)
+0:195          cosine (temp 3-component vector of float)
 0:195            'inF0' (in 3-component vector of float)
 0:196      Sequence
 0:196        move second child to first child (temp 3-component vector of float)
 0:196          'r014' (temp 3-component vector of float)
-0:196          hyp. cosine (global 3-component vector of float)
+0:196          hyp. cosine (temp 3-component vector of float)
 0:196            'inF0' (in 3-component vector of float)
 0:197      Sequence
 0:197        move second child to first child (temp 3-component vector of uint)
 0:197          'r015' (temp 3-component vector of uint)
-0:?           bitCount (global 3-component vector of uint)
+0:?           bitCount (temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
@@ -3637,77 +3637,77 @@
 0:198      Sequence
 0:198        move second child to first child (temp 3-component vector of float)
 0:198          'r016' (temp 3-component vector of float)
-0:198          cross-product (global 3-component vector of float)
+0:198          cross-product (temp 3-component vector of float)
 0:198            'inF0' (in 3-component vector of float)
 0:198            'inF1' (in 3-component vector of float)
 0:199      Sequence
 0:199        move second child to first child (temp 3-component vector of float)
 0:199          'r017' (temp 3-component vector of float)
-0:199          dPdx (global 3-component vector of float)
+0:199          dPdx (temp 3-component vector of float)
 0:199            'inF0' (in 3-component vector of float)
 0:200      Sequence
 0:200        move second child to first child (temp 3-component vector of float)
 0:200          'r018' (temp 3-component vector of float)
-0:200          dPdxCoarse (global 3-component vector of float)
+0:200          dPdxCoarse (temp 3-component vector of float)
 0:200            'inF0' (in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child (temp 3-component vector of float)
 0:201          'r019' (temp 3-component vector of float)
-0:201          dPdxFine (global 3-component vector of float)
+0:201          dPdxFine (temp 3-component vector of float)
 0:201            'inF0' (in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child (temp 3-component vector of float)
 0:202          'r020' (temp 3-component vector of float)
-0:202          dPdy (global 3-component vector of float)
+0:202          dPdy (temp 3-component vector of float)
 0:202            'inF0' (in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child (temp 3-component vector of float)
 0:203          'r021' (temp 3-component vector of float)
-0:203          dPdyCoarse (global 3-component vector of float)
+0:203          dPdyCoarse (temp 3-component vector of float)
 0:203            'inF0' (in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child (temp 3-component vector of float)
 0:204          'r022' (temp 3-component vector of float)
-0:204          dPdyFine (global 3-component vector of float)
+0:204          dPdyFine (temp 3-component vector of float)
 0:204            'inF0' (in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child (temp 3-component vector of float)
 0:205          'r023' (temp 3-component vector of float)
-0:205          degrees (global 3-component vector of float)
+0:205          degrees (temp 3-component vector of float)
 0:205            'inF0' (in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child (temp float)
 0:206          'r024' (temp float)
-0:206          distance (global float)
+0:206          distance (temp float)
 0:206            'inF0' (in 3-component vector of float)
 0:206            'inF1' (in 3-component vector of float)
 0:207      Sequence
 0:207        move second child to first child (temp float)
 0:207          'r025' (temp float)
-0:207          dot-product (global float)
+0:207          dot-product (temp float)
 0:207            'inF0' (in 3-component vector of float)
 0:207            'inF1' (in 3-component vector of float)
 0:211      Sequence
 0:211        move second child to first child (temp 3-component vector of float)
 0:211          'r029' (temp 3-component vector of float)
-0:211          exp (global 3-component vector of float)
+0:211          exp (temp 3-component vector of float)
 0:211            'inF0' (in 3-component vector of float)
 0:212      Sequence
 0:212        move second child to first child (temp 3-component vector of float)
 0:212          'r030' (temp 3-component vector of float)
-0:212          exp2 (global 3-component vector of float)
+0:212          exp2 (temp 3-component vector of float)
 0:212            'inF0' (in 3-component vector of float)
 0:213      Sequence
 0:213        move second child to first child (temp 3-component vector of float)
 0:213          'r031' (temp 3-component vector of float)
-0:213          face-forward (global 3-component vector of float)
+0:213          face-forward (temp 3-component vector of float)
 0:213            'inF0' (in 3-component vector of float)
 0:213            'inF1' (in 3-component vector of float)
 0:213            'inF2' (in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child (temp 3-component vector of uint)
 0:214          'r032' (temp 3-component vector of uint)
-0:?           findMSB (global 3-component vector of uint)
+0:?           findMSB (temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
@@ -3715,7 +3715,7 @@
 0:215      Sequence
 0:215        move second child to first child (temp 3-component vector of uint)
 0:215          'r033' (temp 3-component vector of uint)
-0:?           findLSB (global 3-component vector of uint)
+0:?           findLSB (temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
@@ -3723,57 +3723,57 @@
 0:216      Sequence
 0:216        move second child to first child (temp 3-component vector of float)
 0:216          'r034' (temp 3-component vector of float)
-0:216          Floor (global 3-component vector of float)
+0:216          Floor (temp 3-component vector of float)
 0:216            'inF0' (in 3-component vector of float)
 0:218      Sequence
 0:218        move second child to first child (temp 3-component vector of float)
 0:218          'r036' (temp 3-component vector of float)
-0:218          mod (global 3-component vector of float)
+0:218          mod (temp 3-component vector of float)
 0:218            'inF0' (in 3-component vector of float)
 0:218            'inF1' (in 3-component vector of float)
 0:219      Sequence
 0:219        move second child to first child (temp 3-component vector of float)
 0:219          'r037' (temp 3-component vector of float)
-0:219          Fraction (global 3-component vector of float)
+0:219          Fraction (temp 3-component vector of float)
 0:219            'inF0' (in 3-component vector of float)
 0:220      Sequence
 0:220        move second child to first child (temp 3-component vector of float)
 0:220          'r038' (temp 3-component vector of float)
-0:220          frexp (global 3-component vector of float)
+0:220          frexp (temp 3-component vector of float)
 0:220            'inF0' (in 3-component vector of float)
 0:220            'inF1' (in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child (temp 3-component vector of float)
 0:221          'r039' (temp 3-component vector of float)
-0:221          fwidth (global 3-component vector of float)
+0:221          fwidth (temp 3-component vector of float)
 0:221            'inF0' (in 3-component vector of float)
 0:222      Sequence
 0:222        move second child to first child (temp 3-component vector of bool)
 0:222          'r040' (temp 3-component vector of bool)
-0:222          isinf (global 3-component vector of bool)
+0:222          isinf (temp 3-component vector of bool)
 0:222            'inF0' (in 3-component vector of float)
 0:223      Sequence
 0:223        move second child to first child (temp 3-component vector of bool)
 0:223          'r041' (temp 3-component vector of bool)
-0:223          isnan (global 3-component vector of bool)
+0:223          isnan (temp 3-component vector of bool)
 0:223            'inF0' (in 3-component vector of float)
 0:224      Sequence
 0:224        move second child to first child (temp 3-component vector of float)
 0:224          'r042' (temp 3-component vector of float)
-0:224          ldexp (global 3-component vector of float)
+0:224          ldexp (temp 3-component vector of float)
 0:224            'inF0' (in 3-component vector of float)
 0:224            'inF1' (in 3-component vector of float)
 0:225      Sequence
 0:225        move second child to first child (temp 3-component vector of float)
 0:225          'r039a' (temp 3-component vector of float)
-0:225          mix (global 3-component vector of float)
+0:225          mix (temp 3-component vector of float)
 0:225            'inF0' (in 3-component vector of float)
 0:225            'inF1' (in 3-component vector of float)
 0:225            'inF2' (in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child (temp 3-component vector of float)
 0:226          'r039b' (temp 3-component vector of float)
-0:226          mix (global 3-component vector of float)
+0:226          mix (temp 3-component vector of float)
 0:226            'inF0' (in 3-component vector of float)
 0:226            'inF1' (in 3-component vector of float)
 0:226            Constant:
@@ -3781,12 +3781,12 @@
 0:227      Sequence
 0:227        move second child to first child (temp float)
 0:227          'r043' (temp float)
-0:227          length (global float)
+0:227          length (temp float)
 0:227            'inF0' (in 3-component vector of float)
 0:228      Sequence
 0:228        move second child to first child (temp 3-component vector of float)
 0:228          'r044' (temp 3-component vector of float)
-0:228          log (global 3-component vector of float)
+0:228          log (temp 3-component vector of float)
 0:228            'inF0' (in 3-component vector of float)
 0:229      Sequence
 0:229        move second child to first child (temp 3-component vector of float)
@@ -3799,35 +3799,35 @@
 0:230      Sequence
 0:230        move second child to first child (temp 3-component vector of float)
 0:230          'r046' (temp 3-component vector of float)
-0:230          log2 (global 3-component vector of float)
+0:230          log2 (temp 3-component vector of float)
 0:230            'inF0' (in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child (temp 3-component vector of float)
 0:231          'r047' (temp 3-component vector of float)
-0:231          max (global 3-component vector of float)
+0:231          max (temp 3-component vector of float)
 0:231            'inF0' (in 3-component vector of float)
 0:231            'inF1' (in 3-component vector of float)
 0:232      Sequence
 0:232        move second child to first child (temp 3-component vector of float)
 0:232          'r048' (temp 3-component vector of float)
-0:232          min (global 3-component vector of float)
+0:232          min (temp 3-component vector of float)
 0:232            'inF0' (in 3-component vector of float)
 0:232            'inF1' (in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child (temp 3-component vector of float)
 0:233          'r049' (temp 3-component vector of float)
-0:233          normalize (global 3-component vector of float)
+0:233          normalize (temp 3-component vector of float)
 0:233            'inF0' (in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child (temp 3-component vector of float)
 0:234          'r050' (temp 3-component vector of float)
-0:234          pow (global 3-component vector of float)
+0:234          pow (temp 3-component vector of float)
 0:234            'inF0' (in 3-component vector of float)
 0:234            'inF1' (in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child (temp 3-component vector of float)
 0:235          'r051' (temp 3-component vector of float)
-0:235          radians (global 3-component vector of float)
+0:235          radians (temp 3-component vector of float)
 0:235            'inF0' (in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child (temp 3-component vector of float)
@@ -3839,13 +3839,13 @@
 0:237      Sequence
 0:237        move second child to first child (temp 3-component vector of float)
 0:237          'r053' (temp 3-component vector of float)
-0:237          reflect (global 3-component vector of float)
+0:237          reflect (temp 3-component vector of float)
 0:237            'inF0' (in 3-component vector of float)
 0:237            'inF1' (in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child (temp 3-component vector of float)
 0:238          'r054' (temp 3-component vector of float)
-0:238          refract (global 3-component vector of float)
+0:238          refract (temp 3-component vector of float)
 0:238            'inF0' (in 3-component vector of float)
 0:238            'inF1' (in 3-component vector of float)
 0:238            Constant:
@@ -3853,7 +3853,7 @@
 0:239      Sequence
 0:239        move second child to first child (temp 3-component vector of uint)
 0:239          'r055' (temp 3-component vector of uint)
-0:?           bitFieldReverse (global 3-component vector of uint)
+0:?           bitFieldReverse (temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
@@ -3861,12 +3861,12 @@
 0:240      Sequence
 0:240        move second child to first child (temp 3-component vector of float)
 0:240          'r056' (temp 3-component vector of float)
-0:240          roundEven (global 3-component vector of float)
+0:240          roundEven (temp 3-component vector of float)
 0:240            'inF0' (in 3-component vector of float)
 0:241      Sequence
 0:241        move second child to first child (temp 3-component vector of float)
 0:241          'r057' (temp 3-component vector of float)
-0:241          inverse sqrt (global 3-component vector of float)
+0:241          inverse sqrt (temp 3-component vector of float)
 0:241            'inF0' (in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child (temp 3-component vector of float)
@@ -3880,12 +3880,12 @@
 0:243      Sequence
 0:243        move second child to first child (temp 3-component vector of float)
 0:243          'r059' (temp 3-component vector of float)
-0:243          Sign (global 3-component vector of float)
+0:243          Sign (temp 3-component vector of float)
 0:243            'inF0' (in 3-component vector of float)
 0:244      Sequence
 0:244        move second child to first child (temp 3-component vector of float)
 0:244          'r060' (temp 3-component vector of float)
-0:244          sine (global 3-component vector of float)
+0:244          sine (temp 3-component vector of float)
 0:244            'inF0' (in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child (temp 3-component vector of float)
@@ -3899,40 +3899,40 @@
 0:246      Sequence
 0:246        move second child to first child (temp 3-component vector of float)
 0:246          'r061' (temp 3-component vector of float)
-0:246          hyp. sine (global 3-component vector of float)
+0:246          hyp. sine (temp 3-component vector of float)
 0:246            'inF0' (in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child (temp 3-component vector of float)
 0:247          'r062' (temp 3-component vector of float)
-0:247          smoothstep (global 3-component vector of float)
+0:247          smoothstep (temp 3-component vector of float)
 0:247            'inF0' (in 3-component vector of float)
 0:247            'inF1' (in 3-component vector of float)
 0:247            'inF2' (in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child (temp 3-component vector of float)
 0:248          'r063' (temp 3-component vector of float)
-0:248          sqrt (global 3-component vector of float)
+0:248          sqrt (temp 3-component vector of float)
 0:248            'inF0' (in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child (temp 3-component vector of float)
 0:249          'r064' (temp 3-component vector of float)
-0:249          step (global 3-component vector of float)
+0:249          step (temp 3-component vector of float)
 0:249            'inF0' (in 3-component vector of float)
 0:249            'inF1' (in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child (temp 3-component vector of float)
 0:250          'r065' (temp 3-component vector of float)
-0:250          tangent (global 3-component vector of float)
+0:250          tangent (temp 3-component vector of float)
 0:250            'inF0' (in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child (temp 3-component vector of float)
 0:251          'r066' (temp 3-component vector of float)
-0:251          hyp. tangent (global 3-component vector of float)
+0:251          hyp. tangent (temp 3-component vector of float)
 0:251            'inF0' (in 3-component vector of float)
 0:253      Sequence
 0:253        move second child to first child (temp 3-component vector of float)
 0:253          'r067' (temp 3-component vector of float)
-0:253          trunc (global 3-component vector of float)
+0:253          trunc (temp 3-component vector of float)
 0:253            'inF0' (in 3-component vector of float)
 0:256      Branch: Return with expression
 0:?         Constant:
@@ -3950,63 +3950,63 @@
 0:263      Sequence
 0:263        move second child to first child (temp bool)
 0:263          'r000' (temp bool)
-0:263          all (global bool)
+0:263          all (temp bool)
 0:263            'inF0' (in 4-component vector of float)
 0:264      Sequence
 0:264        move second child to first child (temp 4-component vector of float)
 0:264          'r001' (temp 4-component vector of float)
-0:264          Absolute value (global 4-component vector of float)
+0:264          Absolute value (temp 4-component vector of float)
 0:264            'inF0' (in 4-component vector of float)
 0:265      Sequence
 0:265        move second child to first child (temp 4-component vector of float)
 0:265          'r002' (temp 4-component vector of float)
-0:265          arc cosine (global 4-component vector of float)
+0:265          arc cosine (temp 4-component vector of float)
 0:265            'inF0' (in 4-component vector of float)
 0:266      Sequence
 0:266        move second child to first child (temp bool)
 0:266          'r003' (temp bool)
-0:266          any (global bool)
+0:266          any (temp bool)
 0:266            'inF0' (in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child (temp 4-component vector of float)
 0:267          'r004' (temp 4-component vector of float)
-0:267          arc sine (global 4-component vector of float)
+0:267          arc sine (temp 4-component vector of float)
 0:267            'inF0' (in 4-component vector of float)
 0:268      Sequence
 0:268        move second child to first child (temp 4-component vector of int)
 0:268          'r005' (temp 4-component vector of int)
-0:268          floatBitsToInt (global 4-component vector of int)
+0:268          floatBitsToInt (temp 4-component vector of int)
 0:268            'inF0' (in 4-component vector of float)
 0:269      Sequence
 0:269        move second child to first child (temp 4-component vector of uint)
 0:269          'r006' (temp 4-component vector of uint)
-0:269          floatBitsToUint (global 4-component vector of uint)
+0:269          floatBitsToUint (temp 4-component vector of uint)
 0:269            'inF0' (in 4-component vector of float)
 0:270      Sequence
 0:270        move second child to first child (temp 4-component vector of float)
 0:270          'r007' (temp 4-component vector of float)
-0:270          intBitsToFloat (global 4-component vector of float)
+0:270          intBitsToFloat (temp 4-component vector of float)
 0:270            'inU0' (in 4-component vector of uint)
 0:272      Sequence
 0:272        move second child to first child (temp 4-component vector of float)
 0:272          'r009' (temp 4-component vector of float)
-0:272          arc tangent (global 4-component vector of float)
+0:272          arc tangent (temp 4-component vector of float)
 0:272            'inF0' (in 4-component vector of float)
 0:273      Sequence
 0:273        move second child to first child (temp 4-component vector of float)
 0:273          'r010' (temp 4-component vector of float)
-0:273          arc tangent (global 4-component vector of float)
+0:273          arc tangent (temp 4-component vector of float)
 0:273            'inF0' (in 4-component vector of float)
 0:273            'inF1' (in 4-component vector of float)
 0:274      Sequence
 0:274        move second child to first child (temp 4-component vector of float)
 0:274          'r011' (temp 4-component vector of float)
-0:274          Ceiling (global 4-component vector of float)
+0:274          Ceiling (temp 4-component vector of float)
 0:274            'inF0' (in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child (temp 4-component vector of float)
 0:275          'r012' (temp 4-component vector of float)
-0:275          clamp (global 4-component vector of float)
+0:275          clamp (temp 4-component vector of float)
 0:275            'inF0' (in 4-component vector of float)
 0:275            'inF1' (in 4-component vector of float)
 0:275            'inF2' (in 4-component vector of float)
@@ -4025,17 +4025,17 @@
 0:277      Sequence
 0:277        move second child to first child (temp 4-component vector of float)
 0:277          'r013' (temp 4-component vector of float)
-0:277          cosine (global 4-component vector of float)
+0:277          cosine (temp 4-component vector of float)
 0:277            'inF0' (in 4-component vector of float)
 0:278      Sequence
 0:278        move second child to first child (temp 4-component vector of float)
 0:278          'r014' (temp 4-component vector of float)
-0:278          hyp. cosine (global 4-component vector of float)
+0:278          hyp. cosine (temp 4-component vector of float)
 0:278            'inF0' (in 4-component vector of float)
 0:279      Sequence
 0:279        move second child to first child (temp 4-component vector of uint)
 0:279          'r015' (temp 4-component vector of uint)
-0:?           bitCount (global 4-component vector of uint)
+0:?           bitCount (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
@@ -4044,48 +4044,48 @@
 0:280      Sequence
 0:280        move second child to first child (temp 4-component vector of float)
 0:280          'r016' (temp 4-component vector of float)
-0:280          dPdx (global 4-component vector of float)
+0:280          dPdx (temp 4-component vector of float)
 0:280            'inF0' (in 4-component vector of float)
 0:281      Sequence
 0:281        move second child to first child (temp 4-component vector of float)
 0:281          'r017' (temp 4-component vector of float)
-0:281          dPdxCoarse (global 4-component vector of float)
+0:281          dPdxCoarse (temp 4-component vector of float)
 0:281            'inF0' (in 4-component vector of float)
 0:282      Sequence
 0:282        move second child to first child (temp 4-component vector of float)
 0:282          'r018' (temp 4-component vector of float)
-0:282          dPdxFine (global 4-component vector of float)
+0:282          dPdxFine (temp 4-component vector of float)
 0:282            'inF0' (in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child (temp 4-component vector of float)
 0:283          'r019' (temp 4-component vector of float)
-0:283          dPdy (global 4-component vector of float)
+0:283          dPdy (temp 4-component vector of float)
 0:283            'inF0' (in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child (temp 4-component vector of float)
 0:284          'r020' (temp 4-component vector of float)
-0:284          dPdyCoarse (global 4-component vector of float)
+0:284          dPdyCoarse (temp 4-component vector of float)
 0:284            'inF0' (in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child (temp 4-component vector of float)
 0:285          'r021' (temp 4-component vector of float)
-0:285          dPdyFine (global 4-component vector of float)
+0:285          dPdyFine (temp 4-component vector of float)
 0:285            'inF0' (in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child (temp 4-component vector of float)
 0:286          'r022' (temp 4-component vector of float)
-0:286          degrees (global 4-component vector of float)
+0:286          degrees (temp 4-component vector of float)
 0:286            'inF0' (in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child (temp float)
 0:287          'r023' (temp float)
-0:287          distance (global float)
+0:287          distance (temp float)
 0:287            'inF0' (in 4-component vector of float)
 0:287            'inF1' (in 4-component vector of float)
 0:288      Sequence
 0:288        move second child to first child (temp float)
 0:288          'r024' (temp float)
-0:288          dot-product (global float)
+0:288          dot-product (temp float)
 0:288            'inF0' (in 4-component vector of float)
 0:288            'inF1' (in 4-component vector of float)
 0:289      Sequence
@@ -4114,24 +4114,24 @@
 0:293      Sequence
 0:293        move second child to first child (temp 4-component vector of float)
 0:293          'r029' (temp 4-component vector of float)
-0:293          exp (global 4-component vector of float)
+0:293          exp (temp 4-component vector of float)
 0:293            'inF0' (in 4-component vector of float)
 0:294      Sequence
 0:294        move second child to first child (temp 4-component vector of float)
 0:294          'r030' (temp 4-component vector of float)
-0:294          exp2 (global 4-component vector of float)
+0:294          exp2 (temp 4-component vector of float)
 0:294            'inF0' (in 4-component vector of float)
 0:295      Sequence
 0:295        move second child to first child (temp 4-component vector of float)
 0:295          'r031' (temp 4-component vector of float)
-0:295          face-forward (global 4-component vector of float)
+0:295          face-forward (temp 4-component vector of float)
 0:295            'inF0' (in 4-component vector of float)
 0:295            'inF1' (in 4-component vector of float)
 0:295            'inF2' (in 4-component vector of float)
 0:296      Sequence
 0:296        move second child to first child (temp 4-component vector of uint)
 0:296          'r032' (temp 4-component vector of uint)
-0:?           findMSB (global 4-component vector of uint)
+0:?           findMSB (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
@@ -4140,7 +4140,7 @@
 0:297      Sequence
 0:297        move second child to first child (temp 4-component vector of uint)
 0:297          'r033' (temp 4-component vector of uint)
-0:?           findLSB (global 4-component vector of uint)
+0:?           findLSB (temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
@@ -4149,62 +4149,62 @@
 0:298      Sequence
 0:298        move second child to first child (temp 4-component vector of float)
 0:298          'r034' (temp 4-component vector of float)
-0:298          Floor (global 4-component vector of float)
+0:298          Floor (temp 4-component vector of float)
 0:298            'inF0' (in 4-component vector of float)
 0:300      Sequence
 0:300        move second child to first child (temp 4-component vector of float)
 0:300          'r036' (temp 4-component vector of float)
-0:300          mod (global 4-component vector of float)
+0:300          mod (temp 4-component vector of float)
 0:300            'inF0' (in 4-component vector of float)
 0:300            'inF1' (in 4-component vector of float)
 0:301      Sequence
 0:301        move second child to first child (temp 4-component vector of float)
 0:301          'r037' (temp 4-component vector of float)
-0:301          Fraction (global 4-component vector of float)
+0:301          Fraction (temp 4-component vector of float)
 0:301            'inF0' (in 4-component vector of float)
 0:302      Sequence
 0:302        move second child to first child (temp 4-component vector of float)
 0:302          'r038' (temp 4-component vector of float)
-0:302          frexp (global 4-component vector of float)
+0:302          frexp (temp 4-component vector of float)
 0:302            'inF0' (in 4-component vector of float)
 0:302            'inF1' (in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child (temp 4-component vector of float)
 0:303          'r039' (temp 4-component vector of float)
-0:303          fwidth (global 4-component vector of float)
+0:303          fwidth (temp 4-component vector of float)
 0:303            'inF0' (in 4-component vector of float)
 0:304      Sequence
 0:304        move second child to first child (temp 4-component vector of bool)
 0:304          'r040' (temp 4-component vector of bool)
-0:304          isinf (global 4-component vector of bool)
+0:304          isinf (temp 4-component vector of bool)
 0:304            'inF0' (in 4-component vector of float)
 0:305      Sequence
 0:305        move second child to first child (temp 4-component vector of bool)
 0:305          'r041' (temp 4-component vector of bool)
-0:305          isnan (global 4-component vector of bool)
+0:305          isnan (temp 4-component vector of bool)
 0:305            'inF0' (in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child (temp 4-component vector of float)
 0:306          'r042' (temp 4-component vector of float)
-0:306          ldexp (global 4-component vector of float)
+0:306          ldexp (temp 4-component vector of float)
 0:306            'inF0' (in 4-component vector of float)
 0:306            'inF1' (in 4-component vector of float)
 0:307      Sequence
 0:307        move second child to first child (temp 4-component vector of float)
 0:307          'r039a' (temp 4-component vector of float)
-0:307          mix (global 4-component vector of float)
+0:307          mix (temp 4-component vector of float)
 0:307            'inF0' (in 4-component vector of float)
 0:307            'inF1' (in 4-component vector of float)
 0:307            'inF2' (in 4-component vector of float)
 0:308      Sequence
 0:308        move second child to first child (temp float)
 0:308          'r043' (temp float)
-0:308          length (global float)
+0:308          length (temp float)
 0:308            'inF0' (in 4-component vector of float)
 0:309      Sequence
 0:309        move second child to first child (temp 4-component vector of float)
 0:309          'r044' (temp 4-component vector of float)
-0:309          log (global 4-component vector of float)
+0:309          log (temp 4-component vector of float)
 0:309            'inF0' (in 4-component vector of float)
 0:310      Sequence
 0:310        move second child to first child (temp 4-component vector of float)
@@ -4217,35 +4217,35 @@
 0:311      Sequence
 0:311        move second child to first child (temp 4-component vector of float)
 0:311          'r046' (temp 4-component vector of float)
-0:311          log2 (global 4-component vector of float)
+0:311          log2 (temp 4-component vector of float)
 0:311            'inF0' (in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child (temp 4-component vector of float)
 0:312          'r047' (temp 4-component vector of float)
-0:312          max (global 4-component vector of float)
+0:312          max (temp 4-component vector of float)
 0:312            'inF0' (in 4-component vector of float)
 0:312            'inF1' (in 4-component vector of float)
 0:313      Sequence
 0:313        move second child to first child (temp 4-component vector of float)
 0:313          'r048' (temp 4-component vector of float)
-0:313          min (global 4-component vector of float)
+0:313          min (temp 4-component vector of float)
 0:313            'inF0' (in 4-component vector of float)
 0:313            'inF1' (in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child (temp 4-component vector of float)
 0:314          'r049' (temp 4-component vector of float)
-0:314          normalize (global 4-component vector of float)
+0:314          normalize (temp 4-component vector of float)
 0:314            'inF0' (in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child (temp 4-component vector of float)
 0:315          'r050' (temp 4-component vector of float)
-0:315          pow (global 4-component vector of float)
+0:315          pow (temp 4-component vector of float)
 0:315            'inF0' (in 4-component vector of float)
 0:315            'inF1' (in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child (temp 4-component vector of float)
 0:316          'r051' (temp 4-component vector of float)
-0:316          radians (global 4-component vector of float)
+0:316          radians (temp 4-component vector of float)
 0:316            'inF0' (in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child (temp 4-component vector of float)
@@ -4257,13 +4257,13 @@
 0:318      Sequence
 0:318        move second child to first child (temp 4-component vector of float)
 0:318          'r053' (temp 4-component vector of float)
-0:318          reflect (global 4-component vector of float)
+0:318          reflect (temp 4-component vector of float)
 0:318            'inF0' (in 4-component vector of float)
 0:318            'inF1' (in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child (temp 4-component vector of float)
 0:319          'r054' (temp 4-component vector of float)
-0:319          refract (global 4-component vector of float)
+0:319          refract (temp 4-component vector of float)
 0:319            'inF0' (in 4-component vector of float)
 0:319            'inF1' (in 4-component vector of float)
 0:319            Constant:
@@ -4271,7 +4271,7 @@
 0:320      Sequence
 0:320        move second child to first child (temp 4-component vector of uint)
 0:320          'r055' (temp 4-component vector of uint)
-0:?           bitFieldReverse (global 4-component vector of uint)
+0:?           bitFieldReverse (temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
@@ -4280,12 +4280,12 @@
 0:321      Sequence
 0:321        move second child to first child (temp 4-component vector of float)
 0:321          'r056' (temp 4-component vector of float)
-0:321          roundEven (global 4-component vector of float)
+0:321          roundEven (temp 4-component vector of float)
 0:321            'inF0' (in 4-component vector of float)
 0:322      Sequence
 0:322        move second child to first child (temp 4-component vector of float)
 0:322          'r057' (temp 4-component vector of float)
-0:322          inverse sqrt (global 4-component vector of float)
+0:322          inverse sqrt (temp 4-component vector of float)
 0:322            'inF0' (in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child (temp 4-component vector of float)
@@ -4299,12 +4299,12 @@
 0:324      Sequence
 0:324        move second child to first child (temp 4-component vector of float)
 0:324          'r059' (temp 4-component vector of float)
-0:324          Sign (global 4-component vector of float)
+0:324          Sign (temp 4-component vector of float)
 0:324            'inF0' (in 4-component vector of float)
 0:325      Sequence
 0:325        move second child to first child (temp 4-component vector of float)
 0:325          'r060' (temp 4-component vector of float)
-0:325          sine (global 4-component vector of float)
+0:325          sine (temp 4-component vector of float)
 0:325            'inF0' (in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child (temp 4-component vector of float)
@@ -4318,40 +4318,40 @@
 0:327      Sequence
 0:327        move second child to first child (temp 4-component vector of float)
 0:327          'r061' (temp 4-component vector of float)
-0:327          hyp. sine (global 4-component vector of float)
+0:327          hyp. sine (temp 4-component vector of float)
 0:327            'inF0' (in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child (temp 4-component vector of float)
 0:328          'r062' (temp 4-component vector of float)
-0:328          smoothstep (global 4-component vector of float)
+0:328          smoothstep (temp 4-component vector of float)
 0:328            'inF0' (in 4-component vector of float)
 0:328            'inF1' (in 4-component vector of float)
 0:328            'inF2' (in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child (temp 4-component vector of float)
 0:329          'r063' (temp 4-component vector of float)
-0:329          sqrt (global 4-component vector of float)
+0:329          sqrt (temp 4-component vector of float)
 0:329            'inF0' (in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child (temp 4-component vector of float)
 0:330          'r064' (temp 4-component vector of float)
-0:330          step (global 4-component vector of float)
+0:330          step (temp 4-component vector of float)
 0:330            'inF0' (in 4-component vector of float)
 0:330            'inF1' (in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child (temp 4-component vector of float)
 0:331          'r065' (temp 4-component vector of float)
-0:331          tangent (global 4-component vector of float)
+0:331          tangent (temp 4-component vector of float)
 0:331            'inF0' (in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child (temp 4-component vector of float)
 0:332          'r066' (temp 4-component vector of float)
-0:332          hyp. tangent (global 4-component vector of float)
+0:332          hyp. tangent (temp 4-component vector of float)
 0:332            'inF0' (in 4-component vector of float)
 0:334      Sequence
 0:334        move second child to first child (temp 4-component vector of float)
 0:334          'r067' (temp 4-component vector of float)
-0:334          trunc (global 4-component vector of float)
+0:334          trunc (temp 4-component vector of float)
 0:334            'inF0' (in 4-component vector of float)
 0:337      Branch: Return with expression
 0:?         Constant:
@@ -4368,40 +4368,40 @@
 0:403      Sequence
 0:403        move second child to first child (temp bool)
 0:403          'r000' (temp bool)
-0:403          all (global bool)
+0:403          all (temp bool)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r001' (temp 2X2 matrix of float)
-0:403          Absolute value (global 2X2 matrix of float)
+0:403          Absolute value (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
-0:403      arc cosine (global 2X2 matrix of float)
+0:403      arc cosine (temp 2X2 matrix of float)
 0:403        'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp bool)
 0:403          'r003' (temp bool)
-0:403          any (global bool)
+0:403          any (temp bool)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r004' (temp 2X2 matrix of float)
-0:403          arc sine (global 2X2 matrix of float)
+0:403          arc sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r005' (temp 2X2 matrix of float)
-0:403          arc tangent (global 2X2 matrix of float)
+0:403          arc tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r006' (temp 2X2 matrix of float)
-0:403          arc tangent (global 2X2 matrix of float)
+0:403          arc tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r007' (temp 2X2 matrix of float)
-0:403          Ceiling (global 2X2 matrix of float)
+0:403          Ceiling (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Test condition and select (temp void)
 0:403        Condition
@@ -4418,114 +4418,114 @@
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r008' (temp 2X2 matrix of float)
-0:403          clamp (global 2X2 matrix of float)
+0:403          clamp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r009' (temp 2X2 matrix of float)
-0:403          cosine (global 2X2 matrix of float)
+0:403          cosine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r010' (temp 2X2 matrix of float)
-0:403          hyp. cosine (global 2X2 matrix of float)
+0:403          hyp. cosine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r011' (temp 2X2 matrix of float)
-0:403          dPdx (global 2X2 matrix of float)
+0:403          dPdx (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r012' (temp 2X2 matrix of float)
-0:403          dPdxCoarse (global 2X2 matrix of float)
+0:403          dPdxCoarse (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r013' (temp 2X2 matrix of float)
-0:403          dPdxFine (global 2X2 matrix of float)
+0:403          dPdxFine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r014' (temp 2X2 matrix of float)
-0:403          dPdy (global 2X2 matrix of float)
+0:403          dPdy (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r015' (temp 2X2 matrix of float)
-0:403          dPdyCoarse (global 2X2 matrix of float)
+0:403          dPdyCoarse (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r016' (temp 2X2 matrix of float)
-0:403          dPdyFine (global 2X2 matrix of float)
+0:403          dPdyFine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r017' (temp 2X2 matrix of float)
-0:403          degrees (global 2X2 matrix of float)
+0:403          degrees (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp float)
 0:403          'r018' (temp float)
-0:403          determinant (global float)
+0:403          determinant (temp float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r019' (temp 2X2 matrix of float)
-0:403          exp (global 2X2 matrix of float)
+0:403          exp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'R020' (temp 2X2 matrix of float)
-0:403          exp2 (global 2X2 matrix of float)
+0:403          exp2 (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r021' (temp 2X2 matrix of float)
-0:403          Floor (global 2X2 matrix of float)
+0:403          Floor (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r022' (temp 2X2 matrix of float)
-0:403          mod (global 2X2 matrix of float)
+0:403          mod (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r023' (temp 2X2 matrix of float)
-0:403          Fraction (global 2X2 matrix of float)
+0:403          Fraction (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r024' (temp 2X2 matrix of float)
-0:403          frexp (global 2X2 matrix of float)
+0:403          frexp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r025' (temp 2X2 matrix of float)
-0:403          fwidth (global 2X2 matrix of float)
+0:403          fwidth (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r026' (temp 2X2 matrix of float)
-0:403          ldexp (global 2X2 matrix of float)
+0:403          ldexp (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r026a' (temp 2X2 matrix of float)
-0:403          mix (global 2X2 matrix of float)
+0:403          mix (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r027' (temp 2X2 matrix of float)
-0:403          log (global 2X2 matrix of float)
+0:403          log (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -4538,40 +4538,40 @@
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r029' (temp 2X2 matrix of float)
-0:403          log2 (global 2X2 matrix of float)
+0:403          log2 (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r030' (temp 2X2 matrix of float)
-0:403          max (global 2X2 matrix of float)
+0:403          max (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r031' (temp 2X2 matrix of float)
-0:403          min (global 2X2 matrix of float)
+0:403          min (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r032' (temp 2X2 matrix of float)
-0:403          pow (global 2X2 matrix of float)
+0:403          pow (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r033' (temp 2X2 matrix of float)
-0:403          radians (global 2X2 matrix of float)
+0:403          radians (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r034' (temp 2X2 matrix of float)
-0:403          roundEven (global 2X2 matrix of float)
+0:403          roundEven (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r035' (temp 2X2 matrix of float)
-0:403          inverse sqrt (global 2X2 matrix of float)
+0:403          inverse sqrt (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -4585,12 +4585,12 @@
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r037' (temp 2X2 matrix of float)
-0:403          Sign (global 2X2 matrix of float)
+0:403          Sign (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r038' (temp 2X2 matrix of float)
-0:403          sine (global 2X2 matrix of float)
+0:403          sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
@@ -4604,42 +4604,42 @@
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r039' (temp 2X2 matrix of float)
-0:403          hyp. sine (global 2X2 matrix of float)
+0:403          hyp. sine (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r049' (temp 2X2 matrix of float)
-0:403          smoothstep (global 2X2 matrix of float)
+0:403          smoothstep (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403            'inF2' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r041' (temp 2X2 matrix of float)
-0:403          sqrt (global 2X2 matrix of float)
+0:403          sqrt (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r042' (temp 2X2 matrix of float)
-0:403          step (global 2X2 matrix of float)
+0:403          step (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403            'inF1' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r043' (temp 2X2 matrix of float)
-0:403          tangent (global 2X2 matrix of float)
+0:403          tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r044' (temp 2X2 matrix of float)
-0:403          hyp. tangent (global 2X2 matrix of float)
+0:403          hyp. tangent (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
-0:403      transpose (global 2X2 matrix of float)
+0:403      transpose (temp 2X2 matrix of float)
 0:403        'inF0' (in 2X2 matrix of float)
 0:403      Sequence
 0:403        move second child to first child (temp 2X2 matrix of float)
 0:403          'r046' (temp 2X2 matrix of float)
-0:403          trunc (global 2X2 matrix of float)
+0:403          trunc (temp 2X2 matrix of float)
 0:403            'inF0' (in 2X2 matrix of float)
 0:406      Branch: Return with expression
 0:?         Constant:
@@ -4656,40 +4656,40 @@
 0:412      Sequence
 0:412        move second child to first child (temp bool)
 0:412          'r000' (temp bool)
-0:412          all (global bool)
+0:412          all (temp bool)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r001' (temp 3X3 matrix of float)
-0:412          Absolute value (global 3X3 matrix of float)
+0:412          Absolute value (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
-0:412      arc cosine (global 3X3 matrix of float)
+0:412      arc cosine (temp 3X3 matrix of float)
 0:412        'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp bool)
 0:412          'r003' (temp bool)
-0:412          any (global bool)
+0:412          any (temp bool)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r004' (temp 3X3 matrix of float)
-0:412          arc sine (global 3X3 matrix of float)
+0:412          arc sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r005' (temp 3X3 matrix of float)
-0:412          arc tangent (global 3X3 matrix of float)
+0:412          arc tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r006' (temp 3X3 matrix of float)
-0:412          arc tangent (global 3X3 matrix of float)
+0:412          arc tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r007' (temp 3X3 matrix of float)
-0:412          Ceiling (global 3X3 matrix of float)
+0:412          Ceiling (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Test condition and select (temp void)
 0:412        Condition
@@ -4711,114 +4711,114 @@
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r008' (temp 3X3 matrix of float)
-0:412          clamp (global 3X3 matrix of float)
+0:412          clamp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r009' (temp 3X3 matrix of float)
-0:412          cosine (global 3X3 matrix of float)
+0:412          cosine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r010' (temp 3X3 matrix of float)
-0:412          hyp. cosine (global 3X3 matrix of float)
+0:412          hyp. cosine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r011' (temp 3X3 matrix of float)
-0:412          dPdx (global 3X3 matrix of float)
+0:412          dPdx (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r012' (temp 3X3 matrix of float)
-0:412          dPdxCoarse (global 3X3 matrix of float)
+0:412          dPdxCoarse (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r013' (temp 3X3 matrix of float)
-0:412          dPdxFine (global 3X3 matrix of float)
+0:412          dPdxFine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r014' (temp 3X3 matrix of float)
-0:412          dPdy (global 3X3 matrix of float)
+0:412          dPdy (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r015' (temp 3X3 matrix of float)
-0:412          dPdyCoarse (global 3X3 matrix of float)
+0:412          dPdyCoarse (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r016' (temp 3X3 matrix of float)
-0:412          dPdyFine (global 3X3 matrix of float)
+0:412          dPdyFine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r017' (temp 3X3 matrix of float)
-0:412          degrees (global 3X3 matrix of float)
+0:412          degrees (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp float)
 0:412          'r018' (temp float)
-0:412          determinant (global float)
+0:412          determinant (temp float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r019' (temp 3X3 matrix of float)
-0:412          exp (global 3X3 matrix of float)
+0:412          exp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'R020' (temp 3X3 matrix of float)
-0:412          exp2 (global 3X3 matrix of float)
+0:412          exp2 (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r021' (temp 3X3 matrix of float)
-0:412          Floor (global 3X3 matrix of float)
+0:412          Floor (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r022' (temp 3X3 matrix of float)
-0:412          mod (global 3X3 matrix of float)
+0:412          mod (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r023' (temp 3X3 matrix of float)
-0:412          Fraction (global 3X3 matrix of float)
+0:412          Fraction (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r024' (temp 3X3 matrix of float)
-0:412          frexp (global 3X3 matrix of float)
+0:412          frexp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r025' (temp 3X3 matrix of float)
-0:412          fwidth (global 3X3 matrix of float)
+0:412          fwidth (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r026' (temp 3X3 matrix of float)
-0:412          ldexp (global 3X3 matrix of float)
+0:412          ldexp (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r026a' (temp 3X3 matrix of float)
-0:412          mix (global 3X3 matrix of float)
+0:412          mix (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r027' (temp 3X3 matrix of float)
-0:412          log (global 3X3 matrix of float)
+0:412          log (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -4831,40 +4831,40 @@
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r029' (temp 3X3 matrix of float)
-0:412          log2 (global 3X3 matrix of float)
+0:412          log2 (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r030' (temp 3X3 matrix of float)
-0:412          max (global 3X3 matrix of float)
+0:412          max (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r031' (temp 3X3 matrix of float)
-0:412          min (global 3X3 matrix of float)
+0:412          min (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r032' (temp 3X3 matrix of float)
-0:412          pow (global 3X3 matrix of float)
+0:412          pow (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r033' (temp 3X3 matrix of float)
-0:412          radians (global 3X3 matrix of float)
+0:412          radians (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r034' (temp 3X3 matrix of float)
-0:412          roundEven (global 3X3 matrix of float)
+0:412          roundEven (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r035' (temp 3X3 matrix of float)
-0:412          inverse sqrt (global 3X3 matrix of float)
+0:412          inverse sqrt (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -4878,12 +4878,12 @@
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r037' (temp 3X3 matrix of float)
-0:412          Sign (global 3X3 matrix of float)
+0:412          Sign (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r038' (temp 3X3 matrix of float)
-0:412          sine (global 3X3 matrix of float)
+0:412          sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
@@ -4897,42 +4897,42 @@
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r039' (temp 3X3 matrix of float)
-0:412          hyp. sine (global 3X3 matrix of float)
+0:412          hyp. sine (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r049' (temp 3X3 matrix of float)
-0:412          smoothstep (global 3X3 matrix of float)
+0:412          smoothstep (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412            'inF2' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r041' (temp 3X3 matrix of float)
-0:412          sqrt (global 3X3 matrix of float)
+0:412          sqrt (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r042' (temp 3X3 matrix of float)
-0:412          step (global 3X3 matrix of float)
+0:412          step (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412            'inF1' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r043' (temp 3X3 matrix of float)
-0:412          tangent (global 3X3 matrix of float)
+0:412          tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r044' (temp 3X3 matrix of float)
-0:412          hyp. tangent (global 3X3 matrix of float)
+0:412          hyp. tangent (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
-0:412      transpose (global 3X3 matrix of float)
+0:412      transpose (temp 3X3 matrix of float)
 0:412        'inF0' (in 3X3 matrix of float)
 0:412      Sequence
 0:412        move second child to first child (temp 3X3 matrix of float)
 0:412          'r046' (temp 3X3 matrix of float)
-0:412          trunc (global 3X3 matrix of float)
+0:412          trunc (temp 3X3 matrix of float)
 0:412            'inF0' (in 3X3 matrix of float)
 0:415      Branch: Return with expression
 0:?         Constant:
@@ -4954,40 +4954,40 @@
 0:421      Sequence
 0:421        move second child to first child (temp bool)
 0:421          'r000' (temp bool)
-0:421          all (global bool)
+0:421          all (temp bool)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r001' (temp 4X4 matrix of float)
-0:421          Absolute value (global 4X4 matrix of float)
+0:421          Absolute value (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
-0:421      arc cosine (global 4X4 matrix of float)
+0:421      arc cosine (temp 4X4 matrix of float)
 0:421        'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp bool)
 0:421          'r003' (temp bool)
-0:421          any (global bool)
+0:421          any (temp bool)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r004' (temp 4X4 matrix of float)
-0:421          arc sine (global 4X4 matrix of float)
+0:421          arc sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r005' (temp 4X4 matrix of float)
-0:421          arc tangent (global 4X4 matrix of float)
+0:421          arc tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r006' (temp 4X4 matrix of float)
-0:421          arc tangent (global 4X4 matrix of float)
+0:421          arc tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r007' (temp 4X4 matrix of float)
-0:421          Ceiling (global 4X4 matrix of float)
+0:421          Ceiling (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Test condition and select (temp void)
 0:421        Condition
@@ -5016,114 +5016,114 @@
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r008' (temp 4X4 matrix of float)
-0:421          clamp (global 4X4 matrix of float)
+0:421          clamp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r009' (temp 4X4 matrix of float)
-0:421          cosine (global 4X4 matrix of float)
+0:421          cosine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r010' (temp 4X4 matrix of float)
-0:421          hyp. cosine (global 4X4 matrix of float)
+0:421          hyp. cosine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r011' (temp 4X4 matrix of float)
-0:421          dPdx (global 4X4 matrix of float)
+0:421          dPdx (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r012' (temp 4X4 matrix of float)
-0:421          dPdxCoarse (global 4X4 matrix of float)
+0:421          dPdxCoarse (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r013' (temp 4X4 matrix of float)
-0:421          dPdxFine (global 4X4 matrix of float)
+0:421          dPdxFine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r014' (temp 4X4 matrix of float)
-0:421          dPdy (global 4X4 matrix of float)
+0:421          dPdy (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r015' (temp 4X4 matrix of float)
-0:421          dPdyCoarse (global 4X4 matrix of float)
+0:421          dPdyCoarse (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r016' (temp 4X4 matrix of float)
-0:421          dPdyFine (global 4X4 matrix of float)
+0:421          dPdyFine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r017' (temp 4X4 matrix of float)
-0:421          degrees (global 4X4 matrix of float)
+0:421          degrees (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp float)
 0:421          'r018' (temp float)
-0:421          determinant (global float)
+0:421          determinant (temp float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r019' (temp 4X4 matrix of float)
-0:421          exp (global 4X4 matrix of float)
+0:421          exp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'R020' (temp 4X4 matrix of float)
-0:421          exp2 (global 4X4 matrix of float)
+0:421          exp2 (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r021' (temp 4X4 matrix of float)
-0:421          Floor (global 4X4 matrix of float)
+0:421          Floor (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r022' (temp 4X4 matrix of float)
-0:421          mod (global 4X4 matrix of float)
+0:421          mod (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r023' (temp 4X4 matrix of float)
-0:421          Fraction (global 4X4 matrix of float)
+0:421          Fraction (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r024' (temp 4X4 matrix of float)
-0:421          frexp (global 4X4 matrix of float)
+0:421          frexp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r025' (temp 4X4 matrix of float)
-0:421          fwidth (global 4X4 matrix of float)
+0:421          fwidth (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r026' (temp 4X4 matrix of float)
-0:421          ldexp (global 4X4 matrix of float)
+0:421          ldexp (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r026a' (temp 4X4 matrix of float)
-0:421          mix (global 4X4 matrix of float)
+0:421          mix (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r027' (temp 4X4 matrix of float)
-0:421          log (global 4X4 matrix of float)
+0:421          log (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -5136,40 +5136,40 @@
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r029' (temp 4X4 matrix of float)
-0:421          log2 (global 4X4 matrix of float)
+0:421          log2 (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r030' (temp 4X4 matrix of float)
-0:421          max (global 4X4 matrix of float)
+0:421          max (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r031' (temp 4X4 matrix of float)
-0:421          min (global 4X4 matrix of float)
+0:421          min (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r032' (temp 4X4 matrix of float)
-0:421          pow (global 4X4 matrix of float)
+0:421          pow (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r033' (temp 4X4 matrix of float)
-0:421          radians (global 4X4 matrix of float)
+0:421          radians (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r034' (temp 4X4 matrix of float)
-0:421          roundEven (global 4X4 matrix of float)
+0:421          roundEven (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r035' (temp 4X4 matrix of float)
-0:421          inverse sqrt (global 4X4 matrix of float)
+0:421          inverse sqrt (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -5183,12 +5183,12 @@
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r037' (temp 4X4 matrix of float)
-0:421          Sign (global 4X4 matrix of float)
+0:421          Sign (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r038' (temp 4X4 matrix of float)
-0:421          sine (global 4X4 matrix of float)
+0:421          sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
@@ -5202,42 +5202,42 @@
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r039' (temp 4X4 matrix of float)
-0:421          hyp. sine (global 4X4 matrix of float)
+0:421          hyp. sine (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r049' (temp 4X4 matrix of float)
-0:421          smoothstep (global 4X4 matrix of float)
+0:421          smoothstep (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421            'inF2' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r041' (temp 4X4 matrix of float)
-0:421          sqrt (global 4X4 matrix of float)
+0:421          sqrt (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r042' (temp 4X4 matrix of float)
-0:421          step (global 4X4 matrix of float)
+0:421          step (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421            'inF1' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r043' (temp 4X4 matrix of float)
-0:421          tangent (global 4X4 matrix of float)
+0:421          tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r044' (temp 4X4 matrix of float)
-0:421          hyp. tangent (global 4X4 matrix of float)
+0:421          hyp. tangent (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
-0:421      transpose (global 4X4 matrix of float)
+0:421      transpose (temp 4X4 matrix of float)
 0:421        'inF0' (in 4X4 matrix of float)
 0:421      Sequence
 0:421        move second child to first child (temp 4X4 matrix of float)
 0:421          'r046' (temp 4X4 matrix of float)
-0:421          trunc (global 4X4 matrix of float)
+0:421          trunc (temp 4X4 matrix of float)
 0:421            'inF0' (in 4X4 matrix of float)
 0:424      Branch: Return with expression
 0:?         Constant:
@@ -5287,7 +5287,7 @@
 0:443      Sequence
 0:443        move second child to first child (temp float)
 0:443          'r3' (temp float)
-0:443          dot-product (global float)
+0:443          dot-product (temp float)
 0:443            'inFV0' (in 2-component vector of float)
 0:443            'inFV1' (in 2-component vector of float)
 0:443      Sequence
@@ -5350,7 +5350,7 @@
 0:450      Sequence
 0:450        move second child to first child (temp float)
 0:450          'r3' (temp float)
-0:450          dot-product (global float)
+0:450          dot-product (temp float)
 0:450            'inFV0' (in 3-component vector of float)
 0:450            'inFV1' (in 3-component vector of float)
 0:450      Sequence
@@ -5413,7 +5413,7 @@
 0:457      Sequence
 0:457        move second child to first child (temp float)
 0:457          'r3' (temp float)
-0:457          dot-product (global float)
+0:457          dot-product (temp float)
 0:457            'inFV0' (in 4-component vector of float)
 0:457            'inFV1' (in 4-component vector of float)
 0:457      Sequence
@@ -5491,13 +5491,13 @@
 0:472      Sequence
 0:472        move second child to first child (temp float)
 0:472          'r05' (temp float)
-0:472          dot-product (global float)
+0:472          dot-product (temp float)
 0:472            'inFV2' (in 2-component vector of float)
 0:472            'inFV2' (in 2-component vector of float)
 0:473      Sequence
 0:473        move second child to first child (temp float)
 0:473          'r06' (temp float)
-0:473          dot-product (global float)
+0:473          dot-product (temp float)
 0:473            'inFV3' (in 3-component vector of float)
 0:473            'inFV3' (in 3-component vector of float)
 0:474      Sequence
@@ -5583,6 +5583,7 @@
 0:492                0 (const int)
 0:492        Branch: Return
 0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
 0:?     'gs_ua' (shared uint)
 0:?     'gs_ub' (shared uint)
 0:?     'gs_uc' (shared uint)
@@ -5595,7 +5596,6 @@
 0:?     'gs_ua4' (shared 4-component vector of uint)
 0:?     'gs_ub4' (shared 4-component vector of uint)
 0:?     'gs_uc4' (shared 4-component vector of uint)
-0:?     'color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.intrinsics.negative.frag.out b/Test/baseResults/hlsl.intrinsics.negative.frag.out
index 29ee009..e275054 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.frag.out
@@ -78,36 +78,36 @@
 0:5            'inF0' (in float)
 0:5          Convert float to uint (temp uint)
 0:5            'inF1' (in float)
-0:6      Function Call: CheckAccessFullyMapped(u1; (global bool)
+0:6      Function Call: CheckAccessFullyMapped(u1; (temp bool)
 0:6        Constant:
 0:6          3 (const uint)
-0:7      bitCount (global uint)
+0:7      bitCount (temp uint)
 0:7        Convert float to uint (temp uint)
 0:7          'inF0' (in float)
-0:8      cross-product (global 3-component vector of float)
+0:8      cross-product (temp 3-component vector of float)
 0:8        Construct vec3 (in 3-component vector of float)
 0:8          'inF0' (in float)
 0:8        Construct vec3 (in 3-component vector of float)
 0:8          'inF1' (in float)
-0:9      Function Call: D3DCOLORtoUBYTE4(vf4; (global 4-component vector of int)
+0:9      Function Call: D3DCOLORtoUBYTE4(vf4; (temp 4-component vector of int)
 0:9        Construct vec4 (in 4-component vector of float)
 0:9          'inF0' (in float)
 0:10      Constant:
 0:10        0.000000
 0:12      ERROR: Bad unary op
- (global float)
+ (temp float)
 0:12        Convert float to uint (temp uint)
 0:12          'inF0' (in float)
-0:13      findMSB (global uint)
+0:13      findMSB (temp uint)
 0:13        Convert float to uint (temp uint)
 0:13          'inF0' (in float)
-0:14      findLSB (global uint)
+0:14      findLSB (temp uint)
 0:14        Convert float to uint (temp uint)
 0:14          'inF0' (in float)
-0:23      length (global float)
+0:23      length (temp float)
 0:23        Construct vec2 (in 2-component vector of float)
 0:23          'inF0' (in float)
-0:24      Function Call: msad4(u1;vu2;vu4; (global 4-component vector of uint)
+0:24      Function Call: msad4(u1;vu2;vu4; (temp 4-component vector of uint)
 0:24        Convert float to uint (temp uint)
 0:24          'inF0' (in float)
 0:24        Constant:
@@ -118,15 +118,15 @@
 0:24          0 (const uint)
 0:24          0 (const uint)
 0:24          0 (const uint)
-0:25      normalize (global 2-component vector of float)
+0:25      normalize (temp 2-component vector of float)
 0:25        Construct vec2 (in 2-component vector of float)
 0:25          'inF0' (in float)
-0:26      reflect (global 2-component vector of float)
+0:26      reflect (temp 2-component vector of float)
 0:26        Construct vec2 (in 2-component vector of float)
 0:26          'inF0' (in float)
 0:26        Construct vec2 (in 2-component vector of float)
 0:26          'inF1' (in float)
-0:27      refract (global 2-component vector of float)
+0:27      refract (temp 2-component vector of float)
 0:27        Construct vec2 (in 2-component vector of float)
 0:27          'inF0' (in float)
 0:27        Construct vec2 (in 2-component vector of float)
@@ -134,7 +134,7 @@
 0:27        'inF2' (in float)
 0:28      Constant:
 0:28        0.000000
-0:29      bitFieldReverse (global uint)
+0:29      bitFieldReverse (temp uint)
 0:29        Convert float to uint (temp uint)
 0:29          'inF0' (in float)
 0:30      Constant:
@@ -162,14 +162,14 @@
 0:45      'inI0' (in 2-component vector of int)
 0:?     Sequence
 0:46      ERROR: Bad aggregation op
- (global 2-component vector of double)
+ (temp 2-component vector of double)
 0:46        Convert float to uint (temp 2-component vector of uint)
 0:46          'inF0' (in 2-component vector of float)
 0:46        Convert float to uint (temp 2-component vector of uint)
 0:46          'inF1' (in 2-component vector of float)
 0:47      Constant:
 0:47        0.000000
-0:48      bitCount (global 2-component vector of uint)
+0:48      bitCount (temp 2-component vector of uint)
 0:48        Convert float to uint (temp 2-component vector of uint)
 0:48          'inF0' (in 2-component vector of float)
 0:49      Constant:
@@ -179,16 +179,16 @@
 0:51      Constant:
 0:51        0.000000
 0:52      ERROR: Bad unary op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:52        Convert float to uint (temp 2-component vector of uint)
 0:52          'inF0' (in 2-component vector of float)
-0:53      findMSB (global 2-component vector of uint)
+0:53      findMSB (temp 2-component vector of uint)
 0:53        Convert float to uint (temp 2-component vector of uint)
 0:53          'inF0' (in 2-component vector of float)
-0:54      findLSB (global 2-component vector of uint)
+0:54      findLSB (temp 2-component vector of uint)
 0:54        Convert float to uint (temp 2-component vector of uint)
 0:54          'inF0' (in 2-component vector of float)
-0:56      bitFieldReverse (global 2-component vector of uint)
+0:56      bitFieldReverse (temp 2-component vector of uint)
 0:56        Convert float to uint (temp 2-component vector of uint)
 0:56          'inF0' (in 2-component vector of float)
 0:57      Constant:
@@ -206,7 +206,7 @@
 0:?     Sequence
 0:64      Constant:
 0:64        0.000000
-0:65      bitCount (global 3-component vector of uint)
+0:65      bitCount (temp 3-component vector of uint)
 0:65        Convert float to uint (temp 3-component vector of uint)
 0:65          'inF0' (in 3-component vector of float)
 0:66      Constant:
@@ -214,16 +214,16 @@
 0:67      Constant:
 0:67        0.000000
 0:68      ERROR: Bad unary op
- (global 3-component vector of float)
+ (temp 3-component vector of float)
 0:68        Convert float to uint (temp 3-component vector of uint)
 0:68          'inF0' (in 3-component vector of float)
-0:69      findMSB (global 3-component vector of uint)
+0:69      findMSB (temp 3-component vector of uint)
 0:69        Convert float to uint (temp 3-component vector of uint)
 0:69          'inF0' (in 3-component vector of float)
-0:70      findLSB (global 3-component vector of uint)
+0:70      findLSB (temp 3-component vector of uint)
 0:70        Convert float to uint (temp 3-component vector of uint)
 0:70          'inF0' (in 3-component vector of float)
-0:72      bitFieldReverse (global 3-component vector of uint)
+0:72      bitFieldReverse (temp 3-component vector of uint)
 0:72        Convert float to uint (temp 3-component vector of uint)
 0:72          'inF0' (in 3-component vector of float)
 0:73      Constant:
@@ -242,10 +242,10 @@
 0:?     Sequence
 0:81      Constant:
 0:81        0.000000
-0:82      bitCount (global 4-component vector of uint)
+0:82      bitCount (temp 4-component vector of uint)
 0:82        Convert float to uint (temp 4-component vector of uint)
 0:82          'inF0' (layout(location=0 ) in 4-component vector of float)
-0:83      cross-product (global 3-component vector of float)
+0:83      cross-product (temp 3-component vector of float)
 0:83        Construct vec3 (in 3-component vector of float)
 0:83          'inF0' (layout(location=0 ) in 4-component vector of float)
 0:83        Construct vec3 (in 3-component vector of float)
@@ -253,16 +253,16 @@
 0:84      Constant:
 0:84        0.000000
 0:85      ERROR: Bad unary op
- (global 4-component vector of float)
+ (temp 4-component vector of float)
 0:85        Convert float to uint (temp 4-component vector of uint)
 0:85          'inF0' (layout(location=0 ) in 4-component vector of float)
-0:86      findMSB (global 4-component vector of uint)
+0:86      findMSB (temp 4-component vector of uint)
 0:86        Convert float to uint (temp 4-component vector of uint)
 0:86          'inF0' (layout(location=0 ) in 4-component vector of float)
-0:87      findLSB (global 4-component vector of uint)
+0:87      findLSB (temp 4-component vector of uint)
 0:87        Convert float to uint (temp 4-component vector of uint)
 0:87          'inF0' (layout(location=0 ) in 4-component vector of float)
-0:89      bitFieldReverse (global 4-component vector of uint)
+0:89      bitFieldReverse (temp 4-component vector of uint)
 0:89        Convert float to uint (temp 4-component vector of uint)
 0:89          'inF0' (layout(location=0 ) in 4-component vector of float)
 0:90      Constant:
@@ -434,36 +434,36 @@
 0:5            'inF0' (in float)
 0:5          Convert float to uint (temp uint)
 0:5            'inF1' (in float)
-0:6      Function Call: CheckAccessFullyMapped(u1; (global bool)
+0:6      Function Call: CheckAccessFullyMapped(u1; (temp bool)
 0:6        Constant:
 0:6          3 (const uint)
-0:7      bitCount (global uint)
+0:7      bitCount (temp uint)
 0:7        Convert float to uint (temp uint)
 0:7          'inF0' (in float)
-0:8      cross-product (global 3-component vector of float)
+0:8      cross-product (temp 3-component vector of float)
 0:8        Construct vec3 (in 3-component vector of float)
 0:8          'inF0' (in float)
 0:8        Construct vec3 (in 3-component vector of float)
 0:8          'inF1' (in float)
-0:9      Function Call: D3DCOLORtoUBYTE4(vf4; (global 4-component vector of int)
+0:9      Function Call: D3DCOLORtoUBYTE4(vf4; (temp 4-component vector of int)
 0:9        Construct vec4 (in 4-component vector of float)
 0:9          'inF0' (in float)
 0:10      Constant:
 0:10        0.000000
 0:12      ERROR: Bad unary op
- (global float)
+ (temp float)
 0:12        Convert float to uint (temp uint)
 0:12          'inF0' (in float)
-0:13      findMSB (global uint)
+0:13      findMSB (temp uint)
 0:13        Convert float to uint (temp uint)
 0:13          'inF0' (in float)
-0:14      findLSB (global uint)
+0:14      findLSB (temp uint)
 0:14        Convert float to uint (temp uint)
 0:14          'inF0' (in float)
-0:23      length (global float)
+0:23      length (temp float)
 0:23        Construct vec2 (in 2-component vector of float)
 0:23          'inF0' (in float)
-0:24      Function Call: msad4(u1;vu2;vu4; (global 4-component vector of uint)
+0:24      Function Call: msad4(u1;vu2;vu4; (temp 4-component vector of uint)
 0:24        Convert float to uint (temp uint)
 0:24          'inF0' (in float)
 0:24        Constant:
@@ -474,15 +474,15 @@
 0:24          0 (const uint)
 0:24          0 (const uint)
 0:24          0 (const uint)
-0:25      normalize (global 2-component vector of float)
+0:25      normalize (temp 2-component vector of float)
 0:25        Construct vec2 (in 2-component vector of float)
 0:25          'inF0' (in float)
-0:26      reflect (global 2-component vector of float)
+0:26      reflect (temp 2-component vector of float)
 0:26        Construct vec2 (in 2-component vector of float)
 0:26          'inF0' (in float)
 0:26        Construct vec2 (in 2-component vector of float)
 0:26          'inF1' (in float)
-0:27      refract (global 2-component vector of float)
+0:27      refract (temp 2-component vector of float)
 0:27        Construct vec2 (in 2-component vector of float)
 0:27          'inF0' (in float)
 0:27        Construct vec2 (in 2-component vector of float)
@@ -490,7 +490,7 @@
 0:27        'inF2' (in float)
 0:28      Constant:
 0:28        0.000000
-0:29      bitFieldReverse (global uint)
+0:29      bitFieldReverse (temp uint)
 0:29        Convert float to uint (temp uint)
 0:29          'inF0' (in float)
 0:30      Constant:
@@ -518,14 +518,14 @@
 0:45      'inI0' (in 2-component vector of int)
 0:?     Sequence
 0:46      ERROR: Bad aggregation op
- (global 2-component vector of double)
+ (temp 2-component vector of double)
 0:46        Convert float to uint (temp 2-component vector of uint)
 0:46          'inF0' (in 2-component vector of float)
 0:46        Convert float to uint (temp 2-component vector of uint)
 0:46          'inF1' (in 2-component vector of float)
 0:47      Constant:
 0:47        0.000000
-0:48      bitCount (global 2-component vector of uint)
+0:48      bitCount (temp 2-component vector of uint)
 0:48        Convert float to uint (temp 2-component vector of uint)
 0:48          'inF0' (in 2-component vector of float)
 0:49      Constant:
@@ -535,16 +535,16 @@
 0:51      Constant:
 0:51        0.000000
 0:52      ERROR: Bad unary op
- (global 2-component vector of float)
+ (temp 2-component vector of float)
 0:52        Convert float to uint (temp 2-component vector of uint)
 0:52          'inF0' (in 2-component vector of float)
-0:53      findMSB (global 2-component vector of uint)
+0:53      findMSB (temp 2-component vector of uint)
 0:53        Convert float to uint (temp 2-component vector of uint)
 0:53          'inF0' (in 2-component vector of float)
-0:54      findLSB (global 2-component vector of uint)
+0:54      findLSB (temp 2-component vector of uint)
 0:54        Convert float to uint (temp 2-component vector of uint)
 0:54          'inF0' (in 2-component vector of float)
-0:56      bitFieldReverse (global 2-component vector of uint)
+0:56      bitFieldReverse (temp 2-component vector of uint)
 0:56        Convert float to uint (temp 2-component vector of uint)
 0:56          'inF0' (in 2-component vector of float)
 0:57      Constant:
@@ -562,7 +562,7 @@
 0:?     Sequence
 0:64      Constant:
 0:64        0.000000
-0:65      bitCount (global 3-component vector of uint)
+0:65      bitCount (temp 3-component vector of uint)
 0:65        Convert float to uint (temp 3-component vector of uint)
 0:65          'inF0' (in 3-component vector of float)
 0:66      Constant:
@@ -570,16 +570,16 @@
 0:67      Constant:
 0:67        0.000000
 0:68      ERROR: Bad unary op
- (global 3-component vector of float)
+ (temp 3-component vector of float)
 0:68        Convert float to uint (temp 3-component vector of uint)
 0:68          'inF0' (in 3-component vector of float)
-0:69      findMSB (global 3-component vector of uint)
+0:69      findMSB (temp 3-component vector of uint)
 0:69        Convert float to uint (temp 3-component vector of uint)
 0:69          'inF0' (in 3-component vector of float)
-0:70      findLSB (global 3-component vector of uint)
+0:70      findLSB (temp 3-component vector of uint)
 0:70        Convert float to uint (temp 3-component vector of uint)
 0:70          'inF0' (in 3-component vector of float)
-0:72      bitFieldReverse (global 3-component vector of uint)
+0:72      bitFieldReverse (temp 3-component vector of uint)
 0:72        Convert float to uint (temp 3-component vector of uint)
 0:72          'inF0' (in 3-component vector of float)
 0:73      Constant:
@@ -598,10 +598,10 @@
 0:?     Sequence
 0:81      Constant:
 0:81        0.000000
-0:82      bitCount (global 4-component vector of uint)
+0:82      bitCount (temp 4-component vector of uint)
 0:82        Convert float to uint (temp 4-component vector of uint)
 0:82          'inF0' (layout(location=0 ) in 4-component vector of float)
-0:83      cross-product (global 3-component vector of float)
+0:83      cross-product (temp 3-component vector of float)
 0:83        Construct vec3 (in 3-component vector of float)
 0:83          'inF0' (layout(location=0 ) in 4-component vector of float)
 0:83        Construct vec3 (in 3-component vector of float)
@@ -609,16 +609,16 @@
 0:84      Constant:
 0:84        0.000000
 0:85      ERROR: Bad unary op
- (global 4-component vector of float)
+ (temp 4-component vector of float)
 0:85        Convert float to uint (temp 4-component vector of uint)
 0:85          'inF0' (layout(location=0 ) in 4-component vector of float)
-0:86      findMSB (global 4-component vector of uint)
+0:86      findMSB (temp 4-component vector of uint)
 0:86        Convert float to uint (temp 4-component vector of uint)
 0:86          'inF0' (layout(location=0 ) in 4-component vector of float)
-0:87      findLSB (global 4-component vector of uint)
+0:87      findLSB (temp 4-component vector of uint)
 0:87        Convert float to uint (temp 4-component vector of uint)
 0:87          'inF0' (layout(location=0 ) in 4-component vector of float)
-0:89      bitFieldReverse (global 4-component vector of uint)
+0:89      bitFieldReverse (temp 4-component vector of uint)
 0:89        Convert float to uint (temp 4-component vector of uint)
 0:89          'inF0' (layout(location=0 ) in 4-component vector of float)
 0:90      Constant:
diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out
index 72b6fbc..b57a5a9 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out
@@ -114,6 +114,11 @@
 0:?           4.000000
 0:?           4.000000
 0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
+0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
+0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
+0:?     'inI0' (layout(location=3 ) in 4-component vector of int)
 0:?     'gs_ua' (global uint)
 0:?     'gs_ub' (global uint)
 0:?     'gs_uc' (global uint)
@@ -126,11 +131,6 @@
 0:?     'gs_ua4' (global 4-component vector of uint)
 0:?     'gs_ub4' (global 4-component vector of uint)
 0:?     'gs_uc4' (global 4-component vector of uint)
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
-0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
-0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
-0:?     'inI0' (layout(location=3 ) in 4-component vector of int)
 
 
 Linked vertex stage:
@@ -251,6 +251,11 @@
 0:?           4.000000
 0:?           4.000000
 0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
+0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
+0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
+0:?     'inI0' (layout(location=3 ) in 4-component vector of int)
 0:?     'gs_ua' (global uint)
 0:?     'gs_ub' (global uint)
 0:?     'gs_uc' (global uint)
@@ -263,11 +268,6 @@
 0:?     'gs_ua4' (global 4-component vector of uint)
 0:?     'gs_ub4' (global 4-component vector of uint)
 0:?     'gs_uc4' (global 4-component vector of uint)
-0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'inF0' (layout(location=0 ) in 4-component vector of float)
-0:?     'inF1' (layout(location=1 ) in 4-component vector of float)
-0:?     'inF2' (layout(location=2 ) in 4-component vector of float)
-0:?     'inI0' (layout(location=3 ) in 4-component vector of int)
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -276,7 +276,7 @@
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "VertexShaderFunction" 85 122 123 124 127
+                              EntryPoint Vertex 4  "VertexShaderFunction" 85 102 103 104 107
                               Name 4  "VertexShaderFunction"
                               Name 15  "VertexShaderFunctionS(f1;f1;f1;i1;"
                               Name 11  "inF0"
@@ -311,27 +311,27 @@
                               Name 66  "inF1"
                               Name 67  "inF2"
                               Name 85  "@entryPointOutput"
-                              Name 103  "gs_ua"
-                              Name 104  "gs_ub"
-                              Name 105  "gs_uc"
-                              Name 108  "gs_ua2"
-                              Name 109  "gs_ub2"
-                              Name 110  "gs_uc2"
-                              Name 113  "gs_ua3"
-                              Name 114  "gs_ub3"
-                              Name 115  "gs_uc3"
-                              Name 118  "gs_ua4"
-                              Name 119  "gs_ub4"
-                              Name 120  "gs_uc4"
-                              Name 122  "inF0"
-                              Name 123  "inF1"
-                              Name 124  "inF2"
-                              Name 127  "inI0"
+                              Name 102  "inF0"
+                              Name 103  "inF1"
+                              Name 104  "inF2"
+                              Name 107  "inI0"
+                              Name 110  "gs_ua"
+                              Name 111  "gs_ub"
+                              Name 112  "gs_uc"
+                              Name 115  "gs_ua2"
+                              Name 116  "gs_ub2"
+                              Name 117  "gs_uc2"
+                              Name 120  "gs_ua3"
+                              Name 121  "gs_ub3"
+                              Name 122  "gs_uc3"
+                              Name 125  "gs_ua4"
+                              Name 126  "gs_ub4"
+                              Name 127  "gs_uc4"
                               Decorate 85(@entryPointOutput) Location 0
-                              Decorate 122(inF0) Location 0
-                              Decorate 123(inF1) Location 1
-                              Decorate 124(inF2) Location 2
-                              Decorate 127(inI0) Location 3
+                              Decorate 102(inF0) Location 0
+                              Decorate 103(inF1) Location 1
+                              Decorate 104(inF2) Location 2
+                              Decorate 107(inI0) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -375,33 +375,33 @@
               94:          53 ConstantComposite 93 93 93
               97:   61(fvec4) ConstantComposite 86 86 86 86
               98:          62 ConstantComposite 97 97 97 97
-             101:             TypeInt 32 0
-             102:             TypePointer Private 101(int)
-      103(gs_ua):    102(ptr) Variable Private
-      104(gs_ub):    102(ptr) Variable Private
-      105(gs_uc):    102(ptr) Variable Private
-             106:             TypeVector 101(int) 2
-             107:             TypePointer Private 106(ivec2)
-     108(gs_ua2):    107(ptr) Variable Private
-     109(gs_ub2):    107(ptr) Variable Private
-     110(gs_uc2):    107(ptr) Variable Private
-             111:             TypeVector 101(int) 3
-             112:             TypePointer Private 111(ivec3)
-     113(gs_ua3):    112(ptr) Variable Private
-     114(gs_ub3):    112(ptr) Variable Private
-     115(gs_uc3):    112(ptr) Variable Private
-             116:             TypeVector 101(int) 4
-             117:             TypePointer Private 116(ivec4)
-     118(gs_ua4):    117(ptr) Variable Private
-     119(gs_ub4):    117(ptr) Variable Private
-     120(gs_uc4):    117(ptr) Variable Private
-             121:             TypePointer Input 61(fvec4)
-       122(inF0):    121(ptr) Variable Input
-       123(inF1):    121(ptr) Variable Input
-       124(inF2):    121(ptr) Variable Input
-             125:             TypeVector 8(int) 4
-             126:             TypePointer Input 125(ivec4)
-       127(inI0):    126(ptr) Variable Input
+             101:             TypePointer Input 61(fvec4)
+       102(inF0):    101(ptr) Variable Input
+       103(inF1):    101(ptr) Variable Input
+       104(inF2):    101(ptr) Variable Input
+             105:             TypeVector 8(int) 4
+             106:             TypePointer Input 105(ivec4)
+       107(inI0):    106(ptr) Variable Input
+             108:             TypeInt 32 0
+             109:             TypePointer Private 108(int)
+      110(gs_ua):    109(ptr) Variable Private
+      111(gs_ub):    109(ptr) Variable Private
+      112(gs_uc):    109(ptr) Variable Private
+             113:             TypeVector 108(int) 2
+             114:             TypePointer Private 113(ivec2)
+     115(gs_ua2):    114(ptr) Variable Private
+     116(gs_ub2):    114(ptr) Variable Private
+     117(gs_uc2):    114(ptr) Variable Private
+             118:             TypeVector 108(int) 3
+             119:             TypePointer Private 118(ivec3)
+     120(gs_ua3):    119(ptr) Variable Private
+     121(gs_ub3):    119(ptr) Variable Private
+     122(gs_uc3):    119(ptr) Variable Private
+             123:             TypeVector 108(int) 4
+             124:             TypePointer Private 123(ivec4)
+     125(gs_ua4):    124(ptr) Variable Private
+     126(gs_ub4):    124(ptr) Variable Private
+     127(gs_uc4):    124(ptr) Variable Private
 4(VertexShaderFunction):           2 Function None 3
                5:             Label
                               Store 85(@entryPointOutput) 87
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index 811a752..bcf911b 100644
--- a/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.vert.out
@@ -9,99 +9,99 @@
 0:2      'inU0' (in uint)
 0:2      'inU1' (in uint)
 0:?     Sequence
-0:3      all (global bool)
+0:3      all (temp bool)
 0:3        'inF0' (in float)
-0:4      Absolute value (global float)
+0:4      Absolute value (temp float)
 0:4        'inF0' (in float)
-0:5      arc cosine (global float)
+0:5      arc cosine (temp float)
 0:5        'inF0' (in float)
-0:6      any (global bool)
+0:6      any (temp bool)
 0:6        'inF0' (in float)
-0:7      arc sine (global float)
+0:7      arc sine (temp float)
 0:7        'inF0' (in float)
-0:8      floatBitsToInt (global int)
+0:8      floatBitsToInt (temp int)
 0:8        'inF0' (in float)
-0:9      floatBitsToUint (global uint)
+0:9      floatBitsToUint (temp uint)
 0:9        'inF0' (in float)
-0:10      intBitsToFloat (global float)
+0:10      intBitsToFloat (temp float)
 0:10        'inU0' (in uint)
-0:12      arc tangent (global float)
+0:12      arc tangent (temp float)
 0:12        'inF0' (in float)
-0:13      arc tangent (global float)
+0:13      arc tangent (temp float)
 0:13        'inF0' (in float)
 0:13        'inF1' (in float)
-0:14      Ceiling (global float)
+0:14      Ceiling (temp float)
 0:14        'inF0' (in float)
-0:15      clamp (global float)
+0:15      clamp (temp float)
 0:15        'inF0' (in float)
 0:15        'inF1' (in float)
 0:15        'inF2' (in float)
-0:16      cosine (global float)
+0:16      cosine (temp float)
 0:16        'inF0' (in float)
-0:17      hyp. cosine (global float)
+0:17      hyp. cosine (temp float)
 0:17        'inF0' (in float)
-0:18      bitCount (global uint)
+0:18      bitCount (temp uint)
 0:18        Constant:
 0:18          7 (const uint)
-0:19      degrees (global float)
+0:19      degrees (temp float)
 0:19        'inF0' (in float)
-0:23      exp (global float)
+0:23      exp (temp float)
 0:23        'inF0' (in float)
-0:24      exp2 (global float)
+0:24      exp2 (temp float)
 0:24        'inF0' (in float)
-0:25      findMSB (global int)
+0:25      findMSB (temp int)
 0:25        Constant:
 0:25          7 (const int)
-0:26      findLSB (global int)
+0:26      findLSB (temp int)
 0:26        Constant:
 0:26          7 (const int)
-0:27      Floor (global float)
+0:27      Floor (temp float)
 0:27        'inF0' (in float)
-0:29      mod (global float)
+0:29      mod (temp float)
 0:29        'inF0' (in float)
 0:29        'inF1' (in float)
-0:30      Fraction (global float)
+0:30      Fraction (temp float)
 0:30        'inF0' (in float)
-0:31      frexp (global float)
+0:31      frexp (temp float)
 0:31        'inF0' (in float)
 0:31        'inF1' (in float)
-0:32      isinf (global bool)
+0:32      isinf (temp bool)
 0:32        'inF0' (in float)
-0:33      isnan (global bool)
+0:33      isnan (temp bool)
 0:33        'inF0' (in float)
-0:34      ldexp (global float)
+0:34      ldexp (temp float)
 0:34        'inF0' (in float)
 0:34        'inF1' (in float)
-0:35      mix (global float)
+0:35      mix (temp float)
 0:35        'inF0' (in float)
 0:35        'inF1' (in float)
 0:35        'inF2' (in float)
-0:36      log (global float)
+0:36      log (temp float)
 0:36        'inF0' (in float)
 0:37      component-wise multiply (temp float)
 0:37        log2 (temp float)
 0:37          'inF0' (in float)
 0:37        Constant:
 0:37          0.301030
-0:38      log2 (global float)
+0:38      log2 (temp float)
 0:38        'inF0' (in float)
-0:39      max (global float)
+0:39      max (temp float)
 0:39        'inF0' (in float)
 0:39        'inF1' (in float)
-0:40      min (global float)
+0:40      min (temp float)
 0:40        'inF0' (in float)
 0:40        'inF1' (in float)
-0:42      pow (global float)
+0:42      pow (temp float)
 0:42        'inF0' (in float)
 0:42        'inF1' (in float)
-0:43      radians (global float)
+0:43      radians (temp float)
 0:43        'inF0' (in float)
-0:44      bitFieldReverse (global uint)
+0:44      bitFieldReverse (temp uint)
 0:44        Constant:
 0:44          2 (const uint)
-0:45      roundEven (global float)
+0:45      roundEven (temp float)
 0:45        'inF0' (in float)
-0:46      inverse sqrt (global float)
+0:46      inverse sqrt (temp float)
 0:46        'inF0' (in float)
 0:47      clamp (temp float)
 0:47        'inF0' (in float)
@@ -109,9 +109,9 @@
 0:47          0.000000
 0:47        Constant:
 0:47          1.000000
-0:48      Sign (global float)
+0:48      Sign (temp float)
 0:48        'inF0' (in float)
-0:49      sine (global float)
+0:49      sine (temp float)
 0:49        'inF0' (in float)
 0:50      Sequence
 0:50        move second child to first child (temp float)
@@ -122,22 +122,22 @@
 0:50          'inF2' (in float)
 0:50          cosine (temp float)
 0:50            'inF0' (in float)
-0:51      hyp. sine (global float)
+0:51      hyp. sine (temp float)
 0:51        'inF0' (in float)
-0:52      smoothstep (global float)
+0:52      smoothstep (temp float)
 0:52        'inF0' (in float)
 0:52        'inF1' (in float)
 0:52        'inF2' (in float)
-0:53      sqrt (global float)
+0:53      sqrt (temp float)
 0:53        'inF0' (in float)
-0:54      step (global float)
+0:54      step (temp float)
 0:54        'inF0' (in float)
 0:54        'inF1' (in float)
-0:55      tangent (global float)
+0:55      tangent (temp float)
 0:55        'inF0' (in float)
-0:56      hyp. tangent (global float)
+0:56      hyp. tangent (temp float)
 0:56        'inF0' (in float)
-0:58      trunc (global float)
+0:58      trunc (temp float)
 0:58        'inF0' (in float)
 0:60      Branch: Return with expression
 0:60        Constant:
@@ -159,123 +159,123 @@
 0:70      'inU0' (in 2-component vector of uint)
 0:70      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:71      all (global bool)
+0:71      all (temp bool)
 0:71        'inF0' (in 2-component vector of float)
-0:72      Absolute value (global 2-component vector of float)
+0:72      Absolute value (temp 2-component vector of float)
 0:72        'inF0' (in 2-component vector of float)
-0:73      arc cosine (global 2-component vector of float)
+0:73      arc cosine (temp 2-component vector of float)
 0:73        'inF0' (in 2-component vector of float)
-0:74      any (global bool)
+0:74      any (temp bool)
 0:74        'inF0' (in 2-component vector of float)
-0:75      arc sine (global 2-component vector of float)
+0:75      arc sine (temp 2-component vector of float)
 0:75        'inF0' (in 2-component vector of float)
-0:76      floatBitsToInt (global 2-component vector of int)
+0:76      floatBitsToInt (temp 2-component vector of int)
 0:76        'inF0' (in 2-component vector of float)
-0:77      floatBitsToUint (global 2-component vector of uint)
+0:77      floatBitsToUint (temp 2-component vector of uint)
 0:77        'inF0' (in 2-component vector of float)
-0:78      intBitsToFloat (global 2-component vector of float)
+0:78      intBitsToFloat (temp 2-component vector of float)
 0:78        'inU0' (in 2-component vector of uint)
-0:80      arc tangent (global 2-component vector of float)
+0:80      arc tangent (temp 2-component vector of float)
 0:80        'inF0' (in 2-component vector of float)
-0:81      arc tangent (global 2-component vector of float)
+0:81      arc tangent (temp 2-component vector of float)
 0:81        'inF0' (in 2-component vector of float)
 0:81        'inF1' (in 2-component vector of float)
-0:82      Ceiling (global 2-component vector of float)
+0:82      Ceiling (temp 2-component vector of float)
 0:82        'inF0' (in 2-component vector of float)
-0:83      clamp (global 2-component vector of float)
+0:83      clamp (temp 2-component vector of float)
 0:83        'inF0' (in 2-component vector of float)
 0:83        'inF1' (in 2-component vector of float)
 0:83        'inF2' (in 2-component vector of float)
-0:84      cosine (global 2-component vector of float)
+0:84      cosine (temp 2-component vector of float)
 0:84        'inF0' (in 2-component vector of float)
-0:85      hyp. cosine (global 2-component vector of float)
+0:85      hyp. cosine (temp 2-component vector of float)
 0:85        'inF0' (in 2-component vector of float)
-0:?       bitCount (global 2-component vector of uint)
+0:?       bitCount (temp 2-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
-0:87      degrees (global 2-component vector of float)
+0:87      degrees (temp 2-component vector of float)
 0:87        'inF0' (in 2-component vector of float)
-0:88      distance (global float)
+0:88      distance (temp float)
 0:88        'inF0' (in 2-component vector of float)
 0:88        'inF1' (in 2-component vector of float)
-0:89      dot-product (global float)
+0:89      dot-product (temp float)
 0:89        'inF0' (in 2-component vector of float)
 0:89        'inF1' (in 2-component vector of float)
-0:93      exp (global 2-component vector of float)
+0:93      exp (temp 2-component vector of float)
 0:93        'inF0' (in 2-component vector of float)
-0:94      exp2 (global 2-component vector of float)
+0:94      exp2 (temp 2-component vector of float)
 0:94        'inF0' (in 2-component vector of float)
-0:95      face-forward (global 2-component vector of float)
+0:95      face-forward (temp 2-component vector of float)
 0:95        'inF0' (in 2-component vector of float)
 0:95        'inF1' (in 2-component vector of float)
 0:95        'inF2' (in 2-component vector of float)
-0:96      findMSB (global int)
+0:96      findMSB (temp int)
 0:96        Constant:
 0:96          7 (const int)
-0:97      findLSB (global int)
+0:97      findLSB (temp int)
 0:97        Constant:
 0:97          7 (const int)
-0:98      Floor (global 2-component vector of float)
+0:98      Floor (temp 2-component vector of float)
 0:98        'inF0' (in 2-component vector of float)
-0:100      mod (global 2-component vector of float)
+0:100      mod (temp 2-component vector of float)
 0:100        'inF0' (in 2-component vector of float)
 0:100        'inF1' (in 2-component vector of float)
-0:101      Fraction (global 2-component vector of float)
+0:101      Fraction (temp 2-component vector of float)
 0:101        'inF0' (in 2-component vector of float)
-0:102      frexp (global 2-component vector of float)
+0:102      frexp (temp 2-component vector of float)
 0:102        'inF0' (in 2-component vector of float)
 0:102        'inF1' (in 2-component vector of float)
-0:103      isinf (global 2-component vector of bool)
+0:103      isinf (temp 2-component vector of bool)
 0:103        'inF0' (in 2-component vector of float)
-0:104      isnan (global 2-component vector of bool)
+0:104      isnan (temp 2-component vector of bool)
 0:104        'inF0' (in 2-component vector of float)
-0:105      ldexp (global 2-component vector of float)
+0:105      ldexp (temp 2-component vector of float)
 0:105        'inF0' (in 2-component vector of float)
 0:105        'inF1' (in 2-component vector of float)
-0:106      mix (global 2-component vector of float)
+0:106      mix (temp 2-component vector of float)
 0:106        'inF0' (in 2-component vector of float)
 0:106        'inF1' (in 2-component vector of float)
 0:106        'inF2' (in 2-component vector of float)
-0:107      length (global float)
+0:107      length (temp float)
 0:107        'inF0' (in 2-component vector of float)
-0:108      log (global 2-component vector of float)
+0:108      log (temp 2-component vector of float)
 0:108        'inF0' (in 2-component vector of float)
 0:109      vector-scale (temp 2-component vector of float)
 0:109        log2 (temp 2-component vector of float)
 0:109          'inF0' (in 2-component vector of float)
 0:109        Constant:
 0:109          0.301030
-0:110      log2 (global 2-component vector of float)
+0:110      log2 (temp 2-component vector of float)
 0:110        'inF0' (in 2-component vector of float)
-0:111      max (global 2-component vector of float)
+0:111      max (temp 2-component vector of float)
 0:111        'inF0' (in 2-component vector of float)
 0:111        'inF1' (in 2-component vector of float)
-0:112      min (global 2-component vector of float)
+0:112      min (temp 2-component vector of float)
 0:112        'inF0' (in 2-component vector of float)
 0:112        'inF1' (in 2-component vector of float)
-0:114      normalize (global 2-component vector of float)
+0:114      normalize (temp 2-component vector of float)
 0:114        'inF0' (in 2-component vector of float)
-0:115      pow (global 2-component vector of float)
+0:115      pow (temp 2-component vector of float)
 0:115        'inF0' (in 2-component vector of float)
 0:115        'inF1' (in 2-component vector of float)
-0:116      radians (global 2-component vector of float)
+0:116      radians (temp 2-component vector of float)
 0:116        'inF0' (in 2-component vector of float)
-0:117      reflect (global 2-component vector of float)
+0:117      reflect (temp 2-component vector of float)
 0:117        'inF0' (in 2-component vector of float)
 0:117        'inF1' (in 2-component vector of float)
-0:118      refract (global 2-component vector of float)
+0:118      refract (temp 2-component vector of float)
 0:118        'inF0' (in 2-component vector of float)
 0:118        'inF1' (in 2-component vector of float)
 0:118        Constant:
 0:118          2.000000
-0:?       bitFieldReverse (global 2-component vector of uint)
+0:?       bitFieldReverse (temp 2-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
-0:120      roundEven (global 2-component vector of float)
+0:120      roundEven (temp 2-component vector of float)
 0:120        'inF0' (in 2-component vector of float)
-0:121      inverse sqrt (global 2-component vector of float)
+0:121      inverse sqrt (temp 2-component vector of float)
 0:121        'inF0' (in 2-component vector of float)
 0:122      clamp (temp 2-component vector of float)
 0:122        'inF0' (in 2-component vector of float)
@@ -283,9 +283,9 @@
 0:122          0.000000
 0:122        Constant:
 0:122          1.000000
-0:123      Sign (global 2-component vector of float)
+0:123      Sign (temp 2-component vector of float)
 0:123        'inF0' (in 2-component vector of float)
-0:124      sine (global 2-component vector of float)
+0:124      sine (temp 2-component vector of float)
 0:124        'inF0' (in 2-component vector of float)
 0:125      Sequence
 0:125        move second child to first child (temp 2-component vector of float)
@@ -296,22 +296,22 @@
 0:125          'inF2' (in 2-component vector of float)
 0:125          cosine (temp 2-component vector of float)
 0:125            'inF0' (in 2-component vector of float)
-0:126      hyp. sine (global 2-component vector of float)
+0:126      hyp. sine (temp 2-component vector of float)
 0:126        'inF0' (in 2-component vector of float)
-0:127      smoothstep (global 2-component vector of float)
+0:127      smoothstep (temp 2-component vector of float)
 0:127        'inF0' (in 2-component vector of float)
 0:127        'inF1' (in 2-component vector of float)
 0:127        'inF2' (in 2-component vector of float)
-0:128      sqrt (global 2-component vector of float)
+0:128      sqrt (temp 2-component vector of float)
 0:128        'inF0' (in 2-component vector of float)
-0:129      step (global 2-component vector of float)
+0:129      step (temp 2-component vector of float)
 0:129        'inF0' (in 2-component vector of float)
 0:129        'inF1' (in 2-component vector of float)
-0:130      tangent (global 2-component vector of float)
+0:130      tangent (temp 2-component vector of float)
 0:130        'inF0' (in 2-component vector of float)
-0:131      hyp. tangent (global 2-component vector of float)
+0:131      hyp. tangent (temp 2-component vector of float)
 0:131        'inF0' (in 2-component vector of float)
-0:133      trunc (global 2-component vector of float)
+0:133      trunc (temp 2-component vector of float)
 0:133        'inF0' (in 2-component vector of float)
 0:136      Branch: Return with expression
 0:?         Constant:
@@ -325,128 +325,128 @@
 0:140      'inU0' (in 3-component vector of uint)
 0:140      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:141      all (global bool)
+0:141      all (temp bool)
 0:141        'inF0' (in 3-component vector of float)
-0:142      Absolute value (global 3-component vector of float)
+0:142      Absolute value (temp 3-component vector of float)
 0:142        'inF0' (in 3-component vector of float)
-0:143      arc cosine (global 3-component vector of float)
+0:143      arc cosine (temp 3-component vector of float)
 0:143        'inF0' (in 3-component vector of float)
-0:144      any (global bool)
+0:144      any (temp bool)
 0:144        'inF0' (in 3-component vector of float)
-0:145      arc sine (global 3-component vector of float)
+0:145      arc sine (temp 3-component vector of float)
 0:145        'inF0' (in 3-component vector of float)
-0:146      floatBitsToInt (global 3-component vector of int)
+0:146      floatBitsToInt (temp 3-component vector of int)
 0:146        'inF0' (in 3-component vector of float)
-0:147      floatBitsToUint (global 3-component vector of uint)
+0:147      floatBitsToUint (temp 3-component vector of uint)
 0:147        'inF0' (in 3-component vector of float)
-0:148      intBitsToFloat (global 3-component vector of float)
+0:148      intBitsToFloat (temp 3-component vector of float)
 0:148        'inU0' (in 3-component vector of uint)
-0:150      arc tangent (global 3-component vector of float)
+0:150      arc tangent (temp 3-component vector of float)
 0:150        'inF0' (in 3-component vector of float)
-0:151      arc tangent (global 3-component vector of float)
+0:151      arc tangent (temp 3-component vector of float)
 0:151        'inF0' (in 3-component vector of float)
 0:151        'inF1' (in 3-component vector of float)
-0:152      Ceiling (global 3-component vector of float)
+0:152      Ceiling (temp 3-component vector of float)
 0:152        'inF0' (in 3-component vector of float)
-0:153      clamp (global 3-component vector of float)
+0:153      clamp (temp 3-component vector of float)
 0:153        'inF0' (in 3-component vector of float)
 0:153        'inF1' (in 3-component vector of float)
 0:153        'inF2' (in 3-component vector of float)
-0:154      cosine (global 3-component vector of float)
+0:154      cosine (temp 3-component vector of float)
 0:154        'inF0' (in 3-component vector of float)
-0:155      hyp. cosine (global 3-component vector of float)
+0:155      hyp. cosine (temp 3-component vector of float)
 0:155        'inF0' (in 3-component vector of float)
-0:?       bitCount (global 3-component vector of uint)
+0:?       bitCount (temp 3-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
 0:?           5 (const uint)
-0:157      cross-product (global 3-component vector of float)
+0:157      cross-product (temp 3-component vector of float)
 0:157        'inF0' (in 3-component vector of float)
 0:157        'inF1' (in 3-component vector of float)
-0:158      degrees (global 3-component vector of float)
+0:158      degrees (temp 3-component vector of float)
 0:158        'inF0' (in 3-component vector of float)
-0:159      distance (global float)
+0:159      distance (temp float)
 0:159        'inF0' (in 3-component vector of float)
 0:159        'inF1' (in 3-component vector of float)
-0:160      dot-product (global float)
+0:160      dot-product (temp float)
 0:160        'inF0' (in 3-component vector of float)
 0:160        'inF1' (in 3-component vector of float)
-0:164      exp (global 3-component vector of float)
+0:164      exp (temp 3-component vector of float)
 0:164        'inF0' (in 3-component vector of float)
-0:165      exp2 (global 3-component vector of float)
+0:165      exp2 (temp 3-component vector of float)
 0:165        'inF0' (in 3-component vector of float)
-0:166      face-forward (global 3-component vector of float)
+0:166      face-forward (temp 3-component vector of float)
 0:166        'inF0' (in 3-component vector of float)
 0:166        'inF1' (in 3-component vector of float)
 0:166        'inF2' (in 3-component vector of float)
-0:167      findMSB (global int)
+0:167      findMSB (temp int)
 0:167        Constant:
 0:167          7 (const int)
-0:168      findLSB (global int)
+0:168      findLSB (temp int)
 0:168        Constant:
 0:168          7 (const int)
-0:169      Floor (global 3-component vector of float)
+0:169      Floor (temp 3-component vector of float)
 0:169        'inF0' (in 3-component vector of float)
-0:171      mod (global 3-component vector of float)
+0:171      mod (temp 3-component vector of float)
 0:171        'inF0' (in 3-component vector of float)
 0:171        'inF1' (in 3-component vector of float)
-0:172      Fraction (global 3-component vector of float)
+0:172      Fraction (temp 3-component vector of float)
 0:172        'inF0' (in 3-component vector of float)
-0:173      frexp (global 3-component vector of float)
+0:173      frexp (temp 3-component vector of float)
 0:173        'inF0' (in 3-component vector of float)
 0:173        'inF1' (in 3-component vector of float)
-0:174      isinf (global 3-component vector of bool)
+0:174      isinf (temp 3-component vector of bool)
 0:174        'inF0' (in 3-component vector of float)
-0:175      isnan (global 3-component vector of bool)
+0:175      isnan (temp 3-component vector of bool)
 0:175        'inF0' (in 3-component vector of float)
-0:176      ldexp (global 3-component vector of float)
+0:176      ldexp (temp 3-component vector of float)
 0:176        'inF0' (in 3-component vector of float)
 0:176        'inF1' (in 3-component vector of float)
-0:177      mix (global 3-component vector of float)
+0:177      mix (temp 3-component vector of float)
 0:177        'inF0' (in 3-component vector of float)
 0:177        'inF1' (in 3-component vector of float)
 0:177        'inF2' (in 3-component vector of float)
-0:178      length (global float)
+0:178      length (temp float)
 0:178        'inF0' (in 3-component vector of float)
-0:179      log (global 3-component vector of float)
+0:179      log (temp 3-component vector of float)
 0:179        'inF0' (in 3-component vector of float)
 0:180      vector-scale (temp 3-component vector of float)
 0:180        log2 (temp 3-component vector of float)
 0:180          'inF0' (in 3-component vector of float)
 0:180        Constant:
 0:180          0.301030
-0:181      log2 (global 3-component vector of float)
+0:181      log2 (temp 3-component vector of float)
 0:181        'inF0' (in 3-component vector of float)
-0:182      max (global 3-component vector of float)
+0:182      max (temp 3-component vector of float)
 0:182        'inF0' (in 3-component vector of float)
 0:182        'inF1' (in 3-component vector of float)
-0:183      min (global 3-component vector of float)
+0:183      min (temp 3-component vector of float)
 0:183        'inF0' (in 3-component vector of float)
 0:183        'inF1' (in 3-component vector of float)
-0:185      normalize (global 3-component vector of float)
+0:185      normalize (temp 3-component vector of float)
 0:185        'inF0' (in 3-component vector of float)
-0:186      pow (global 3-component vector of float)
+0:186      pow (temp 3-component vector of float)
 0:186        'inF0' (in 3-component vector of float)
 0:186        'inF1' (in 3-component vector of float)
-0:187      radians (global 3-component vector of float)
+0:187      radians (temp 3-component vector of float)
 0:187        'inF0' (in 3-component vector of float)
-0:188      reflect (global 3-component vector of float)
+0:188      reflect (temp 3-component vector of float)
 0:188        'inF0' (in 3-component vector of float)
 0:188        'inF1' (in 3-component vector of float)
-0:189      refract (global 3-component vector of float)
+0:189      refract (temp 3-component vector of float)
 0:189        'inF0' (in 3-component vector of float)
 0:189        'inF1' (in 3-component vector of float)
 0:189        Constant:
 0:189          2.000000
-0:?       bitFieldReverse (global 3-component vector of uint)
+0:?       bitFieldReverse (temp 3-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
 0:?           3 (const uint)
-0:191      roundEven (global 3-component vector of float)
+0:191      roundEven (temp 3-component vector of float)
 0:191        'inF0' (in 3-component vector of float)
-0:192      inverse sqrt (global 3-component vector of float)
+0:192      inverse sqrt (temp 3-component vector of float)
 0:192        'inF0' (in 3-component vector of float)
 0:193      clamp (temp 3-component vector of float)
 0:193        'inF0' (in 3-component vector of float)
@@ -454,9 +454,9 @@
 0:193          0.000000
 0:193        Constant:
 0:193          1.000000
-0:194      Sign (global 3-component vector of float)
+0:194      Sign (temp 3-component vector of float)
 0:194        'inF0' (in 3-component vector of float)
-0:195      sine (global 3-component vector of float)
+0:195      sine (temp 3-component vector of float)
 0:195        'inF0' (in 3-component vector of float)
 0:196      Sequence
 0:196        move second child to first child (temp 3-component vector of float)
@@ -467,22 +467,22 @@
 0:196          'inF2' (in 3-component vector of float)
 0:196          cosine (temp 3-component vector of float)
 0:196            'inF0' (in 3-component vector of float)
-0:197      hyp. sine (global 3-component vector of float)
+0:197      hyp. sine (temp 3-component vector of float)
 0:197        'inF0' (in 3-component vector of float)
-0:198      smoothstep (global 3-component vector of float)
+0:198      smoothstep (temp 3-component vector of float)
 0:198        'inF0' (in 3-component vector of float)
 0:198        'inF1' (in 3-component vector of float)
 0:198        'inF2' (in 3-component vector of float)
-0:199      sqrt (global 3-component vector of float)
+0:199      sqrt (temp 3-component vector of float)
 0:199        'inF0' (in 3-component vector of float)
-0:200      step (global 3-component vector of float)
+0:200      step (temp 3-component vector of float)
 0:200        'inF0' (in 3-component vector of float)
 0:200        'inF1' (in 3-component vector of float)
-0:201      tangent (global 3-component vector of float)
+0:201      tangent (temp 3-component vector of float)
 0:201        'inF0' (in 3-component vector of float)
-0:202      hyp. tangent (global 3-component vector of float)
+0:202      hyp. tangent (temp 3-component vector of float)
 0:202        'inF0' (in 3-component vector of float)
-0:204      trunc (global 3-component vector of float)
+0:204      trunc (temp 3-component vector of float)
 0:204        'inF0' (in 3-component vector of float)
 0:207      Branch: Return with expression
 0:?         Constant:
@@ -497,49 +497,49 @@
 0:211      'inU0' (in 4-component vector of uint)
 0:211      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:212      all (global bool)
+0:212      all (temp bool)
 0:212        'inF0' (in 4-component vector of float)
-0:213      Absolute value (global 4-component vector of float)
+0:213      Absolute value (temp 4-component vector of float)
 0:213        'inF0' (in 4-component vector of float)
-0:214      arc cosine (global 4-component vector of float)
+0:214      arc cosine (temp 4-component vector of float)
 0:214        'inF0' (in 4-component vector of float)
-0:215      any (global bool)
+0:215      any (temp bool)
 0:215        'inF0' (in 4-component vector of float)
-0:216      arc sine (global 4-component vector of float)
+0:216      arc sine (temp 4-component vector of float)
 0:216        'inF0' (in 4-component vector of float)
-0:217      floatBitsToInt (global 4-component vector of int)
+0:217      floatBitsToInt (temp 4-component vector of int)
 0:217        'inF0' (in 4-component vector of float)
-0:218      floatBitsToUint (global 4-component vector of uint)
+0:218      floatBitsToUint (temp 4-component vector of uint)
 0:218        'inF0' (in 4-component vector of float)
-0:219      intBitsToFloat (global 4-component vector of float)
+0:219      intBitsToFloat (temp 4-component vector of float)
 0:219        'inU0' (in 4-component vector of uint)
-0:221      arc tangent (global 4-component vector of float)
+0:221      arc tangent (temp 4-component vector of float)
 0:221        'inF0' (in 4-component vector of float)
-0:222      arc tangent (global 4-component vector of float)
+0:222      arc tangent (temp 4-component vector of float)
 0:222        'inF0' (in 4-component vector of float)
 0:222        'inF1' (in 4-component vector of float)
-0:223      Ceiling (global 4-component vector of float)
+0:223      Ceiling (temp 4-component vector of float)
 0:223        'inF0' (in 4-component vector of float)
-0:224      clamp (global 4-component vector of float)
+0:224      clamp (temp 4-component vector of float)
 0:224        'inF0' (in 4-component vector of float)
 0:224        'inF1' (in 4-component vector of float)
 0:224        'inF2' (in 4-component vector of float)
-0:225      cosine (global 4-component vector of float)
+0:225      cosine (temp 4-component vector of float)
 0:225        'inF0' (in 4-component vector of float)
-0:226      hyp. cosine (global 4-component vector of float)
+0:226      hyp. cosine (temp 4-component vector of float)
 0:226        'inF0' (in 4-component vector of float)
-0:?       bitCount (global 4-component vector of uint)
+0:?       bitCount (temp 4-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
 0:?           5 (const uint)
 0:?           2 (const uint)
-0:228      degrees (global 4-component vector of float)
+0:228      degrees (temp 4-component vector of float)
 0:228        'inF0' (in 4-component vector of float)
-0:229      distance (global float)
+0:229      distance (temp float)
 0:229        'inF0' (in 4-component vector of float)
 0:229        'inF1' (in 4-component vector of float)
-0:230      dot-product (global float)
+0:230      dot-product (temp float)
 0:230        'inF0' (in 4-component vector of float)
 0:230        'inF1' (in 4-component vector of float)
 0:231      Construct vec4 (temp 4-component vector of float)
@@ -562,82 +562,82 @@
 0:231          'inF1' (in 4-component vector of float)
 0:231          Constant:
 0:231            3 (const int)
-0:235      exp (global 4-component vector of float)
+0:235      exp (temp 4-component vector of float)
 0:235        'inF0' (in 4-component vector of float)
-0:236      exp2 (global 4-component vector of float)
+0:236      exp2 (temp 4-component vector of float)
 0:236        'inF0' (in 4-component vector of float)
-0:237      face-forward (global 4-component vector of float)
+0:237      face-forward (temp 4-component vector of float)
 0:237        'inF0' (in 4-component vector of float)
 0:237        'inF1' (in 4-component vector of float)
 0:237        'inF2' (in 4-component vector of float)
-0:238      findMSB (global int)
+0:238      findMSB (temp int)
 0:238        Constant:
 0:238          7 (const int)
-0:239      findLSB (global int)
+0:239      findLSB (temp int)
 0:239        Constant:
 0:239          7 (const int)
-0:240      Floor (global 4-component vector of float)
+0:240      Floor (temp 4-component vector of float)
 0:240        'inF0' (in 4-component vector of float)
-0:242      mod (global 4-component vector of float)
+0:242      mod (temp 4-component vector of float)
 0:242        'inF0' (in 4-component vector of float)
 0:242        'inF1' (in 4-component vector of float)
-0:243      Fraction (global 4-component vector of float)
+0:243      Fraction (temp 4-component vector of float)
 0:243        'inF0' (in 4-component vector of float)
-0:244      frexp (global 4-component vector of float)
+0:244      frexp (temp 4-component vector of float)
 0:244        'inF0' (in 4-component vector of float)
 0:244        'inF1' (in 4-component vector of float)
-0:245      isinf (global 4-component vector of bool)
+0:245      isinf (temp 4-component vector of bool)
 0:245        'inF0' (in 4-component vector of float)
-0:246      isnan (global 4-component vector of bool)
+0:246      isnan (temp 4-component vector of bool)
 0:246        'inF0' (in 4-component vector of float)
-0:247      ldexp (global 4-component vector of float)
+0:247      ldexp (temp 4-component vector of float)
 0:247        'inF0' (in 4-component vector of float)
 0:247        'inF1' (in 4-component vector of float)
-0:248      mix (global 4-component vector of float)
+0:248      mix (temp 4-component vector of float)
 0:248        'inF0' (in 4-component vector of float)
 0:248        'inF1' (in 4-component vector of float)
 0:248        'inF2' (in 4-component vector of float)
-0:249      length (global float)
+0:249      length (temp float)
 0:249        'inF0' (in 4-component vector of float)
-0:250      log (global 4-component vector of float)
+0:250      log (temp 4-component vector of float)
 0:250        'inF0' (in 4-component vector of float)
 0:251      vector-scale (temp 4-component vector of float)
 0:251        log2 (temp 4-component vector of float)
 0:251          'inF0' (in 4-component vector of float)
 0:251        Constant:
 0:251          0.301030
-0:252      log2 (global 4-component vector of float)
+0:252      log2 (temp 4-component vector of float)
 0:252        'inF0' (in 4-component vector of float)
-0:253      max (global 4-component vector of float)
+0:253      max (temp 4-component vector of float)
 0:253        'inF0' (in 4-component vector of float)
 0:253        'inF1' (in 4-component vector of float)
-0:254      min (global 4-component vector of float)
+0:254      min (temp 4-component vector of float)
 0:254        'inF0' (in 4-component vector of float)
 0:254        'inF1' (in 4-component vector of float)
-0:256      normalize (global 4-component vector of float)
+0:256      normalize (temp 4-component vector of float)
 0:256        'inF0' (in 4-component vector of float)
-0:257      pow (global 4-component vector of float)
+0:257      pow (temp 4-component vector of float)
 0:257        'inF0' (in 4-component vector of float)
 0:257        'inF1' (in 4-component vector of float)
-0:258      radians (global 4-component vector of float)
+0:258      radians (temp 4-component vector of float)
 0:258        'inF0' (in 4-component vector of float)
-0:259      reflect (global 4-component vector of float)
+0:259      reflect (temp 4-component vector of float)
 0:259        'inF0' (in 4-component vector of float)
 0:259        'inF1' (in 4-component vector of float)
-0:260      refract (global 4-component vector of float)
+0:260      refract (temp 4-component vector of float)
 0:260        'inF0' (in 4-component vector of float)
 0:260        'inF1' (in 4-component vector of float)
 0:260        Constant:
 0:260          2.000000
-0:?       bitFieldReverse (global 4-component vector of uint)
+0:?       bitFieldReverse (temp 4-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
 0:?           3 (const uint)
 0:?           4 (const uint)
-0:262      roundEven (global 4-component vector of float)
+0:262      roundEven (temp 4-component vector of float)
 0:262        'inF0' (in 4-component vector of float)
-0:263      inverse sqrt (global 4-component vector of float)
+0:263      inverse sqrt (temp 4-component vector of float)
 0:263        'inF0' (in 4-component vector of float)
 0:264      clamp (temp 4-component vector of float)
 0:264        'inF0' (in 4-component vector of float)
@@ -645,9 +645,9 @@
 0:264          0.000000
 0:264        Constant:
 0:264          1.000000
-0:265      Sign (global 4-component vector of float)
+0:265      Sign (temp 4-component vector of float)
 0:265        'inF0' (in 4-component vector of float)
-0:266      sine (global 4-component vector of float)
+0:266      sine (temp 4-component vector of float)
 0:266        'inF0' (in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child (temp 4-component vector of float)
@@ -658,22 +658,22 @@
 0:267          'inF2' (in 4-component vector of float)
 0:267          cosine (temp 4-component vector of float)
 0:267            'inF0' (in 4-component vector of float)
-0:268      hyp. sine (global 4-component vector of float)
+0:268      hyp. sine (temp 4-component vector of float)
 0:268        'inF0' (in 4-component vector of float)
-0:269      smoothstep (global 4-component vector of float)
+0:269      smoothstep (temp 4-component vector of float)
 0:269        'inF0' (in 4-component vector of float)
 0:269        'inF1' (in 4-component vector of float)
 0:269        'inF2' (in 4-component vector of float)
-0:270      sqrt (global 4-component vector of float)
+0:270      sqrt (temp 4-component vector of float)
 0:270        'inF0' (in 4-component vector of float)
-0:271      step (global 4-component vector of float)
+0:271      step (temp 4-component vector of float)
 0:271        'inF0' (in 4-component vector of float)
 0:271        'inF1' (in 4-component vector of float)
-0:272      tangent (global 4-component vector of float)
+0:272      tangent (temp 4-component vector of float)
 0:272        'inF0' (in 4-component vector of float)
-0:273      hyp. tangent (global 4-component vector of float)
+0:273      hyp. tangent (temp 4-component vector of float)
 0:273        'inF0' (in 4-component vector of float)
-0:275      trunc (global 4-component vector of float)
+0:275      trunc (temp 4-component vector of float)
 0:275        'inF0' (in 4-component vector of float)
 0:278      Branch: Return with expression
 0:?         Constant:
@@ -687,85 +687,85 @@
 0:336      'inF1' (in 2X2 matrix of float)
 0:336      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:338      all (global bool)
+0:338      all (temp bool)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      Absolute value (global 2X2 matrix of float)
+0:338      Absolute value (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc cosine (global 2X2 matrix of float)
+0:338      arc cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      any (global bool)
+0:338      any (temp bool)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc sine (global 2X2 matrix of float)
+0:338      arc sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc tangent (global 2X2 matrix of float)
+0:338      arc tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc tangent (global 2X2 matrix of float)
+0:338      arc tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      Ceiling (global 2X2 matrix of float)
+0:338      Ceiling (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      clamp (global 2X2 matrix of float)
+0:338      clamp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      cosine (global 2X2 matrix of float)
+0:338      cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      hyp. cosine (global 2X2 matrix of float)
+0:338      hyp. cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      degrees (global 2X2 matrix of float)
+0:338      degrees (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      determinant (global float)
+0:338      determinant (temp float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      exp (global 2X2 matrix of float)
+0:338      exp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      exp2 (global 2X2 matrix of float)
+0:338      exp2 (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      findMSB (global int)
+0:338      findMSB (temp int)
 0:338        Constant:
 0:338          7 (const int)
-0:338      findLSB (global int)
+0:338      findLSB (temp int)
 0:338        Constant:
 0:338          7 (const int)
-0:338      Floor (global 2X2 matrix of float)
+0:338      Floor (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      mod (global 2X2 matrix of float)
+0:338      mod (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      Fraction (global 2X2 matrix of float)
+0:338      Fraction (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      frexp (global 2X2 matrix of float)
+0:338      frexp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      ldexp (global 2X2 matrix of float)
+0:338      ldexp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      mix (global 2X2 matrix of float)
+0:338      mix (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      log (global 2X2 matrix of float)
+0:338      log (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      matrix-scale (temp 2X2 matrix of float)
 0:338        log2 (temp 2X2 matrix of float)
 0:338          'inF0' (in 2X2 matrix of float)
 0:338        Constant:
 0:338          0.301030
-0:338      log2 (global 2X2 matrix of float)
+0:338      log2 (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      max (global 2X2 matrix of float)
+0:338      max (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      min (global 2X2 matrix of float)
+0:338      min (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      pow (global 2X2 matrix of float)
+0:338      pow (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      radians (global 2X2 matrix of float)
+0:338      radians (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      roundEven (global 2X2 matrix of float)
+0:338      roundEven (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      inverse sqrt (global 2X2 matrix of float)
+0:338      inverse sqrt (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      clamp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
@@ -773,9 +773,9 @@
 0:338          0.000000
 0:338        Constant:
 0:338          1.000000
-0:338      Sign (global 2X2 matrix of float)
+0:338      Sign (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      sine (global 2X2 matrix of float)
+0:338      sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      Sequence
 0:338        move second child to first child (temp 2X2 matrix of float)
@@ -786,24 +786,24 @@
 0:338          'inF2' (in 2X2 matrix of float)
 0:338          cosine (temp 2X2 matrix of float)
 0:338            'inF0' (in 2X2 matrix of float)
-0:338      hyp. sine (global 2X2 matrix of float)
+0:338      hyp. sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      smoothstep (global 2X2 matrix of float)
+0:338      smoothstep (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      sqrt (global 2X2 matrix of float)
+0:338      sqrt (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      step (global 2X2 matrix of float)
+0:338      step (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      tangent (global 2X2 matrix of float)
+0:338      tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      hyp. tangent (global 2X2 matrix of float)
+0:338      hyp. tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      transpose (global 2X2 matrix of float)
+0:338      transpose (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      trunc (global 2X2 matrix of float)
+0:338      trunc (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:341      Branch: Return with expression
 0:?         Constant:
@@ -817,85 +817,85 @@
 0:345      'inF1' (in 3X3 matrix of float)
 0:345      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:347      all (global bool)
+0:347      all (temp bool)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      Absolute value (global 3X3 matrix of float)
+0:347      Absolute value (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc cosine (global 3X3 matrix of float)
+0:347      arc cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      any (global bool)
+0:347      any (temp bool)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc sine (global 3X3 matrix of float)
+0:347      arc sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc tangent (global 3X3 matrix of float)
+0:347      arc tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc tangent (global 3X3 matrix of float)
+0:347      arc tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      Ceiling (global 3X3 matrix of float)
+0:347      Ceiling (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      clamp (global 3X3 matrix of float)
+0:347      clamp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      cosine (global 3X3 matrix of float)
+0:347      cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      hyp. cosine (global 3X3 matrix of float)
+0:347      hyp. cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      degrees (global 3X3 matrix of float)
+0:347      degrees (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      determinant (global float)
+0:347      determinant (temp float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      exp (global 3X3 matrix of float)
+0:347      exp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      exp2 (global 3X3 matrix of float)
+0:347      exp2 (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      findMSB (global int)
+0:347      findMSB (temp int)
 0:347        Constant:
 0:347          7 (const int)
-0:347      findLSB (global int)
+0:347      findLSB (temp int)
 0:347        Constant:
 0:347          7 (const int)
-0:347      Floor (global 3X3 matrix of float)
+0:347      Floor (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      mod (global 3X3 matrix of float)
+0:347      mod (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      Fraction (global 3X3 matrix of float)
+0:347      Fraction (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      frexp (global 3X3 matrix of float)
+0:347      frexp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      ldexp (global 3X3 matrix of float)
+0:347      ldexp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      mix (global 3X3 matrix of float)
+0:347      mix (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      log (global 3X3 matrix of float)
+0:347      log (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      matrix-scale (temp 3X3 matrix of float)
 0:347        log2 (temp 3X3 matrix of float)
 0:347          'inF0' (in 3X3 matrix of float)
 0:347        Constant:
 0:347          0.301030
-0:347      log2 (global 3X3 matrix of float)
+0:347      log2 (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      max (global 3X3 matrix of float)
+0:347      max (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      min (global 3X3 matrix of float)
+0:347      min (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      pow (global 3X3 matrix of float)
+0:347      pow (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      radians (global 3X3 matrix of float)
+0:347      radians (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      roundEven (global 3X3 matrix of float)
+0:347      roundEven (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      inverse sqrt (global 3X3 matrix of float)
+0:347      inverse sqrt (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      clamp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
@@ -903,9 +903,9 @@
 0:347          0.000000
 0:347        Constant:
 0:347          1.000000
-0:347      Sign (global 3X3 matrix of float)
+0:347      Sign (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      sine (global 3X3 matrix of float)
+0:347      sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      Sequence
 0:347        move second child to first child (temp 3X3 matrix of float)
@@ -916,24 +916,24 @@
 0:347          'inF2' (in 3X3 matrix of float)
 0:347          cosine (temp 3X3 matrix of float)
 0:347            'inF0' (in 3X3 matrix of float)
-0:347      hyp. sine (global 3X3 matrix of float)
+0:347      hyp. sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      smoothstep (global 3X3 matrix of float)
+0:347      smoothstep (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      sqrt (global 3X3 matrix of float)
+0:347      sqrt (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      step (global 3X3 matrix of float)
+0:347      step (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      tangent (global 3X3 matrix of float)
+0:347      tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      hyp. tangent (global 3X3 matrix of float)
+0:347      hyp. tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      transpose (global 3X3 matrix of float)
+0:347      transpose (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      trunc (global 3X3 matrix of float)
+0:347      trunc (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:350      Branch: Return with expression
 0:?         Constant:
@@ -952,85 +952,85 @@
 0:354      'inF1' (in 4X4 matrix of float)
 0:354      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:356      all (global bool)
+0:356      all (temp bool)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      Absolute value (global 4X4 matrix of float)
+0:356      Absolute value (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc cosine (global 4X4 matrix of float)
+0:356      arc cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      any (global bool)
+0:356      any (temp bool)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc sine (global 4X4 matrix of float)
+0:356      arc sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc tangent (global 4X4 matrix of float)
+0:356      arc tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc tangent (global 4X4 matrix of float)
+0:356      arc tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      Ceiling (global 4X4 matrix of float)
+0:356      Ceiling (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      clamp (global 4X4 matrix of float)
+0:356      clamp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      cosine (global 4X4 matrix of float)
+0:356      cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      hyp. cosine (global 4X4 matrix of float)
+0:356      hyp. cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      degrees (global 4X4 matrix of float)
+0:356      degrees (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      determinant (global float)
+0:356      determinant (temp float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      exp (global 4X4 matrix of float)
+0:356      exp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      exp2 (global 4X4 matrix of float)
+0:356      exp2 (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      findMSB (global int)
+0:356      findMSB (temp int)
 0:356        Constant:
 0:356          7 (const int)
-0:356      findLSB (global int)
+0:356      findLSB (temp int)
 0:356        Constant:
 0:356          7 (const int)
-0:356      Floor (global 4X4 matrix of float)
+0:356      Floor (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      mod (global 4X4 matrix of float)
+0:356      mod (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      Fraction (global 4X4 matrix of float)
+0:356      Fraction (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      frexp (global 4X4 matrix of float)
+0:356      frexp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      ldexp (global 4X4 matrix of float)
+0:356      ldexp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      mix (global 4X4 matrix of float)
+0:356      mix (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      log (global 4X4 matrix of float)
+0:356      log (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      matrix-scale (temp 4X4 matrix of float)
 0:356        log2 (temp 4X4 matrix of float)
 0:356          'inF0' (in 4X4 matrix of float)
 0:356        Constant:
 0:356          0.301030
-0:356      log2 (global 4X4 matrix of float)
+0:356      log2 (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      max (global 4X4 matrix of float)
+0:356      max (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      min (global 4X4 matrix of float)
+0:356      min (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      pow (global 4X4 matrix of float)
+0:356      pow (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      radians (global 4X4 matrix of float)
+0:356      radians (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      roundEven (global 4X4 matrix of float)
+0:356      roundEven (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      inverse sqrt (global 4X4 matrix of float)
+0:356      inverse sqrt (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      clamp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
@@ -1038,9 +1038,9 @@
 0:356          0.000000
 0:356        Constant:
 0:356          1.000000
-0:356      Sign (global 4X4 matrix of float)
+0:356      Sign (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      sine (global 4X4 matrix of float)
+0:356      sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      Sequence
 0:356        move second child to first child (temp 4X4 matrix of float)
@@ -1051,24 +1051,24 @@
 0:356          'inF2' (in 4X4 matrix of float)
 0:356          cosine (temp 4X4 matrix of float)
 0:356            'inF0' (in 4X4 matrix of float)
-0:356      hyp. sine (global 4X4 matrix of float)
+0:356      hyp. sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      smoothstep (global 4X4 matrix of float)
+0:356      smoothstep (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      sqrt (global 4X4 matrix of float)
+0:356      sqrt (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      step (global 4X4 matrix of float)
+0:356      step (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      tangent (global 4X4 matrix of float)
+0:356      tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      hyp. tangent (global 4X4 matrix of float)
+0:356      hyp. tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      transpose (global 4X4 matrix of float)
+0:356      transpose (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      trunc (global 4X4 matrix of float)
+0:356      trunc (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:359      Branch: Return with expression
 0:?         Constant:
@@ -1118,7 +1118,7 @@
 0:378      Sequence
 0:378        move second child to first child (temp float)
 0:378          'r3' (temp float)
-0:378          dot-product (global float)
+0:378          dot-product (temp float)
 0:378            'inFV0' (in 2-component vector of float)
 0:378            'inFV1' (in 2-component vector of float)
 0:378      Sequence
@@ -1181,7 +1181,7 @@
 0:385      Sequence
 0:385        move second child to first child (temp float)
 0:385          'r3' (temp float)
-0:385          dot-product (global float)
+0:385          dot-product (temp float)
 0:385            'inFV0' (in 3-component vector of float)
 0:385            'inFV1' (in 3-component vector of float)
 0:385      Sequence
@@ -1244,7 +1244,7 @@
 0:392      Sequence
 0:392        move second child to first child (temp float)
 0:392          'r3' (temp float)
-0:392          dot-product (global float)
+0:392          dot-product (temp float)
 0:392            'inFV0' (in 4-component vector of float)
 0:392            'inFV1' (in 4-component vector of float)
 0:392      Sequence
@@ -1322,13 +1322,13 @@
 0:407      Sequence
 0:407        move second child to first child (temp float)
 0:407          'r05' (temp float)
-0:407          dot-product (global float)
+0:407          dot-product (temp float)
 0:407            'inFV2' (in 2-component vector of float)
 0:407            'inFV2' (in 2-component vector of float)
 0:408      Sequence
 0:408        move second child to first child (temp float)
 0:408          'r06' (temp float)
-0:408          dot-product (global float)
+0:408          dot-product (temp float)
 0:408            'inFV3' (in 3-component vector of float)
 0:408            'inFV3' (in 3-component vector of float)
 0:409      Sequence
@@ -1396,6 +1396,7 @@
 
 Linked vertex stage:
 
+WARNING: Linking vertex stage: Entry point not found
 
 Shader version: 450
 0:? Sequence
@@ -1407,99 +1408,99 @@
 0:2      'inU0' (in uint)
 0:2      'inU1' (in uint)
 0:?     Sequence
-0:3      all (global bool)
+0:3      all (temp bool)
 0:3        'inF0' (in float)
-0:4      Absolute value (global float)
+0:4      Absolute value (temp float)
 0:4        'inF0' (in float)
-0:5      arc cosine (global float)
+0:5      arc cosine (temp float)
 0:5        'inF0' (in float)
-0:6      any (global bool)
+0:6      any (temp bool)
 0:6        'inF0' (in float)
-0:7      arc sine (global float)
+0:7      arc sine (temp float)
 0:7        'inF0' (in float)
-0:8      floatBitsToInt (global int)
+0:8      floatBitsToInt (temp int)
 0:8        'inF0' (in float)
-0:9      floatBitsToUint (global uint)
+0:9      floatBitsToUint (temp uint)
 0:9        'inF0' (in float)
-0:10      intBitsToFloat (global float)
+0:10      intBitsToFloat (temp float)
 0:10        'inU0' (in uint)
-0:12      arc tangent (global float)
+0:12      arc tangent (temp float)
 0:12        'inF0' (in float)
-0:13      arc tangent (global float)
+0:13      arc tangent (temp float)
 0:13        'inF0' (in float)
 0:13        'inF1' (in float)
-0:14      Ceiling (global float)
+0:14      Ceiling (temp float)
 0:14        'inF0' (in float)
-0:15      clamp (global float)
+0:15      clamp (temp float)
 0:15        'inF0' (in float)
 0:15        'inF1' (in float)
 0:15        'inF2' (in float)
-0:16      cosine (global float)
+0:16      cosine (temp float)
 0:16        'inF0' (in float)
-0:17      hyp. cosine (global float)
+0:17      hyp. cosine (temp float)
 0:17        'inF0' (in float)
-0:18      bitCount (global uint)
+0:18      bitCount (temp uint)
 0:18        Constant:
 0:18          7 (const uint)
-0:19      degrees (global float)
+0:19      degrees (temp float)
 0:19        'inF0' (in float)
-0:23      exp (global float)
+0:23      exp (temp float)
 0:23        'inF0' (in float)
-0:24      exp2 (global float)
+0:24      exp2 (temp float)
 0:24        'inF0' (in float)
-0:25      findMSB (global int)
+0:25      findMSB (temp int)
 0:25        Constant:
 0:25          7 (const int)
-0:26      findLSB (global int)
+0:26      findLSB (temp int)
 0:26        Constant:
 0:26          7 (const int)
-0:27      Floor (global float)
+0:27      Floor (temp float)
 0:27        'inF0' (in float)
-0:29      mod (global float)
+0:29      mod (temp float)
 0:29        'inF0' (in float)
 0:29        'inF1' (in float)
-0:30      Fraction (global float)
+0:30      Fraction (temp float)
 0:30        'inF0' (in float)
-0:31      frexp (global float)
+0:31      frexp (temp float)
 0:31        'inF0' (in float)
 0:31        'inF1' (in float)
-0:32      isinf (global bool)
+0:32      isinf (temp bool)
 0:32        'inF0' (in float)
-0:33      isnan (global bool)
+0:33      isnan (temp bool)
 0:33        'inF0' (in float)
-0:34      ldexp (global float)
+0:34      ldexp (temp float)
 0:34        'inF0' (in float)
 0:34        'inF1' (in float)
-0:35      mix (global float)
+0:35      mix (temp float)
 0:35        'inF0' (in float)
 0:35        'inF1' (in float)
 0:35        'inF2' (in float)
-0:36      log (global float)
+0:36      log (temp float)
 0:36        'inF0' (in float)
 0:37      component-wise multiply (temp float)
 0:37        log2 (temp float)
 0:37          'inF0' (in float)
 0:37        Constant:
 0:37          0.301030
-0:38      log2 (global float)
+0:38      log2 (temp float)
 0:38        'inF0' (in float)
-0:39      max (global float)
+0:39      max (temp float)
 0:39        'inF0' (in float)
 0:39        'inF1' (in float)
-0:40      min (global float)
+0:40      min (temp float)
 0:40        'inF0' (in float)
 0:40        'inF1' (in float)
-0:42      pow (global float)
+0:42      pow (temp float)
 0:42        'inF0' (in float)
 0:42        'inF1' (in float)
-0:43      radians (global float)
+0:43      radians (temp float)
 0:43        'inF0' (in float)
-0:44      bitFieldReverse (global uint)
+0:44      bitFieldReverse (temp uint)
 0:44        Constant:
 0:44          2 (const uint)
-0:45      roundEven (global float)
+0:45      roundEven (temp float)
 0:45        'inF0' (in float)
-0:46      inverse sqrt (global float)
+0:46      inverse sqrt (temp float)
 0:46        'inF0' (in float)
 0:47      clamp (temp float)
 0:47        'inF0' (in float)
@@ -1507,9 +1508,9 @@
 0:47          0.000000
 0:47        Constant:
 0:47          1.000000
-0:48      Sign (global float)
+0:48      Sign (temp float)
 0:48        'inF0' (in float)
-0:49      sine (global float)
+0:49      sine (temp float)
 0:49        'inF0' (in float)
 0:50      Sequence
 0:50        move second child to first child (temp float)
@@ -1520,22 +1521,22 @@
 0:50          'inF2' (in float)
 0:50          cosine (temp float)
 0:50            'inF0' (in float)
-0:51      hyp. sine (global float)
+0:51      hyp. sine (temp float)
 0:51        'inF0' (in float)
-0:52      smoothstep (global float)
+0:52      smoothstep (temp float)
 0:52        'inF0' (in float)
 0:52        'inF1' (in float)
 0:52        'inF2' (in float)
-0:53      sqrt (global float)
+0:53      sqrt (temp float)
 0:53        'inF0' (in float)
-0:54      step (global float)
+0:54      step (temp float)
 0:54        'inF0' (in float)
 0:54        'inF1' (in float)
-0:55      tangent (global float)
+0:55      tangent (temp float)
 0:55        'inF0' (in float)
-0:56      hyp. tangent (global float)
+0:56      hyp. tangent (temp float)
 0:56        'inF0' (in float)
-0:58      trunc (global float)
+0:58      trunc (temp float)
 0:58        'inF0' (in float)
 0:60      Branch: Return with expression
 0:60        Constant:
@@ -1557,123 +1558,123 @@
 0:70      'inU0' (in 2-component vector of uint)
 0:70      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:71      all (global bool)
+0:71      all (temp bool)
 0:71        'inF0' (in 2-component vector of float)
-0:72      Absolute value (global 2-component vector of float)
+0:72      Absolute value (temp 2-component vector of float)
 0:72        'inF0' (in 2-component vector of float)
-0:73      arc cosine (global 2-component vector of float)
+0:73      arc cosine (temp 2-component vector of float)
 0:73        'inF0' (in 2-component vector of float)
-0:74      any (global bool)
+0:74      any (temp bool)
 0:74        'inF0' (in 2-component vector of float)
-0:75      arc sine (global 2-component vector of float)
+0:75      arc sine (temp 2-component vector of float)
 0:75        'inF0' (in 2-component vector of float)
-0:76      floatBitsToInt (global 2-component vector of int)
+0:76      floatBitsToInt (temp 2-component vector of int)
 0:76        'inF0' (in 2-component vector of float)
-0:77      floatBitsToUint (global 2-component vector of uint)
+0:77      floatBitsToUint (temp 2-component vector of uint)
 0:77        'inF0' (in 2-component vector of float)
-0:78      intBitsToFloat (global 2-component vector of float)
+0:78      intBitsToFloat (temp 2-component vector of float)
 0:78        'inU0' (in 2-component vector of uint)
-0:80      arc tangent (global 2-component vector of float)
+0:80      arc tangent (temp 2-component vector of float)
 0:80        'inF0' (in 2-component vector of float)
-0:81      arc tangent (global 2-component vector of float)
+0:81      arc tangent (temp 2-component vector of float)
 0:81        'inF0' (in 2-component vector of float)
 0:81        'inF1' (in 2-component vector of float)
-0:82      Ceiling (global 2-component vector of float)
+0:82      Ceiling (temp 2-component vector of float)
 0:82        'inF0' (in 2-component vector of float)
-0:83      clamp (global 2-component vector of float)
+0:83      clamp (temp 2-component vector of float)
 0:83        'inF0' (in 2-component vector of float)
 0:83        'inF1' (in 2-component vector of float)
 0:83        'inF2' (in 2-component vector of float)
-0:84      cosine (global 2-component vector of float)
+0:84      cosine (temp 2-component vector of float)
 0:84        'inF0' (in 2-component vector of float)
-0:85      hyp. cosine (global 2-component vector of float)
+0:85      hyp. cosine (temp 2-component vector of float)
 0:85        'inF0' (in 2-component vector of float)
-0:?       bitCount (global 2-component vector of uint)
+0:?       bitCount (temp 2-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
-0:87      degrees (global 2-component vector of float)
+0:87      degrees (temp 2-component vector of float)
 0:87        'inF0' (in 2-component vector of float)
-0:88      distance (global float)
+0:88      distance (temp float)
 0:88        'inF0' (in 2-component vector of float)
 0:88        'inF1' (in 2-component vector of float)
-0:89      dot-product (global float)
+0:89      dot-product (temp float)
 0:89        'inF0' (in 2-component vector of float)
 0:89        'inF1' (in 2-component vector of float)
-0:93      exp (global 2-component vector of float)
+0:93      exp (temp 2-component vector of float)
 0:93        'inF0' (in 2-component vector of float)
-0:94      exp2 (global 2-component vector of float)
+0:94      exp2 (temp 2-component vector of float)
 0:94        'inF0' (in 2-component vector of float)
-0:95      face-forward (global 2-component vector of float)
+0:95      face-forward (temp 2-component vector of float)
 0:95        'inF0' (in 2-component vector of float)
 0:95        'inF1' (in 2-component vector of float)
 0:95        'inF2' (in 2-component vector of float)
-0:96      findMSB (global int)
+0:96      findMSB (temp int)
 0:96        Constant:
 0:96          7 (const int)
-0:97      findLSB (global int)
+0:97      findLSB (temp int)
 0:97        Constant:
 0:97          7 (const int)
-0:98      Floor (global 2-component vector of float)
+0:98      Floor (temp 2-component vector of float)
 0:98        'inF0' (in 2-component vector of float)
-0:100      mod (global 2-component vector of float)
+0:100      mod (temp 2-component vector of float)
 0:100        'inF0' (in 2-component vector of float)
 0:100        'inF1' (in 2-component vector of float)
-0:101      Fraction (global 2-component vector of float)
+0:101      Fraction (temp 2-component vector of float)
 0:101        'inF0' (in 2-component vector of float)
-0:102      frexp (global 2-component vector of float)
+0:102      frexp (temp 2-component vector of float)
 0:102        'inF0' (in 2-component vector of float)
 0:102        'inF1' (in 2-component vector of float)
-0:103      isinf (global 2-component vector of bool)
+0:103      isinf (temp 2-component vector of bool)
 0:103        'inF0' (in 2-component vector of float)
-0:104      isnan (global 2-component vector of bool)
+0:104      isnan (temp 2-component vector of bool)
 0:104        'inF0' (in 2-component vector of float)
-0:105      ldexp (global 2-component vector of float)
+0:105      ldexp (temp 2-component vector of float)
 0:105        'inF0' (in 2-component vector of float)
 0:105        'inF1' (in 2-component vector of float)
-0:106      mix (global 2-component vector of float)
+0:106      mix (temp 2-component vector of float)
 0:106        'inF0' (in 2-component vector of float)
 0:106        'inF1' (in 2-component vector of float)
 0:106        'inF2' (in 2-component vector of float)
-0:107      length (global float)
+0:107      length (temp float)
 0:107        'inF0' (in 2-component vector of float)
-0:108      log (global 2-component vector of float)
+0:108      log (temp 2-component vector of float)
 0:108        'inF0' (in 2-component vector of float)
 0:109      vector-scale (temp 2-component vector of float)
 0:109        log2 (temp 2-component vector of float)
 0:109          'inF0' (in 2-component vector of float)
 0:109        Constant:
 0:109          0.301030
-0:110      log2 (global 2-component vector of float)
+0:110      log2 (temp 2-component vector of float)
 0:110        'inF0' (in 2-component vector of float)
-0:111      max (global 2-component vector of float)
+0:111      max (temp 2-component vector of float)
 0:111        'inF0' (in 2-component vector of float)
 0:111        'inF1' (in 2-component vector of float)
-0:112      min (global 2-component vector of float)
+0:112      min (temp 2-component vector of float)
 0:112        'inF0' (in 2-component vector of float)
 0:112        'inF1' (in 2-component vector of float)
-0:114      normalize (global 2-component vector of float)
+0:114      normalize (temp 2-component vector of float)
 0:114        'inF0' (in 2-component vector of float)
-0:115      pow (global 2-component vector of float)
+0:115      pow (temp 2-component vector of float)
 0:115        'inF0' (in 2-component vector of float)
 0:115        'inF1' (in 2-component vector of float)
-0:116      radians (global 2-component vector of float)
+0:116      radians (temp 2-component vector of float)
 0:116        'inF0' (in 2-component vector of float)
-0:117      reflect (global 2-component vector of float)
+0:117      reflect (temp 2-component vector of float)
 0:117        'inF0' (in 2-component vector of float)
 0:117        'inF1' (in 2-component vector of float)
-0:118      refract (global 2-component vector of float)
+0:118      refract (temp 2-component vector of float)
 0:118        'inF0' (in 2-component vector of float)
 0:118        'inF1' (in 2-component vector of float)
 0:118        Constant:
 0:118          2.000000
-0:?       bitFieldReverse (global 2-component vector of uint)
+0:?       bitFieldReverse (temp 2-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
-0:120      roundEven (global 2-component vector of float)
+0:120      roundEven (temp 2-component vector of float)
 0:120        'inF0' (in 2-component vector of float)
-0:121      inverse sqrt (global 2-component vector of float)
+0:121      inverse sqrt (temp 2-component vector of float)
 0:121        'inF0' (in 2-component vector of float)
 0:122      clamp (temp 2-component vector of float)
 0:122        'inF0' (in 2-component vector of float)
@@ -1681,9 +1682,9 @@
 0:122          0.000000
 0:122        Constant:
 0:122          1.000000
-0:123      Sign (global 2-component vector of float)
+0:123      Sign (temp 2-component vector of float)
 0:123        'inF0' (in 2-component vector of float)
-0:124      sine (global 2-component vector of float)
+0:124      sine (temp 2-component vector of float)
 0:124        'inF0' (in 2-component vector of float)
 0:125      Sequence
 0:125        move second child to first child (temp 2-component vector of float)
@@ -1694,22 +1695,22 @@
 0:125          'inF2' (in 2-component vector of float)
 0:125          cosine (temp 2-component vector of float)
 0:125            'inF0' (in 2-component vector of float)
-0:126      hyp. sine (global 2-component vector of float)
+0:126      hyp. sine (temp 2-component vector of float)
 0:126        'inF0' (in 2-component vector of float)
-0:127      smoothstep (global 2-component vector of float)
+0:127      smoothstep (temp 2-component vector of float)
 0:127        'inF0' (in 2-component vector of float)
 0:127        'inF1' (in 2-component vector of float)
 0:127        'inF2' (in 2-component vector of float)
-0:128      sqrt (global 2-component vector of float)
+0:128      sqrt (temp 2-component vector of float)
 0:128        'inF0' (in 2-component vector of float)
-0:129      step (global 2-component vector of float)
+0:129      step (temp 2-component vector of float)
 0:129        'inF0' (in 2-component vector of float)
 0:129        'inF1' (in 2-component vector of float)
-0:130      tangent (global 2-component vector of float)
+0:130      tangent (temp 2-component vector of float)
 0:130        'inF0' (in 2-component vector of float)
-0:131      hyp. tangent (global 2-component vector of float)
+0:131      hyp. tangent (temp 2-component vector of float)
 0:131        'inF0' (in 2-component vector of float)
-0:133      trunc (global 2-component vector of float)
+0:133      trunc (temp 2-component vector of float)
 0:133        'inF0' (in 2-component vector of float)
 0:136      Branch: Return with expression
 0:?         Constant:
@@ -1723,128 +1724,128 @@
 0:140      'inU0' (in 3-component vector of uint)
 0:140      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:141      all (global bool)
+0:141      all (temp bool)
 0:141        'inF0' (in 3-component vector of float)
-0:142      Absolute value (global 3-component vector of float)
+0:142      Absolute value (temp 3-component vector of float)
 0:142        'inF0' (in 3-component vector of float)
-0:143      arc cosine (global 3-component vector of float)
+0:143      arc cosine (temp 3-component vector of float)
 0:143        'inF0' (in 3-component vector of float)
-0:144      any (global bool)
+0:144      any (temp bool)
 0:144        'inF0' (in 3-component vector of float)
-0:145      arc sine (global 3-component vector of float)
+0:145      arc sine (temp 3-component vector of float)
 0:145        'inF0' (in 3-component vector of float)
-0:146      floatBitsToInt (global 3-component vector of int)
+0:146      floatBitsToInt (temp 3-component vector of int)
 0:146        'inF0' (in 3-component vector of float)
-0:147      floatBitsToUint (global 3-component vector of uint)
+0:147      floatBitsToUint (temp 3-component vector of uint)
 0:147        'inF0' (in 3-component vector of float)
-0:148      intBitsToFloat (global 3-component vector of float)
+0:148      intBitsToFloat (temp 3-component vector of float)
 0:148        'inU0' (in 3-component vector of uint)
-0:150      arc tangent (global 3-component vector of float)
+0:150      arc tangent (temp 3-component vector of float)
 0:150        'inF0' (in 3-component vector of float)
-0:151      arc tangent (global 3-component vector of float)
+0:151      arc tangent (temp 3-component vector of float)
 0:151        'inF0' (in 3-component vector of float)
 0:151        'inF1' (in 3-component vector of float)
-0:152      Ceiling (global 3-component vector of float)
+0:152      Ceiling (temp 3-component vector of float)
 0:152        'inF0' (in 3-component vector of float)
-0:153      clamp (global 3-component vector of float)
+0:153      clamp (temp 3-component vector of float)
 0:153        'inF0' (in 3-component vector of float)
 0:153        'inF1' (in 3-component vector of float)
 0:153        'inF2' (in 3-component vector of float)
-0:154      cosine (global 3-component vector of float)
+0:154      cosine (temp 3-component vector of float)
 0:154        'inF0' (in 3-component vector of float)
-0:155      hyp. cosine (global 3-component vector of float)
+0:155      hyp. cosine (temp 3-component vector of float)
 0:155        'inF0' (in 3-component vector of float)
-0:?       bitCount (global 3-component vector of uint)
+0:?       bitCount (temp 3-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
 0:?           5 (const uint)
-0:157      cross-product (global 3-component vector of float)
+0:157      cross-product (temp 3-component vector of float)
 0:157        'inF0' (in 3-component vector of float)
 0:157        'inF1' (in 3-component vector of float)
-0:158      degrees (global 3-component vector of float)
+0:158      degrees (temp 3-component vector of float)
 0:158        'inF0' (in 3-component vector of float)
-0:159      distance (global float)
+0:159      distance (temp float)
 0:159        'inF0' (in 3-component vector of float)
 0:159        'inF1' (in 3-component vector of float)
-0:160      dot-product (global float)
+0:160      dot-product (temp float)
 0:160        'inF0' (in 3-component vector of float)
 0:160        'inF1' (in 3-component vector of float)
-0:164      exp (global 3-component vector of float)
+0:164      exp (temp 3-component vector of float)
 0:164        'inF0' (in 3-component vector of float)
-0:165      exp2 (global 3-component vector of float)
+0:165      exp2 (temp 3-component vector of float)
 0:165        'inF0' (in 3-component vector of float)
-0:166      face-forward (global 3-component vector of float)
+0:166      face-forward (temp 3-component vector of float)
 0:166        'inF0' (in 3-component vector of float)
 0:166        'inF1' (in 3-component vector of float)
 0:166        'inF2' (in 3-component vector of float)
-0:167      findMSB (global int)
+0:167      findMSB (temp int)
 0:167        Constant:
 0:167          7 (const int)
-0:168      findLSB (global int)
+0:168      findLSB (temp int)
 0:168        Constant:
 0:168          7 (const int)
-0:169      Floor (global 3-component vector of float)
+0:169      Floor (temp 3-component vector of float)
 0:169        'inF0' (in 3-component vector of float)
-0:171      mod (global 3-component vector of float)
+0:171      mod (temp 3-component vector of float)
 0:171        'inF0' (in 3-component vector of float)
 0:171        'inF1' (in 3-component vector of float)
-0:172      Fraction (global 3-component vector of float)
+0:172      Fraction (temp 3-component vector of float)
 0:172        'inF0' (in 3-component vector of float)
-0:173      frexp (global 3-component vector of float)
+0:173      frexp (temp 3-component vector of float)
 0:173        'inF0' (in 3-component vector of float)
 0:173        'inF1' (in 3-component vector of float)
-0:174      isinf (global 3-component vector of bool)
+0:174      isinf (temp 3-component vector of bool)
 0:174        'inF0' (in 3-component vector of float)
-0:175      isnan (global 3-component vector of bool)
+0:175      isnan (temp 3-component vector of bool)
 0:175        'inF0' (in 3-component vector of float)
-0:176      ldexp (global 3-component vector of float)
+0:176      ldexp (temp 3-component vector of float)
 0:176        'inF0' (in 3-component vector of float)
 0:176        'inF1' (in 3-component vector of float)
-0:177      mix (global 3-component vector of float)
+0:177      mix (temp 3-component vector of float)
 0:177        'inF0' (in 3-component vector of float)
 0:177        'inF1' (in 3-component vector of float)
 0:177        'inF2' (in 3-component vector of float)
-0:178      length (global float)
+0:178      length (temp float)
 0:178        'inF0' (in 3-component vector of float)
-0:179      log (global 3-component vector of float)
+0:179      log (temp 3-component vector of float)
 0:179        'inF0' (in 3-component vector of float)
 0:180      vector-scale (temp 3-component vector of float)
 0:180        log2 (temp 3-component vector of float)
 0:180          'inF0' (in 3-component vector of float)
 0:180        Constant:
 0:180          0.301030
-0:181      log2 (global 3-component vector of float)
+0:181      log2 (temp 3-component vector of float)
 0:181        'inF0' (in 3-component vector of float)
-0:182      max (global 3-component vector of float)
+0:182      max (temp 3-component vector of float)
 0:182        'inF0' (in 3-component vector of float)
 0:182        'inF1' (in 3-component vector of float)
-0:183      min (global 3-component vector of float)
+0:183      min (temp 3-component vector of float)
 0:183        'inF0' (in 3-component vector of float)
 0:183        'inF1' (in 3-component vector of float)
-0:185      normalize (global 3-component vector of float)
+0:185      normalize (temp 3-component vector of float)
 0:185        'inF0' (in 3-component vector of float)
-0:186      pow (global 3-component vector of float)
+0:186      pow (temp 3-component vector of float)
 0:186        'inF0' (in 3-component vector of float)
 0:186        'inF1' (in 3-component vector of float)
-0:187      radians (global 3-component vector of float)
+0:187      radians (temp 3-component vector of float)
 0:187        'inF0' (in 3-component vector of float)
-0:188      reflect (global 3-component vector of float)
+0:188      reflect (temp 3-component vector of float)
 0:188        'inF0' (in 3-component vector of float)
 0:188        'inF1' (in 3-component vector of float)
-0:189      refract (global 3-component vector of float)
+0:189      refract (temp 3-component vector of float)
 0:189        'inF0' (in 3-component vector of float)
 0:189        'inF1' (in 3-component vector of float)
 0:189        Constant:
 0:189          2.000000
-0:?       bitFieldReverse (global 3-component vector of uint)
+0:?       bitFieldReverse (temp 3-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
 0:?           3 (const uint)
-0:191      roundEven (global 3-component vector of float)
+0:191      roundEven (temp 3-component vector of float)
 0:191        'inF0' (in 3-component vector of float)
-0:192      inverse sqrt (global 3-component vector of float)
+0:192      inverse sqrt (temp 3-component vector of float)
 0:192        'inF0' (in 3-component vector of float)
 0:193      clamp (temp 3-component vector of float)
 0:193        'inF0' (in 3-component vector of float)
@@ -1852,9 +1853,9 @@
 0:193          0.000000
 0:193        Constant:
 0:193          1.000000
-0:194      Sign (global 3-component vector of float)
+0:194      Sign (temp 3-component vector of float)
 0:194        'inF0' (in 3-component vector of float)
-0:195      sine (global 3-component vector of float)
+0:195      sine (temp 3-component vector of float)
 0:195        'inF0' (in 3-component vector of float)
 0:196      Sequence
 0:196        move second child to first child (temp 3-component vector of float)
@@ -1865,22 +1866,22 @@
 0:196          'inF2' (in 3-component vector of float)
 0:196          cosine (temp 3-component vector of float)
 0:196            'inF0' (in 3-component vector of float)
-0:197      hyp. sine (global 3-component vector of float)
+0:197      hyp. sine (temp 3-component vector of float)
 0:197        'inF0' (in 3-component vector of float)
-0:198      smoothstep (global 3-component vector of float)
+0:198      smoothstep (temp 3-component vector of float)
 0:198        'inF0' (in 3-component vector of float)
 0:198        'inF1' (in 3-component vector of float)
 0:198        'inF2' (in 3-component vector of float)
-0:199      sqrt (global 3-component vector of float)
+0:199      sqrt (temp 3-component vector of float)
 0:199        'inF0' (in 3-component vector of float)
-0:200      step (global 3-component vector of float)
+0:200      step (temp 3-component vector of float)
 0:200        'inF0' (in 3-component vector of float)
 0:200        'inF1' (in 3-component vector of float)
-0:201      tangent (global 3-component vector of float)
+0:201      tangent (temp 3-component vector of float)
 0:201        'inF0' (in 3-component vector of float)
-0:202      hyp. tangent (global 3-component vector of float)
+0:202      hyp. tangent (temp 3-component vector of float)
 0:202        'inF0' (in 3-component vector of float)
-0:204      trunc (global 3-component vector of float)
+0:204      trunc (temp 3-component vector of float)
 0:204        'inF0' (in 3-component vector of float)
 0:207      Branch: Return with expression
 0:?         Constant:
@@ -1895,49 +1896,49 @@
 0:211      'inU0' (in 4-component vector of uint)
 0:211      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:212      all (global bool)
+0:212      all (temp bool)
 0:212        'inF0' (in 4-component vector of float)
-0:213      Absolute value (global 4-component vector of float)
+0:213      Absolute value (temp 4-component vector of float)
 0:213        'inF0' (in 4-component vector of float)
-0:214      arc cosine (global 4-component vector of float)
+0:214      arc cosine (temp 4-component vector of float)
 0:214        'inF0' (in 4-component vector of float)
-0:215      any (global bool)
+0:215      any (temp bool)
 0:215        'inF0' (in 4-component vector of float)
-0:216      arc sine (global 4-component vector of float)
+0:216      arc sine (temp 4-component vector of float)
 0:216        'inF0' (in 4-component vector of float)
-0:217      floatBitsToInt (global 4-component vector of int)
+0:217      floatBitsToInt (temp 4-component vector of int)
 0:217        'inF0' (in 4-component vector of float)
-0:218      floatBitsToUint (global 4-component vector of uint)
+0:218      floatBitsToUint (temp 4-component vector of uint)
 0:218        'inF0' (in 4-component vector of float)
-0:219      intBitsToFloat (global 4-component vector of float)
+0:219      intBitsToFloat (temp 4-component vector of float)
 0:219        'inU0' (in 4-component vector of uint)
-0:221      arc tangent (global 4-component vector of float)
+0:221      arc tangent (temp 4-component vector of float)
 0:221        'inF0' (in 4-component vector of float)
-0:222      arc tangent (global 4-component vector of float)
+0:222      arc tangent (temp 4-component vector of float)
 0:222        'inF0' (in 4-component vector of float)
 0:222        'inF1' (in 4-component vector of float)
-0:223      Ceiling (global 4-component vector of float)
+0:223      Ceiling (temp 4-component vector of float)
 0:223        'inF0' (in 4-component vector of float)
-0:224      clamp (global 4-component vector of float)
+0:224      clamp (temp 4-component vector of float)
 0:224        'inF0' (in 4-component vector of float)
 0:224        'inF1' (in 4-component vector of float)
 0:224        'inF2' (in 4-component vector of float)
-0:225      cosine (global 4-component vector of float)
+0:225      cosine (temp 4-component vector of float)
 0:225        'inF0' (in 4-component vector of float)
-0:226      hyp. cosine (global 4-component vector of float)
+0:226      hyp. cosine (temp 4-component vector of float)
 0:226        'inF0' (in 4-component vector of float)
-0:?       bitCount (global 4-component vector of uint)
+0:?       bitCount (temp 4-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
 0:?           5 (const uint)
 0:?           2 (const uint)
-0:228      degrees (global 4-component vector of float)
+0:228      degrees (temp 4-component vector of float)
 0:228        'inF0' (in 4-component vector of float)
-0:229      distance (global float)
+0:229      distance (temp float)
 0:229        'inF0' (in 4-component vector of float)
 0:229        'inF1' (in 4-component vector of float)
-0:230      dot-product (global float)
+0:230      dot-product (temp float)
 0:230        'inF0' (in 4-component vector of float)
 0:230        'inF1' (in 4-component vector of float)
 0:231      Construct vec4 (temp 4-component vector of float)
@@ -1960,82 +1961,82 @@
 0:231          'inF1' (in 4-component vector of float)
 0:231          Constant:
 0:231            3 (const int)
-0:235      exp (global 4-component vector of float)
+0:235      exp (temp 4-component vector of float)
 0:235        'inF0' (in 4-component vector of float)
-0:236      exp2 (global 4-component vector of float)
+0:236      exp2 (temp 4-component vector of float)
 0:236        'inF0' (in 4-component vector of float)
-0:237      face-forward (global 4-component vector of float)
+0:237      face-forward (temp 4-component vector of float)
 0:237        'inF0' (in 4-component vector of float)
 0:237        'inF1' (in 4-component vector of float)
 0:237        'inF2' (in 4-component vector of float)
-0:238      findMSB (global int)
+0:238      findMSB (temp int)
 0:238        Constant:
 0:238          7 (const int)
-0:239      findLSB (global int)
+0:239      findLSB (temp int)
 0:239        Constant:
 0:239          7 (const int)
-0:240      Floor (global 4-component vector of float)
+0:240      Floor (temp 4-component vector of float)
 0:240        'inF0' (in 4-component vector of float)
-0:242      mod (global 4-component vector of float)
+0:242      mod (temp 4-component vector of float)
 0:242        'inF0' (in 4-component vector of float)
 0:242        'inF1' (in 4-component vector of float)
-0:243      Fraction (global 4-component vector of float)
+0:243      Fraction (temp 4-component vector of float)
 0:243        'inF0' (in 4-component vector of float)
-0:244      frexp (global 4-component vector of float)
+0:244      frexp (temp 4-component vector of float)
 0:244        'inF0' (in 4-component vector of float)
 0:244        'inF1' (in 4-component vector of float)
-0:245      isinf (global 4-component vector of bool)
+0:245      isinf (temp 4-component vector of bool)
 0:245        'inF0' (in 4-component vector of float)
-0:246      isnan (global 4-component vector of bool)
+0:246      isnan (temp 4-component vector of bool)
 0:246        'inF0' (in 4-component vector of float)
-0:247      ldexp (global 4-component vector of float)
+0:247      ldexp (temp 4-component vector of float)
 0:247        'inF0' (in 4-component vector of float)
 0:247        'inF1' (in 4-component vector of float)
-0:248      mix (global 4-component vector of float)
+0:248      mix (temp 4-component vector of float)
 0:248        'inF0' (in 4-component vector of float)
 0:248        'inF1' (in 4-component vector of float)
 0:248        'inF2' (in 4-component vector of float)
-0:249      length (global float)
+0:249      length (temp float)
 0:249        'inF0' (in 4-component vector of float)
-0:250      log (global 4-component vector of float)
+0:250      log (temp 4-component vector of float)
 0:250        'inF0' (in 4-component vector of float)
 0:251      vector-scale (temp 4-component vector of float)
 0:251        log2 (temp 4-component vector of float)
 0:251          'inF0' (in 4-component vector of float)
 0:251        Constant:
 0:251          0.301030
-0:252      log2 (global 4-component vector of float)
+0:252      log2 (temp 4-component vector of float)
 0:252        'inF0' (in 4-component vector of float)
-0:253      max (global 4-component vector of float)
+0:253      max (temp 4-component vector of float)
 0:253        'inF0' (in 4-component vector of float)
 0:253        'inF1' (in 4-component vector of float)
-0:254      min (global 4-component vector of float)
+0:254      min (temp 4-component vector of float)
 0:254        'inF0' (in 4-component vector of float)
 0:254        'inF1' (in 4-component vector of float)
-0:256      normalize (global 4-component vector of float)
+0:256      normalize (temp 4-component vector of float)
 0:256        'inF0' (in 4-component vector of float)
-0:257      pow (global 4-component vector of float)
+0:257      pow (temp 4-component vector of float)
 0:257        'inF0' (in 4-component vector of float)
 0:257        'inF1' (in 4-component vector of float)
-0:258      radians (global 4-component vector of float)
+0:258      radians (temp 4-component vector of float)
 0:258        'inF0' (in 4-component vector of float)
-0:259      reflect (global 4-component vector of float)
+0:259      reflect (temp 4-component vector of float)
 0:259        'inF0' (in 4-component vector of float)
 0:259        'inF1' (in 4-component vector of float)
-0:260      refract (global 4-component vector of float)
+0:260      refract (temp 4-component vector of float)
 0:260        'inF0' (in 4-component vector of float)
 0:260        'inF1' (in 4-component vector of float)
 0:260        Constant:
 0:260          2.000000
-0:?       bitFieldReverse (global 4-component vector of uint)
+0:?       bitFieldReverse (temp 4-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
 0:?           3 (const uint)
 0:?           4 (const uint)
-0:262      roundEven (global 4-component vector of float)
+0:262      roundEven (temp 4-component vector of float)
 0:262        'inF0' (in 4-component vector of float)
-0:263      inverse sqrt (global 4-component vector of float)
+0:263      inverse sqrt (temp 4-component vector of float)
 0:263        'inF0' (in 4-component vector of float)
 0:264      clamp (temp 4-component vector of float)
 0:264        'inF0' (in 4-component vector of float)
@@ -2043,9 +2044,9 @@
 0:264          0.000000
 0:264        Constant:
 0:264          1.000000
-0:265      Sign (global 4-component vector of float)
+0:265      Sign (temp 4-component vector of float)
 0:265        'inF0' (in 4-component vector of float)
-0:266      sine (global 4-component vector of float)
+0:266      sine (temp 4-component vector of float)
 0:266        'inF0' (in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child (temp 4-component vector of float)
@@ -2056,22 +2057,22 @@
 0:267          'inF2' (in 4-component vector of float)
 0:267          cosine (temp 4-component vector of float)
 0:267            'inF0' (in 4-component vector of float)
-0:268      hyp. sine (global 4-component vector of float)
+0:268      hyp. sine (temp 4-component vector of float)
 0:268        'inF0' (in 4-component vector of float)
-0:269      smoothstep (global 4-component vector of float)
+0:269      smoothstep (temp 4-component vector of float)
 0:269        'inF0' (in 4-component vector of float)
 0:269        'inF1' (in 4-component vector of float)
 0:269        'inF2' (in 4-component vector of float)
-0:270      sqrt (global 4-component vector of float)
+0:270      sqrt (temp 4-component vector of float)
 0:270        'inF0' (in 4-component vector of float)
-0:271      step (global 4-component vector of float)
+0:271      step (temp 4-component vector of float)
 0:271        'inF0' (in 4-component vector of float)
 0:271        'inF1' (in 4-component vector of float)
-0:272      tangent (global 4-component vector of float)
+0:272      tangent (temp 4-component vector of float)
 0:272        'inF0' (in 4-component vector of float)
-0:273      hyp. tangent (global 4-component vector of float)
+0:273      hyp. tangent (temp 4-component vector of float)
 0:273        'inF0' (in 4-component vector of float)
-0:275      trunc (global 4-component vector of float)
+0:275      trunc (temp 4-component vector of float)
 0:275        'inF0' (in 4-component vector of float)
 0:278      Branch: Return with expression
 0:?         Constant:
@@ -2085,85 +2086,85 @@
 0:336      'inF1' (in 2X2 matrix of float)
 0:336      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:338      all (global bool)
+0:338      all (temp bool)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      Absolute value (global 2X2 matrix of float)
+0:338      Absolute value (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc cosine (global 2X2 matrix of float)
+0:338      arc cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      any (global bool)
+0:338      any (temp bool)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc sine (global 2X2 matrix of float)
+0:338      arc sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc tangent (global 2X2 matrix of float)
+0:338      arc tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      arc tangent (global 2X2 matrix of float)
+0:338      arc tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      Ceiling (global 2X2 matrix of float)
+0:338      Ceiling (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      clamp (global 2X2 matrix of float)
+0:338      clamp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      cosine (global 2X2 matrix of float)
+0:338      cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      hyp. cosine (global 2X2 matrix of float)
+0:338      hyp. cosine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      degrees (global 2X2 matrix of float)
+0:338      degrees (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      determinant (global float)
+0:338      determinant (temp float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      exp (global 2X2 matrix of float)
+0:338      exp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      exp2 (global 2X2 matrix of float)
+0:338      exp2 (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      findMSB (global int)
+0:338      findMSB (temp int)
 0:338        Constant:
 0:338          7 (const int)
-0:338      findLSB (global int)
+0:338      findLSB (temp int)
 0:338        Constant:
 0:338          7 (const int)
-0:338      Floor (global 2X2 matrix of float)
+0:338      Floor (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      mod (global 2X2 matrix of float)
+0:338      mod (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      Fraction (global 2X2 matrix of float)
+0:338      Fraction (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      frexp (global 2X2 matrix of float)
+0:338      frexp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      ldexp (global 2X2 matrix of float)
+0:338      ldexp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      mix (global 2X2 matrix of float)
+0:338      mix (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      log (global 2X2 matrix of float)
+0:338      log (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      matrix-scale (temp 2X2 matrix of float)
 0:338        log2 (temp 2X2 matrix of float)
 0:338          'inF0' (in 2X2 matrix of float)
 0:338        Constant:
 0:338          0.301030
-0:338      log2 (global 2X2 matrix of float)
+0:338      log2 (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      max (global 2X2 matrix of float)
+0:338      max (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      min (global 2X2 matrix of float)
+0:338      min (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      pow (global 2X2 matrix of float)
+0:338      pow (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      radians (global 2X2 matrix of float)
+0:338      radians (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      roundEven (global 2X2 matrix of float)
+0:338      roundEven (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      inverse sqrt (global 2X2 matrix of float)
+0:338      inverse sqrt (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      clamp (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
@@ -2171,9 +2172,9 @@
 0:338          0.000000
 0:338        Constant:
 0:338          1.000000
-0:338      Sign (global 2X2 matrix of float)
+0:338      Sign (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      sine (global 2X2 matrix of float)
+0:338      sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338      Sequence
 0:338        move second child to first child (temp 2X2 matrix of float)
@@ -2184,24 +2185,24 @@
 0:338          'inF2' (in 2X2 matrix of float)
 0:338          cosine (temp 2X2 matrix of float)
 0:338            'inF0' (in 2X2 matrix of float)
-0:338      hyp. sine (global 2X2 matrix of float)
+0:338      hyp. sine (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      smoothstep (global 2X2 matrix of float)
+0:338      smoothstep (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
 0:338        'inF2' (in 2X2 matrix of float)
-0:338      sqrt (global 2X2 matrix of float)
+0:338      sqrt (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      step (global 2X2 matrix of float)
+0:338      step (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:338        'inF1' (in 2X2 matrix of float)
-0:338      tangent (global 2X2 matrix of float)
+0:338      tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      hyp. tangent (global 2X2 matrix of float)
+0:338      hyp. tangent (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      transpose (global 2X2 matrix of float)
+0:338      transpose (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
-0:338      trunc (global 2X2 matrix of float)
+0:338      trunc (temp 2X2 matrix of float)
 0:338        'inF0' (in 2X2 matrix of float)
 0:341      Branch: Return with expression
 0:?         Constant:
@@ -2215,85 +2216,85 @@
 0:345      'inF1' (in 3X3 matrix of float)
 0:345      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:347      all (global bool)
+0:347      all (temp bool)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      Absolute value (global 3X3 matrix of float)
+0:347      Absolute value (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc cosine (global 3X3 matrix of float)
+0:347      arc cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      any (global bool)
+0:347      any (temp bool)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc sine (global 3X3 matrix of float)
+0:347      arc sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc tangent (global 3X3 matrix of float)
+0:347      arc tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      arc tangent (global 3X3 matrix of float)
+0:347      arc tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      Ceiling (global 3X3 matrix of float)
+0:347      Ceiling (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      clamp (global 3X3 matrix of float)
+0:347      clamp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      cosine (global 3X3 matrix of float)
+0:347      cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      hyp. cosine (global 3X3 matrix of float)
+0:347      hyp. cosine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      degrees (global 3X3 matrix of float)
+0:347      degrees (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      determinant (global float)
+0:347      determinant (temp float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      exp (global 3X3 matrix of float)
+0:347      exp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      exp2 (global 3X3 matrix of float)
+0:347      exp2 (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      findMSB (global int)
+0:347      findMSB (temp int)
 0:347        Constant:
 0:347          7 (const int)
-0:347      findLSB (global int)
+0:347      findLSB (temp int)
 0:347        Constant:
 0:347          7 (const int)
-0:347      Floor (global 3X3 matrix of float)
+0:347      Floor (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      mod (global 3X3 matrix of float)
+0:347      mod (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      Fraction (global 3X3 matrix of float)
+0:347      Fraction (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      frexp (global 3X3 matrix of float)
+0:347      frexp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      ldexp (global 3X3 matrix of float)
+0:347      ldexp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      mix (global 3X3 matrix of float)
+0:347      mix (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      log (global 3X3 matrix of float)
+0:347      log (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      matrix-scale (temp 3X3 matrix of float)
 0:347        log2 (temp 3X3 matrix of float)
 0:347          'inF0' (in 3X3 matrix of float)
 0:347        Constant:
 0:347          0.301030
-0:347      log2 (global 3X3 matrix of float)
+0:347      log2 (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      max (global 3X3 matrix of float)
+0:347      max (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      min (global 3X3 matrix of float)
+0:347      min (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      pow (global 3X3 matrix of float)
+0:347      pow (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      radians (global 3X3 matrix of float)
+0:347      radians (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      roundEven (global 3X3 matrix of float)
+0:347      roundEven (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      inverse sqrt (global 3X3 matrix of float)
+0:347      inverse sqrt (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      clamp (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
@@ -2301,9 +2302,9 @@
 0:347          0.000000
 0:347        Constant:
 0:347          1.000000
-0:347      Sign (global 3X3 matrix of float)
+0:347      Sign (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      sine (global 3X3 matrix of float)
+0:347      sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347      Sequence
 0:347        move second child to first child (temp 3X3 matrix of float)
@@ -2314,24 +2315,24 @@
 0:347          'inF2' (in 3X3 matrix of float)
 0:347          cosine (temp 3X3 matrix of float)
 0:347            'inF0' (in 3X3 matrix of float)
-0:347      hyp. sine (global 3X3 matrix of float)
+0:347      hyp. sine (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      smoothstep (global 3X3 matrix of float)
+0:347      smoothstep (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
 0:347        'inF2' (in 3X3 matrix of float)
-0:347      sqrt (global 3X3 matrix of float)
+0:347      sqrt (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      step (global 3X3 matrix of float)
+0:347      step (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:347        'inF1' (in 3X3 matrix of float)
-0:347      tangent (global 3X3 matrix of float)
+0:347      tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      hyp. tangent (global 3X3 matrix of float)
+0:347      hyp. tangent (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      transpose (global 3X3 matrix of float)
+0:347      transpose (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
-0:347      trunc (global 3X3 matrix of float)
+0:347      trunc (temp 3X3 matrix of float)
 0:347        'inF0' (in 3X3 matrix of float)
 0:350      Branch: Return with expression
 0:?         Constant:
@@ -2350,85 +2351,85 @@
 0:354      'inF1' (in 4X4 matrix of float)
 0:354      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:356      all (global bool)
+0:356      all (temp bool)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      Absolute value (global 4X4 matrix of float)
+0:356      Absolute value (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc cosine (global 4X4 matrix of float)
+0:356      arc cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      any (global bool)
+0:356      any (temp bool)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc sine (global 4X4 matrix of float)
+0:356      arc sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc tangent (global 4X4 matrix of float)
+0:356      arc tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      arc tangent (global 4X4 matrix of float)
+0:356      arc tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      Ceiling (global 4X4 matrix of float)
+0:356      Ceiling (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      clamp (global 4X4 matrix of float)
+0:356      clamp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      cosine (global 4X4 matrix of float)
+0:356      cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      hyp. cosine (global 4X4 matrix of float)
+0:356      hyp. cosine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      degrees (global 4X4 matrix of float)
+0:356      degrees (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      determinant (global float)
+0:356      determinant (temp float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      exp (global 4X4 matrix of float)
+0:356      exp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      exp2 (global 4X4 matrix of float)
+0:356      exp2 (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      findMSB (global int)
+0:356      findMSB (temp int)
 0:356        Constant:
 0:356          7 (const int)
-0:356      findLSB (global int)
+0:356      findLSB (temp int)
 0:356        Constant:
 0:356          7 (const int)
-0:356      Floor (global 4X4 matrix of float)
+0:356      Floor (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      mod (global 4X4 matrix of float)
+0:356      mod (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      Fraction (global 4X4 matrix of float)
+0:356      Fraction (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      frexp (global 4X4 matrix of float)
+0:356      frexp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      ldexp (global 4X4 matrix of float)
+0:356      ldexp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      mix (global 4X4 matrix of float)
+0:356      mix (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      log (global 4X4 matrix of float)
+0:356      log (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      matrix-scale (temp 4X4 matrix of float)
 0:356        log2 (temp 4X4 matrix of float)
 0:356          'inF0' (in 4X4 matrix of float)
 0:356        Constant:
 0:356          0.301030
-0:356      log2 (global 4X4 matrix of float)
+0:356      log2 (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      max (global 4X4 matrix of float)
+0:356      max (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      min (global 4X4 matrix of float)
+0:356      min (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      pow (global 4X4 matrix of float)
+0:356      pow (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      radians (global 4X4 matrix of float)
+0:356      radians (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      roundEven (global 4X4 matrix of float)
+0:356      roundEven (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      inverse sqrt (global 4X4 matrix of float)
+0:356      inverse sqrt (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      clamp (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
@@ -2436,9 +2437,9 @@
 0:356          0.000000
 0:356        Constant:
 0:356          1.000000
-0:356      Sign (global 4X4 matrix of float)
+0:356      Sign (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      sine (global 4X4 matrix of float)
+0:356      sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356      Sequence
 0:356        move second child to first child (temp 4X4 matrix of float)
@@ -2449,24 +2450,24 @@
 0:356          'inF2' (in 4X4 matrix of float)
 0:356          cosine (temp 4X4 matrix of float)
 0:356            'inF0' (in 4X4 matrix of float)
-0:356      hyp. sine (global 4X4 matrix of float)
+0:356      hyp. sine (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      smoothstep (global 4X4 matrix of float)
+0:356      smoothstep (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
 0:356        'inF2' (in 4X4 matrix of float)
-0:356      sqrt (global 4X4 matrix of float)
+0:356      sqrt (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      step (global 4X4 matrix of float)
+0:356      step (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:356        'inF1' (in 4X4 matrix of float)
-0:356      tangent (global 4X4 matrix of float)
+0:356      tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      hyp. tangent (global 4X4 matrix of float)
+0:356      hyp. tangent (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      transpose (global 4X4 matrix of float)
+0:356      transpose (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
-0:356      trunc (global 4X4 matrix of float)
+0:356      trunc (temp 4X4 matrix of float)
 0:356        'inF0' (in 4X4 matrix of float)
 0:359      Branch: Return with expression
 0:?         Constant:
@@ -2516,7 +2517,7 @@
 0:378      Sequence
 0:378        move second child to first child (temp float)
 0:378          'r3' (temp float)
-0:378          dot-product (global float)
+0:378          dot-product (temp float)
 0:378            'inFV0' (in 2-component vector of float)
 0:378            'inFV1' (in 2-component vector of float)
 0:378      Sequence
@@ -2579,7 +2580,7 @@
 0:385      Sequence
 0:385        move second child to first child (temp float)
 0:385          'r3' (temp float)
-0:385          dot-product (global float)
+0:385          dot-product (temp float)
 0:385            'inFV0' (in 3-component vector of float)
 0:385            'inFV1' (in 3-component vector of float)
 0:385      Sequence
@@ -2642,7 +2643,7 @@
 0:392      Sequence
 0:392        move second child to first child (temp float)
 0:392          'r3' (temp float)
-0:392          dot-product (global float)
+0:392          dot-product (temp float)
 0:392            'inFV0' (in 4-component vector of float)
 0:392            'inFV1' (in 4-component vector of float)
 0:392      Sequence
@@ -2720,13 +2721,13 @@
 0:407      Sequence
 0:407        move second child to first child (temp float)
 0:407          'r05' (temp float)
-0:407          dot-product (global float)
+0:407          dot-product (temp float)
 0:407            'inFV2' (in 2-component vector of float)
 0:407            'inFV2' (in 2-component vector of float)
 0:408      Sequence
 0:408        move second child to first child (temp float)
 0:408          'r06' (temp float)
-0:408          dot-product (global float)
+0:408          dot-product (temp float)
 0:408            'inFV3' (in 3-component vector of float)
 0:408            'inFV3' (in 3-component vector of float)
 0:409      Sequence
@@ -3011,6 +3012,7 @@
             1059:          76 ConstantComposite 1058 1058 1058 1058
 4(VertexShaderFunction):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 16(VertexShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
         11(inF0):      7(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out
index e8fab99..0c12435 100755
--- a/Test/baseResults/hlsl.layout.frag.out
+++ b/Test/baseResults/hlsl.layout.frag.out
@@ -33,6 +33,7 @@
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -119,6 +120,7 @@
               38:     17(int) SpecConstant 10
          4(main):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 11(PixelShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index 9c1b4ad..288a0f3 100644
--- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -158,6 +158,8 @@
 0:54                1 (const int)
 0:54        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex2dmsf4' (uniform texture2DMS)
 0:?     'g_tTex2dmsi4' (uniform itexture2DMS)
@@ -165,9 +167,7 @@
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -332,6 +332,8 @@
 0:54                1 (const int)
 0:54        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex2dmsf4' (uniform texture2DMS)
 0:?     'g_tTex2dmsi4' (uniform itexture2DMS)
@@ -339,9 +341,7 @@
 0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
 0:?     'g_tTex2dmsi4a' (uniform itexture2DMSArray)
 0:?     'g_tTex2dmsu4a' (uniform utexture2DMSArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index ed2951f..8c4f7c8 100644
--- a/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -158,6 +158,8 @@
 0:70                1 (const int)
 0:70        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -180,9 +182,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -347,6 +347,8 @@
 0:70                1 (const int)
 0:70        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -369,9 +371,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index 3a4b3fc..c8e8eb6 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -209,6 +209,8 @@
 0:75                1 (const int)
 0:75        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -231,9 +233,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -449,6 +449,8 @@
 0:75                1 (const int)
 0:75        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -471,9 +473,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index 9495c60..a86f0ae 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -195,6 +195,7 @@
 0:69                0 (const int)
 0:69        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -217,8 +218,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Pos' (out 4-component vector of float Position)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked vertex stage:
@@ -420,6 +420,7 @@
 0:69                0 (const int)
 0:69        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -442,8 +443,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Pos' (out 4-component vector of float Position)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 560d8f5..c80ddcf 100644
--- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -65,13 +65,13 @@
 0:37                1 (const int)
 0:37        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_tTexbf4_test' (layout(binding=0 rgba32f ) uniform samplerBuffer)
 0:?     'g_tTexbf4' (layout(rgba32f ) uniform samplerBuffer)
 0:?     'g_tTexbi4' (layout(rgba32i ) uniform isamplerBuffer)
 0:?     'g_tTexbu4' (layout(rgba32ui ) uniform usamplerBuffer)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -143,13 +143,13 @@
 0:37                1 (const int)
 0:37        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_tTexbf4_test' (layout(binding=0 rgba32f ) uniform samplerBuffer)
 0:?     'g_tTexbf4' (layout(rgba32f ) uniform samplerBuffer)
 0:?     'g_tTexbi4' (layout(rgba32i ) uniform isamplerBuffer)
 0:?     'g_tTexbu4' (layout(rgba32ui ) uniform usamplerBuffer)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index 6d64b94..c0cd152 100644
--- a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -68,13 +68,13 @@
 0:37                1 (const int)
 0:37        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_tTexbfs_test' (layout(binding=0 r32f ) uniform samplerBuffer)
 0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
 0:?     'g_tTexbis' (layout(r32i ) uniform isamplerBuffer)
 0:?     'g_tTexbus' (layout(r32ui ) uniform usamplerBuffer)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -149,13 +149,13 @@
 0:37                1 (const int)
 0:37        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_tTexbfs_test' (layout(binding=0 r32f ) uniform samplerBuffer)
 0:?     'g_tTexbfs' (layout(r32f ) uniform samplerBuffer)
 0:?     'g_tTexbis' (layout(r32i ) uniform isamplerBuffer)
 0:?     'g_tTexbus' (layout(r32ui ) uniform usamplerBuffer)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index 069e05d..9a14b65 100644
--- a/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -245,6 +245,8 @@
 0:75                1 (const int)
 0:75        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -267,9 +269,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -521,6 +521,8 @@
 0:75                1 (const int)
 0:75        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -543,9 +545,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index ed89ee8..fb58eff 100644
--- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -182,6 +182,8 @@
 0:68                1 (const int)
 0:68        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -204,9 +206,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -395,6 +395,8 @@
 0:68                1 (const int)
 0:68        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -417,9 +419,7 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index 7b26372..e9cc394 100644
--- a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -43,11 +43,11 @@
 0:31                0 (const int)
 0:31        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
 0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
 0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -97,11 +97,11 @@
 0:31                0 (const int)
 0:31        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_tBuffF' (layout(rgba32f ) uniform imageBuffer)
 0:?     'g_tBuffI' (layout(rgba32i ) uniform iimageBuffer)
 0:?     'g_tBuffU' (layout(rgba32ui ) uniform uimageBuffer)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index 8ac94d0..a81ddf5 100644
--- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -74,6 +74,8 @@
 0:56                1 (const int)
 0:56        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -90,9 +92,7 @@
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -173,6 +173,8 @@
 0:56                1 (const int)
 0:56        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -189,9 +191,7 @@
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index ca59015..b5435ba 100644
--- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -92,6 +92,8 @@
 0:61                1 (const int)
 0:61        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -108,9 +110,7 @@
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -209,6 +209,8 @@
 0:61                1 (const int)
 0:61        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -225,9 +227,7 @@
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
new file mode 100644
index 0000000..d9ae7d5
--- /dev/null
+++ b/Test/baseResults/hlsl.logical.binary.frag.out
@@ -0,0 +1,220 @@
+hlsl.logical.binary.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:12    Function Parameters: 
+0:?     Sequence
+0:13      Test condition and select (temp void)
+0:13        Condition
+0:13        logical-and (temp bool)
+0:13          Convert int to bool (temp bool)
+0:13            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:13              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:13              Constant:
+0:13                0 (const uint)
+0:13          Convert int to bool (temp bool)
+0:13            Convert float to int (temp int)
+0:13              fval: direct index for structure (layout(offset=32 ) uniform float)
+0:13                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:13                Constant:
+0:13                  2 (const uint)
+0:13        true case is null
+0:14      Test condition and select (temp void)
+0:14        Condition
+0:14        logical-or (temp bool)
+0:14          Convert int to bool (temp bool)
+0:14            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:14              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:14              Constant:
+0:14                0 (const uint)
+0:14          Convert int to bool (temp bool)
+0:14            Convert float to int (temp int)
+0:14              fval: direct index for structure (layout(offset=32 ) uniform float)
+0:14                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:14                Constant:
+0:14                  2 (const uint)
+0:14        true case is null
+0:17      move second child to first child (temp 4-component vector of float)
+0:17        Color: direct index for structure (temp 4-component vector of float)
+0:17          'psout' (temp structure{temp 4-component vector of float Color})
+0:17          Constant:
+0:17            0 (const int)
+0:17        Constant:
+0:17          1.000000
+0:17          1.000000
+0:17          1.000000
+0:17          1.000000
+0:18      Sequence
+0:18        Sequence
+0:18          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:18            Color: direct index for structure (temp 4-component vector of float)
+0:18              'psout' (temp structure{temp 4-component vector of float Color})
+0:18              Constant:
+0:18                0 (const int)
+0:18        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:12    Function Parameters: 
+0:?     Sequence
+0:13      Test condition and select (temp void)
+0:13        Condition
+0:13        logical-and (temp bool)
+0:13          Convert int to bool (temp bool)
+0:13            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:13              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:13              Constant:
+0:13                0 (const uint)
+0:13          Convert int to bool (temp bool)
+0:13            Convert float to int (temp int)
+0:13              fval: direct index for structure (layout(offset=32 ) uniform float)
+0:13                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:13                Constant:
+0:13                  2 (const uint)
+0:13        true case is null
+0:14      Test condition and select (temp void)
+0:14        Condition
+0:14        logical-or (temp bool)
+0:14          Convert int to bool (temp bool)
+0:14            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:14              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:14              Constant:
+0:14                0 (const uint)
+0:14          Convert int to bool (temp bool)
+0:14            Convert float to int (temp int)
+0:14              fval: direct index for structure (layout(offset=32 ) uniform float)
+0:14                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:14                Constant:
+0:14                  2 (const uint)
+0:14        true case is null
+0:17      move second child to first child (temp 4-component vector of float)
+0:17        Color: direct index for structure (temp 4-component vector of float)
+0:17          'psout' (temp structure{temp 4-component vector of float Color})
+0:17          Constant:
+0:17            0 (const int)
+0:17        Constant:
+0:17          1.000000
+0:17          1.000000
+0:17          1.000000
+0:17          1.000000
+0:18      Sequence
+0:18        Sequence
+0:18          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:18            Color: direct index for structure (temp 4-component vector of float)
+0:18              'psout' (temp structure{temp 4-component vector of float Color})
+0:18              Constant:
+0:18                0 (const int)
+0:18        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 57
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 53
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 11  "$Global"
+                              MemberName 11($Global) 0  "ival"
+                              MemberName 11($Global) 1  "ival4"
+                              MemberName 11($Global) 2  "fval"
+                              MemberName 11($Global) 3  "fval4"
+                              Name 13  ""
+                              Name 45  "PS_OUTPUT"
+                              MemberName 45(PS_OUTPUT) 0  "Color"
+                              Name 47  "psout"
+                              Name 53  "Color"
+                              MemberDecorate 11($Global) 0 Offset 0
+                              MemberDecorate 11($Global) 1 Offset 16
+                              MemberDecorate 11($Global) 2 Offset 32
+                              MemberDecorate 11($Global) 3 Offset 48
+                              Decorate 11($Global) Block
+                              Decorate 13 DescriptorSet 0
+                              Decorate 53(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeBool
+               7:             TypeInt 32 1
+               8:             TypeVector 7(int) 4
+               9:             TypeFloat 32
+              10:             TypeVector 9(float) 4
+     11($Global):             TypeStruct 7(int) 8(ivec4) 9(float) 10(fvec4)
+              12:             TypePointer Uniform 11($Global)
+              13:     12(ptr) Variable Uniform
+              14:      7(int) Constant 0
+              15:             TypePointer Uniform 7(int)
+              18:             TypeInt 32 0
+              19:     18(int) Constant 0
+              23:      7(int) Constant 2
+              24:             TypePointer Uniform 9(float)
+   45(PS_OUTPUT):             TypeStruct 10(fvec4)
+              46:             TypePointer Function 45(PS_OUTPUT)
+              48:    9(float) Constant 1065353216
+              49:   10(fvec4) ConstantComposite 48 48 48 48
+              50:             TypePointer Function 10(fvec4)
+              52:             TypePointer Output 10(fvec4)
+       53(Color):     52(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       47(psout):     46(ptr) Variable Function
+              16:     15(ptr) AccessChain 13 14
+              17:      7(int) Load 16
+              20:     6(bool) INotEqual 17 19
+                              SelectionMerge 22 None
+                              BranchConditional 20 21 22
+              21:               Label
+              25:     24(ptr)   AccessChain 13 23
+              26:    9(float)   Load 25
+              27:      7(int)   ConvertFToS 26
+              28:     6(bool)   INotEqual 27 19
+                                Branch 22
+              22:             Label
+              29:     6(bool) Phi 20 5 28 21
+                              SelectionMerge 31 None
+                              BranchConditional 29 30 31
+              30:               Label
+                                Branch 31
+              31:             Label
+              32:     15(ptr) AccessChain 13 14
+              33:      7(int) Load 32
+              34:     6(bool) INotEqual 33 19
+              35:     6(bool) LogicalNot 34
+                              SelectionMerge 37 None
+                              BranchConditional 35 36 37
+              36:               Label
+              38:     24(ptr)   AccessChain 13 23
+              39:    9(float)   Load 38
+              40:      7(int)   ConvertFToS 39
+              41:     6(bool)   INotEqual 40 19
+                                Branch 37
+              37:             Label
+              42:     6(bool) Phi 34 31 41 36
+                              SelectionMerge 44 None
+                              BranchConditional 42 43 44
+              43:               Label
+                                Branch 44
+              44:             Label
+              51:     50(ptr) AccessChain 47(psout) 14
+                              Store 51 49
+              54:     50(ptr) AccessChain 47(psout) 14
+              55:   10(fvec4) Load 54
+                              Store 53(Color) 55
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
new file mode 100644
index 0000000..32b5a38
--- /dev/null
+++ b/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -0,0 +1,412 @@
+hlsl.logical.binary.vec.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:10  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:10    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of bool)
+0:11          'r00' (temp 4-component vector of bool)
+0:11          Negate conditional (temp 4-component vector of bool)
+0:11            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:11              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:11              Constant:
+0:11                0 (const uint)
+0:12      Sequence
+0:12        move second child to first child (temp 4-component vector of bool)
+0:12          'r01' (temp 4-component vector of bool)
+0:12          logical-and (temp 4-component vector of bool)
+0:12            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:12              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:12              Constant:
+0:12                0 (const uint)
+0:12            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:12              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:12              Constant:
+0:12                1 (const uint)
+0:13      Sequence
+0:13        move second child to first child (temp 4-component vector of bool)
+0:13          'r02' (temp 4-component vector of bool)
+0:13          logical-or (temp 4-component vector of bool)
+0:13            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:13              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:13              Constant:
+0:13                0 (const uint)
+0:13            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:13              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:13              Constant:
+0:13                1 (const uint)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of bool)
+0:15          'r10' (temp 4-component vector of bool)
+0:15          logical-and (temp 4-component vector of bool)
+0:15            Construct bvec4 (layout(offset=16 ) uniform 4-component vector of bool)
+0:15              b1a: direct index for structure (layout(offset=32 ) uniform bool)
+0:15                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:15                Constant:
+0:15                  2 (const uint)
+0:15            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:15              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:15              Constant:
+0:15                1 (const uint)
+0:16      Sequence
+0:16        move second child to first child (temp 4-component vector of bool)
+0:16          'r11' (temp 4-component vector of bool)
+0:16          logical-or (temp 4-component vector of bool)
+0:16            Construct bvec4 (layout(offset=16 ) uniform 4-component vector of bool)
+0:16              b1a: direct index for structure (layout(offset=32 ) uniform bool)
+0:16                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:16                Constant:
+0:16                  2 (const uint)
+0:16            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:16              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:16              Constant:
+0:16                1 (const uint)
+0:18      Sequence
+0:18        move second child to first child (temp 4-component vector of bool)
+0:18          'r20' (temp 4-component vector of bool)
+0:18          logical-and (temp 4-component vector of bool)
+0:18            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:18              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:18              Constant:
+0:18                0 (const uint)
+0:18            Construct bvec4 (layout(offset=0 ) uniform 4-component vector of bool)
+0:18              b1b: direct index for structure (layout(offset=36 ) uniform bool)
+0:18                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:18                Constant:
+0:18                  3 (const uint)
+0:19      Sequence
+0:19        move second child to first child (temp 4-component vector of bool)
+0:19          'r21' (temp 4-component vector of bool)
+0:19          logical-or (temp 4-component vector of bool)
+0:19            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:19              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            Construct bvec4 (layout(offset=0 ) uniform 4-component vector of bool)
+0:19              b1b: direct index for structure (layout(offset=36 ) uniform bool)
+0:19                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:19                Constant:
+0:19                  3 (const uint)
+0:22      move second child to first child (temp 4-component vector of float)
+0:22        Color: direct index for structure (temp 4-component vector of float)
+0:22          'psout' (temp structure{temp 4-component vector of float Color})
+0:22          Constant:
+0:22            0 (const int)
+0:22        Convert bool to float (temp 4-component vector of float)
+0:22          logical-or (temp 4-component vector of bool)
+0:22            logical-or (temp 4-component vector of bool)
+0:22              logical-or (temp 4-component vector of bool)
+0:22                logical-or (temp 4-component vector of bool)
+0:22                  logical-or (temp 4-component vector of bool)
+0:22                    logical-or (temp 4-component vector of bool)
+0:22                      'r00' (temp 4-component vector of bool)
+0:22                      'r01' (temp 4-component vector of bool)
+0:22                    'r02' (temp 4-component vector of bool)
+0:22                  'r10' (temp 4-component vector of bool)
+0:22                'r11' (temp 4-component vector of bool)
+0:22              'r20' (temp 4-component vector of bool)
+0:22            'r21' (temp 4-component vector of bool)
+0:23      Sequence
+0:23        Sequence
+0:23          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:23            Color: direct index for structure (temp 4-component vector of float)
+0:23              'psout' (temp structure{temp 4-component vector of float Color})
+0:23              Constant:
+0:23                0 (const int)
+0:23        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:10  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:10    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child (temp 4-component vector of bool)
+0:11          'r00' (temp 4-component vector of bool)
+0:11          Negate conditional (temp 4-component vector of bool)
+0:11            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:11              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:11              Constant:
+0:11                0 (const uint)
+0:12      Sequence
+0:12        move second child to first child (temp 4-component vector of bool)
+0:12          'r01' (temp 4-component vector of bool)
+0:12          logical-and (temp 4-component vector of bool)
+0:12            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:12              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:12              Constant:
+0:12                0 (const uint)
+0:12            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:12              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:12              Constant:
+0:12                1 (const uint)
+0:13      Sequence
+0:13        move second child to first child (temp 4-component vector of bool)
+0:13          'r02' (temp 4-component vector of bool)
+0:13          logical-or (temp 4-component vector of bool)
+0:13            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:13              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:13              Constant:
+0:13                0 (const uint)
+0:13            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:13              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:13              Constant:
+0:13                1 (const uint)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of bool)
+0:15          'r10' (temp 4-component vector of bool)
+0:15          logical-and (temp 4-component vector of bool)
+0:15            Construct bvec4 (layout(offset=16 ) uniform 4-component vector of bool)
+0:15              b1a: direct index for structure (layout(offset=32 ) uniform bool)
+0:15                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:15                Constant:
+0:15                  2 (const uint)
+0:15            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:15              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:15              Constant:
+0:15                1 (const uint)
+0:16      Sequence
+0:16        move second child to first child (temp 4-component vector of bool)
+0:16          'r11' (temp 4-component vector of bool)
+0:16          logical-or (temp 4-component vector of bool)
+0:16            Construct bvec4 (layout(offset=16 ) uniform 4-component vector of bool)
+0:16              b1a: direct index for structure (layout(offset=32 ) uniform bool)
+0:16                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:16                Constant:
+0:16                  2 (const uint)
+0:16            b4b: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:16              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:16              Constant:
+0:16                1 (const uint)
+0:18      Sequence
+0:18        move second child to first child (temp 4-component vector of bool)
+0:18          'r20' (temp 4-component vector of bool)
+0:18          logical-and (temp 4-component vector of bool)
+0:18            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:18              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:18              Constant:
+0:18                0 (const uint)
+0:18            Construct bvec4 (layout(offset=0 ) uniform 4-component vector of bool)
+0:18              b1b: direct index for structure (layout(offset=36 ) uniform bool)
+0:18                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:18                Constant:
+0:18                  3 (const uint)
+0:19      Sequence
+0:19        move second child to first child (temp 4-component vector of bool)
+0:19          'r21' (temp 4-component vector of bool)
+0:19          logical-or (temp 4-component vector of bool)
+0:19            b4a: direct index for structure (layout(offset=0 ) uniform 4-component vector of bool)
+0:19              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            Construct bvec4 (layout(offset=0 ) uniform 4-component vector of bool)
+0:19              b1b: direct index for structure (layout(offset=36 ) uniform bool)
+0:19                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+0:19                Constant:
+0:19                  3 (const uint)
+0:22      move second child to first child (temp 4-component vector of float)
+0:22        Color: direct index for structure (temp 4-component vector of float)
+0:22          'psout' (temp structure{temp 4-component vector of float Color})
+0:22          Constant:
+0:22            0 (const int)
+0:22        Convert bool to float (temp 4-component vector of float)
+0:22          logical-or (temp 4-component vector of bool)
+0:22            logical-or (temp 4-component vector of bool)
+0:22              logical-or (temp 4-component vector of bool)
+0:22                logical-or (temp 4-component vector of bool)
+0:22                  logical-or (temp 4-component vector of bool)
+0:22                    logical-or (temp 4-component vector of bool)
+0:22                      'r00' (temp 4-component vector of bool)
+0:22                      'r01' (temp 4-component vector of bool)
+0:22                    'r02' (temp 4-component vector of bool)
+0:22                  'r10' (temp 4-component vector of bool)
+0:22                'r11' (temp 4-component vector of bool)
+0:22              'r20' (temp 4-component vector of bool)
+0:22            'r21' (temp 4-component vector of bool)
+0:23      Sequence
+0:23        Sequence
+0:23          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:23            Color: direct index for structure (temp 4-component vector of float)
+0:23              'psout' (temp structure{temp 4-component vector of float Color})
+0:23              Constant:
+0:23                0 (const int)
+0:23        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of bool b4a, layout(offset=16 ) uniform 4-component vector of bool b4b, layout(offset=32 ) uniform bool b1a, layout(offset=36 ) uniform bool b1b})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 115
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 111
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "r00"
+                              Name 12  "$Global"
+                              MemberName 12($Global) 0  "b4a"
+                              MemberName 12($Global) 1  "b4b"
+                              MemberName 12($Global) 2  "b1a"
+                              MemberName 12($Global) 3  "b1b"
+                              Name 14  ""
+                              Name 24  "r01"
+                              Name 33  "r02"
+                              Name 41  "r10"
+                              Name 52  "r11"
+                              Name 61  "r20"
+                              Name 73  "r21"
+                              Name 87  "PS_OUTPUT"
+                              MemberName 87(PS_OUTPUT) 0  "Color"
+                              Name 89  "psout"
+                              Name 111  "Color"
+                              MemberDecorate 12($Global) 0 Offset 0
+                              MemberDecorate 12($Global) 1 Offset 16
+                              MemberDecorate 12($Global) 2 Offset 32
+                              MemberDecorate 12($Global) 3 Offset 36
+                              Decorate 12($Global) Block
+                              Decorate 14 DescriptorSet 0
+                              Decorate 111(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeBool
+               7:             TypeVector 6(bool) 4
+               8:             TypePointer Function 7(bvec4)
+              10:             TypeInt 32 0
+              11:             TypeVector 10(int) 4
+     12($Global):             TypeStruct 11(ivec4) 11(ivec4) 10(int) 10(int)
+              13:             TypePointer Uniform 12($Global)
+              14:     13(ptr) Variable Uniform
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:             TypePointer Uniform 11(ivec4)
+              20:     10(int) Constant 0
+              21:   11(ivec4) ConstantComposite 20 20 20 20
+              28:     15(int) Constant 1
+              42:     15(int) Constant 2
+              43:             TypePointer Uniform 10(int)
+              67:     15(int) Constant 3
+              85:             TypeFloat 32
+              86:             TypeVector 85(float) 4
+   87(PS_OUTPUT):             TypeStruct 86(fvec4)
+              88:             TypePointer Function 87(PS_OUTPUT)
+             103:   85(float) Constant 0
+             104:   85(float) Constant 1065353216
+             105:   86(fvec4) ConstantComposite 103 103 103 103
+             106:   86(fvec4) ConstantComposite 104 104 104 104
+             108:             TypePointer Function 86(fvec4)
+             110:             TypePointer Output 86(fvec4)
+      111(Color):    110(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+          9(r00):      8(ptr) Variable Function
+         24(r01):      8(ptr) Variable Function
+         33(r02):      8(ptr) Variable Function
+         41(r10):      8(ptr) Variable Function
+         52(r11):      8(ptr) Variable Function
+         61(r20):      8(ptr) Variable Function
+         73(r21):      8(ptr) Variable Function
+       89(psout):     88(ptr) Variable Function
+              18:     17(ptr) AccessChain 14 16
+              19:   11(ivec4) Load 18
+              22:    7(bvec4) INotEqual 19 21
+              23:    7(bvec4) LogicalNot 22
+                              Store 9(r00) 23
+              25:     17(ptr) AccessChain 14 16
+              26:   11(ivec4) Load 25
+              27:    7(bvec4) INotEqual 26 21
+              29:     17(ptr) AccessChain 14 28
+              30:   11(ivec4) Load 29
+              31:    7(bvec4) INotEqual 30 21
+              32:    7(bvec4) LogicalAnd 27 31
+                              Store 24(r01) 32
+              34:     17(ptr) AccessChain 14 16
+              35:   11(ivec4) Load 34
+              36:    7(bvec4) INotEqual 35 21
+              37:     17(ptr) AccessChain 14 28
+              38:   11(ivec4) Load 37
+              39:    7(bvec4) INotEqual 38 21
+              40:    7(bvec4) LogicalOr 36 39
+                              Store 33(r02) 40
+              44:     43(ptr) AccessChain 14 42
+              45:     10(int) Load 44
+              46:     6(bool) INotEqual 45 20
+              47:    7(bvec4) CompositeConstruct 46 46 46 46
+              48:     17(ptr) AccessChain 14 28
+              49:   11(ivec4) Load 48
+              50:    7(bvec4) INotEqual 49 21
+              51:    7(bvec4) LogicalAnd 47 50
+                              Store 41(r10) 51
+              53:     43(ptr) AccessChain 14 42
+              54:     10(int) Load 53
+              55:     6(bool) INotEqual 54 20
+              56:    7(bvec4) CompositeConstruct 55 55 55 55
+              57:     17(ptr) AccessChain 14 28
+              58:   11(ivec4) Load 57
+              59:    7(bvec4) INotEqual 58 21
+              60:    7(bvec4) LogicalOr 56 59
+                              Store 52(r11) 60
+              62:     17(ptr) AccessChain 14 16
+              63:   11(ivec4) Load 62
+              64:    7(bvec4) INotEqual 63 21
+                              SelectionMerge 66 None
+                              BranchConditional 64 65 66
+              65:               Label
+              68:     43(ptr)   AccessChain 14 67
+              69:     10(int)   Load 68
+              70:     6(bool)   INotEqual 69 20
+              71:    7(bvec4)   CompositeConstruct 70 70 70 70
+                                Branch 66
+              66:             Label
+              72:     6(bool) Phi 64 5 71 65
+                              Store 61(r20) 72
+              74:     17(ptr) AccessChain 14 16
+              75:   11(ivec4) Load 74
+              76:    7(bvec4) INotEqual 75 21
+              77:     6(bool) LogicalNot 76
+                              SelectionMerge 79 None
+                              BranchConditional 77 78 79
+              78:               Label
+              80:     43(ptr)   AccessChain 14 67
+              81:     10(int)   Load 80
+              82:     6(bool)   INotEqual 81 20
+              83:    7(bvec4)   CompositeConstruct 82 82 82 82
+                                Branch 79
+              79:             Label
+              84:     6(bool) Phi 76 66 83 78
+                              Store 73(r21) 84
+              90:    7(bvec4) Load 9(r00)
+              91:    7(bvec4) Load 24(r01)
+              92:    7(bvec4) LogicalOr 90 91
+              93:    7(bvec4) Load 33(r02)
+              94:    7(bvec4) LogicalOr 92 93
+              95:    7(bvec4) Load 41(r10)
+              96:    7(bvec4) LogicalOr 94 95
+              97:    7(bvec4) Load 52(r11)
+              98:    7(bvec4) LogicalOr 96 97
+              99:    7(bvec4) Load 61(r20)
+             100:    7(bvec4) LogicalOr 98 99
+             101:    7(bvec4) Load 73(r21)
+             102:    7(bvec4) LogicalOr 100 101
+             107:   86(fvec4) Select 102 106 105
+             109:    108(ptr) AccessChain 89(psout) 16
+                              Store 109 107
+             112:    108(ptr) AccessChain 89(psout) 16
+             113:   86(fvec4) Load 112
+                              Store 111(Color) 113
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.logical.unary.frag.out b/Test/baseResults/hlsl.logical.unary.frag.out
new file mode 100644
index 0000000..1aaa69a
--- /dev/null
+++ b/Test/baseResults/hlsl.logical.unary.frag.out
@@ -0,0 +1,292 @@
+hlsl.logical.unary.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:12    Function Parameters: 
+0:?     Sequence
+0:13      Negate conditional (temp bool)
+0:13        Convert int to bool (temp bool)
+0:13          ival: direct index for structure (layout(offset=0 ) uniform int)
+0:13            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:13            Constant:
+0:13              0 (const uint)
+0:14      Negate conditional (temp 4-component vector of bool)
+0:14        Convert int to bool (temp 4-component vector of bool)
+0:14          ival4: direct index for structure (layout(offset=16 ) uniform 4-component vector of int)
+0:14            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:14            Constant:
+0:14              1 (const uint)
+0:16      Negate conditional (temp bool)
+0:16        Convert float to bool (temp bool)
+0:16          fval: direct index for structure (layout(offset=32 ) uniform float)
+0:16            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:16            Constant:
+0:16              2 (const uint)
+0:17      Negate conditional (temp 4-component vector of bool)
+0:17        Convert float to bool (temp 4-component vector of bool)
+0:17          fval4: direct index for structure (layout(offset=48 ) uniform 4-component vector of float)
+0:17            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:17            Constant:
+0:17              3 (const uint)
+0:19      Test condition and select (temp void)
+0:19        Condition
+0:19        ival: direct index for structure (layout(offset=0 ) uniform int)
+0:19          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:19          Constant:
+0:19            0 (const uint)
+0:19        true case is null
+0:20      Test condition and select (temp void)
+0:20        Condition
+0:20        fval: direct index for structure (layout(offset=32 ) uniform float)
+0:20          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:20          Constant:
+0:20            2 (const uint)
+0:20        true case is null
+0:21      Test condition and select (temp void)
+0:21        Condition
+0:21        Negate conditional (temp bool)
+0:21          Convert int to bool (temp bool)
+0:21            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:21              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:21              Constant:
+0:21                0 (const uint)
+0:21        true case is null
+0:22      Test condition and select (temp void)
+0:22        Condition
+0:22        Negate conditional (temp bool)
+0:22          Convert float to bool (temp bool)
+0:22            fval: direct index for structure (layout(offset=32 ) uniform float)
+0:22              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:22              Constant:
+0:22                2 (const uint)
+0:22        true case is null
+0:25      move second child to first child (temp 4-component vector of float)
+0:25        Color: direct index for structure (temp 4-component vector of float)
+0:25          'psout' (temp structure{temp 4-component vector of float Color})
+0:25          Constant:
+0:25            0 (const int)
+0:25        Constant:
+0:25          1.000000
+0:25          1.000000
+0:25          1.000000
+0:25          1.000000
+0:26      Sequence
+0:26        Sequence
+0:26          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:26            Color: direct index for structure (temp 4-component vector of float)
+0:26              'psout' (temp structure{temp 4-component vector of float Color})
+0:26              Constant:
+0:26                0 (const int)
+0:26        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:12    Function Parameters: 
+0:?     Sequence
+0:13      Negate conditional (temp bool)
+0:13        Convert int to bool (temp bool)
+0:13          ival: direct index for structure (layout(offset=0 ) uniform int)
+0:13            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:13            Constant:
+0:13              0 (const uint)
+0:14      Negate conditional (temp 4-component vector of bool)
+0:14        Convert int to bool (temp 4-component vector of bool)
+0:14          ival4: direct index for structure (layout(offset=16 ) uniform 4-component vector of int)
+0:14            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:14            Constant:
+0:14              1 (const uint)
+0:16      Negate conditional (temp bool)
+0:16        Convert float to bool (temp bool)
+0:16          fval: direct index for structure (layout(offset=32 ) uniform float)
+0:16            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:16            Constant:
+0:16              2 (const uint)
+0:17      Negate conditional (temp 4-component vector of bool)
+0:17        Convert float to bool (temp 4-component vector of bool)
+0:17          fval4: direct index for structure (layout(offset=48 ) uniform 4-component vector of float)
+0:17            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:17            Constant:
+0:17              3 (const uint)
+0:19      Test condition and select (temp void)
+0:19        Condition
+0:19        ival: direct index for structure (layout(offset=0 ) uniform int)
+0:19          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:19          Constant:
+0:19            0 (const uint)
+0:19        true case is null
+0:20      Test condition and select (temp void)
+0:20        Condition
+0:20        fval: direct index for structure (layout(offset=32 ) uniform float)
+0:20          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:20          Constant:
+0:20            2 (const uint)
+0:20        true case is null
+0:21      Test condition and select (temp void)
+0:21        Condition
+0:21        Negate conditional (temp bool)
+0:21          Convert int to bool (temp bool)
+0:21            ival: direct index for structure (layout(offset=0 ) uniform int)
+0:21              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:21              Constant:
+0:21                0 (const uint)
+0:21        true case is null
+0:22      Test condition and select (temp void)
+0:22        Condition
+0:22        Negate conditional (temp bool)
+0:22          Convert float to bool (temp bool)
+0:22            fval: direct index for structure (layout(offset=32 ) uniform float)
+0:22              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+0:22              Constant:
+0:22                2 (const uint)
+0:22        true case is null
+0:25      move second child to first child (temp 4-component vector of float)
+0:25        Color: direct index for structure (temp 4-component vector of float)
+0:25          'psout' (temp structure{temp 4-component vector of float Color})
+0:25          Constant:
+0:25            0 (const int)
+0:25        Constant:
+0:25          1.000000
+0:25          1.000000
+0:25          1.000000
+0:25          1.000000
+0:26      Sequence
+0:26        Sequence
+0:26          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:26            Color: direct index for structure (temp 4-component vector of float)
+0:26              'psout' (temp structure{temp 4-component vector of float Color})
+0:26              Constant:
+0:26                0 (const int)
+0:26        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 77
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 73
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 10  "$Global"
+                              MemberName 10($Global) 0  "ival"
+                              MemberName 10($Global) 1  "ival4"
+                              MemberName 10($Global) 2  "fval"
+                              MemberName 10($Global) 3  "fval4"
+                              Name 12  ""
+                              Name 65  "PS_OUTPUT"
+                              MemberName 65(PS_OUTPUT) 0  "Color"
+                              Name 67  "psout"
+                              Name 73  "Color"
+                              MemberDecorate 10($Global) 0 Offset 0
+                              MemberDecorate 10($Global) 1 Offset 16
+                              MemberDecorate 10($Global) 2 Offset 32
+                              MemberDecorate 10($Global) 3 Offset 48
+                              Decorate 10($Global) Block
+                              Decorate 12 DescriptorSet 0
+                              Decorate 73(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeVector 6(int) 4
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+     10($Global):             TypeStruct 6(int) 7(ivec4) 8(float) 9(fvec4)
+              11:             TypePointer Uniform 10($Global)
+              12:     11(ptr) Variable Uniform
+              13:      6(int) Constant 0
+              14:             TypePointer Uniform 6(int)
+              17:             TypeBool
+              18:             TypeInt 32 0
+              19:     18(int) Constant 0
+              22:      6(int) Constant 1
+              23:             TypePointer Uniform 7(ivec4)
+              26:             TypeVector 17(bool) 4
+              27:             TypeVector 18(int) 4
+              28:   27(ivec4) ConstantComposite 19 19 19 19
+              31:      6(int) Constant 2
+              32:             TypePointer Uniform 8(float)
+              35:    8(float) Constant 0
+              38:      6(int) Constant 3
+              39:             TypePointer Uniform 9(fvec4)
+              42:    9(fvec4) ConstantComposite 35 35 35 35
+   65(PS_OUTPUT):             TypeStruct 9(fvec4)
+              66:             TypePointer Function 65(PS_OUTPUT)
+              68:    8(float) Constant 1065353216
+              69:    9(fvec4) ConstantComposite 68 68 68 68
+              70:             TypePointer Function 9(fvec4)
+              72:             TypePointer Output 9(fvec4)
+       73(Color):     72(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       67(psout):     66(ptr) Variable Function
+              15:     14(ptr) AccessChain 12 13
+              16:      6(int) Load 15
+              20:    17(bool) INotEqual 16 19
+              21:    17(bool) LogicalNot 20
+              24:     23(ptr) AccessChain 12 22
+              25:    7(ivec4) Load 24
+              29:   26(bvec4) INotEqual 25 28
+              30:   26(bvec4) LogicalNot 29
+              33:     32(ptr) AccessChain 12 31
+              34:    8(float) Load 33
+              36:    17(bool) FOrdNotEqual 34 35
+              37:    17(bool) LogicalNot 36
+              40:     39(ptr) AccessChain 12 38
+              41:    9(fvec4) Load 40
+              43:   26(bvec4) FOrdNotEqual 41 42
+              44:   26(bvec4) LogicalNot 43
+              45:     14(ptr) AccessChain 12 13
+              46:      6(int) Load 45
+                              SelectionMerge 48 None
+                              BranchConditional 46 47 48
+              47:               Label
+                                Branch 48
+              48:             Label
+              49:     32(ptr) AccessChain 12 31
+              50:    8(float) Load 49
+                              SelectionMerge 52 None
+                              BranchConditional 50 51 52
+              51:               Label
+                                Branch 52
+              52:             Label
+              53:     14(ptr) AccessChain 12 13
+              54:      6(int) Load 53
+              55:    17(bool) INotEqual 54 19
+              56:    17(bool) LogicalNot 55
+                              SelectionMerge 58 None
+                              BranchConditional 56 57 58
+              57:               Label
+                                Branch 58
+              58:             Label
+              59:     32(ptr) AccessChain 12 31
+              60:    8(float) Load 59
+              61:    17(bool) FOrdNotEqual 60 35
+              62:    17(bool) LogicalNot 61
+                              SelectionMerge 64 None
+                              BranchConditional 62 63 64
+              63:               Label
+                                Branch 64
+              64:             Label
+              71:     70(ptr) AccessChain 67(psout) 13
+                              Store 71 69
+              74:     70(ptr) AccessChain 67(psout) 13
+              75:    9(fvec4) Load 74
+                              Store 73(Color) 75
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matNx1.frag.out b/Test/baseResults/hlsl.matNx1.frag.out
new file mode 100644
index 0000000..f9dd65f
--- /dev/null
+++ b/Test/baseResults/hlsl.matNx1.frag.out
@@ -0,0 +1,261 @@
+hlsl.matNx1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestMatNx1( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child (temp 1X1 matrix of float)
+0:13          'r00' (temp 1X1 matrix of float)
+0:13          transpose (temp 1X1 matrix of float)
+0:13            'f1x1' (temp 1X1 matrix of float)
+0:14      Sequence
+0:14        move second child to first child (temp 1X2 matrix of float)
+0:14          'r01' (temp 1X2 matrix of float)
+0:14          transpose (temp 1X2 matrix of float)
+0:14            'f2x1' (temp 2X1 matrix of float)
+0:15      Sequence
+0:15        move second child to first child (temp 1X3 matrix of float)
+0:15          'r02' (temp 1X3 matrix of float)
+0:15          transpose (temp 1X3 matrix of float)
+0:15            'f3x1' (temp 3X1 matrix of float)
+0:16      Sequence
+0:16        move second child to first child (temp 1X4 matrix of float)
+0:16          'r03' (temp 1X4 matrix of float)
+0:16          transpose (temp 1X4 matrix of float)
+0:16            'f4x1' (temp 4X1 matrix of float)
+0:18      Sequence
+0:18        move second child to first child (temp 1X1 matrix of float)
+0:18          'r10' (temp 1X1 matrix of float)
+0:18          transpose (temp 1X1 matrix of float)
+0:18            'f1x1' (temp 1X1 matrix of float)
+0:19      Sequence
+0:19        move second child to first child (temp 2X1 matrix of float)
+0:19          'r11' (temp 2X1 matrix of float)
+0:19          transpose (temp 2X1 matrix of float)
+0:19            'f1x2' (temp 1X2 matrix of float)
+0:20      Sequence
+0:20        move second child to first child (temp 3X1 matrix of float)
+0:20          'r12' (temp 3X1 matrix of float)
+0:20          transpose (temp 3X1 matrix of float)
+0:20            'f1x3' (temp 1X3 matrix of float)
+0:21      Sequence
+0:21        move second child to first child (temp 4X1 matrix of float)
+0:21          'r13' (temp 4X1 matrix of float)
+0:21          transpose (temp 4X1 matrix of float)
+0:21            'f1x4' (temp 1X4 matrix of float)
+0:27  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:27    Function Parameters: 
+0:?     Sequence
+0:29      move second child to first child (temp 4-component vector of float)
+0:29        color: direct index for structure (temp 4-component vector of float)
+0:29          'ps_output' (temp structure{temp 4-component vector of float color})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:30      Sequence
+0:30        Sequence
+0:30          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:30            color: direct index for structure (temp 4-component vector of float)
+0:30              'ps_output' (temp structure{temp 4-component vector of float color})
+0:30              Constant:
+0:30                0 (const int)
+0:30        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestMatNx1( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child (temp 1X1 matrix of float)
+0:13          'r00' (temp 1X1 matrix of float)
+0:13          transpose (temp 1X1 matrix of float)
+0:13            'f1x1' (temp 1X1 matrix of float)
+0:14      Sequence
+0:14        move second child to first child (temp 1X2 matrix of float)
+0:14          'r01' (temp 1X2 matrix of float)
+0:14          transpose (temp 1X2 matrix of float)
+0:14            'f2x1' (temp 2X1 matrix of float)
+0:15      Sequence
+0:15        move second child to first child (temp 1X3 matrix of float)
+0:15          'r02' (temp 1X3 matrix of float)
+0:15          transpose (temp 1X3 matrix of float)
+0:15            'f3x1' (temp 3X1 matrix of float)
+0:16      Sequence
+0:16        move second child to first child (temp 1X4 matrix of float)
+0:16          'r03' (temp 1X4 matrix of float)
+0:16          transpose (temp 1X4 matrix of float)
+0:16            'f4x1' (temp 4X1 matrix of float)
+0:18      Sequence
+0:18        move second child to first child (temp 1X1 matrix of float)
+0:18          'r10' (temp 1X1 matrix of float)
+0:18          transpose (temp 1X1 matrix of float)
+0:18            'f1x1' (temp 1X1 matrix of float)
+0:19      Sequence
+0:19        move second child to first child (temp 2X1 matrix of float)
+0:19          'r11' (temp 2X1 matrix of float)
+0:19          transpose (temp 2X1 matrix of float)
+0:19            'f1x2' (temp 1X2 matrix of float)
+0:20      Sequence
+0:20        move second child to first child (temp 3X1 matrix of float)
+0:20          'r12' (temp 3X1 matrix of float)
+0:20          transpose (temp 3X1 matrix of float)
+0:20            'f1x3' (temp 1X3 matrix of float)
+0:21      Sequence
+0:21        move second child to first child (temp 4X1 matrix of float)
+0:21          'r13' (temp 4X1 matrix of float)
+0:21          transpose (temp 4X1 matrix of float)
+0:21            'f1x4' (temp 1X4 matrix of float)
+0:27  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:27    Function Parameters: 
+0:?     Sequence
+0:29      move second child to first child (temp 4-component vector of float)
+0:29        color: direct index for structure (temp 4-component vector of float)
+0:29          'ps_output' (temp structure{temp 4-component vector of float color})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:30      Sequence
+0:30        Sequence
+0:30          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:30            color: direct index for structure (temp 4-component vector of float)
+0:30              'ps_output' (temp structure{temp 4-component vector of float color})
+0:30              Constant:
+0:30                0 (const int)
+0:30        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 72
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 68
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 6  "TestMatNx1("
+                              Name 12  "r00"
+                              Name 13  "f1x1"
+                              Name 19  "r01"
+                              Name 22  "f2x1"
+                              Name 28  "r02"
+                              Name 31  "f3x1"
+                              Name 37  "r03"
+                              Name 40  "f4x1"
+                              Name 43  "r10"
+                              Name 46  "r11"
+                              Name 47  "f1x2"
+                              Name 50  "r12"
+                              Name 51  "f1x3"
+                              Name 54  "r13"
+                              Name 55  "f1x4"
+                              Name 58  "PS_OUTPUT"
+                              MemberName 58(PS_OUTPUT) 0  "color"
+                              Name 60  "ps_output"
+                              Name 68  "color"
+                              Decorate 68(color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 1
+              10:             TypeMatrix 9(fvec) 1
+              11:             TypePointer Function 10
+              16:             TypeVector 8(float) 2
+              17:             TypeMatrix 16(fvec2) 1
+              18:             TypePointer Function 17
+              20:             TypeMatrix 9(fvec) 2
+              21:             TypePointer Function 20
+              25:             TypeVector 8(float) 3
+              26:             TypeMatrix 25(fvec3) 1
+              27:             TypePointer Function 26
+              29:             TypeMatrix 9(fvec) 3
+              30:             TypePointer Function 29
+              34:             TypeVector 8(float) 4
+              35:             TypeMatrix 34(fvec4) 1
+              36:             TypePointer Function 35
+              38:             TypeMatrix 9(fvec) 4
+              39:             TypePointer Function 38
+   58(PS_OUTPUT):             TypeStruct 34(fvec4)
+              59:             TypePointer Function 58(PS_OUTPUT)
+              61:             TypeInt 32 1
+              62:     61(int) Constant 0
+              63:    8(float) Constant 1065353216
+              64:   34(fvec4) ConstantComposite 63 63 63 63
+              65:             TypePointer Function 34(fvec4)
+              67:             TypePointer Output 34(fvec4)
+       68(color):     67(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+   60(ps_output):     59(ptr) Variable Function
+              66:     65(ptr) AccessChain 60(ps_output) 62
+                              Store 66 64
+              69:     65(ptr) AccessChain 60(ps_output) 62
+              70:   34(fvec4) Load 69
+                              Store 68(color) 70
+                              Return
+                              FunctionEnd
+  6(TestMatNx1():           2 Function None 3
+               7:             Label
+         12(r00):     11(ptr) Variable Function
+        13(f1x1):     11(ptr) Variable Function
+         19(r01):     18(ptr) Variable Function
+        22(f2x1):     21(ptr) Variable Function
+         28(r02):     27(ptr) Variable Function
+        31(f3x1):     30(ptr) Variable Function
+         37(r03):     36(ptr) Variable Function
+        40(f4x1):     39(ptr) Variable Function
+         43(r10):     11(ptr) Variable Function
+         46(r11):     21(ptr) Variable Function
+        47(f1x2):     18(ptr) Variable Function
+         50(r12):     30(ptr) Variable Function
+        51(f1x3):     27(ptr) Variable Function
+         54(r13):     39(ptr) Variable Function
+        55(f1x4):     36(ptr) Variable Function
+              14:          10 Load 13(f1x1)
+              15:          10 Transpose 14
+                              Store 12(r00) 15
+              23:          20 Load 22(f2x1)
+              24:          17 Transpose 23
+                              Store 19(r01) 24
+              32:          29 Load 31(f3x1)
+              33:          26 Transpose 32
+                              Store 28(r02) 33
+              41:          38 Load 40(f4x1)
+              42:          35 Transpose 41
+                              Store 37(r03) 42
+              44:          10 Load 13(f1x1)
+              45:          10 Transpose 44
+                              Store 43(r10) 45
+              48:          17 Load 47(f1x2)
+              49:          20 Transpose 48
+                              Store 46(r11) 49
+              52:          26 Load 51(f1x3)
+              53:          29 Transpose 52
+                              Store 50(r12) 53
+              56:          35 Load 55(f1x4)
+              57:          38 Transpose 56
+                              Store 54(r13) 57
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out
new file mode 100644
index 0000000..e24c878
--- /dev/null
+++ b/Test/baseResults/hlsl.matType.bool.frag.out
@@ -0,0 +1,419 @@
+hlsl.matType.bool.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestBoolMatTypes( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:25      Sequence
+0:25        move second child to first child (temp 1X1 matrix of bool)
+0:25          'r00' (temp 1X1 matrix of bool)
+0:25          transpose (temp 1X1 matrix of bool)
+0:25            'b1x1' (temp 1X1 matrix of bool)
+0:26      Sequence
+0:26        move second child to first child (temp 1X2 matrix of bool)
+0:26          'r01' (temp 1X2 matrix of bool)
+0:26          transpose (temp 1X2 matrix of bool)
+0:26            'b2x1' (temp 2X1 matrix of bool)
+0:27      Sequence
+0:27        move second child to first child (temp 1X3 matrix of bool)
+0:27          'r02' (temp 1X3 matrix of bool)
+0:27          transpose (temp 1X3 matrix of bool)
+0:27            'b3x1' (temp 3X1 matrix of bool)
+0:28      Sequence
+0:28        move second child to first child (temp 1X4 matrix of bool)
+0:28          'r03' (temp 1X4 matrix of bool)
+0:28          transpose (temp 1X4 matrix of bool)
+0:28            'b4x1' (temp 4X1 matrix of bool)
+0:30      Sequence
+0:30        move second child to first child (temp 2X1 matrix of bool)
+0:30          'r10' (temp 2X1 matrix of bool)
+0:30          transpose (temp 2X1 matrix of bool)
+0:30            'b1x2' (temp 1X2 matrix of bool)
+0:31      Sequence
+0:31        move second child to first child (temp 2X2 matrix of bool)
+0:31          'r11' (temp 2X2 matrix of bool)
+0:31          transpose (temp 2X2 matrix of bool)
+0:31            'b2x2' (temp 2X2 matrix of bool)
+0:32      Sequence
+0:32        move second child to first child (temp 2X3 matrix of bool)
+0:32          'r12' (temp 2X3 matrix of bool)
+0:32          transpose (temp 2X3 matrix of bool)
+0:32            'b3x2' (temp 3X2 matrix of bool)
+0:33      Sequence
+0:33        move second child to first child (temp 2X4 matrix of bool)
+0:33          'r13' (temp 2X4 matrix of bool)
+0:33          transpose (temp 2X4 matrix of bool)
+0:33            'b4x2' (temp 4X2 matrix of bool)
+0:35      Sequence
+0:35        move second child to first child (temp 3X1 matrix of bool)
+0:35          'r20' (temp 3X1 matrix of bool)
+0:35          transpose (temp 3X1 matrix of bool)
+0:35            'b1x3' (temp 1X3 matrix of bool)
+0:36      Sequence
+0:36        move second child to first child (temp 3X2 matrix of bool)
+0:36          'r21' (temp 3X2 matrix of bool)
+0:36          transpose (temp 3X2 matrix of bool)
+0:36            'b2x3' (temp 2X3 matrix of bool)
+0:37      Sequence
+0:37        move second child to first child (temp 3X3 matrix of bool)
+0:37          'r22' (temp 3X3 matrix of bool)
+0:37          transpose (temp 3X3 matrix of bool)
+0:37            'b3x3' (temp 3X3 matrix of bool)
+0:38      Sequence
+0:38        move second child to first child (temp 3X4 matrix of bool)
+0:38          'r23' (temp 3X4 matrix of bool)
+0:38          transpose (temp 3X4 matrix of bool)
+0:38            'b4x3' (temp 4X3 matrix of bool)
+0:40      Sequence
+0:40        move second child to first child (temp 4X1 matrix of bool)
+0:40          'r30' (temp 4X1 matrix of bool)
+0:40          transpose (temp 4X1 matrix of bool)
+0:40            'b1x4' (temp 1X4 matrix of bool)
+0:41      Sequence
+0:41        move second child to first child (temp 4X2 matrix of bool)
+0:41          'r31' (temp 4X2 matrix of bool)
+0:41          transpose (temp 4X2 matrix of bool)
+0:41            'b2x4' (temp 2X4 matrix of bool)
+0:42      Sequence
+0:42        move second child to first child (temp 4X3 matrix of bool)
+0:42          'r32' (temp 4X3 matrix of bool)
+0:42          transpose (temp 4X3 matrix of bool)
+0:42            'b3x4' (temp 3X4 matrix of bool)
+0:43      Sequence
+0:43        move second child to first child (temp 4X4 matrix of bool)
+0:43          'r33' (temp 4X4 matrix of bool)
+0:43          transpose (temp 4X4 matrix of bool)
+0:43            'b4x4' (temp 4X4 matrix of bool)
+0:49  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:49    Function Parameters: 
+0:?     Sequence
+0:51      move second child to first child (temp 4-component vector of float)
+0:51        color: direct index for structure (temp 4-component vector of float)
+0:51          'ps_output' (temp structure{temp 4-component vector of float color})
+0:51          Constant:
+0:51            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:52      Sequence
+0:52        Sequence
+0:52          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:52            color: direct index for structure (temp 4-component vector of float)
+0:52              'ps_output' (temp structure{temp 4-component vector of float color})
+0:52              Constant:
+0:52                0 (const int)
+0:52        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestBoolMatTypes( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:25      Sequence
+0:25        move second child to first child (temp 1X1 matrix of bool)
+0:25          'r00' (temp 1X1 matrix of bool)
+0:25          transpose (temp 1X1 matrix of bool)
+0:25            'b1x1' (temp 1X1 matrix of bool)
+0:26      Sequence
+0:26        move second child to first child (temp 1X2 matrix of bool)
+0:26          'r01' (temp 1X2 matrix of bool)
+0:26          transpose (temp 1X2 matrix of bool)
+0:26            'b2x1' (temp 2X1 matrix of bool)
+0:27      Sequence
+0:27        move second child to first child (temp 1X3 matrix of bool)
+0:27          'r02' (temp 1X3 matrix of bool)
+0:27          transpose (temp 1X3 matrix of bool)
+0:27            'b3x1' (temp 3X1 matrix of bool)
+0:28      Sequence
+0:28        move second child to first child (temp 1X4 matrix of bool)
+0:28          'r03' (temp 1X4 matrix of bool)
+0:28          transpose (temp 1X4 matrix of bool)
+0:28            'b4x1' (temp 4X1 matrix of bool)
+0:30      Sequence
+0:30        move second child to first child (temp 2X1 matrix of bool)
+0:30          'r10' (temp 2X1 matrix of bool)
+0:30          transpose (temp 2X1 matrix of bool)
+0:30            'b1x2' (temp 1X2 matrix of bool)
+0:31      Sequence
+0:31        move second child to first child (temp 2X2 matrix of bool)
+0:31          'r11' (temp 2X2 matrix of bool)
+0:31          transpose (temp 2X2 matrix of bool)
+0:31            'b2x2' (temp 2X2 matrix of bool)
+0:32      Sequence
+0:32        move second child to first child (temp 2X3 matrix of bool)
+0:32          'r12' (temp 2X3 matrix of bool)
+0:32          transpose (temp 2X3 matrix of bool)
+0:32            'b3x2' (temp 3X2 matrix of bool)
+0:33      Sequence
+0:33        move second child to first child (temp 2X4 matrix of bool)
+0:33          'r13' (temp 2X4 matrix of bool)
+0:33          transpose (temp 2X4 matrix of bool)
+0:33            'b4x2' (temp 4X2 matrix of bool)
+0:35      Sequence
+0:35        move second child to first child (temp 3X1 matrix of bool)
+0:35          'r20' (temp 3X1 matrix of bool)
+0:35          transpose (temp 3X1 matrix of bool)
+0:35            'b1x3' (temp 1X3 matrix of bool)
+0:36      Sequence
+0:36        move second child to first child (temp 3X2 matrix of bool)
+0:36          'r21' (temp 3X2 matrix of bool)
+0:36          transpose (temp 3X2 matrix of bool)
+0:36            'b2x3' (temp 2X3 matrix of bool)
+0:37      Sequence
+0:37        move second child to first child (temp 3X3 matrix of bool)
+0:37          'r22' (temp 3X3 matrix of bool)
+0:37          transpose (temp 3X3 matrix of bool)
+0:37            'b3x3' (temp 3X3 matrix of bool)
+0:38      Sequence
+0:38        move second child to first child (temp 3X4 matrix of bool)
+0:38          'r23' (temp 3X4 matrix of bool)
+0:38          transpose (temp 3X4 matrix of bool)
+0:38            'b4x3' (temp 4X3 matrix of bool)
+0:40      Sequence
+0:40        move second child to first child (temp 4X1 matrix of bool)
+0:40          'r30' (temp 4X1 matrix of bool)
+0:40          transpose (temp 4X1 matrix of bool)
+0:40            'b1x4' (temp 1X4 matrix of bool)
+0:41      Sequence
+0:41        move second child to first child (temp 4X2 matrix of bool)
+0:41          'r31' (temp 4X2 matrix of bool)
+0:41          transpose (temp 4X2 matrix of bool)
+0:41            'b2x4' (temp 2X4 matrix of bool)
+0:42      Sequence
+0:42        move second child to first child (temp 4X3 matrix of bool)
+0:42          'r32' (temp 4X3 matrix of bool)
+0:42          transpose (temp 4X3 matrix of bool)
+0:42            'b3x4' (temp 3X4 matrix of bool)
+0:43      Sequence
+0:43        move second child to first child (temp 4X4 matrix of bool)
+0:43          'r33' (temp 4X4 matrix of bool)
+0:43          transpose (temp 4X4 matrix of bool)
+0:43            'b4x4' (temp 4X4 matrix of bool)
+0:49  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:49    Function Parameters: 
+0:?     Sequence
+0:51      move second child to first child (temp 4-component vector of float)
+0:51        color: direct index for structure (temp 4-component vector of float)
+0:51          'ps_output' (temp structure{temp 4-component vector of float color})
+0:51          Constant:
+0:51            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:52      Sequence
+0:52        Sequence
+0:52          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:52            color: direct index for structure (temp 4-component vector of float)
+0:52              'ps_output' (temp structure{temp 4-component vector of float color})
+0:52              Constant:
+0:52                0 (const int)
+0:52        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 125
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 121
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 6  "TestBoolMatTypes("
+                              Name 12  "r00"
+                              Name 13  "b1x1"
+                              Name 19  "r01"
+                              Name 22  "b2x1"
+                              Name 28  "r02"
+                              Name 31  "b3x1"
+                              Name 37  "r03"
+                              Name 40  "b4x1"
+                              Name 43  "r10"
+                              Name 44  "b1x2"
+                              Name 49  "r11"
+                              Name 50  "b2x2"
+                              Name 55  "r12"
+                              Name 58  "b3x2"
+                              Name 63  "r13"
+                              Name 66  "b4x2"
+                              Name 69  "r20"
+                              Name 70  "b1x3"
+                              Name 73  "r21"
+                              Name 74  "b2x3"
+                              Name 79  "r22"
+                              Name 80  "b3x3"
+                              Name 85  "r23"
+                              Name 88  "b4x3"
+                              Name 91  "r30"
+                              Name 92  "b1x4"
+                              Name 95  "r31"
+                              Name 96  "b2x4"
+                              Name 99  "r32"
+                              Name 100  "b3x4"
+                              Name 105  "r33"
+                              Name 106  "b4x4"
+                              Name 111  "PS_OUTPUT"
+                              MemberName 111(PS_OUTPUT) 0  "color"
+                              Name 113  "ps_output"
+                              Name 121  "color"
+                              Decorate 121(color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeBool
+               9:             TypeVector 8(bool) 1
+              10:             TypeMatrix 9(bvec) 1
+              11:             TypePointer Function 10
+              16:             TypeVector 8(bool) 2
+              17:             TypeMatrix 16(bvec2) 1
+              18:             TypePointer Function 17
+              20:             TypeMatrix 9(bvec) 2
+              21:             TypePointer Function 20
+              25:             TypeVector 8(bool) 3
+              26:             TypeMatrix 25(bvec3) 1
+              27:             TypePointer Function 26
+              29:             TypeMatrix 9(bvec) 3
+              30:             TypePointer Function 29
+              34:             TypeVector 8(bool) 4
+              35:             TypeMatrix 34(bvec4) 1
+              36:             TypePointer Function 35
+              38:             TypeMatrix 9(bvec) 4
+              39:             TypePointer Function 38
+              47:             TypeMatrix 16(bvec2) 2
+              48:             TypePointer Function 47
+              53:             TypeMatrix 25(bvec3) 2
+              54:             TypePointer Function 53
+              56:             TypeMatrix 16(bvec2) 3
+              57:             TypePointer Function 56
+              61:             TypeMatrix 34(bvec4) 2
+              62:             TypePointer Function 61
+              64:             TypeMatrix 16(bvec2) 4
+              65:             TypePointer Function 64
+              77:             TypeMatrix 25(bvec3) 3
+              78:             TypePointer Function 77
+              83:             TypeMatrix 34(bvec4) 3
+              84:             TypePointer Function 83
+              86:             TypeMatrix 25(bvec3) 4
+              87:             TypePointer Function 86
+             103:             TypeMatrix 34(bvec4) 4
+             104:             TypePointer Function 103
+             109:             TypeFloat 32
+             110:             TypeVector 109(float) 4
+  111(PS_OUTPUT):             TypeStruct 110(fvec4)
+             112:             TypePointer Function 111(PS_OUTPUT)
+             114:             TypeInt 32 1
+             115:    114(int) Constant 0
+             116:  109(float) Constant 0
+             117:  110(fvec4) ConstantComposite 116 116 116 116
+             118:             TypePointer Function 110(fvec4)
+             120:             TypePointer Output 110(fvec4)
+      121(color):    120(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+  113(ps_output):    112(ptr) Variable Function
+             119:    118(ptr) AccessChain 113(ps_output) 115
+                              Store 119 117
+             122:    118(ptr) AccessChain 113(ps_output) 115
+             123:  110(fvec4) Load 122
+                              Store 121(color) 123
+                              Return
+                              FunctionEnd
+6(TestBoolMatTypes():           2 Function None 3
+               7:             Label
+         12(r00):     11(ptr) Variable Function
+        13(b1x1):     11(ptr) Variable Function
+         19(r01):     18(ptr) Variable Function
+        22(b2x1):     21(ptr) Variable Function
+         28(r02):     27(ptr) Variable Function
+        31(b3x1):     30(ptr) Variable Function
+         37(r03):     36(ptr) Variable Function
+        40(b4x1):     39(ptr) Variable Function
+         43(r10):     21(ptr) Variable Function
+        44(b1x2):     18(ptr) Variable Function
+         49(r11):     48(ptr) Variable Function
+        50(b2x2):     48(ptr) Variable Function
+         55(r12):     54(ptr) Variable Function
+        58(b3x2):     57(ptr) Variable Function
+         63(r13):     62(ptr) Variable Function
+        66(b4x2):     65(ptr) Variable Function
+         69(r20):     30(ptr) Variable Function
+        70(b1x3):     27(ptr) Variable Function
+         73(r21):     57(ptr) Variable Function
+        74(b2x3):     54(ptr) Variable Function
+         79(r22):     78(ptr) Variable Function
+        80(b3x3):     78(ptr) Variable Function
+         85(r23):     84(ptr) Variable Function
+        88(b4x3):     87(ptr) Variable Function
+         91(r30):     39(ptr) Variable Function
+        92(b1x4):     36(ptr) Variable Function
+         95(r31):     65(ptr) Variable Function
+        96(b2x4):     62(ptr) Variable Function
+         99(r32):     87(ptr) Variable Function
+       100(b3x4):     84(ptr) Variable Function
+        105(r33):    104(ptr) Variable Function
+       106(b4x4):    104(ptr) Variable Function
+              14:          10 Load 13(b1x1)
+              15:          10 Transpose 14
+                              Store 12(r00) 15
+              23:          20 Load 22(b2x1)
+              24:          17 Transpose 23
+                              Store 19(r01) 24
+              32:          29 Load 31(b3x1)
+              33:          26 Transpose 32
+                              Store 28(r02) 33
+              41:          38 Load 40(b4x1)
+              42:          35 Transpose 41
+                              Store 37(r03) 42
+              45:          17 Load 44(b1x2)
+              46:          20 Transpose 45
+                              Store 43(r10) 46
+              51:          47 Load 50(b2x2)
+              52:          47 Transpose 51
+                              Store 49(r11) 52
+              59:          56 Load 58(b3x2)
+              60:          53 Transpose 59
+                              Store 55(r12) 60
+              67:          64 Load 66(b4x2)
+              68:          61 Transpose 67
+                              Store 63(r13) 68
+              71:          26 Load 70(b1x3)
+              72:          29 Transpose 71
+                              Store 69(r20) 72
+              75:          53 Load 74(b2x3)
+              76:          56 Transpose 75
+                              Store 73(r21) 76
+              81:          77 Load 80(b3x3)
+              82:          77 Transpose 81
+                              Store 79(r22) 82
+              89:          86 Load 88(b4x3)
+              90:          83 Transpose 89
+                              Store 85(r23) 90
+              93:          35 Load 92(b1x4)
+              94:          38 Transpose 93
+                              Store 91(r30) 94
+              97:          61 Load 96(b2x4)
+              98:          64 Transpose 97
+                              Store 95(r31) 98
+             101:          83 Load 100(b3x4)
+             102:          86 Transpose 101
+                              Store 99(r32) 102
+             107:         103 Load 106(b4x4)
+             108:         103 Transpose 107
+                              Store 105(r33) 108
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out
index 0066a1d..038ca73 100755
--- a/Test/baseResults/hlsl.matType.frag.out
+++ b/Test/baseResults/hlsl.matType.frag.out
@@ -10,11 +10,12 @@
 0:10      Branch: Return with expression
 0:10        'inFloat1' (in 1-component vector of float)
 0:?   Linker Objects
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 1-component vector of float f1, layout(offset=16 ) uniform 1X1 matrix of float fmat11, layout(offset=32 ) uniform 4X1 matrix of float fmat41, layout(offset=48 ) uniform 1X2 matrix of float fmat12, layout(offset=80 ) uniform 2X3 matrix of double dmat23, layout(offset=128 ) uniform 4X4 matrix of int int44})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 1-component vector of float f1, layout(offset=16 ) uniform 1X1 matrix of float fmat11, layout(offset=32 ) uniform 4X1 matrix of float fmat41, layout(offset=48 ) uniform 1X2 matrix of float fmat12, layout(offset=80 ) uniform 2X3 matrix of double dmat23, layout(offset=128 ) uniform 4X4 matrix of int int44})
 
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -27,7 +28,7 @@
 0:10      Branch: Return with expression
 0:10        'inFloat1' (in 1-component vector of float)
 0:?   Linker Objects
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 1-component vector of float f1, layout(offset=16 ) uniform 1X1 matrix of float fmat11, layout(offset=32 ) uniform 4X1 matrix of float fmat41, layout(offset=48 ) uniform 1X2 matrix of float fmat12, layout(offset=80 ) uniform 2X3 matrix of double dmat23, layout(offset=128 ) uniform 4X4 matrix of int int44})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 1-component vector of float f1, layout(offset=16 ) uniform 1X1 matrix of float fmat11, layout(offset=32 ) uniform 4X1 matrix of float fmat41, layout(offset=48 ) uniform 1X2 matrix of float fmat12, layout(offset=80 ) uniform 2X3 matrix of double dmat23, layout(offset=128 ) uniform 4X4 matrix of int int44})
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -51,6 +52,22 @@
                               MemberName 27($Global) 4  "dmat23"
                               MemberName 27($Global) 5  "int44"
                               Name 29  ""
+                              MemberDecorate 27($Global) 0 Offset 0
+                              MemberDecorate 27($Global) 1 RowMajor
+                              MemberDecorate 27($Global) 1 Offset 16
+                              MemberDecorate 27($Global) 1 MatrixStride 16
+                              MemberDecorate 27($Global) 2 RowMajor
+                              MemberDecorate 27($Global) 2 Offset 32
+                              MemberDecorate 27($Global) 2 MatrixStride 16
+                              MemberDecorate 27($Global) 3 RowMajor
+                              MemberDecorate 27($Global) 3 Offset 48
+                              MemberDecorate 27($Global) 3 MatrixStride 16
+                              MemberDecorate 27($Global) 4 RowMajor
+                              MemberDecorate 27($Global) 4 Offset 80
+                              MemberDecorate 27($Global) 4 MatrixStride 16
+                              MemberDecorate 27($Global) 5 RowMajor
+                              MemberDecorate 27($Global) 5 Offset 128
+                              MemberDecorate 27($Global) 5 MatrixStride 16
                               Decorate 27($Global) Block
                               Decorate 29 DescriptorSet 0
                2:             TypeVoid
@@ -74,6 +91,7 @@
               29:     28(ptr) Variable Uniform
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 11(ShaderFunction(vf1;f1;):    6(float) Function None 8
      9(inFloat1):      7(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out
new file mode 100644
index 0000000..d7ffb0f
--- /dev/null
+++ b/Test/baseResults/hlsl.matType.int.frag.out
@@ -0,0 +1,738 @@
+hlsl.matType.int.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestIntMatTypes( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:25      Sequence
+0:25        move second child to first child (temp 1X1 matrix of int)
+0:25          'r00' (temp 1X1 matrix of int)
+0:25          transpose (temp 1X1 matrix of int)
+0:25            'i1x1' (temp 1X1 matrix of int)
+0:26      Sequence
+0:26        move second child to first child (temp 1X2 matrix of int)
+0:26          'r01' (temp 1X2 matrix of int)
+0:26          transpose (temp 1X2 matrix of int)
+0:26            'i2x1' (temp 2X1 matrix of int)
+0:27      Sequence
+0:27        move second child to first child (temp 1X3 matrix of int)
+0:27          'r02' (temp 1X3 matrix of int)
+0:27          transpose (temp 1X3 matrix of int)
+0:27            'i3x1' (temp 3X1 matrix of int)
+0:28      Sequence
+0:28        move second child to first child (temp 1X4 matrix of int)
+0:28          'r03' (temp 1X4 matrix of int)
+0:28          transpose (temp 1X4 matrix of int)
+0:28            'i4x1' (temp 4X1 matrix of int)
+0:30      Sequence
+0:30        move second child to first child (temp 2X1 matrix of int)
+0:30          'r10' (temp 2X1 matrix of int)
+0:30          transpose (temp 2X1 matrix of int)
+0:30            'i1x2' (temp 1X2 matrix of int)
+0:31      Sequence
+0:31        move second child to first child (temp 2X2 matrix of int)
+0:31          'r11' (temp 2X2 matrix of int)
+0:31          transpose (temp 2X2 matrix of int)
+0:31            'i2x2' (temp 2X2 matrix of int)
+0:32      Sequence
+0:32        move second child to first child (temp 2X3 matrix of int)
+0:32          'r12' (temp 2X3 matrix of int)
+0:32          transpose (temp 2X3 matrix of int)
+0:32            'i3x2' (temp 3X2 matrix of int)
+0:33      Sequence
+0:33        move second child to first child (temp 2X4 matrix of int)
+0:33          'r13' (temp 2X4 matrix of int)
+0:33          transpose (temp 2X4 matrix of int)
+0:33            'i4x2' (temp 4X2 matrix of int)
+0:35      Sequence
+0:35        move second child to first child (temp 3X1 matrix of int)
+0:35          'r20' (temp 3X1 matrix of int)
+0:35          transpose (temp 3X1 matrix of int)
+0:35            'i1x3' (temp 1X3 matrix of int)
+0:36      Sequence
+0:36        move second child to first child (temp 3X2 matrix of int)
+0:36          'r21' (temp 3X2 matrix of int)
+0:36          transpose (temp 3X2 matrix of int)
+0:36            'i2x3' (temp 2X3 matrix of int)
+0:37      Sequence
+0:37        move second child to first child (temp 3X3 matrix of int)
+0:37          'r22' (temp 3X3 matrix of int)
+0:37          transpose (temp 3X3 matrix of int)
+0:37            'i3x3' (temp 3X3 matrix of int)
+0:38      Sequence
+0:38        move second child to first child (temp 3X4 matrix of int)
+0:38          'r23' (temp 3X4 matrix of int)
+0:38          transpose (temp 3X4 matrix of int)
+0:38            'i4x3' (temp 4X3 matrix of int)
+0:40      Sequence
+0:40        move second child to first child (temp 4X1 matrix of int)
+0:40          'r30' (temp 4X1 matrix of int)
+0:40          transpose (temp 4X1 matrix of int)
+0:40            'i1x4' (temp 1X4 matrix of int)
+0:41      Sequence
+0:41        move second child to first child (temp 4X2 matrix of int)
+0:41          'r31' (temp 4X2 matrix of int)
+0:41          transpose (temp 4X2 matrix of int)
+0:41            'i2x4' (temp 2X4 matrix of int)
+0:42      Sequence
+0:42        move second child to first child (temp 4X3 matrix of int)
+0:42          'r32' (temp 4X3 matrix of int)
+0:42          transpose (temp 4X3 matrix of int)
+0:42            'i3x4' (temp 3X4 matrix of int)
+0:43      Sequence
+0:43        move second child to first child (temp 4X4 matrix of int)
+0:43          'r33' (temp 4X4 matrix of int)
+0:43          transpose (temp 4X4 matrix of int)
+0:43            'i4x4' (temp 4X4 matrix of int)
+0:47  Function Definition: TestUintMatTypes( (temp void)
+0:47    Function Parameters: 
+0:?     Sequence
+0:69      Sequence
+0:69        move second child to first child (temp 1X1 matrix of uint)
+0:69          'r00' (temp 1X1 matrix of uint)
+0:69          transpose (temp 1X1 matrix of uint)
+0:69            'u1x1' (temp 1X1 matrix of uint)
+0:70      Sequence
+0:70        move second child to first child (temp 1X2 matrix of uint)
+0:70          'r01' (temp 1X2 matrix of uint)
+0:70          transpose (temp 1X2 matrix of uint)
+0:70            'u2x1' (temp 2X1 matrix of uint)
+0:71      Sequence
+0:71        move second child to first child (temp 1X3 matrix of uint)
+0:71          'r02' (temp 1X3 matrix of uint)
+0:71          transpose (temp 1X3 matrix of uint)
+0:71            'u3x1' (temp 3X1 matrix of uint)
+0:72      Sequence
+0:72        move second child to first child (temp 1X4 matrix of uint)
+0:72          'r03' (temp 1X4 matrix of uint)
+0:72          transpose (temp 1X4 matrix of uint)
+0:72            'u4x1' (temp 4X1 matrix of uint)
+0:74      Sequence
+0:74        move second child to first child (temp 2X1 matrix of uint)
+0:74          'r10' (temp 2X1 matrix of uint)
+0:74          transpose (temp 2X1 matrix of uint)
+0:74            'u1x2' (temp 1X2 matrix of uint)
+0:75      Sequence
+0:75        move second child to first child (temp 2X2 matrix of uint)
+0:75          'r11' (temp 2X2 matrix of uint)
+0:75          transpose (temp 2X2 matrix of uint)
+0:75            'u2x2' (temp 2X2 matrix of uint)
+0:76      Sequence
+0:76        move second child to first child (temp 2X3 matrix of uint)
+0:76          'r12' (temp 2X3 matrix of uint)
+0:76          transpose (temp 2X3 matrix of uint)
+0:76            'u3x2' (temp 3X2 matrix of uint)
+0:77      Sequence
+0:77        move second child to first child (temp 2X4 matrix of uint)
+0:77          'r13' (temp 2X4 matrix of uint)
+0:77          transpose (temp 2X4 matrix of uint)
+0:77            'u4x2' (temp 4X2 matrix of uint)
+0:79      Sequence
+0:79        move second child to first child (temp 3X1 matrix of uint)
+0:79          'r20' (temp 3X1 matrix of uint)
+0:79          transpose (temp 3X1 matrix of uint)
+0:79            'u1x3' (temp 1X3 matrix of uint)
+0:80      Sequence
+0:80        move second child to first child (temp 3X2 matrix of uint)
+0:80          'r21' (temp 3X2 matrix of uint)
+0:80          transpose (temp 3X2 matrix of uint)
+0:80            'u2x3' (temp 2X3 matrix of uint)
+0:81      Sequence
+0:81        move second child to first child (temp 3X3 matrix of uint)
+0:81          'r22' (temp 3X3 matrix of uint)
+0:81          transpose (temp 3X3 matrix of uint)
+0:81            'u3x3' (temp 3X3 matrix of uint)
+0:82      Sequence
+0:82        move second child to first child (temp 3X4 matrix of uint)
+0:82          'r23' (temp 3X4 matrix of uint)
+0:82          transpose (temp 3X4 matrix of uint)
+0:82            'u4x3' (temp 4X3 matrix of uint)
+0:84      Sequence
+0:84        move second child to first child (temp 4X1 matrix of uint)
+0:84          'r30' (temp 4X1 matrix of uint)
+0:84          transpose (temp 4X1 matrix of uint)
+0:84            'u1x4' (temp 1X4 matrix of uint)
+0:85      Sequence
+0:85        move second child to first child (temp 4X2 matrix of uint)
+0:85          'r31' (temp 4X2 matrix of uint)
+0:85          transpose (temp 4X2 matrix of uint)
+0:85            'u2x4' (temp 2X4 matrix of uint)
+0:86      Sequence
+0:86        move second child to first child (temp 4X3 matrix of uint)
+0:86          'r32' (temp 4X3 matrix of uint)
+0:86          transpose (temp 4X3 matrix of uint)
+0:86            'u3x4' (temp 3X4 matrix of uint)
+0:87      Sequence
+0:87        move second child to first child (temp 4X4 matrix of uint)
+0:87          'r33' (temp 4X4 matrix of uint)
+0:87          transpose (temp 4X4 matrix of uint)
+0:87            'u4x4' (temp 4X4 matrix of uint)
+0:93  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:93    Function Parameters: 
+0:?     Sequence
+0:95      move second child to first child (temp 4-component vector of float)
+0:95        color: direct index for structure (temp 4-component vector of float)
+0:95          'ps_output' (temp structure{temp 4-component vector of float color})
+0:95          Constant:
+0:95            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:96      Sequence
+0:96        Sequence
+0:96          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:96            color: direct index for structure (temp 4-component vector of float)
+0:96              'ps_output' (temp structure{temp 4-component vector of float color})
+0:96              Constant:
+0:96                0 (const int)
+0:96        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: TestIntMatTypes( (temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:25      Sequence
+0:25        move second child to first child (temp 1X1 matrix of int)
+0:25          'r00' (temp 1X1 matrix of int)
+0:25          transpose (temp 1X1 matrix of int)
+0:25            'i1x1' (temp 1X1 matrix of int)
+0:26      Sequence
+0:26        move second child to first child (temp 1X2 matrix of int)
+0:26          'r01' (temp 1X2 matrix of int)
+0:26          transpose (temp 1X2 matrix of int)
+0:26            'i2x1' (temp 2X1 matrix of int)
+0:27      Sequence
+0:27        move second child to first child (temp 1X3 matrix of int)
+0:27          'r02' (temp 1X3 matrix of int)
+0:27          transpose (temp 1X3 matrix of int)
+0:27            'i3x1' (temp 3X1 matrix of int)
+0:28      Sequence
+0:28        move second child to first child (temp 1X4 matrix of int)
+0:28          'r03' (temp 1X4 matrix of int)
+0:28          transpose (temp 1X4 matrix of int)
+0:28            'i4x1' (temp 4X1 matrix of int)
+0:30      Sequence
+0:30        move second child to first child (temp 2X1 matrix of int)
+0:30          'r10' (temp 2X1 matrix of int)
+0:30          transpose (temp 2X1 matrix of int)
+0:30            'i1x2' (temp 1X2 matrix of int)
+0:31      Sequence
+0:31        move second child to first child (temp 2X2 matrix of int)
+0:31          'r11' (temp 2X2 matrix of int)
+0:31          transpose (temp 2X2 matrix of int)
+0:31            'i2x2' (temp 2X2 matrix of int)
+0:32      Sequence
+0:32        move second child to first child (temp 2X3 matrix of int)
+0:32          'r12' (temp 2X3 matrix of int)
+0:32          transpose (temp 2X3 matrix of int)
+0:32            'i3x2' (temp 3X2 matrix of int)
+0:33      Sequence
+0:33        move second child to first child (temp 2X4 matrix of int)
+0:33          'r13' (temp 2X4 matrix of int)
+0:33          transpose (temp 2X4 matrix of int)
+0:33            'i4x2' (temp 4X2 matrix of int)
+0:35      Sequence
+0:35        move second child to first child (temp 3X1 matrix of int)
+0:35          'r20' (temp 3X1 matrix of int)
+0:35          transpose (temp 3X1 matrix of int)
+0:35            'i1x3' (temp 1X3 matrix of int)
+0:36      Sequence
+0:36        move second child to first child (temp 3X2 matrix of int)
+0:36          'r21' (temp 3X2 matrix of int)
+0:36          transpose (temp 3X2 matrix of int)
+0:36            'i2x3' (temp 2X3 matrix of int)
+0:37      Sequence
+0:37        move second child to first child (temp 3X3 matrix of int)
+0:37          'r22' (temp 3X3 matrix of int)
+0:37          transpose (temp 3X3 matrix of int)
+0:37            'i3x3' (temp 3X3 matrix of int)
+0:38      Sequence
+0:38        move second child to first child (temp 3X4 matrix of int)
+0:38          'r23' (temp 3X4 matrix of int)
+0:38          transpose (temp 3X4 matrix of int)
+0:38            'i4x3' (temp 4X3 matrix of int)
+0:40      Sequence
+0:40        move second child to first child (temp 4X1 matrix of int)
+0:40          'r30' (temp 4X1 matrix of int)
+0:40          transpose (temp 4X1 matrix of int)
+0:40            'i1x4' (temp 1X4 matrix of int)
+0:41      Sequence
+0:41        move second child to first child (temp 4X2 matrix of int)
+0:41          'r31' (temp 4X2 matrix of int)
+0:41          transpose (temp 4X2 matrix of int)
+0:41            'i2x4' (temp 2X4 matrix of int)
+0:42      Sequence
+0:42        move second child to first child (temp 4X3 matrix of int)
+0:42          'r32' (temp 4X3 matrix of int)
+0:42          transpose (temp 4X3 matrix of int)
+0:42            'i3x4' (temp 3X4 matrix of int)
+0:43      Sequence
+0:43        move second child to first child (temp 4X4 matrix of int)
+0:43          'r33' (temp 4X4 matrix of int)
+0:43          transpose (temp 4X4 matrix of int)
+0:43            'i4x4' (temp 4X4 matrix of int)
+0:47  Function Definition: TestUintMatTypes( (temp void)
+0:47    Function Parameters: 
+0:?     Sequence
+0:69      Sequence
+0:69        move second child to first child (temp 1X1 matrix of uint)
+0:69          'r00' (temp 1X1 matrix of uint)
+0:69          transpose (temp 1X1 matrix of uint)
+0:69            'u1x1' (temp 1X1 matrix of uint)
+0:70      Sequence
+0:70        move second child to first child (temp 1X2 matrix of uint)
+0:70          'r01' (temp 1X2 matrix of uint)
+0:70          transpose (temp 1X2 matrix of uint)
+0:70            'u2x1' (temp 2X1 matrix of uint)
+0:71      Sequence
+0:71        move second child to first child (temp 1X3 matrix of uint)
+0:71          'r02' (temp 1X3 matrix of uint)
+0:71          transpose (temp 1X3 matrix of uint)
+0:71            'u3x1' (temp 3X1 matrix of uint)
+0:72      Sequence
+0:72        move second child to first child (temp 1X4 matrix of uint)
+0:72          'r03' (temp 1X4 matrix of uint)
+0:72          transpose (temp 1X4 matrix of uint)
+0:72            'u4x1' (temp 4X1 matrix of uint)
+0:74      Sequence
+0:74        move second child to first child (temp 2X1 matrix of uint)
+0:74          'r10' (temp 2X1 matrix of uint)
+0:74          transpose (temp 2X1 matrix of uint)
+0:74            'u1x2' (temp 1X2 matrix of uint)
+0:75      Sequence
+0:75        move second child to first child (temp 2X2 matrix of uint)
+0:75          'r11' (temp 2X2 matrix of uint)
+0:75          transpose (temp 2X2 matrix of uint)
+0:75            'u2x2' (temp 2X2 matrix of uint)
+0:76      Sequence
+0:76        move second child to first child (temp 2X3 matrix of uint)
+0:76          'r12' (temp 2X3 matrix of uint)
+0:76          transpose (temp 2X3 matrix of uint)
+0:76            'u3x2' (temp 3X2 matrix of uint)
+0:77      Sequence
+0:77        move second child to first child (temp 2X4 matrix of uint)
+0:77          'r13' (temp 2X4 matrix of uint)
+0:77          transpose (temp 2X4 matrix of uint)
+0:77            'u4x2' (temp 4X2 matrix of uint)
+0:79      Sequence
+0:79        move second child to first child (temp 3X1 matrix of uint)
+0:79          'r20' (temp 3X1 matrix of uint)
+0:79          transpose (temp 3X1 matrix of uint)
+0:79            'u1x3' (temp 1X3 matrix of uint)
+0:80      Sequence
+0:80        move second child to first child (temp 3X2 matrix of uint)
+0:80          'r21' (temp 3X2 matrix of uint)
+0:80          transpose (temp 3X2 matrix of uint)
+0:80            'u2x3' (temp 2X3 matrix of uint)
+0:81      Sequence
+0:81        move second child to first child (temp 3X3 matrix of uint)
+0:81          'r22' (temp 3X3 matrix of uint)
+0:81          transpose (temp 3X3 matrix of uint)
+0:81            'u3x3' (temp 3X3 matrix of uint)
+0:82      Sequence
+0:82        move second child to first child (temp 3X4 matrix of uint)
+0:82          'r23' (temp 3X4 matrix of uint)
+0:82          transpose (temp 3X4 matrix of uint)
+0:82            'u4x3' (temp 4X3 matrix of uint)
+0:84      Sequence
+0:84        move second child to first child (temp 4X1 matrix of uint)
+0:84          'r30' (temp 4X1 matrix of uint)
+0:84          transpose (temp 4X1 matrix of uint)
+0:84            'u1x4' (temp 1X4 matrix of uint)
+0:85      Sequence
+0:85        move second child to first child (temp 4X2 matrix of uint)
+0:85          'r31' (temp 4X2 matrix of uint)
+0:85          transpose (temp 4X2 matrix of uint)
+0:85            'u2x4' (temp 2X4 matrix of uint)
+0:86      Sequence
+0:86        move second child to first child (temp 4X3 matrix of uint)
+0:86          'r32' (temp 4X3 matrix of uint)
+0:86          transpose (temp 4X3 matrix of uint)
+0:86            'u3x4' (temp 3X4 matrix of uint)
+0:87      Sequence
+0:87        move second child to first child (temp 4X4 matrix of uint)
+0:87          'r33' (temp 4X4 matrix of uint)
+0:87          transpose (temp 4X4 matrix of uint)
+0:87            'u4x4' (temp 4X4 matrix of uint)
+0:93  Function Definition: main( (temp structure{temp 4-component vector of float color})
+0:93    Function Parameters: 
+0:?     Sequence
+0:95      move second child to first child (temp 4-component vector of float)
+0:95        color: direct index for structure (temp 4-component vector of float)
+0:95          'ps_output' (temp structure{temp 4-component vector of float color})
+0:95          Constant:
+0:95            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:96      Sequence
+0:96        Sequence
+0:96          move second child to first child (temp 4-component vector of float)
+0:?             'color' (layout(location=0 ) out 4-component vector of float)
+0:96            color: direct index for structure (temp 4-component vector of float)
+0:96              'ps_output' (temp structure{temp 4-component vector of float color})
+0:96              Constant:
+0:96                0 (const int)
+0:96        Branch: Return
+0:?   Linker Objects
+0:?     'color' (layout(location=0 ) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 227
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 223
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 6  "TestIntMatTypes("
+                              Name 8  "TestUintMatTypes("
+                              Name 14  "r00"
+                              Name 15  "i1x1"
+                              Name 21  "r01"
+                              Name 24  "i2x1"
+                              Name 30  "r02"
+                              Name 33  "i3x1"
+                              Name 39  "r03"
+                              Name 42  "i4x1"
+                              Name 45  "r10"
+                              Name 46  "i1x2"
+                              Name 51  "r11"
+                              Name 52  "i2x2"
+                              Name 57  "r12"
+                              Name 60  "i3x2"
+                              Name 65  "r13"
+                              Name 68  "i4x2"
+                              Name 71  "r20"
+                              Name 72  "i1x3"
+                              Name 75  "r21"
+                              Name 76  "i2x3"
+                              Name 81  "r22"
+                              Name 82  "i3x3"
+                              Name 87  "r23"
+                              Name 90  "i4x3"
+                              Name 93  "r30"
+                              Name 94  "i1x4"
+                              Name 97  "r31"
+                              Name 98  "i2x4"
+                              Name 101  "r32"
+                              Name 102  "i3x4"
+                              Name 107  "r33"
+                              Name 108  "i4x4"
+                              Name 115  "r00"
+                              Name 116  "u1x1"
+                              Name 122  "r01"
+                              Name 125  "u2x1"
+                              Name 131  "r02"
+                              Name 134  "u3x1"
+                              Name 140  "r03"
+                              Name 143  "u4x1"
+                              Name 146  "r10"
+                              Name 147  "u1x2"
+                              Name 152  "r11"
+                              Name 153  "u2x2"
+                              Name 158  "r12"
+                              Name 161  "u3x2"
+                              Name 166  "r13"
+                              Name 169  "u4x2"
+                              Name 172  "r20"
+                              Name 173  "u1x3"
+                              Name 176  "r21"
+                              Name 177  "u2x3"
+                              Name 182  "r22"
+                              Name 183  "u3x3"
+                              Name 188  "r23"
+                              Name 191  "u4x3"
+                              Name 194  "r30"
+                              Name 195  "u1x4"
+                              Name 198  "r31"
+                              Name 199  "u2x4"
+                              Name 202  "r32"
+                              Name 203  "u3x4"
+                              Name 208  "r33"
+                              Name 209  "u4x4"
+                              Name 214  "PS_OUTPUT"
+                              MemberName 214(PS_OUTPUT) 0  "color"
+                              Name 216  "ps_output"
+                              Name 223  "color"
+                              Decorate 223(color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+              10:             TypeInt 32 1
+              11:             TypeVector 10(int) 1
+              12:             TypeMatrix 11(ivec) 1
+              13:             TypePointer Function 12
+              18:             TypeVector 10(int) 2
+              19:             TypeMatrix 18(ivec2) 1
+              20:             TypePointer Function 19
+              22:             TypeMatrix 11(ivec) 2
+              23:             TypePointer Function 22
+              27:             TypeVector 10(int) 3
+              28:             TypeMatrix 27(ivec3) 1
+              29:             TypePointer Function 28
+              31:             TypeMatrix 11(ivec) 3
+              32:             TypePointer Function 31
+              36:             TypeVector 10(int) 4
+              37:             TypeMatrix 36(ivec4) 1
+              38:             TypePointer Function 37
+              40:             TypeMatrix 11(ivec) 4
+              41:             TypePointer Function 40
+              49:             TypeMatrix 18(ivec2) 2
+              50:             TypePointer Function 49
+              55:             TypeMatrix 27(ivec3) 2
+              56:             TypePointer Function 55
+              58:             TypeMatrix 18(ivec2) 3
+              59:             TypePointer Function 58
+              63:             TypeMatrix 36(ivec4) 2
+              64:             TypePointer Function 63
+              66:             TypeMatrix 18(ivec2) 4
+              67:             TypePointer Function 66
+              79:             TypeMatrix 27(ivec3) 3
+              80:             TypePointer Function 79
+              85:             TypeMatrix 36(ivec4) 3
+              86:             TypePointer Function 85
+              88:             TypeMatrix 27(ivec3) 4
+              89:             TypePointer Function 88
+             105:             TypeMatrix 36(ivec4) 4
+             106:             TypePointer Function 105
+             111:             TypeInt 32 0
+             112:             TypeVector 111(int) 1
+             113:             TypeMatrix 112(ivec) 1
+             114:             TypePointer Function 113
+             119:             TypeVector 111(int) 2
+             120:             TypeMatrix 119(ivec2) 1
+             121:             TypePointer Function 120
+             123:             TypeMatrix 112(ivec) 2
+             124:             TypePointer Function 123
+             128:             TypeVector 111(int) 3
+             129:             TypeMatrix 128(ivec3) 1
+             130:             TypePointer Function 129
+             132:             TypeMatrix 112(ivec) 3
+             133:             TypePointer Function 132
+             137:             TypeVector 111(int) 4
+             138:             TypeMatrix 137(ivec4) 1
+             139:             TypePointer Function 138
+             141:             TypeMatrix 112(ivec) 4
+             142:             TypePointer Function 141
+             150:             TypeMatrix 119(ivec2) 2
+             151:             TypePointer Function 150
+             156:             TypeMatrix 128(ivec3) 2
+             157:             TypePointer Function 156
+             159:             TypeMatrix 119(ivec2) 3
+             160:             TypePointer Function 159
+             164:             TypeMatrix 137(ivec4) 2
+             165:             TypePointer Function 164
+             167:             TypeMatrix 119(ivec2) 4
+             168:             TypePointer Function 167
+             180:             TypeMatrix 128(ivec3) 3
+             181:             TypePointer Function 180
+             186:             TypeMatrix 137(ivec4) 3
+             187:             TypePointer Function 186
+             189:             TypeMatrix 128(ivec3) 4
+             190:             TypePointer Function 189
+             206:             TypeMatrix 137(ivec4) 4
+             207:             TypePointer Function 206
+             212:             TypeFloat 32
+             213:             TypeVector 212(float) 4
+  214(PS_OUTPUT):             TypeStruct 213(fvec4)
+             215:             TypePointer Function 214(PS_OUTPUT)
+             217:     10(int) Constant 0
+             218:  212(float) Constant 0
+             219:  213(fvec4) ConstantComposite 218 218 218 218
+             220:             TypePointer Function 213(fvec4)
+             222:             TypePointer Output 213(fvec4)
+      223(color):    222(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+  216(ps_output):    215(ptr) Variable Function
+             221:    220(ptr) AccessChain 216(ps_output) 217
+                              Store 221 219
+             224:    220(ptr) AccessChain 216(ps_output) 217
+             225:  213(fvec4) Load 224
+                              Store 223(color) 225
+                              Return
+                              FunctionEnd
+6(TestIntMatTypes():           2 Function None 3
+               7:             Label
+         14(r00):     13(ptr) Variable Function
+        15(i1x1):     13(ptr) Variable Function
+         21(r01):     20(ptr) Variable Function
+        24(i2x1):     23(ptr) Variable Function
+         30(r02):     29(ptr) Variable Function
+        33(i3x1):     32(ptr) Variable Function
+         39(r03):     38(ptr) Variable Function
+        42(i4x1):     41(ptr) Variable Function
+         45(r10):     23(ptr) Variable Function
+        46(i1x2):     20(ptr) Variable Function
+         51(r11):     50(ptr) Variable Function
+        52(i2x2):     50(ptr) Variable Function
+         57(r12):     56(ptr) Variable Function
+        60(i3x2):     59(ptr) Variable Function
+         65(r13):     64(ptr) Variable Function
+        68(i4x2):     67(ptr) Variable Function
+         71(r20):     32(ptr) Variable Function
+        72(i1x3):     29(ptr) Variable Function
+         75(r21):     59(ptr) Variable Function
+        76(i2x3):     56(ptr) Variable Function
+         81(r22):     80(ptr) Variable Function
+        82(i3x3):     80(ptr) Variable Function
+         87(r23):     86(ptr) Variable Function
+        90(i4x3):     89(ptr) Variable Function
+         93(r30):     41(ptr) Variable Function
+        94(i1x4):     38(ptr) Variable Function
+         97(r31):     67(ptr) Variable Function
+        98(i2x4):     64(ptr) Variable Function
+        101(r32):     89(ptr) Variable Function
+       102(i3x4):     86(ptr) Variable Function
+        107(r33):    106(ptr) Variable Function
+       108(i4x4):    106(ptr) Variable Function
+              16:          12 Load 15(i1x1)
+              17:          12 Transpose 16
+                              Store 14(r00) 17
+              25:          22 Load 24(i2x1)
+              26:          19 Transpose 25
+                              Store 21(r01) 26
+              34:          31 Load 33(i3x1)
+              35:          28 Transpose 34
+                              Store 30(r02) 35
+              43:          40 Load 42(i4x1)
+              44:          37 Transpose 43
+                              Store 39(r03) 44
+              47:          19 Load 46(i1x2)
+              48:          22 Transpose 47
+                              Store 45(r10) 48
+              53:          49 Load 52(i2x2)
+              54:          49 Transpose 53
+                              Store 51(r11) 54
+              61:          58 Load 60(i3x2)
+              62:          55 Transpose 61
+                              Store 57(r12) 62
+              69:          66 Load 68(i4x2)
+              70:          63 Transpose 69
+                              Store 65(r13) 70
+              73:          28 Load 72(i1x3)
+              74:          31 Transpose 73
+                              Store 71(r20) 74
+              77:          55 Load 76(i2x3)
+              78:          58 Transpose 77
+                              Store 75(r21) 78
+              83:          79 Load 82(i3x3)
+              84:          79 Transpose 83
+                              Store 81(r22) 84
+              91:          88 Load 90(i4x3)
+              92:          85 Transpose 91
+                              Store 87(r23) 92
+              95:          37 Load 94(i1x4)
+              96:          40 Transpose 95
+                              Store 93(r30) 96
+              99:          63 Load 98(i2x4)
+             100:          66 Transpose 99
+                              Store 97(r31) 100
+             103:          85 Load 102(i3x4)
+             104:          88 Transpose 103
+                              Store 101(r32) 104
+             109:         105 Load 108(i4x4)
+             110:         105 Transpose 109
+                              Store 107(r33) 110
+                              Return
+                              FunctionEnd
+8(TestUintMatTypes():           2 Function None 3
+               9:             Label
+        115(r00):    114(ptr) Variable Function
+       116(u1x1):    114(ptr) Variable Function
+        122(r01):    121(ptr) Variable Function
+       125(u2x1):    124(ptr) Variable Function
+        131(r02):    130(ptr) Variable Function
+       134(u3x1):    133(ptr) Variable Function
+        140(r03):    139(ptr) Variable Function
+       143(u4x1):    142(ptr) Variable Function
+        146(r10):    124(ptr) Variable Function
+       147(u1x2):    121(ptr) Variable Function
+        152(r11):    151(ptr) Variable Function
+       153(u2x2):    151(ptr) Variable Function
+        158(r12):    157(ptr) Variable Function
+       161(u3x2):    160(ptr) Variable Function
+        166(r13):    165(ptr) Variable Function
+       169(u4x2):    168(ptr) Variable Function
+        172(r20):    133(ptr) Variable Function
+       173(u1x3):    130(ptr) Variable Function
+        176(r21):    160(ptr) Variable Function
+       177(u2x3):    157(ptr) Variable Function
+        182(r22):    181(ptr) Variable Function
+       183(u3x3):    181(ptr) Variable Function
+        188(r23):    187(ptr) Variable Function
+       191(u4x3):    190(ptr) Variable Function
+        194(r30):    142(ptr) Variable Function
+       195(u1x4):    139(ptr) Variable Function
+        198(r31):    168(ptr) Variable Function
+       199(u2x4):    165(ptr) Variable Function
+        202(r32):    190(ptr) Variable Function
+       203(u3x4):    187(ptr) Variable Function
+        208(r33):    207(ptr) Variable Function
+       209(u4x4):    207(ptr) Variable Function
+             117:         113 Load 116(u1x1)
+             118:         113 Transpose 117
+                              Store 115(r00) 118
+             126:         123 Load 125(u2x1)
+             127:         120 Transpose 126
+                              Store 122(r01) 127
+             135:         132 Load 134(u3x1)
+             136:         129 Transpose 135
+                              Store 131(r02) 136
+             144:         141 Load 143(u4x1)
+             145:         138 Transpose 144
+                              Store 140(r03) 145
+             148:         120 Load 147(u1x2)
+             149:         123 Transpose 148
+                              Store 146(r10) 149
+             154:         150 Load 153(u2x2)
+             155:         150 Transpose 154
+                              Store 152(r11) 155
+             162:         159 Load 161(u3x2)
+             163:         156 Transpose 162
+                              Store 158(r12) 163
+             170:         167 Load 169(u4x2)
+             171:         164 Transpose 170
+                              Store 166(r13) 171
+             174:         129 Load 173(u1x3)
+             175:         132 Transpose 174
+                              Store 172(r20) 175
+             178:         156 Load 177(u2x3)
+             179:         159 Transpose 178
+                              Store 176(r21) 179
+             184:         180 Load 183(u3x3)
+             185:         180 Transpose 184
+                              Store 182(r22) 185
+             192:         189 Load 191(u4x3)
+             193:         186 Transpose 192
+                              Store 188(r23) 193
+             196:         138 Load 195(u1x4)
+             197:         141 Transpose 196
+                              Store 194(r30) 197
+             200:         164 Load 199(u2x4)
+             201:         167 Transpose 200
+                              Store 198(r31) 201
+             204:         186 Load 203(u3x4)
+             205:         189 Transpose 204
+                              Store 202(r32) 205
+             210:         206 Load 209(u4x4)
+             211:         206 Transpose 210
+                              Store 208(r33) 211
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matrixindex.frag.out b/Test/baseResults/hlsl.matrixindex.frag.out
index 8c637c1..420ba9f 100644
--- a/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/Test/baseResults/hlsl.matrixindex.frag.out
@@ -128,7 +128,7 @@
 0:48        Branch: Return
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
 
 
 Linked fragment stage:
@@ -263,7 +263,7 @@
 0:48        Branch: Return
 0:?   Linker Objects
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int idx, layout(offset=16 ) uniform 3X2 matrix of float um})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out
index 53646bb..8995af3 100755
--- a/Test/baseResults/hlsl.max.frag.out
+++ b/Test/baseResults/hlsl.max.frag.out
@@ -10,7 +10,7 @@
 0:3      Sequence
 0:3        move second child to first child (temp 4-component vector of float)
 0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:3          max (global 4-component vector of float)
+0:3          max (temp 4-component vector of float)
 0:3            'input1' (layout(location=0 ) in 4-component vector of float)
 0:3            'input2' (layout(location=1 ) in 4-component vector of float)
 0:3        Branch: Return
@@ -34,7 +34,7 @@
 0:3      Sequence
 0:3        move second child to first child (temp 4-component vector of float)
 0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:3          max (global 4-component vector of float)
+0:3          max (temp 4-component vector of float)
 0:3            'input1' (layout(location=0 ) in 4-component vector of float)
 0:3            'input2' (layout(location=1 ) in 4-component vector of float)
 0:3        Branch: Return
diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out
new file mode 100644
index 0000000..84c7a8c
--- /dev/null
+++ b/Test/baseResults/hlsl.mintypes.frag.out
@@ -0,0 +1,224 @@
+hlsl.mintypes.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:9    Function Parameters: 
+0:?     Sequence
+0:40      add (temp mediump 2-component vector of float)
+0:40        'mf16_2' (temp mediump 2-component vector of float)
+0:40        'mf16' (temp mediump float)
+0:41      add (temp mediump 2-component vector of float)
+0:41        'mf10_2' (temp mediump 2-component vector of float)
+0:41        'mf10' (temp mediump float)
+0:42      add (temp mediump 2-component vector of int)
+0:42        'mi16_2' (temp mediump 2-component vector of int)
+0:42        'mi16' (temp mediump int)
+0:43      add (temp mediump 2-component vector of int)
+0:43        'mi12_2' (temp mediump 2-component vector of int)
+0:43        'mi12' (temp mediump int)
+0:44      add (temp mediump 2-component vector of uint)
+0:44        'mu16_2' (temp mediump 2-component vector of uint)
+0:44        'mu16' (temp mediump uint)
+0:47      move second child to first child (temp 4-component vector of float)
+0:47        Color: direct index for structure (temp 4-component vector of float)
+0:47          'psout' (temp structure{temp 4-component vector of float Color})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          0.000000
+0:47          0.000000
+0:47          0.000000
+0:47          0.000000
+0:48      Sequence
+0:48        Sequence
+0:48          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:48            Color: direct index for structure (temp 4-component vector of float)
+0:48              'psout' (temp structure{temp 4-component vector of float Color})
+0:48              Constant:
+0:48                0 (const int)
+0:48        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform mediump float b1a, layout(offset=4 ) uniform mediump float b1b})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:9    Function Parameters: 
+0:?     Sequence
+0:40      add (temp mediump 2-component vector of float)
+0:40        'mf16_2' (temp mediump 2-component vector of float)
+0:40        'mf16' (temp mediump float)
+0:41      add (temp mediump 2-component vector of float)
+0:41        'mf10_2' (temp mediump 2-component vector of float)
+0:41        'mf10' (temp mediump float)
+0:42      add (temp mediump 2-component vector of int)
+0:42        'mi16_2' (temp mediump 2-component vector of int)
+0:42        'mi16' (temp mediump int)
+0:43      add (temp mediump 2-component vector of int)
+0:43        'mi12_2' (temp mediump 2-component vector of int)
+0:43        'mi12' (temp mediump int)
+0:44      add (temp mediump 2-component vector of uint)
+0:44        'mu16_2' (temp mediump 2-component vector of uint)
+0:44        'mu16' (temp mediump uint)
+0:47      move second child to first child (temp 4-component vector of float)
+0:47        Color: direct index for structure (temp 4-component vector of float)
+0:47          'psout' (temp structure{temp 4-component vector of float Color})
+0:47          Constant:
+0:47            0 (const int)
+0:47        Constant:
+0:47          0.000000
+0:47          0.000000
+0:47          0.000000
+0:47          0.000000
+0:48      Sequence
+0:48        Sequence
+0:48          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:48            Color: direct index for structure (temp 4-component vector of float)
+0:48              'psout' (temp structure{temp 4-component vector of float Color})
+0:48              Constant:
+0:48                0 (const int)
+0:48        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform mediump float b1a, layout(offset=4 ) uniform mediump float b1b})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 65
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 58
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "mf16_2"
+                              Name 12  "mf16"
+                              Name 16  "mf10_2"
+                              Name 18  "mf10"
+                              Name 25  "mi16_2"
+                              Name 28  "mi16"
+                              Name 32  "mi12_2"
+                              Name 34  "mi12"
+                              Name 41  "mu16_2"
+                              Name 44  "mu16"
+                              Name 49  "PS_OUTPUT"
+                              MemberName 49(PS_OUTPUT) 0  "Color"
+                              Name 51  "psout"
+                              Name 58  "Color"
+                              Name 62  "$Global"
+                              MemberName 62($Global) 0  "b1a"
+                              MemberName 62($Global) 1  "b1b"
+                              Name 64  ""
+                              Decorate 9(mf16_2) RelaxedPrecision
+                              Decorate 10 RelaxedPrecision
+                              Decorate 12(mf16) RelaxedPrecision
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 15 RelaxedPrecision
+                              Decorate 16(mf10_2) RelaxedPrecision
+                              Decorate 17 RelaxedPrecision
+                              Decorate 18(mf10) RelaxedPrecision
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20 RelaxedPrecision
+                              Decorate 21 RelaxedPrecision
+                              Decorate 25(mi16_2) RelaxedPrecision
+                              Decorate 26 RelaxedPrecision
+                              Decorate 28(mi16) RelaxedPrecision
+                              Decorate 29 RelaxedPrecision
+                              Decorate 30 RelaxedPrecision
+                              Decorate 31 RelaxedPrecision
+                              Decorate 32(mi12_2) RelaxedPrecision
+                              Decorate 33 RelaxedPrecision
+                              Decorate 34(mi12) RelaxedPrecision
+                              Decorate 35 RelaxedPrecision
+                              Decorate 36 RelaxedPrecision
+                              Decorate 37 RelaxedPrecision
+                              Decorate 41(mu16_2) RelaxedPrecision
+                              Decorate 42 RelaxedPrecision
+                              Decorate 44(mu16) RelaxedPrecision
+                              Decorate 45 RelaxedPrecision
+                              Decorate 46 RelaxedPrecision
+                              Decorate 47 RelaxedPrecision
+                              Decorate 58(Color) Location 0
+                              MemberDecorate 62($Global) 0 RelaxedPrecision
+                              MemberDecorate 62($Global) 0 Offset 0
+                              MemberDecorate 62($Global) 1 RelaxedPrecision
+                              MemberDecorate 62($Global) 1 Offset 4
+                              Decorate 62($Global) Block
+                              Decorate 64 DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypePointer Function 7(fvec2)
+              11:             TypePointer Function 6(float)
+              22:             TypeInt 32 1
+              23:             TypeVector 22(int) 2
+              24:             TypePointer Function 23(ivec2)
+              27:             TypePointer Function 22(int)
+              38:             TypeInt 32 0
+              39:             TypeVector 38(int) 2
+              40:             TypePointer Function 39(ivec2)
+              43:             TypePointer Function 38(int)
+              48:             TypeVector 6(float) 4
+   49(PS_OUTPUT):             TypeStruct 48(fvec4)
+              50:             TypePointer Function 49(PS_OUTPUT)
+              52:     22(int) Constant 0
+              53:    6(float) Constant 0
+              54:   48(fvec4) ConstantComposite 53 53 53 53
+              55:             TypePointer Function 48(fvec4)
+              57:             TypePointer Output 48(fvec4)
+       58(Color):     57(ptr) Variable Output
+     62($Global):             TypeStruct 6(float) 6(float)
+              63:             TypePointer Uniform 62($Global)
+              64:     63(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+       9(mf16_2):      8(ptr) Variable Function
+        12(mf16):     11(ptr) Variable Function
+      16(mf10_2):      8(ptr) Variable Function
+        18(mf10):     11(ptr) Variable Function
+      25(mi16_2):     24(ptr) Variable Function
+        28(mi16):     27(ptr) Variable Function
+      32(mi12_2):     24(ptr) Variable Function
+        34(mi12):     27(ptr) Variable Function
+      41(mu16_2):     40(ptr) Variable Function
+        44(mu16):     43(ptr) Variable Function
+       51(psout):     50(ptr) Variable Function
+              10:    7(fvec2) Load 9(mf16_2)
+              13:    6(float) Load 12(mf16)
+              14:    7(fvec2) CompositeConstruct 13 13
+              15:    7(fvec2) FAdd 10 14
+              17:    7(fvec2) Load 16(mf10_2)
+              19:    6(float) Load 18(mf10)
+              20:    7(fvec2) CompositeConstruct 19 19
+              21:    7(fvec2) FAdd 17 20
+              26:   23(ivec2) Load 25(mi16_2)
+              29:     22(int) Load 28(mi16)
+              30:   23(ivec2) CompositeConstruct 29 29
+              31:   23(ivec2) IAdd 26 30
+              33:   23(ivec2) Load 32(mi12_2)
+              35:     22(int) Load 34(mi12)
+              36:   23(ivec2) CompositeConstruct 35 35
+              37:   23(ivec2) IAdd 33 36
+              42:   39(ivec2) Load 41(mu16_2)
+              45:     38(int) Load 44(mu16)
+              46:   39(ivec2) CompositeConstruct 45 45
+              47:   39(ivec2) IAdd 42 46
+              56:     55(ptr) AccessChain 51(psout) 52
+                              Store 56 54
+              59:     55(ptr) AccessChain 51(psout) 52
+              60:   48(fvec4) Load 59
+                              Store 58(Color) 60
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out
index 8f8c42a..f0d05ab 100755
--- a/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/Test/baseResults/hlsl.multiEntry.vert.out
@@ -21,9 +21,9 @@
 0:10            'Index' (in uint VertexIndex)
 0:10        Branch: Return
 0:?   Linker Objects
-0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
 0:?     '@entryPointOutput' (out 4-component vector of float Position)
 0:?     'Index' (in uint VertexIndex)
+0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
 
 
 Linked vertex stage:
@@ -51,9 +51,9 @@
 0:10            'Index' (in uint VertexIndex)
 0:10        Branch: Return
 0:?   Linker Objects
-0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
 0:?     '@entryPointOutput' (out 4-component vector of float Position)
 0:?     'Index' (in uint VertexIndex)
+0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.numthreads.comp.out b/Test/baseResults/hlsl.numthreads.comp.out
new file mode 100644
index 0000000..76e95c8
--- /dev/null
+++ b/Test/baseResults/hlsl.numthreads.comp.out
@@ -0,0 +1,60 @@
+hlsl.numthreads.comp
+Shader version: 450
+local_size = (4, 4, 2)
+0:? Sequence
+0:4  Function Definition: main(vu3; (temp void)
+0:4    Function Parameters: 
+0:4      'tid' (in 3-component vector of uint)
+0:9  Function Definition: main_aux1(vu3; (temp void)
+0:9    Function Parameters: 
+0:9      'tid' (in 3-component vector of uint LocalInvocationID)
+0:?   Linker Objects
+0:?     'tid' (in 3-component vector of uint LocalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 450
+local_size = (4, 4, 2)
+0:? Sequence
+0:4  Function Definition: main(vu3; (temp void)
+0:4    Function Parameters: 
+0:4      'tid' (in 3-component vector of uint)
+0:9  Function Definition: main_aux1(vu3; (temp void)
+0:9    Function Parameters: 
+0:9      'tid' (in 3-component vector of uint LocalInvocationID)
+0:?   Linker Objects
+0:?     'tid' (in 3-component vector of uint LocalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 15
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main_aux1" 14
+                              ExecutionMode 4 LocalSize 4 4 2
+                              Name 4  "main_aux1"
+                              Name 11  "main(vu3;"
+                              Name 10  "tid"
+                              Name 14  "tid"
+                              Decorate 14(tid) BuiltIn LocalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypePointer Input 7(ivec3)
+         14(tid):     13(ptr) Variable Input
+    4(main_aux1):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+   11(main(vu3;):           2 Function None 9
+         10(tid):      8(ptr) FunctionParameter
+              12:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
new file mode 100755
index 0000000..5bf838a
--- /dev/null
+++ b/Test/baseResults/hlsl.partialInit.frag.out
@@ -0,0 +1,418 @@
+hlsl.partialInit.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8  Sequence
+0:8    move second child to first child (temp 4-component vector of float)
+0:8      'gv' (global 4-component vector of float)
+0:8      Constant:
+0:8        0.000000
+0:8        0.000000
+0:8        1.000000
+0:8        0.000000
+0:9  Sequence
+0:9    move second child to first child (temp 3-element array of float)
+0:9      'gfa' (global 3-element array of float)
+0:9      Constant:
+0:9        0.000000
+0:9        0.000000
+0:9        0.000000
+0:18  Function Definition: PixelShaderFunction(vf4; (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18    Function Parameters: 
+0:18      'input' (layout(location=0 ) in 4-component vector of float)
+0:?     Sequence
+0:19      Sequence
+0:19        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:19          'o2' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:19          Constant:
+0:19            3 (const int)
+0:19            0.000000
+0:19            false (const bool)
+0:19            0.000000
+0:19            0.000000
+0:19            0.000000
+0:19            0.000000
+0:21      move second child to first child (temp 4-component vector of float)
+0:21        v: direct index for structure (temp 4-component vector of float)
+0:21          'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:21          Constant:
+0:21            3 (const int)
+0:21        vector-scale (temp 4-component vector of float)
+0:21          'gv' (global 4-component vector of float)
+0:21          direct index (temp float)
+0:21            'gfa' (global 3-element array of float)
+0:21            Constant:
+0:21              2 (const int)
+0:22      Sequence
+0:22        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:22          'o1' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:22          Constant:
+0:22            0 (const int)
+0:22            0.000000
+0:22            false (const bool)
+0:22            0.000000
+0:22            0.000000
+0:22            0.000000
+0:22            0.000000
+0:23      Sequence
+0:23        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:23          'o3' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:23          Constant:
+0:23            0 (const int)
+0:23            0.000000
+0:23            false (const bool)
+0:23            0.000000
+0:23            0.000000
+0:23            0.000000
+0:23            0.000000
+0:24      move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:24        'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:24        Constant:
+0:24          0 (const int)
+0:24          0.000000
+0:24          false (const bool)
+0:24          0.000000
+0:24          0.000000
+0:24          0.000000
+0:24          0.000000
+0:25      move second child to first child (temp bool)
+0:25        c: direct index for structure (temp bool)
+0:25          'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:25          Constant:
+0:25            2 (const int)
+0:25        c: direct index for structure (temp bool)
+0:25          'o1' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:25          Constant:
+0:25            2 (const int)
+0:26      Sequence
+0:26        move second child to first child (temp structure{temp 4X3 matrix of float m, temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b})
+0:26          'nest' (temp structure{temp 4X3 matrix of float m, temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b})
+0:26          Constant:
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0 (const int)
+0:26            0.000000
+0:26            false (const bool)
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            false (const bool)
+0:28      Sequence
+0:28        Sequence
+0:28          move second child to first child (temp int)
+0:?             'a' (layout(location=0 ) out int)
+0:28            a: direct index for structure (temp int)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                0 (const int)
+0:28          move second child to first child (temp float)
+0:?             'b' (layout(location=1 ) out float)
+0:28            b: direct index for structure (temp float)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                1 (const int)
+0:28          move second child to first child (temp bool)
+0:?             'c' (layout(location=2 ) out bool)
+0:28            c: direct index for structure (temp bool)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                2 (const int)
+0:28          move second child to first child (temp 4-component vector of float)
+0:?             'v' (layout(location=3 ) out 4-component vector of float)
+0:28            v: direct index for structure (temp 4-component vector of float)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                3 (const int)
+0:28        Branch: Return
+0:?   Linker Objects
+0:?     'a' (layout(location=0 ) out int)
+0:?     'b' (layout(location=1 ) out float)
+0:?     'c' (layout(location=2 ) out bool)
+0:?     'v' (layout(location=3 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
+0:?     'gv' (global 4-component vector of float)
+0:?     'gfa' (global 3-element array of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8  Sequence
+0:8    move second child to first child (temp 4-component vector of float)
+0:8      'gv' (global 4-component vector of float)
+0:8      Constant:
+0:8        0.000000
+0:8        0.000000
+0:8        1.000000
+0:8        0.000000
+0:9  Sequence
+0:9    move second child to first child (temp 3-element array of float)
+0:9      'gfa' (global 3-element array of float)
+0:9      Constant:
+0:9        0.000000
+0:9        0.000000
+0:9        0.000000
+0:18  Function Definition: PixelShaderFunction(vf4; (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:18    Function Parameters: 
+0:18      'input' (layout(location=0 ) in 4-component vector of float)
+0:?     Sequence
+0:19      Sequence
+0:19        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:19          'o2' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:19          Constant:
+0:19            3 (const int)
+0:19            0.000000
+0:19            false (const bool)
+0:19            0.000000
+0:19            0.000000
+0:19            0.000000
+0:19            0.000000
+0:21      move second child to first child (temp 4-component vector of float)
+0:21        v: direct index for structure (temp 4-component vector of float)
+0:21          'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:21          Constant:
+0:21            3 (const int)
+0:21        vector-scale (temp 4-component vector of float)
+0:21          'gv' (global 4-component vector of float)
+0:21          direct index (temp float)
+0:21            'gfa' (global 3-element array of float)
+0:21            Constant:
+0:21              2 (const int)
+0:22      Sequence
+0:22        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:22          'o1' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:22          Constant:
+0:22            0 (const int)
+0:22            0.000000
+0:22            false (const bool)
+0:22            0.000000
+0:22            0.000000
+0:22            0.000000
+0:22            0.000000
+0:23      Sequence
+0:23        move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:23          'o3' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:23          Constant:
+0:23            0 (const int)
+0:23            0.000000
+0:23            false (const bool)
+0:23            0.000000
+0:23            0.000000
+0:23            0.000000
+0:23            0.000000
+0:24      move second child to first child (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:24        'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:24        Constant:
+0:24          0 (const int)
+0:24          0.000000
+0:24          false (const bool)
+0:24          0.000000
+0:24          0.000000
+0:24          0.000000
+0:24          0.000000
+0:25      move second child to first child (temp bool)
+0:25        c: direct index for structure (temp bool)
+0:25          'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:25          Constant:
+0:25            2 (const int)
+0:25        c: direct index for structure (temp bool)
+0:25          'o1' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:25          Constant:
+0:25            2 (const int)
+0:26      Sequence
+0:26        move second child to first child (temp structure{temp 4X3 matrix of float m, temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b})
+0:26          'nest' (temp structure{temp 4X3 matrix of float m, temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v} os, temp bool b})
+0:26          Constant:
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0 (const int)
+0:26            0.000000
+0:26            false (const bool)
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            false (const bool)
+0:28      Sequence
+0:28        Sequence
+0:28          move second child to first child (temp int)
+0:?             'a' (layout(location=0 ) out int)
+0:28            a: direct index for structure (temp int)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                0 (const int)
+0:28          move second child to first child (temp float)
+0:?             'b' (layout(location=1 ) out float)
+0:28            b: direct index for structure (temp float)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                1 (const int)
+0:28          move second child to first child (temp bool)
+0:?             'c' (layout(location=2 ) out bool)
+0:28            c: direct index for structure (temp bool)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                2 (const int)
+0:28          move second child to first child (temp 4-component vector of float)
+0:?             'v' (layout(location=3 ) out 4-component vector of float)
+0:28            v: direct index for structure (temp 4-component vector of float)
+0:28              'o4' (temp structure{temp int a, temp float b, temp bool c, temp 4-component vector of float v})
+0:28              Constant:
+0:28                3 (const int)
+0:28        Branch: Return
+0:?   Linker Objects
+0:?     'a' (layout(location=0 ) out int)
+0:?     'b' (layout(location=1 ) out float)
+0:?     'c' (layout(location=2 ) out bool)
+0:?     'v' (layout(location=3 ) out 4-component vector of float)
+0:?     'input' (layout(location=0 ) in 4-component vector of float)
+0:?     'gv' (global 4-component vector of float)
+0:?     'gfa' (global 3-element array of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 75
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 54 59 65 69 74
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "gv"
+                              Name 17  "gfa"
+                              Name 21  "outs"
+                              MemberName 21(outs) 0  "a"
+                              MemberName 21(outs) 1  "b"
+                              MemberName 21(outs) 2  "c"
+                              MemberName 21(outs) 3  "v"
+                              Name 23  "o2"
+                              Name 28  "o4"
+                              Name 37  "o1"
+                              Name 40  "o3"
+                              Name 47  "Nest"
+                              MemberName 47(Nest) 0  "m"
+                              MemberName 47(Nest) 1  "os"
+                              MemberName 47(Nest) 2  "b"
+                              Name 49  "nest"
+                              Name 54  "a"
+                              Name 59  "b"
+                              Name 65  "c"
+                              Name 69  "v"
+                              Name 74  "input"
+                              Decorate 54(a) Location 0
+                              Decorate 59(b) Location 1
+                              Decorate 65(c) Location 2
+                              Decorate 69(v) Location 3
+                              Decorate 74(input) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Private 7(fvec4)
+           9(gv):      8(ptr) Variable Private
+              10:    6(float) Constant 0
+              11:    6(float) Constant 1065353216
+              12:    7(fvec4) ConstantComposite 10 10 11 10
+              13:             TypeInt 32 0
+              14:     13(int) Constant 3
+              15:             TypeArray 6(float) 14
+              16:             TypePointer Private 15
+         17(gfa):     16(ptr) Variable Private
+              18:          15 ConstantComposite 10 10 10
+              19:             TypeInt 32 1
+              20:             TypeBool
+        21(outs):             TypeStruct 19(int) 6(float) 20(bool) 7(fvec4)
+              22:             TypePointer Function 21(outs)
+              24:     19(int) Constant 3
+              25:    20(bool) ConstantFalse
+              26:    7(fvec4) ConstantComposite 10 10 10 10
+              27:    21(outs) ConstantComposite 24 10 25 26
+              30:     19(int) Constant 2
+              31:             TypePointer Private 6(float)
+              35:             TypePointer Function 7(fvec4)
+              38:     19(int) Constant 0
+              39:    21(outs) ConstantComposite 38 10 25 26
+              41:             TypePointer Function 20(bool)
+              45:             TypeVector 6(float) 3
+              46:             TypeMatrix 45(fvec3) 4
+        47(Nest):             TypeStruct 46 21(outs) 20(bool)
+              48:             TypePointer Function 47(Nest)
+              50:   45(fvec3) ConstantComposite 10 10 10
+              51:          46 ConstantComposite 50 50 50 50
+              52:    47(Nest) ConstantComposite 51 39 25
+              53:             TypePointer Output 19(int)
+           54(a):     53(ptr) Variable Output
+              55:             TypePointer Function 19(int)
+              58:             TypePointer Output 6(float)
+           59(b):     58(ptr) Variable Output
+              60:     19(int) Constant 1
+              61:             TypePointer Function 6(float)
+              64:             TypePointer Output 20(bool)
+           65(c):     64(ptr) Variable Output
+              68:             TypePointer Output 7(fvec4)
+           69(v):     68(ptr) Variable Output
+              73:             TypePointer Input 7(fvec4)
+       74(input):     73(ptr) Variable Input
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+          23(o2):     22(ptr) Variable Function
+          28(o4):     22(ptr) Variable Function
+          37(o1):     22(ptr) Variable Function
+          40(o3):     22(ptr) Variable Function
+        49(nest):     48(ptr) Variable Function
+                              Store 9(gv) 12
+                              Store 17(gfa) 18
+                              Store 23(o2) 27
+              29:    7(fvec4) Load 9(gv)
+              32:     31(ptr) AccessChain 17(gfa) 30
+              33:    6(float) Load 32
+              34:    7(fvec4) VectorTimesScalar 29 33
+              36:     35(ptr) AccessChain 28(o4) 24
+                              Store 36 34
+                              Store 37(o1) 39
+                              Store 40(o3) 39
+                              Store 28(o4) 39
+              42:     41(ptr) AccessChain 37(o1) 30
+              43:    20(bool) Load 42
+              44:     41(ptr) AccessChain 28(o4) 30
+                              Store 44 43
+                              Store 49(nest) 52
+              56:     55(ptr) AccessChain 28(o4) 38
+              57:     19(int) Load 56
+                              Store 54(a) 57
+              62:     61(ptr) AccessChain 28(o4) 60
+              63:    6(float) Load 62
+                              Store 59(b) 63
+              66:     41(ptr) AccessChain 28(o4) 30
+              67:    20(bool) Load 66
+                              Store 65(c) 67
+              70:     35(ptr) AccessChain 28(o4) 24
+              71:    7(fvec4) Load 70
+                              Store 69(v) 71
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.precise.frag.out b/Test/baseResults/hlsl.precise.frag.out
index e9205cf..cd2af74 100644
--- a/Test/baseResults/hlsl.precise.frag.out
+++ b/Test/baseResults/hlsl.precise.frag.out
@@ -29,8 +29,8 @@
 0:12                0 (const int)
 0:12        Branch: Return
 0:?   Linker Objects
-0:?     'precisefloat' (noContraction global float)
 0:?     'color' (layout(location=0 ) noContraction out 4-component vector of float)
+0:?     'precisefloat' (noContraction global float)
 
 
 Linked fragment stage:
@@ -66,8 +66,8 @@
 0:12                0 (const int)
 0:12        Branch: Return
 0:?   Linker Objects
-0:?     'precisefloat' (noContraction global float)
 0:?     'color' (layout(location=0 ) noContraction out 4-component vector of float)
+0:?     'precisefloat' (noContraction global float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.promote.binary.frag.out b/Test/baseResults/hlsl.promote.binary.frag.out
new file mode 100644
index 0000000..2c7425e
--- /dev/null
+++ b/Test/baseResults/hlsl.promote.binary.frag.out
@@ -0,0 +1,280 @@
+hlsl.promote.binary.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:14  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:14    Function Parameters: 
+0:?     Sequence
+0:15      mod (temp float)
+0:15        Convert int to float (temp float)
+0:15          ival: direct index for structure (layout(offset=32 ) uniform int)
+0:15            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:15            Constant:
+0:15              2 (const uint)
+0:15        fval: direct index for structure (layout(offset=64 ) uniform float)
+0:15          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:15          Constant:
+0:15            4 (const uint)
+0:16      mod (temp 4-component vector of float)
+0:16        Convert int to float (temp 4-component vector of float)
+0:16          ival4: direct index for structure (layout(offset=48 ) uniform 4-component vector of int)
+0:16            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:16            Constant:
+0:16              3 (const uint)
+0:16        fval4: direct index for structure (layout(offset=80 ) uniform 4-component vector of float)
+0:16          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:16          Constant:
+0:16            5 (const uint)
+0:18      mod (temp float)
+0:18        Convert bool to float (temp float)
+0:18          bval: direct index for structure (layout(offset=0 ) uniform bool)
+0:18            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:18            Constant:
+0:18              0 (const uint)
+0:18        fval: direct index for structure (layout(offset=64 ) uniform float)
+0:18          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:18          Constant:
+0:18            4 (const uint)
+0:19      mod (temp 4-component vector of float)
+0:19        Convert bool to float (temp 4-component vector of float)
+0:19          bval4: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:19            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:19            Constant:
+0:19              1 (const uint)
+0:19        fval4: direct index for structure (layout(offset=80 ) uniform 4-component vector of float)
+0:19          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:19          Constant:
+0:19            5 (const uint)
+0:21      Sequence
+0:21        move second child to first child (temp int)
+0:21          'l_int' (temp int)
+0:21          Constant:
+0:21            1 (const int)
+0:22      mod second child into first child (temp int)
+0:22        'l_int' (temp int)
+0:22        Convert float to int (temp int)
+0:22          fval: direct index for structure (layout(offset=64 ) uniform float)
+0:22            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:22            Constant:
+0:22              4 (const uint)
+0:25      move second child to first child (temp 4-component vector of float)
+0:25        Color: direct index for structure (temp 4-component vector of float)
+0:25          'psout' (temp structure{temp 4-component vector of float Color})
+0:25          Constant:
+0:25            0 (const int)
+0:25        Constant:
+0:25          0.000000
+0:25          0.000000
+0:25          0.000000
+0:25          0.000000
+0:26      Sequence
+0:26        Sequence
+0:26          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:26            Color: direct index for structure (temp 4-component vector of float)
+0:26              'psout' (temp structure{temp 4-component vector of float Color})
+0:26              Constant:
+0:26                0 (const int)
+0:26        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:14  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:14    Function Parameters: 
+0:?     Sequence
+0:15      mod (temp float)
+0:15        Convert int to float (temp float)
+0:15          ival: direct index for structure (layout(offset=32 ) uniform int)
+0:15            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:15            Constant:
+0:15              2 (const uint)
+0:15        fval: direct index for structure (layout(offset=64 ) uniform float)
+0:15          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:15          Constant:
+0:15            4 (const uint)
+0:16      mod (temp 4-component vector of float)
+0:16        Convert int to float (temp 4-component vector of float)
+0:16          ival4: direct index for structure (layout(offset=48 ) uniform 4-component vector of int)
+0:16            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:16            Constant:
+0:16              3 (const uint)
+0:16        fval4: direct index for structure (layout(offset=80 ) uniform 4-component vector of float)
+0:16          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:16          Constant:
+0:16            5 (const uint)
+0:18      mod (temp float)
+0:18        Convert bool to float (temp float)
+0:18          bval: direct index for structure (layout(offset=0 ) uniform bool)
+0:18            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:18            Constant:
+0:18              0 (const uint)
+0:18        fval: direct index for structure (layout(offset=64 ) uniform float)
+0:18          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:18          Constant:
+0:18            4 (const uint)
+0:19      mod (temp 4-component vector of float)
+0:19        Convert bool to float (temp 4-component vector of float)
+0:19          bval4: direct index for structure (layout(offset=16 ) uniform 4-component vector of bool)
+0:19            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:19            Constant:
+0:19              1 (const uint)
+0:19        fval4: direct index for structure (layout(offset=80 ) uniform 4-component vector of float)
+0:19          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:19          Constant:
+0:19            5 (const uint)
+0:21      Sequence
+0:21        move second child to first child (temp int)
+0:21          'l_int' (temp int)
+0:21          Constant:
+0:21            1 (const int)
+0:22      mod second child into first child (temp int)
+0:22        'l_int' (temp int)
+0:22        Convert float to int (temp int)
+0:22          fval: direct index for structure (layout(offset=64 ) uniform float)
+0:22            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+0:22            Constant:
+0:22              4 (const uint)
+0:25      move second child to first child (temp 4-component vector of float)
+0:25        Color: direct index for structure (temp 4-component vector of float)
+0:25          'psout' (temp structure{temp 4-component vector of float Color})
+0:25          Constant:
+0:25            0 (const int)
+0:25        Constant:
+0:25          0.000000
+0:25          0.000000
+0:25          0.000000
+0:25          0.000000
+0:26      Sequence
+0:26        Sequence
+0:26          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:26            Color: direct index for structure (temp 4-component vector of float)
+0:26              'psout' (temp structure{temp 4-component vector of float Color})
+0:26              Constant:
+0:26                0 (const int)
+0:26        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform bool bval, layout(offset=16 ) uniform 4-component vector of bool bval4, layout(offset=32 ) uniform int ival, layout(offset=48 ) uniform 4-component vector of int ival4, layout(offset=64 ) uniform float fval, layout(offset=80 ) uniform 4-component vector of float fval4})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 78
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 74
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 12  "$Global"
+                              MemberName 12($Global) 0  "bval"
+                              MemberName 12($Global) 1  "bval4"
+                              MemberName 12($Global) 2  "ival"
+                              MemberName 12($Global) 3  "ival4"
+                              MemberName 12($Global) 4  "fval"
+                              MemberName 12($Global) 5  "fval4"
+                              Name 14  ""
+                              Name 62  "l_int"
+                              Name 68  "PS_OUTPUT"
+                              MemberName 68(PS_OUTPUT) 0  "Color"
+                              Name 70  "psout"
+                              Name 74  "Color"
+                              MemberDecorate 12($Global) 0 Offset 0
+                              MemberDecorate 12($Global) 1 Offset 16
+                              MemberDecorate 12($Global) 2 Offset 32
+                              MemberDecorate 12($Global) 3 Offset 48
+                              MemberDecorate 12($Global) 4 Offset 64
+                              MemberDecorate 12($Global) 5 Offset 80
+                              Decorate 12($Global) Block
+                              Decorate 14 DescriptorSet 0
+                              Decorate 74(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeInt 32 1
+               9:             TypeVector 8(int) 4
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+     12($Global):             TypeStruct 6(int) 7(ivec4) 8(int) 9(ivec4) 10(float) 11(fvec4)
+              13:             TypePointer Uniform 12($Global)
+              14:     13(ptr) Variable Uniform
+              15:      8(int) Constant 2
+              16:             TypePointer Uniform 8(int)
+              20:      8(int) Constant 4
+              21:             TypePointer Uniform 10(float)
+              25:      8(int) Constant 3
+              26:             TypePointer Uniform 9(ivec4)
+              30:      8(int) Constant 5
+              31:             TypePointer Uniform 11(fvec4)
+              35:      8(int) Constant 0
+              36:             TypePointer Uniform 6(int)
+              39:             TypeBool
+              40:      6(int) Constant 0
+              42:   10(float) Constant 0
+              43:   10(float) Constant 1065353216
+              48:      8(int) Constant 1
+              49:             TypePointer Uniform 7(ivec4)
+              52:             TypeVector 39(bool) 4
+              53:    7(ivec4) ConstantComposite 40 40 40 40
+              55:   11(fvec4) ConstantComposite 42 42 42 42
+              56:   11(fvec4) ConstantComposite 43 43 43 43
+              61:             TypePointer Function 8(int)
+   68(PS_OUTPUT):             TypeStruct 11(fvec4)
+              69:             TypePointer Function 68(PS_OUTPUT)
+              71:             TypePointer Function 11(fvec4)
+              73:             TypePointer Output 11(fvec4)
+       74(Color):     73(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       62(l_int):     61(ptr) Variable Function
+       70(psout):     69(ptr) Variable Function
+              17:     16(ptr) AccessChain 14 15
+              18:      8(int) Load 17
+              19:   10(float) ConvertSToF 18
+              22:     21(ptr) AccessChain 14 20
+              23:   10(float) Load 22
+              24:   10(float) FMod 19 23
+              27:     26(ptr) AccessChain 14 25
+              28:    9(ivec4) Load 27
+              29:   11(fvec4) ConvertSToF 28
+              32:     31(ptr) AccessChain 14 30
+              33:   11(fvec4) Load 32
+              34:   11(fvec4) FMod 29 33
+              37:     36(ptr) AccessChain 14 35
+              38:      6(int) Load 37
+              41:    39(bool) INotEqual 38 40
+              44:   10(float) Select 41 43 42
+              45:     21(ptr) AccessChain 14 20
+              46:   10(float) Load 45
+              47:   10(float) FMod 44 46
+              50:     49(ptr) AccessChain 14 48
+              51:    7(ivec4) Load 50
+              54:   52(bvec4) INotEqual 51 53
+              57:   11(fvec4) Select 54 56 55
+              58:     31(ptr) AccessChain 14 30
+              59:   11(fvec4) Load 58
+              60:   11(fvec4) FMod 57 59
+                              Store 62(l_int) 48
+              63:     21(ptr) AccessChain 14 20
+              64:   10(float) Load 63
+              65:      8(int) ConvertFToS 64
+              66:      8(int) Load 62(l_int)
+              67:      8(int) SMod 66 65
+                              Store 62(l_int) 67
+              72:     71(ptr) AccessChain 70(psout) 35
+                              Store 72 55
+              75:     71(ptr) AccessChain 70(psout) 35
+              76:   11(fvec4) Load 75
+                              Store 74(Color) 76
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.promote.vec1.frag.out b/Test/baseResults/hlsl.promote.vec1.frag.out
new file mode 100644
index 0000000..9179dbc
--- /dev/null
+++ b/Test/baseResults/hlsl.promote.vec1.frag.out
@@ -0,0 +1,118 @@
+hlsl.promote.vec1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: main( (temp 4-component vector of float)
+0:3    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child (temp float)
+0:7        'f1a' (temp float)
+0:7        Construct float (temp float)
+0:7          'f1b' (temp 1-component vector of float)
+0:8      move second child to first child (temp 1-component vector of float)
+0:8        'f1b' (temp 1-component vector of float)
+0:8        Construct float (temp 1-component vector of float)
+0:8          'f1a' (temp float)
+0:11      step (temp 3-component vector of float)
+0:11        Constant:
+0:11          0.000000
+0:11          0.000000
+0:11          0.000000
+0:11        'f3' (temp 3-component vector of float)
+0:13      sine (temp float)
+0:13        Construct float (in float)
+0:13          'f1b' (temp 1-component vector of float)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:15        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: main( (temp 4-component vector of float)
+0:3    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child (temp float)
+0:7        'f1a' (temp float)
+0:7        Construct float (temp float)
+0:7          'f1b' (temp 1-component vector of float)
+0:8      move second child to first child (temp 1-component vector of float)
+0:8        'f1b' (temp 1-component vector of float)
+0:8        Construct float (temp 1-component vector of float)
+0:8          'f1a' (temp float)
+0:11      step (temp 3-component vector of float)
+0:11        Constant:
+0:11          0.000000
+0:11          0.000000
+0:11          0.000000
+0:11        'f3' (temp 3-component vector of float)
+0:13      sine (temp float)
+0:13        Construct float (in float)
+0:13          'f1b' (temp 1-component vector of float)
+0:15      Sequence
+0:15        move second child to first child (temp 4-component vector of float)
+0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?           Constant:
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:?             0.000000
+0:15        Branch: Return
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 26
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 23
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "f1a"
+                              Name 9  "f1b"
+                              Name 16  "f3"
+                              Name 23  "@entryPointOutput"
+                              Decorate 23(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+              12:             TypeVector 6(float) 3
+              13:    6(float) Constant 0
+              14:   12(fvec3) ConstantComposite 13 13 13
+              15:             TypePointer Function 12(fvec3)
+              21:             TypeVector 6(float) 4
+              22:             TypePointer Output 21(fvec4)
+23(@entryPointOutput):     22(ptr) Variable Output
+              24:   21(fvec4) ConstantComposite 13 13 13 13
+         4(main):           2 Function None 3
+               5:             Label
+          8(f1a):      7(ptr) Variable Function
+          9(f1b):      7(ptr) Variable Function
+          16(f3):     15(ptr) Variable Function
+              10:    6(float) Load 9(f1b)
+                              Store 8(f1a) 10
+              11:    6(float) Load 8(f1a)
+                              Store 9(f1b) 11
+              17:   12(fvec3) Load 16(f3)
+              18:   12(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 14 17
+              19:    6(float) Load 9(f1b)
+              20:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 19
+                              Store 23(@entryPointOutput) 24
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out
index e3df54f..01ced16 100644
--- a/Test/baseResults/hlsl.promotions.frag.out
+++ b/Test/baseResults/hlsl.promotions.frag.out
@@ -782,8 +782,8 @@
 0:200                0 (const int)
 0:200        Branch: Return
 0:?   Linker Objects
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
 
 
 Linked fragment stage:
@@ -1572,8 +1572,8 @@
 0:200                0 (const int)
 0:200        Branch: Return
 0:?   Linker Objects
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 3-component vector of int i3, layout(offset=16 ) uniform 3-component vector of bool b3, layout(offset=32 ) uniform 3-component vector of float f3, layout(offset=48 ) uniform 3-component vector of uint u3, layout(offset=64 ) uniform 3-component vector of double d3, layout(offset=88 ) uniform int is, layout(offset=92 ) uniform bool bs, layout(offset=96 ) uniform float fs, layout(offset=100 ) uniform uint us, layout(offset=104 ) uniform double ds})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out
new file mode 100644
index 0000000..123bd4c
--- /dev/null
+++ b/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -0,0 +1,5261 @@
+hlsl.rw.atomics.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:45  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:45    Function Parameters: 
+0:?     Sequence
+0:50      imageAtomicAdd (temp int)
+0:50        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:50        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:50          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:50          Constant:
+0:50            5 (const uint)
+0:50        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:50          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:50          Constant:
+0:50            8 (const uint)
+0:51      move second child to first child (temp int)
+0:51        'out_i1' (temp int)
+0:51        imageAtomicAdd (temp int)
+0:51          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:51          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:51            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:51            Constant:
+0:51              5 (const uint)
+0:51          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:51            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:51            Constant:
+0:51              5 (const uint)
+0:52      imageAtomicAnd (temp int)
+0:52        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:52        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:52          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:52          Constant:
+0:52            5 (const uint)
+0:52        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:52          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:52          Constant:
+0:52            8 (const uint)
+0:53      move second child to first child (temp int)
+0:53        'out_i1' (temp int)
+0:53        imageAtomicAnd (temp int)
+0:53          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:53          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:53            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:53            Constant:
+0:53              5 (const uint)
+0:53          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:53            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:53            Constant:
+0:53              5 (const uint)
+0:54      move second child to first child (temp int)
+0:54        'out_i1' (temp int)
+0:54        imageAtomicCompSwap (temp int)
+0:54          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:54          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              5 (const uint)
+0:54          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              8 (const uint)
+0:54          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              9 (const uint)
+0:55      move second child to first child (temp int)
+0:55        'out_i1' (temp int)
+0:55        imageAtomicExchange (temp int)
+0:55          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:55          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:55            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:55            Constant:
+0:55              5 (const uint)
+0:55          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:55            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:55            Constant:
+0:55              5 (const uint)
+0:56      imageAtomicMax (temp int)
+0:56        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:56        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:56          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:56          Constant:
+0:56            5 (const uint)
+0:56        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:56          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:56          Constant:
+0:56            8 (const uint)
+0:57      move second child to first child (temp int)
+0:57        'out_i1' (temp int)
+0:57        imageAtomicMax (temp int)
+0:57          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:57          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:57            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:57            Constant:
+0:57              5 (const uint)
+0:57          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:57            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:57            Constant:
+0:57              5 (const uint)
+0:58      imageAtomicMin (temp int)
+0:58        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:58        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:58          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:58          Constant:
+0:58            5 (const uint)
+0:58        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:58          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:58          Constant:
+0:58            8 (const uint)
+0:59      move second child to first child (temp int)
+0:59        'out_i1' (temp int)
+0:59        imageAtomicMin (temp int)
+0:59          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:59          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:59            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:59            Constant:
+0:59              5 (const uint)
+0:59          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:59            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:59            Constant:
+0:59              5 (const uint)
+0:60      imageAtomicOr (temp int)
+0:60        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:60        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:60          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:60          Constant:
+0:60            5 (const uint)
+0:60        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:60          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:60          Constant:
+0:60            8 (const uint)
+0:61      move second child to first child (temp int)
+0:61        'out_i1' (temp int)
+0:61        imageAtomicOr (temp int)
+0:61          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:61          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:61            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:61            Constant:
+0:61              5 (const uint)
+0:61          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:61            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:61            Constant:
+0:61              5 (const uint)
+0:62      imageAtomicXor (temp int)
+0:62        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:62        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:62          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:62          Constant:
+0:62            5 (const uint)
+0:62        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:62          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:62          Constant:
+0:62            8 (const uint)
+0:63      move second child to first child (temp int)
+0:63        'out_i1' (temp int)
+0:63        imageAtomicXor (temp int)
+0:63          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:63          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:63            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:63            Constant:
+0:63              5 (const uint)
+0:63          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:63            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:63            Constant:
+0:63              5 (const uint)
+0:66      imageAtomicAdd (temp uint)
+0:66        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:66        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:66          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:66          Constant:
+0:66            0 (const uint)
+0:66        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:66          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:66          Constant:
+0:66            0 (const uint)
+0:67      move second child to first child (temp uint)
+0:67        'out_u1' (temp uint)
+0:67        imageAtomicAdd (temp uint)
+0:67          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:67          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:67            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:67            Constant:
+0:67              0 (const uint)
+0:67          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:67            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:67            Constant:
+0:67              0 (const uint)
+0:68      imageAtomicAnd (temp uint)
+0:68        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:68        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:68          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:68          Constant:
+0:68            0 (const uint)
+0:68        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:68          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:68          Constant:
+0:68            0 (const uint)
+0:69      move second child to first child (temp uint)
+0:69        'out_u1' (temp uint)
+0:69        imageAtomicAnd (temp uint)
+0:69          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:69          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:69            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:69            Constant:
+0:69              0 (const uint)
+0:69          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:69            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:69            Constant:
+0:69              0 (const uint)
+0:70      move second child to first child (temp uint)
+0:70        'out_u1' (temp uint)
+0:70        imageAtomicCompSwap (temp uint)
+0:70          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:70          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              0 (const uint)
+0:70          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              3 (const uint)
+0:70          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              4 (const uint)
+0:71      move second child to first child (temp uint)
+0:71        'out_u1' (temp uint)
+0:71        imageAtomicExchange (temp uint)
+0:71          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:71          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:71            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:71            Constant:
+0:71              0 (const uint)
+0:71          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:71            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:71            Constant:
+0:71              0 (const uint)
+0:72      imageAtomicMax (temp uint)
+0:72        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:72        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:72          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:72          Constant:
+0:72            0 (const uint)
+0:72        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:72          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:72          Constant:
+0:72            0 (const uint)
+0:73      move second child to first child (temp uint)
+0:73        'out_u1' (temp uint)
+0:73        imageAtomicMax (temp uint)
+0:73          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:73          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:73            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:73            Constant:
+0:73              0 (const uint)
+0:73          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:73            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:73            Constant:
+0:73              0 (const uint)
+0:74      imageAtomicMin (temp uint)
+0:74        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:74        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:74          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:74          Constant:
+0:74            0 (const uint)
+0:74        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:74          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:74          Constant:
+0:74            0 (const uint)
+0:75      move second child to first child (temp uint)
+0:75        'out_u1' (temp uint)
+0:75        imageAtomicMin (temp uint)
+0:75          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:75          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:75            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:75            Constant:
+0:75              0 (const uint)
+0:75          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:75            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:75            Constant:
+0:75              0 (const uint)
+0:76      imageAtomicOr (temp uint)
+0:76        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:76        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:76          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:76          Constant:
+0:76            0 (const uint)
+0:76        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:76          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:76          Constant:
+0:76            0 (const uint)
+0:77      move second child to first child (temp uint)
+0:77        'out_u1' (temp uint)
+0:77        imageAtomicOr (temp uint)
+0:77          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:77          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:77            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:77            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:77            Constant:
+0:77              0 (const uint)
+0:78      imageAtomicXor (temp uint)
+0:78        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:78        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:78          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:78          Constant:
+0:78            0 (const uint)
+0:78        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:78          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:78          Constant:
+0:78            0 (const uint)
+0:79      move second child to first child (temp uint)
+0:79        'out_u1' (temp uint)
+0:79        imageAtomicXor (temp uint)
+0:79          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:79          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:79            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:79            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:79            Constant:
+0:79              0 (const uint)
+0:82      imageAtomicAdd (temp int)
+0:82        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:82        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:82          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:82          Constant:
+0:82            6 (const uint)
+0:82        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:82          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:82          Constant:
+0:82            8 (const uint)
+0:83      move second child to first child (temp int)
+0:83        'out_i1' (temp int)
+0:83        imageAtomicAdd (temp int)
+0:83          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:83          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:83            Constant:
+0:83              6 (const uint)
+0:83          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:83            Constant:
+0:83              5 (const uint)
+0:84      imageAtomicAnd (temp int)
+0:84        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:84        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:84          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:84          Constant:
+0:84            6 (const uint)
+0:84        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:84          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:84          Constant:
+0:84            8 (const uint)
+0:85      move second child to first child (temp int)
+0:85        'out_i1' (temp int)
+0:85        imageAtomicAnd (temp int)
+0:85          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:85          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:85            Constant:
+0:85              6 (const uint)
+0:85          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:85            Constant:
+0:85              5 (const uint)
+0:86      move second child to first child (temp int)
+0:86        'out_i1' (temp int)
+0:86        imageAtomicCompSwap (temp int)
+0:86          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:86          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              6 (const uint)
+0:86          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              8 (const uint)
+0:86          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              9 (const uint)
+0:87      move second child to first child (temp int)
+0:87        'out_i1' (temp int)
+0:87        imageAtomicExchange (temp int)
+0:87          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:87          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:87            Constant:
+0:87              6 (const uint)
+0:87          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:87            Constant:
+0:87              5 (const uint)
+0:88      imageAtomicMax (temp int)
+0:88        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:88        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:88          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:88          Constant:
+0:88            6 (const uint)
+0:88        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:88          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:88          Constant:
+0:88            8 (const uint)
+0:89      move second child to first child (temp int)
+0:89        'out_i1' (temp int)
+0:89        imageAtomicMax (temp int)
+0:89          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:89          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:89            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:89            Constant:
+0:89              6 (const uint)
+0:89          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:89            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:89            Constant:
+0:89              5 (const uint)
+0:90      imageAtomicMin (temp int)
+0:90        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:90        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:90          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:90          Constant:
+0:90            6 (const uint)
+0:90        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:90          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:90          Constant:
+0:90            8 (const uint)
+0:91      move second child to first child (temp int)
+0:91        'out_i1' (temp int)
+0:91        imageAtomicMin (temp int)
+0:91          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:91          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:91            Constant:
+0:91              6 (const uint)
+0:91          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:91            Constant:
+0:91              5 (const uint)
+0:92      imageAtomicOr (temp int)
+0:92        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:92        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:92          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:92          Constant:
+0:92            6 (const uint)
+0:92        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:92          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:92          Constant:
+0:92            8 (const uint)
+0:93      move second child to first child (temp int)
+0:93        'out_i1' (temp int)
+0:93        imageAtomicOr (temp int)
+0:93          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:93          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:93            Constant:
+0:93              6 (const uint)
+0:93          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:93            Constant:
+0:93              5 (const uint)
+0:94      imageAtomicXor (temp int)
+0:94        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:94        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:94          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:94          Constant:
+0:94            6 (const uint)
+0:94        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:94          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:94          Constant:
+0:94            8 (const uint)
+0:95      move second child to first child (temp int)
+0:95        'out_i1' (temp int)
+0:95        imageAtomicXor (temp int)
+0:95          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:95          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:95            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:95            Constant:
+0:95              6 (const uint)
+0:95          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:95            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:95            Constant:
+0:95              5 (const uint)
+0:98      imageAtomicAdd (temp uint)
+0:98        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:98        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:98          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:98          Constant:
+0:98            1 (const uint)
+0:98        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:98          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:98          Constant:
+0:98            0 (const uint)
+0:99      move second child to first child (temp uint)
+0:99        'out_u1' (temp uint)
+0:99        imageAtomicAdd (temp uint)
+0:99          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:99          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:99            Constant:
+0:99              1 (const uint)
+0:99          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:99            Constant:
+0:99              0 (const uint)
+0:100      imageAtomicAnd (temp uint)
+0:100        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:100        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:100          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:100          Constant:
+0:100            1 (const uint)
+0:100        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:100          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:100          Constant:
+0:100            0 (const uint)
+0:101      move second child to first child (temp uint)
+0:101        'out_u1' (temp uint)
+0:101        imageAtomicAnd (temp uint)
+0:101          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:101          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:101            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:101            Constant:
+0:101              1 (const uint)
+0:101          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:101            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:101            Constant:
+0:101              0 (const uint)
+0:102      move second child to first child (temp uint)
+0:102        'out_u1' (temp uint)
+0:102        imageAtomicCompSwap (temp uint)
+0:102          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:102          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              1 (const uint)
+0:102          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              3 (const uint)
+0:102          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              4 (const uint)
+0:103      move second child to first child (temp uint)
+0:103        'out_u1' (temp uint)
+0:103        imageAtomicExchange (temp uint)
+0:103          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:103          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:103            Constant:
+0:103              1 (const uint)
+0:103          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:103            Constant:
+0:103              0 (const uint)
+0:104      imageAtomicMax (temp uint)
+0:104        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:104        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:104          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:104          Constant:
+0:104            1 (const uint)
+0:104        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:104          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:104          Constant:
+0:104            0 (const uint)
+0:105      move second child to first child (temp uint)
+0:105        'out_u1' (temp uint)
+0:105        imageAtomicMax (temp uint)
+0:105          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:105          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:105            Constant:
+0:105              1 (const uint)
+0:105          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:105            Constant:
+0:105              0 (const uint)
+0:106      imageAtomicMin (temp uint)
+0:106        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:106        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:106          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:106          Constant:
+0:106            1 (const uint)
+0:106        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:106          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:106          Constant:
+0:106            0 (const uint)
+0:107      move second child to first child (temp uint)
+0:107        'out_u1' (temp uint)
+0:107        imageAtomicMin (temp uint)
+0:107          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:107          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:107            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:107            Constant:
+0:107              1 (const uint)
+0:107          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:107            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      imageAtomicOr (temp uint)
+0:108        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:108        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:108          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:108          Constant:
+0:108            1 (const uint)
+0:108        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:108          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:108          Constant:
+0:108            0 (const uint)
+0:109      move second child to first child (temp uint)
+0:109        'out_u1' (temp uint)
+0:109        imageAtomicOr (temp uint)
+0:109          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:109          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:109            Constant:
+0:109              1 (const uint)
+0:109          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:109            Constant:
+0:109              0 (const uint)
+0:110      imageAtomicXor (temp uint)
+0:110        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:110        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:110          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:110          Constant:
+0:110            1 (const uint)
+0:110        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:110          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:110          Constant:
+0:110            0 (const uint)
+0:111      move second child to first child (temp uint)
+0:111        'out_u1' (temp uint)
+0:111        imageAtomicXor (temp uint)
+0:111          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:111          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:111            Constant:
+0:111              1 (const uint)
+0:111          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:111            Constant:
+0:111              0 (const uint)
+0:114      imageAtomicAdd (temp int)
+0:114        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:114        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:114          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:114          Constant:
+0:114            7 (const uint)
+0:114        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:114          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:114          Constant:
+0:114            8 (const uint)
+0:115      move second child to first child (temp int)
+0:115        'out_i1' (temp int)
+0:115        imageAtomicAdd (temp int)
+0:115          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:115          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:115            Constant:
+0:115              7 (const uint)
+0:115          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:115            Constant:
+0:115              5 (const uint)
+0:116      imageAtomicAnd (temp int)
+0:116        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:116        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:116          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:116          Constant:
+0:116            7 (const uint)
+0:116        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:116          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:116          Constant:
+0:116            8 (const uint)
+0:117      move second child to first child (temp int)
+0:117        'out_i1' (temp int)
+0:117        imageAtomicAnd (temp int)
+0:117          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:117          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:117            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:117            Constant:
+0:117              7 (const uint)
+0:117          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:117            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:117            Constant:
+0:117              5 (const uint)
+0:118      move second child to first child (temp int)
+0:118        'out_i1' (temp int)
+0:118        imageAtomicCompSwap (temp int)
+0:118          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:118          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              7 (const uint)
+0:118          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              8 (const uint)
+0:118          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              9 (const uint)
+0:119      move second child to first child (temp int)
+0:119        'out_i1' (temp int)
+0:119        imageAtomicExchange (temp int)
+0:119          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:119          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:119            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:119            Constant:
+0:119              7 (const uint)
+0:119          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:119            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:119            Constant:
+0:119              5 (const uint)
+0:120      imageAtomicMax (temp int)
+0:120        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:120        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:120          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:120          Constant:
+0:120            7 (const uint)
+0:120        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:120          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:120          Constant:
+0:120            8 (const uint)
+0:121      move second child to first child (temp int)
+0:121        'out_i1' (temp int)
+0:121        imageAtomicMax (temp int)
+0:121          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:121          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:121            Constant:
+0:121              7 (const uint)
+0:121          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:121            Constant:
+0:121              5 (const uint)
+0:122      imageAtomicMin (temp int)
+0:122        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:122        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:122          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:122          Constant:
+0:122            7 (const uint)
+0:122        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:122          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:122          Constant:
+0:122            8 (const uint)
+0:123      move second child to first child (temp int)
+0:123        'out_i1' (temp int)
+0:123        imageAtomicMin (temp int)
+0:123          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:123          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:123            Constant:
+0:123              7 (const uint)
+0:123          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:123            Constant:
+0:123              5 (const uint)
+0:124      imageAtomicOr (temp int)
+0:124        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:124        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:124          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:124          Constant:
+0:124            7 (const uint)
+0:124        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:124          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:124          Constant:
+0:124            8 (const uint)
+0:125      move second child to first child (temp int)
+0:125        'out_i1' (temp int)
+0:125        imageAtomicOr (temp int)
+0:125          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:125          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:125            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:125            Constant:
+0:125              7 (const uint)
+0:125          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:125            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:125            Constant:
+0:125              5 (const uint)
+0:126      imageAtomicXor (temp int)
+0:126        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:126        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:126          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:126          Constant:
+0:126            7 (const uint)
+0:126        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:126          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:126          Constant:
+0:126            8 (const uint)
+0:127      move second child to first child (temp int)
+0:127        'out_i1' (temp int)
+0:127        imageAtomicXor (temp int)
+0:127          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:127          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:127            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:127            Constant:
+0:127              7 (const uint)
+0:127          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:127            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:127            Constant:
+0:127              5 (const uint)
+0:130      imageAtomicAdd (temp uint)
+0:130        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:130        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:130          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:130          Constant:
+0:130            2 (const uint)
+0:130        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:130          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:130          Constant:
+0:130            0 (const uint)
+0:131      move second child to first child (temp uint)
+0:131        'out_u1' (temp uint)
+0:131        imageAtomicAdd (temp uint)
+0:131          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:131          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:131            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:131            Constant:
+0:131              2 (const uint)
+0:131          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:131            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:131            Constant:
+0:131              0 (const uint)
+0:132      imageAtomicAnd (temp uint)
+0:132        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:132        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:132          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:132          Constant:
+0:132            2 (const uint)
+0:132        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:132          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:132          Constant:
+0:132            0 (const uint)
+0:133      move second child to first child (temp uint)
+0:133        'out_u1' (temp uint)
+0:133        imageAtomicAnd (temp uint)
+0:133          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:133          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:133            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:133            Constant:
+0:133              2 (const uint)
+0:133          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:133            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:133            Constant:
+0:133              0 (const uint)
+0:134      move second child to first child (temp uint)
+0:134        'out_u1' (temp uint)
+0:134        imageAtomicCompSwap (temp uint)
+0:134          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:134          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              2 (const uint)
+0:134          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              3 (const uint)
+0:134          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              4 (const uint)
+0:135      move second child to first child (temp uint)
+0:135        'out_u1' (temp uint)
+0:135        imageAtomicExchange (temp uint)
+0:135          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:135          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:135            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:135            Constant:
+0:135              2 (const uint)
+0:135          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:135            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:135            Constant:
+0:135              0 (const uint)
+0:136      imageAtomicMax (temp uint)
+0:136        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:136        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:136          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:136          Constant:
+0:136            2 (const uint)
+0:136        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:136          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:136          Constant:
+0:136            0 (const uint)
+0:137      move second child to first child (temp uint)
+0:137        'out_u1' (temp uint)
+0:137        imageAtomicMax (temp uint)
+0:137          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:137          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:137            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:137            Constant:
+0:137              2 (const uint)
+0:137          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:137            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:137            Constant:
+0:137              0 (const uint)
+0:138      imageAtomicMin (temp uint)
+0:138        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:138        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:138          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:138          Constant:
+0:138            2 (const uint)
+0:138        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:138          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:138          Constant:
+0:138            0 (const uint)
+0:139      move second child to first child (temp uint)
+0:139        'out_u1' (temp uint)
+0:139        imageAtomicMin (temp uint)
+0:139          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:139          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:139            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:139            Constant:
+0:139              2 (const uint)
+0:139          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:139            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:139            Constant:
+0:139              0 (const uint)
+0:140      imageAtomicOr (temp uint)
+0:140        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:140        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:140          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:140          Constant:
+0:140            2 (const uint)
+0:140        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:140          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:140          Constant:
+0:140            0 (const uint)
+0:141      move second child to first child (temp uint)
+0:141        'out_u1' (temp uint)
+0:141        imageAtomicOr (temp uint)
+0:141          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:141          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:141            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:141            Constant:
+0:141              2 (const uint)
+0:141          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:141            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:141            Constant:
+0:141              0 (const uint)
+0:142      imageAtomicXor (temp uint)
+0:142        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:142        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:142          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:142          Constant:
+0:142            2 (const uint)
+0:142        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:142          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:142          Constant:
+0:142            0 (const uint)
+0:143      move second child to first child (temp uint)
+0:143        'out_u1' (temp uint)
+0:143        imageAtomicXor (temp uint)
+0:143          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:143          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:143            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:143            Constant:
+0:143              2 (const uint)
+0:143          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:143            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:143            Constant:
+0:143              0 (const uint)
+0:146      imageAtomicAdd (temp int)
+0:146        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:146        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:146          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:146          Constant:
+0:146            6 (const uint)
+0:146        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:146          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:146          Constant:
+0:146            8 (const uint)
+0:147      move second child to first child (temp int)
+0:147        'out_i1' (temp int)
+0:147        imageAtomicAdd (temp int)
+0:147          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:147          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:147            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:147            Constant:
+0:147              6 (const uint)
+0:147          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:147            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:147            Constant:
+0:147              5 (const uint)
+0:148      imageAtomicAnd (temp int)
+0:148        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:148        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:148          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:148          Constant:
+0:148            6 (const uint)
+0:148        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:148          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:148          Constant:
+0:148            8 (const uint)
+0:149      move second child to first child (temp int)
+0:149        'out_i1' (temp int)
+0:149        imageAtomicAnd (temp int)
+0:149          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:149          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:149            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:149            Constant:
+0:149              6 (const uint)
+0:149          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:149            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:149            Constant:
+0:149              5 (const uint)
+0:150      move second child to first child (temp int)
+0:150        'out_i1' (temp int)
+0:150        imageAtomicCompSwap (temp int)
+0:150          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:150          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              6 (const uint)
+0:150          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              8 (const uint)
+0:150          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              9 (const uint)
+0:151      move second child to first child (temp int)
+0:151        'out_i1' (temp int)
+0:151        imageAtomicExchange (temp int)
+0:151          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:151          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:151            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:151            Constant:
+0:151              6 (const uint)
+0:151          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:151            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:151            Constant:
+0:151              5 (const uint)
+0:152      imageAtomicMax (temp int)
+0:152        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:152        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:152          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:152          Constant:
+0:152            6 (const uint)
+0:152        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:152          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:152          Constant:
+0:152            8 (const uint)
+0:153      move second child to first child (temp int)
+0:153        'out_i1' (temp int)
+0:153        imageAtomicMax (temp int)
+0:153          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:153          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:153            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:153            Constant:
+0:153              6 (const uint)
+0:153          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:153            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:153            Constant:
+0:153              5 (const uint)
+0:154      imageAtomicMin (temp int)
+0:154        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:154        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:154          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:154          Constant:
+0:154            6 (const uint)
+0:154        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:154          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:154          Constant:
+0:154            8 (const uint)
+0:155      move second child to first child (temp int)
+0:155        'out_i1' (temp int)
+0:155        imageAtomicMin (temp int)
+0:155          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:155          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:155            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:155            Constant:
+0:155              6 (const uint)
+0:155          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:155            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:155            Constant:
+0:155              5 (const uint)
+0:156      imageAtomicOr (temp int)
+0:156        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:156        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:156          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:156          Constant:
+0:156            6 (const uint)
+0:156        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:156          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:156          Constant:
+0:156            8 (const uint)
+0:157      move second child to first child (temp int)
+0:157        'out_i1' (temp int)
+0:157        imageAtomicOr (temp int)
+0:157          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:157          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:157            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:157            Constant:
+0:157              6 (const uint)
+0:157          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:157            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:157            Constant:
+0:157              5 (const uint)
+0:158      imageAtomicXor (temp int)
+0:158        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:158        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:158          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:158          Constant:
+0:158            6 (const uint)
+0:158        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:158          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:158          Constant:
+0:158            8 (const uint)
+0:159      move second child to first child (temp int)
+0:159        'out_i1' (temp int)
+0:159        imageAtomicXor (temp int)
+0:159          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:159          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:159            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:159            Constant:
+0:159              6 (const uint)
+0:159          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:159            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:159            Constant:
+0:159              5 (const uint)
+0:162      imageAtomicAdd (temp uint)
+0:162        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:162        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:162          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:162          Constant:
+0:162            1 (const uint)
+0:162        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:162          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:162          Constant:
+0:162            0 (const uint)
+0:163      move second child to first child (temp uint)
+0:163        'out_u1' (temp uint)
+0:163        imageAtomicAdd (temp uint)
+0:163          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:163          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:163            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:163            Constant:
+0:163              1 (const uint)
+0:163          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:163            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:163            Constant:
+0:163              0 (const uint)
+0:164      imageAtomicAnd (temp uint)
+0:164        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:164        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:164          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:164          Constant:
+0:164            1 (const uint)
+0:164        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:164          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:164          Constant:
+0:164            0 (const uint)
+0:165      move second child to first child (temp uint)
+0:165        'out_u1' (temp uint)
+0:165        imageAtomicAnd (temp uint)
+0:165          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:165          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:165            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:165            Constant:
+0:165              1 (const uint)
+0:165          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:165            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:165            Constant:
+0:165              0 (const uint)
+0:166      move second child to first child (temp uint)
+0:166        'out_u1' (temp uint)
+0:166        imageAtomicCompSwap (temp uint)
+0:166          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:166          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              1 (const uint)
+0:166          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              3 (const uint)
+0:166          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              4 (const uint)
+0:167      move second child to first child (temp uint)
+0:167        'out_u1' (temp uint)
+0:167        imageAtomicExchange (temp uint)
+0:167          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:167          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:167            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:167            Constant:
+0:167              1 (const uint)
+0:167          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:167            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:167            Constant:
+0:167              0 (const uint)
+0:168      imageAtomicMax (temp uint)
+0:168        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:168        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:168          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:168          Constant:
+0:168            1 (const uint)
+0:168        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:168          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:168          Constant:
+0:168            0 (const uint)
+0:169      move second child to first child (temp uint)
+0:169        'out_u1' (temp uint)
+0:169        imageAtomicMax (temp uint)
+0:169          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:169          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:169            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:169            Constant:
+0:169              1 (const uint)
+0:169          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:169            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:169            Constant:
+0:169              0 (const uint)
+0:170      imageAtomicMin (temp uint)
+0:170        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:170        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:170          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:170          Constant:
+0:170            1 (const uint)
+0:170        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:170          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:170          Constant:
+0:170            0 (const uint)
+0:171      move second child to first child (temp uint)
+0:171        'out_u1' (temp uint)
+0:171        imageAtomicMin (temp uint)
+0:171          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:171          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:171            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:171            Constant:
+0:171              1 (const uint)
+0:171          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:171            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:171            Constant:
+0:171              0 (const uint)
+0:172      imageAtomicOr (temp uint)
+0:172        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:172        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:172          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:172          Constant:
+0:172            1 (const uint)
+0:172        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:172          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:172          Constant:
+0:172            0 (const uint)
+0:173      move second child to first child (temp uint)
+0:173        'out_u1' (temp uint)
+0:173        imageAtomicOr (temp uint)
+0:173          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:173          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:173            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:173            Constant:
+0:173              1 (const uint)
+0:173          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:173            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:173            Constant:
+0:173              0 (const uint)
+0:174      imageAtomicXor (temp uint)
+0:174        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:174        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:174          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:174          Constant:
+0:174            1 (const uint)
+0:174        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:174          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:174          Constant:
+0:174            0 (const uint)
+0:175      move second child to first child (temp uint)
+0:175        'out_u1' (temp uint)
+0:175        imageAtomicXor (temp uint)
+0:175          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:175          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:175            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:175            Constant:
+0:175              1 (const uint)
+0:175          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:175            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:175            Constant:
+0:175              0 (const uint)
+0:178      imageAtomicAdd (temp int)
+0:178        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:178        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:178          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:178          Constant:
+0:178            6 (const uint)
+0:178        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:178          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:178          Constant:
+0:178            8 (const uint)
+0:179      move second child to first child (temp int)
+0:179        'out_i1' (temp int)
+0:179        imageAtomicAdd (temp int)
+0:179          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:179          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:179            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:179            Constant:
+0:179              6 (const uint)
+0:179          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:179            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:179            Constant:
+0:179              5 (const uint)
+0:180      imageAtomicAnd (temp int)
+0:180        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:180        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:180          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:180          Constant:
+0:180            6 (const uint)
+0:180        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:180          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:180          Constant:
+0:180            8 (const uint)
+0:181      move second child to first child (temp int)
+0:181        'out_i1' (temp int)
+0:181        imageAtomicAnd (temp int)
+0:181          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:181          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:181            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:181            Constant:
+0:181              6 (const uint)
+0:181          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:181            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:181            Constant:
+0:181              5 (const uint)
+0:182      move second child to first child (temp int)
+0:182        'out_i1' (temp int)
+0:182        imageAtomicCompSwap (temp int)
+0:182          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:182          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              6 (const uint)
+0:182          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              8 (const uint)
+0:182          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              9 (const uint)
+0:183      move second child to first child (temp int)
+0:183        'out_i1' (temp int)
+0:183        imageAtomicExchange (temp int)
+0:183          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:183          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:183            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:183            Constant:
+0:183              6 (const uint)
+0:183          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:183            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:183            Constant:
+0:183              5 (const uint)
+0:184      imageAtomicMax (temp int)
+0:184        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:184        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:184          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:184          Constant:
+0:184            6 (const uint)
+0:184        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:184          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:184          Constant:
+0:184            8 (const uint)
+0:185      move second child to first child (temp int)
+0:185        'out_i1' (temp int)
+0:185        imageAtomicMax (temp int)
+0:185          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:185          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:185            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:185            Constant:
+0:185              6 (const uint)
+0:185          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:185            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:185            Constant:
+0:185              5 (const uint)
+0:186      imageAtomicMin (temp int)
+0:186        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:186        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:186          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:186          Constant:
+0:186            6 (const uint)
+0:186        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:186          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:186          Constant:
+0:186            8 (const uint)
+0:187      move second child to first child (temp int)
+0:187        'out_i1' (temp int)
+0:187        imageAtomicMin (temp int)
+0:187          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:187          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:187            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:187            Constant:
+0:187              6 (const uint)
+0:187          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:187            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:187            Constant:
+0:187              5 (const uint)
+0:188      imageAtomicOr (temp int)
+0:188        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:188        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:188          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:188          Constant:
+0:188            6 (const uint)
+0:188        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:188          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:188          Constant:
+0:188            8 (const uint)
+0:189      move second child to first child (temp int)
+0:189        'out_i1' (temp int)
+0:189        imageAtomicOr (temp int)
+0:189          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:189          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:189            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:189            Constant:
+0:189              6 (const uint)
+0:189          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:189            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:189            Constant:
+0:189              5 (const uint)
+0:190      imageAtomicXor (temp int)
+0:190        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:190        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:190          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:190          Constant:
+0:190            6 (const uint)
+0:190        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:190          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:190          Constant:
+0:190            8 (const uint)
+0:191      move second child to first child (temp int)
+0:191        'out_i1' (temp int)
+0:191        imageAtomicXor (temp int)
+0:191          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:191          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:191            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:191            Constant:
+0:191              6 (const uint)
+0:191          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:191            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:191            Constant:
+0:191              5 (const uint)
+0:194      imageAtomicAdd (temp uint)
+0:194        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:194        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:194          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:194          Constant:
+0:194            1 (const uint)
+0:194        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:194          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:194          Constant:
+0:194            0 (const uint)
+0:195      move second child to first child (temp uint)
+0:195        'out_u1' (temp uint)
+0:195        imageAtomicAdd (temp uint)
+0:195          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:195          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:195            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:195            Constant:
+0:195              1 (const uint)
+0:195          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:195            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:195            Constant:
+0:195              0 (const uint)
+0:196      imageAtomicAnd (temp uint)
+0:196        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:196        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:196          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:196          Constant:
+0:196            1 (const uint)
+0:196        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:196          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:196          Constant:
+0:196            0 (const uint)
+0:197      move second child to first child (temp uint)
+0:197        'out_u1' (temp uint)
+0:197        imageAtomicAnd (temp uint)
+0:197          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:197          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:197            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:197            Constant:
+0:197              1 (const uint)
+0:197          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:197            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:197            Constant:
+0:197              0 (const uint)
+0:198      move second child to first child (temp uint)
+0:198        'out_u1' (temp uint)
+0:198        imageAtomicCompSwap (temp uint)
+0:198          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:198          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              1 (const uint)
+0:198          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              3 (const uint)
+0:198          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              4 (const uint)
+0:199      move second child to first child (temp uint)
+0:199        'out_u1' (temp uint)
+0:199        imageAtomicExchange (temp uint)
+0:199          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:199          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:199            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:199            Constant:
+0:199              1 (const uint)
+0:199          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:199            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:199            Constant:
+0:199              0 (const uint)
+0:200      imageAtomicMax (temp uint)
+0:200        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:200        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:200          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:200          Constant:
+0:200            1 (const uint)
+0:200        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:200          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:200          Constant:
+0:200            0 (const uint)
+0:201      move second child to first child (temp uint)
+0:201        'out_u1' (temp uint)
+0:201        imageAtomicMax (temp uint)
+0:201          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:201          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:201            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:201            Constant:
+0:201              1 (const uint)
+0:201          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:201            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:201            Constant:
+0:201              0 (const uint)
+0:202      imageAtomicMin (temp uint)
+0:202        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:202        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:202          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:202          Constant:
+0:202            1 (const uint)
+0:202        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:202          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:202          Constant:
+0:202            0 (const uint)
+0:203      move second child to first child (temp uint)
+0:203        'out_u1' (temp uint)
+0:203        imageAtomicMin (temp uint)
+0:203          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:203          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:203            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:203            Constant:
+0:203              1 (const uint)
+0:203          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:203            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:203            Constant:
+0:203              0 (const uint)
+0:204      imageAtomicOr (temp uint)
+0:204        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:204        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:204          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:204          Constant:
+0:204            1 (const uint)
+0:204        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:204          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:204          Constant:
+0:204            0 (const uint)
+0:205      move second child to first child (temp uint)
+0:205        'out_u1' (temp uint)
+0:205        imageAtomicOr (temp uint)
+0:205          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:205          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:205            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:205            Constant:
+0:205              1 (const uint)
+0:205          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:205            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:205            Constant:
+0:205              0 (const uint)
+0:206      imageAtomicXor (temp uint)
+0:206        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:206        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:206          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:206          Constant:
+0:206            1 (const uint)
+0:206        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:206          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:206          Constant:
+0:206            0 (const uint)
+0:207      move second child to first child (temp uint)
+0:207        'out_u1' (temp uint)
+0:207        imageAtomicXor (temp uint)
+0:207          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:207          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:207            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:207            Constant:
+0:207              1 (const uint)
+0:207          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:207            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:207            Constant:
+0:207              0 (const uint)
+0:210      imageAtomicAdd (temp int)
+0:210        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:210        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:210          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:210          Constant:
+0:210            5 (const uint)
+0:210        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:210          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:210          Constant:
+0:210            8 (const uint)
+0:211      move second child to first child (temp int)
+0:211        'out_i1' (temp int)
+0:211        imageAtomicAdd (temp int)
+0:211          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:211          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:211            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:211            Constant:
+0:211              5 (const uint)
+0:211          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:211            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:211            Constant:
+0:211              5 (const uint)
+0:212      imageAtomicAnd (temp int)
+0:212        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:212        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:212          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:212          Constant:
+0:212            5 (const uint)
+0:212        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:212          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:212          Constant:
+0:212            8 (const uint)
+0:213      move second child to first child (temp int)
+0:213        'out_i1' (temp int)
+0:213        imageAtomicAnd (temp int)
+0:213          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:213          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:213            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:213            Constant:
+0:213              5 (const uint)
+0:213          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:213            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:213            Constant:
+0:213              5 (const uint)
+0:214      move second child to first child (temp int)
+0:214        'out_i1' (temp int)
+0:214        imageAtomicCompSwap (temp int)
+0:214          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:214          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              5 (const uint)
+0:214          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              8 (const uint)
+0:214          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              9 (const uint)
+0:215      move second child to first child (temp int)
+0:215        'out_i1' (temp int)
+0:215        imageAtomicExchange (temp int)
+0:215          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:215          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:215            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:215            Constant:
+0:215              5 (const uint)
+0:215          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:215            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:215            Constant:
+0:215              5 (const uint)
+0:216      imageAtomicMax (temp int)
+0:216        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:216        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:216          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:216          Constant:
+0:216            5 (const uint)
+0:216        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:216          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:216          Constant:
+0:216            8 (const uint)
+0:217      move second child to first child (temp int)
+0:217        'out_i1' (temp int)
+0:217        imageAtomicMax (temp int)
+0:217          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:217          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:217            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:217            Constant:
+0:217              5 (const uint)
+0:217          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:217            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:217            Constant:
+0:217              5 (const uint)
+0:218      imageAtomicMin (temp int)
+0:218        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:218        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:218          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:218          Constant:
+0:218            5 (const uint)
+0:218        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:218          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:218          Constant:
+0:218            8 (const uint)
+0:219      move second child to first child (temp int)
+0:219        'out_i1' (temp int)
+0:219        imageAtomicMin (temp int)
+0:219          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:219          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:219            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:219            Constant:
+0:219              5 (const uint)
+0:219          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:219            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:219            Constant:
+0:219              5 (const uint)
+0:220      imageAtomicOr (temp int)
+0:220        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:220        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:220          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:220          Constant:
+0:220            5 (const uint)
+0:220        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:220          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:220          Constant:
+0:220            8 (const uint)
+0:221      move second child to first child (temp int)
+0:221        'out_i1' (temp int)
+0:221        imageAtomicOr (temp int)
+0:221          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:221          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:221            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:221            Constant:
+0:221              5 (const uint)
+0:221          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:221            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:221            Constant:
+0:221              5 (const uint)
+0:222      imageAtomicXor (temp int)
+0:222        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:222        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:222          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:222          Constant:
+0:222            5 (const uint)
+0:222        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:222          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:222          Constant:
+0:222            8 (const uint)
+0:223      move second child to first child (temp int)
+0:223        'out_i1' (temp int)
+0:223        imageAtomicXor (temp int)
+0:223          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:223          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:223            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:223            Constant:
+0:223              5 (const uint)
+0:223          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:223            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:223            Constant:
+0:223              5 (const uint)
+0:226      imageAtomicAdd (temp uint)
+0:226        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:226        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:226          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:226          Constant:
+0:226            0 (const uint)
+0:226        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:226          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:226          Constant:
+0:226            0 (const uint)
+0:227      move second child to first child (temp uint)
+0:227        'out_u1' (temp uint)
+0:227        imageAtomicAdd (temp uint)
+0:227          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:227          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:227            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:227            Constant:
+0:227              0 (const uint)
+0:227          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:227            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:227            Constant:
+0:227              0 (const uint)
+0:228      imageAtomicAnd (temp uint)
+0:228        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:228        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:228          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:228          Constant:
+0:228            0 (const uint)
+0:228        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:228          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:228          Constant:
+0:228            0 (const uint)
+0:229      move second child to first child (temp uint)
+0:229        'out_u1' (temp uint)
+0:229        imageAtomicAnd (temp uint)
+0:229          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:229          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:229            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:229            Constant:
+0:229              0 (const uint)
+0:229          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:229            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:229            Constant:
+0:229              0 (const uint)
+0:230      move second child to first child (temp uint)
+0:230        'out_u1' (temp uint)
+0:230        imageAtomicCompSwap (temp uint)
+0:230          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:230          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              0 (const uint)
+0:230          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              3 (const uint)
+0:230          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              4 (const uint)
+0:231      move second child to first child (temp uint)
+0:231        'out_u1' (temp uint)
+0:231        imageAtomicExchange (temp uint)
+0:231          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:231          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:231            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:231            Constant:
+0:231              0 (const uint)
+0:231          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:231            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:231            Constant:
+0:231              0 (const uint)
+0:232      imageAtomicMax (temp uint)
+0:232        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:232        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:232          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:232          Constant:
+0:232            0 (const uint)
+0:232        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:232          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:232          Constant:
+0:232            0 (const uint)
+0:233      move second child to first child (temp uint)
+0:233        'out_u1' (temp uint)
+0:233        imageAtomicMax (temp uint)
+0:233          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:233          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:233            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:233            Constant:
+0:233              0 (const uint)
+0:233          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:233            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:233            Constant:
+0:233              0 (const uint)
+0:234      imageAtomicMin (temp uint)
+0:234        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:234        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:234          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:234          Constant:
+0:234            0 (const uint)
+0:234        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:234          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:234          Constant:
+0:234            0 (const uint)
+0:235      move second child to first child (temp uint)
+0:235        'out_u1' (temp uint)
+0:235        imageAtomicMin (temp uint)
+0:235          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:235          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:235            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:235            Constant:
+0:235              0 (const uint)
+0:235          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:235            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:235            Constant:
+0:235              0 (const uint)
+0:236      imageAtomicOr (temp uint)
+0:236        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:236        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:236          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:236          Constant:
+0:236            0 (const uint)
+0:236        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:236          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:236          Constant:
+0:236            0 (const uint)
+0:237      move second child to first child (temp uint)
+0:237        'out_u1' (temp uint)
+0:237        imageAtomicOr (temp uint)
+0:237          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:237          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:237            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:237            Constant:
+0:237              0 (const uint)
+0:237          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:237            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:237            Constant:
+0:237              0 (const uint)
+0:238      imageAtomicXor (temp uint)
+0:238        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:238        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:238          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:238          Constant:
+0:238            0 (const uint)
+0:238        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:238          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:238          Constant:
+0:238            0 (const uint)
+0:239      move second child to first child (temp uint)
+0:239        'out_u1' (temp uint)
+0:239        imageAtomicXor (temp uint)
+0:239          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:239          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:239            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:239            Constant:
+0:239              0 (const uint)
+0:239          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:239            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:239            Constant:
+0:239              0 (const uint)
+0:242      move second child to first child (temp 4-component vector of float)
+0:242        Color: direct index for structure (temp 4-component vector of float)
+0:242          'psout' (temp structure{temp 4-component vector of float Color})
+0:242          Constant:
+0:242            0 (const int)
+0:242        Constant:
+0:242          1.000000
+0:242          1.000000
+0:242          1.000000
+0:242          1.000000
+0:243      Sequence
+0:243        Sequence
+0:243          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:243            Color: direct index for structure (temp 4-component vector of float)
+0:243              'psout' (temp structure{temp 4-component vector of float Color})
+0:243              Constant:
+0:243                0 (const int)
+0:243        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (uniform sampler)
+0:?     'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:?     'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:?     'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:?     'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:?     'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:?     'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:?     'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:?     'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:?     'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:?     'g_tTex1df1a' (layout(r32f ) uniform image1DArray)
+0:?     'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:?     'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df1a' (layout(r32f ) uniform image2DArray)
+0:?     'g_tTex2di1a' (layout(r32i ) uniform iimage2DArray)
+0:?     'g_tTex2du1a' (layout(r32ui ) uniform uimage2DArray)
+0:?     'g_tBuffF' (layout(r32f ) uniform imageBuffer)
+0:?     'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:?     'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:45  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:45    Function Parameters: 
+0:?     Sequence
+0:50      imageAtomicAdd (temp int)
+0:50        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:50        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:50          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:50          Constant:
+0:50            5 (const uint)
+0:50        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:50          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:50          Constant:
+0:50            8 (const uint)
+0:51      move second child to first child (temp int)
+0:51        'out_i1' (temp int)
+0:51        imageAtomicAdd (temp int)
+0:51          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:51          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:51            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:51            Constant:
+0:51              5 (const uint)
+0:51          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:51            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:51            Constant:
+0:51              5 (const uint)
+0:52      imageAtomicAnd (temp int)
+0:52        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:52        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:52          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:52          Constant:
+0:52            5 (const uint)
+0:52        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:52          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:52          Constant:
+0:52            8 (const uint)
+0:53      move second child to first child (temp int)
+0:53        'out_i1' (temp int)
+0:53        imageAtomicAnd (temp int)
+0:53          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:53          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:53            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:53            Constant:
+0:53              5 (const uint)
+0:53          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:53            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:53            Constant:
+0:53              5 (const uint)
+0:54      move second child to first child (temp int)
+0:54        'out_i1' (temp int)
+0:54        imageAtomicCompSwap (temp int)
+0:54          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:54          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              5 (const uint)
+0:54          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              8 (const uint)
+0:54          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:54            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:54            Constant:
+0:54              9 (const uint)
+0:55      move second child to first child (temp int)
+0:55        'out_i1' (temp int)
+0:55        imageAtomicExchange (temp int)
+0:55          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:55          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:55            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:55            Constant:
+0:55              5 (const uint)
+0:55          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:55            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:55            Constant:
+0:55              5 (const uint)
+0:56      imageAtomicMax (temp int)
+0:56        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:56        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:56          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:56          Constant:
+0:56            5 (const uint)
+0:56        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:56          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:56          Constant:
+0:56            8 (const uint)
+0:57      move second child to first child (temp int)
+0:57        'out_i1' (temp int)
+0:57        imageAtomicMax (temp int)
+0:57          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:57          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:57            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:57            Constant:
+0:57              5 (const uint)
+0:57          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:57            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:57            Constant:
+0:57              5 (const uint)
+0:58      imageAtomicMin (temp int)
+0:58        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:58        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:58          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:58          Constant:
+0:58            5 (const uint)
+0:58        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:58          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:58          Constant:
+0:58            8 (const uint)
+0:59      move second child to first child (temp int)
+0:59        'out_i1' (temp int)
+0:59        imageAtomicMin (temp int)
+0:59          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:59          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:59            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:59            Constant:
+0:59              5 (const uint)
+0:59          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:59            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:59            Constant:
+0:59              5 (const uint)
+0:60      imageAtomicOr (temp int)
+0:60        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:60        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:60          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:60          Constant:
+0:60            5 (const uint)
+0:60        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:60          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:60          Constant:
+0:60            8 (const uint)
+0:61      move second child to first child (temp int)
+0:61        'out_i1' (temp int)
+0:61        imageAtomicOr (temp int)
+0:61          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:61          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:61            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:61            Constant:
+0:61              5 (const uint)
+0:61          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:61            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:61            Constant:
+0:61              5 (const uint)
+0:62      imageAtomicXor (temp int)
+0:62        'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:62        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:62          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:62          Constant:
+0:62            5 (const uint)
+0:62        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:62          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:62          Constant:
+0:62            8 (const uint)
+0:63      move second child to first child (temp int)
+0:63        'out_i1' (temp int)
+0:63        imageAtomicXor (temp int)
+0:63          'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:63          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:63            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:63            Constant:
+0:63              5 (const uint)
+0:63          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:63            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:63            Constant:
+0:63              5 (const uint)
+0:66      imageAtomicAdd (temp uint)
+0:66        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:66        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:66          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:66          Constant:
+0:66            0 (const uint)
+0:66        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:66          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:66          Constant:
+0:66            0 (const uint)
+0:67      move second child to first child (temp uint)
+0:67        'out_u1' (temp uint)
+0:67        imageAtomicAdd (temp uint)
+0:67          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:67          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:67            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:67            Constant:
+0:67              0 (const uint)
+0:67          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:67            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:67            Constant:
+0:67              0 (const uint)
+0:68      imageAtomicAnd (temp uint)
+0:68        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:68        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:68          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:68          Constant:
+0:68            0 (const uint)
+0:68        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:68          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:68          Constant:
+0:68            0 (const uint)
+0:69      move second child to first child (temp uint)
+0:69        'out_u1' (temp uint)
+0:69        imageAtomicAnd (temp uint)
+0:69          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:69          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:69            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:69            Constant:
+0:69              0 (const uint)
+0:69          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:69            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:69            Constant:
+0:69              0 (const uint)
+0:70      move second child to first child (temp uint)
+0:70        'out_u1' (temp uint)
+0:70        imageAtomicCompSwap (temp uint)
+0:70          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:70          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              0 (const uint)
+0:70          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              3 (const uint)
+0:70          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:70            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:70            Constant:
+0:70              4 (const uint)
+0:71      move second child to first child (temp uint)
+0:71        'out_u1' (temp uint)
+0:71        imageAtomicExchange (temp uint)
+0:71          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:71          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:71            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:71            Constant:
+0:71              0 (const uint)
+0:71          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:71            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:71            Constant:
+0:71              0 (const uint)
+0:72      imageAtomicMax (temp uint)
+0:72        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:72        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:72          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:72          Constant:
+0:72            0 (const uint)
+0:72        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:72          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:72          Constant:
+0:72            0 (const uint)
+0:73      move second child to first child (temp uint)
+0:73        'out_u1' (temp uint)
+0:73        imageAtomicMax (temp uint)
+0:73          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:73          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:73            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:73            Constant:
+0:73              0 (const uint)
+0:73          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:73            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:73            Constant:
+0:73              0 (const uint)
+0:74      imageAtomicMin (temp uint)
+0:74        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:74        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:74          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:74          Constant:
+0:74            0 (const uint)
+0:74        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:74          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:74          Constant:
+0:74            0 (const uint)
+0:75      move second child to first child (temp uint)
+0:75        'out_u1' (temp uint)
+0:75        imageAtomicMin (temp uint)
+0:75          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:75          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:75            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:75            Constant:
+0:75              0 (const uint)
+0:75          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:75            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:75            Constant:
+0:75              0 (const uint)
+0:76      imageAtomicOr (temp uint)
+0:76        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:76        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:76          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:76          Constant:
+0:76            0 (const uint)
+0:76        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:76          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:76          Constant:
+0:76            0 (const uint)
+0:77      move second child to first child (temp uint)
+0:77        'out_u1' (temp uint)
+0:77        imageAtomicOr (temp uint)
+0:77          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:77          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:77            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:77            Constant:
+0:77              0 (const uint)
+0:77          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:77            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:77            Constant:
+0:77              0 (const uint)
+0:78      imageAtomicXor (temp uint)
+0:78        'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:78        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:78          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:78          Constant:
+0:78            0 (const uint)
+0:78        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:78          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:78          Constant:
+0:78            0 (const uint)
+0:79      move second child to first child (temp uint)
+0:79        'out_u1' (temp uint)
+0:79        imageAtomicXor (temp uint)
+0:79          'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:79          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:79            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:79            Constant:
+0:79              0 (const uint)
+0:79          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:79            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:79            Constant:
+0:79              0 (const uint)
+0:82      imageAtomicAdd (temp int)
+0:82        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:82        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:82          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:82          Constant:
+0:82            6 (const uint)
+0:82        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:82          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:82          Constant:
+0:82            8 (const uint)
+0:83      move second child to first child (temp int)
+0:83        'out_i1' (temp int)
+0:83        imageAtomicAdd (temp int)
+0:83          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:83          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:83            Constant:
+0:83              6 (const uint)
+0:83          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:83            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:83            Constant:
+0:83              5 (const uint)
+0:84      imageAtomicAnd (temp int)
+0:84        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:84        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:84          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:84          Constant:
+0:84            6 (const uint)
+0:84        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:84          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:84          Constant:
+0:84            8 (const uint)
+0:85      move second child to first child (temp int)
+0:85        'out_i1' (temp int)
+0:85        imageAtomicAnd (temp int)
+0:85          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:85          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:85            Constant:
+0:85              6 (const uint)
+0:85          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:85            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:85            Constant:
+0:85              5 (const uint)
+0:86      move second child to first child (temp int)
+0:86        'out_i1' (temp int)
+0:86        imageAtomicCompSwap (temp int)
+0:86          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:86          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              6 (const uint)
+0:86          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              8 (const uint)
+0:86          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:86            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:86            Constant:
+0:86              9 (const uint)
+0:87      move second child to first child (temp int)
+0:87        'out_i1' (temp int)
+0:87        imageAtomicExchange (temp int)
+0:87          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:87          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:87            Constant:
+0:87              6 (const uint)
+0:87          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:87            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:87            Constant:
+0:87              5 (const uint)
+0:88      imageAtomicMax (temp int)
+0:88        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:88        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:88          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:88          Constant:
+0:88            6 (const uint)
+0:88        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:88          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:88          Constant:
+0:88            8 (const uint)
+0:89      move second child to first child (temp int)
+0:89        'out_i1' (temp int)
+0:89        imageAtomicMax (temp int)
+0:89          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:89          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:89            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:89            Constant:
+0:89              6 (const uint)
+0:89          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:89            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:89            Constant:
+0:89              5 (const uint)
+0:90      imageAtomicMin (temp int)
+0:90        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:90        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:90          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:90          Constant:
+0:90            6 (const uint)
+0:90        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:90          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:90          Constant:
+0:90            8 (const uint)
+0:91      move second child to first child (temp int)
+0:91        'out_i1' (temp int)
+0:91        imageAtomicMin (temp int)
+0:91          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:91          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:91            Constant:
+0:91              6 (const uint)
+0:91          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:91            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:91            Constant:
+0:91              5 (const uint)
+0:92      imageAtomicOr (temp int)
+0:92        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:92        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:92          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:92          Constant:
+0:92            6 (const uint)
+0:92        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:92          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:92          Constant:
+0:92            8 (const uint)
+0:93      move second child to first child (temp int)
+0:93        'out_i1' (temp int)
+0:93        imageAtomicOr (temp int)
+0:93          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:93          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:93            Constant:
+0:93              6 (const uint)
+0:93          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:93            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:93            Constant:
+0:93              5 (const uint)
+0:94      imageAtomicXor (temp int)
+0:94        'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:94        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:94          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:94          Constant:
+0:94            6 (const uint)
+0:94        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:94          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:94          Constant:
+0:94            8 (const uint)
+0:95      move second child to first child (temp int)
+0:95        'out_i1' (temp int)
+0:95        imageAtomicXor (temp int)
+0:95          'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:95          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:95            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:95            Constant:
+0:95              6 (const uint)
+0:95          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:95            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:95            Constant:
+0:95              5 (const uint)
+0:98      imageAtomicAdd (temp uint)
+0:98        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:98        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:98          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:98          Constant:
+0:98            1 (const uint)
+0:98        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:98          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:98          Constant:
+0:98            0 (const uint)
+0:99      move second child to first child (temp uint)
+0:99        'out_u1' (temp uint)
+0:99        imageAtomicAdd (temp uint)
+0:99          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:99          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:99            Constant:
+0:99              1 (const uint)
+0:99          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:99            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:99            Constant:
+0:99              0 (const uint)
+0:100      imageAtomicAnd (temp uint)
+0:100        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:100        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:100          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:100          Constant:
+0:100            1 (const uint)
+0:100        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:100          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:100          Constant:
+0:100            0 (const uint)
+0:101      move second child to first child (temp uint)
+0:101        'out_u1' (temp uint)
+0:101        imageAtomicAnd (temp uint)
+0:101          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:101          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:101            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:101            Constant:
+0:101              1 (const uint)
+0:101          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:101            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:101            Constant:
+0:101              0 (const uint)
+0:102      move second child to first child (temp uint)
+0:102        'out_u1' (temp uint)
+0:102        imageAtomicCompSwap (temp uint)
+0:102          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:102          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              1 (const uint)
+0:102          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              3 (const uint)
+0:102          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:102            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:102            Constant:
+0:102              4 (const uint)
+0:103      move second child to first child (temp uint)
+0:103        'out_u1' (temp uint)
+0:103        imageAtomicExchange (temp uint)
+0:103          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:103          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:103            Constant:
+0:103              1 (const uint)
+0:103          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:103            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:103            Constant:
+0:103              0 (const uint)
+0:104      imageAtomicMax (temp uint)
+0:104        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:104        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:104          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:104          Constant:
+0:104            1 (const uint)
+0:104        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:104          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:104          Constant:
+0:104            0 (const uint)
+0:105      move second child to first child (temp uint)
+0:105        'out_u1' (temp uint)
+0:105        imageAtomicMax (temp uint)
+0:105          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:105          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:105            Constant:
+0:105              1 (const uint)
+0:105          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:105            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:105            Constant:
+0:105              0 (const uint)
+0:106      imageAtomicMin (temp uint)
+0:106        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:106        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:106          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:106          Constant:
+0:106            1 (const uint)
+0:106        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:106          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:106          Constant:
+0:106            0 (const uint)
+0:107      move second child to first child (temp uint)
+0:107        'out_u1' (temp uint)
+0:107        imageAtomicMin (temp uint)
+0:107          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:107          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:107            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:107            Constant:
+0:107              1 (const uint)
+0:107          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:107            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:107            Constant:
+0:107              0 (const uint)
+0:108      imageAtomicOr (temp uint)
+0:108        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:108        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:108          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:108          Constant:
+0:108            1 (const uint)
+0:108        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:108          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:108          Constant:
+0:108            0 (const uint)
+0:109      move second child to first child (temp uint)
+0:109        'out_u1' (temp uint)
+0:109        imageAtomicOr (temp uint)
+0:109          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:109          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:109            Constant:
+0:109              1 (const uint)
+0:109          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:109            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:109            Constant:
+0:109              0 (const uint)
+0:110      imageAtomicXor (temp uint)
+0:110        'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:110        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:110          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:110          Constant:
+0:110            1 (const uint)
+0:110        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:110          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:110          Constant:
+0:110            0 (const uint)
+0:111      move second child to first child (temp uint)
+0:111        'out_u1' (temp uint)
+0:111        imageAtomicXor (temp uint)
+0:111          'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:111          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:111            Constant:
+0:111              1 (const uint)
+0:111          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:111            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:111            Constant:
+0:111              0 (const uint)
+0:114      imageAtomicAdd (temp int)
+0:114        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:114        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:114          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:114          Constant:
+0:114            7 (const uint)
+0:114        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:114          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:114          Constant:
+0:114            8 (const uint)
+0:115      move second child to first child (temp int)
+0:115        'out_i1' (temp int)
+0:115        imageAtomicAdd (temp int)
+0:115          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:115          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:115            Constant:
+0:115              7 (const uint)
+0:115          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:115            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:115            Constant:
+0:115              5 (const uint)
+0:116      imageAtomicAnd (temp int)
+0:116        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:116        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:116          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:116          Constant:
+0:116            7 (const uint)
+0:116        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:116          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:116          Constant:
+0:116            8 (const uint)
+0:117      move second child to first child (temp int)
+0:117        'out_i1' (temp int)
+0:117        imageAtomicAnd (temp int)
+0:117          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:117          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:117            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:117            Constant:
+0:117              7 (const uint)
+0:117          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:117            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:117            Constant:
+0:117              5 (const uint)
+0:118      move second child to first child (temp int)
+0:118        'out_i1' (temp int)
+0:118        imageAtomicCompSwap (temp int)
+0:118          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:118          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              7 (const uint)
+0:118          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              8 (const uint)
+0:118          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:118            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:118            Constant:
+0:118              9 (const uint)
+0:119      move second child to first child (temp int)
+0:119        'out_i1' (temp int)
+0:119        imageAtomicExchange (temp int)
+0:119          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:119          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:119            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:119            Constant:
+0:119              7 (const uint)
+0:119          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:119            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:119            Constant:
+0:119              5 (const uint)
+0:120      imageAtomicMax (temp int)
+0:120        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:120        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:120          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:120          Constant:
+0:120            7 (const uint)
+0:120        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:120          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:120          Constant:
+0:120            8 (const uint)
+0:121      move second child to first child (temp int)
+0:121        'out_i1' (temp int)
+0:121        imageAtomicMax (temp int)
+0:121          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:121          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:121            Constant:
+0:121              7 (const uint)
+0:121          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:121            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:121            Constant:
+0:121              5 (const uint)
+0:122      imageAtomicMin (temp int)
+0:122        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:122        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:122          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:122          Constant:
+0:122            7 (const uint)
+0:122        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:122          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:122          Constant:
+0:122            8 (const uint)
+0:123      move second child to first child (temp int)
+0:123        'out_i1' (temp int)
+0:123        imageAtomicMin (temp int)
+0:123          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:123          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:123            Constant:
+0:123              7 (const uint)
+0:123          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:123            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:123            Constant:
+0:123              5 (const uint)
+0:124      imageAtomicOr (temp int)
+0:124        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:124        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:124          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:124          Constant:
+0:124            7 (const uint)
+0:124        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:124          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:124          Constant:
+0:124            8 (const uint)
+0:125      move second child to first child (temp int)
+0:125        'out_i1' (temp int)
+0:125        imageAtomicOr (temp int)
+0:125          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:125          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:125            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:125            Constant:
+0:125              7 (const uint)
+0:125          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:125            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:125            Constant:
+0:125              5 (const uint)
+0:126      imageAtomicXor (temp int)
+0:126        'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:126        i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:126          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:126          Constant:
+0:126            7 (const uint)
+0:126        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:126          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:126          Constant:
+0:126            8 (const uint)
+0:127      move second child to first child (temp int)
+0:127        'out_i1' (temp int)
+0:127        imageAtomicXor (temp int)
+0:127          'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:127          i3: direct index for structure (layout(offset=48 ) uniform 3-component vector of int)
+0:127            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:127            Constant:
+0:127              7 (const uint)
+0:127          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:127            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:127            Constant:
+0:127              5 (const uint)
+0:130      imageAtomicAdd (temp uint)
+0:130        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:130        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:130          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:130          Constant:
+0:130            2 (const uint)
+0:130        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:130          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:130          Constant:
+0:130            0 (const uint)
+0:131      move second child to first child (temp uint)
+0:131        'out_u1' (temp uint)
+0:131        imageAtomicAdd (temp uint)
+0:131          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:131          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:131            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:131            Constant:
+0:131              2 (const uint)
+0:131          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:131            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:131            Constant:
+0:131              0 (const uint)
+0:132      imageAtomicAnd (temp uint)
+0:132        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:132        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:132          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:132          Constant:
+0:132            2 (const uint)
+0:132        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:132          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:132          Constant:
+0:132            0 (const uint)
+0:133      move second child to first child (temp uint)
+0:133        'out_u1' (temp uint)
+0:133        imageAtomicAnd (temp uint)
+0:133          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:133          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:133            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:133            Constant:
+0:133              2 (const uint)
+0:133          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:133            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:133            Constant:
+0:133              0 (const uint)
+0:134      move second child to first child (temp uint)
+0:134        'out_u1' (temp uint)
+0:134        imageAtomicCompSwap (temp uint)
+0:134          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:134          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              2 (const uint)
+0:134          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              3 (const uint)
+0:134          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:134            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:134            Constant:
+0:134              4 (const uint)
+0:135      move second child to first child (temp uint)
+0:135        'out_u1' (temp uint)
+0:135        imageAtomicExchange (temp uint)
+0:135          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:135          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:135            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:135            Constant:
+0:135              2 (const uint)
+0:135          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:135            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:135            Constant:
+0:135              0 (const uint)
+0:136      imageAtomicMax (temp uint)
+0:136        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:136        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:136          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:136          Constant:
+0:136            2 (const uint)
+0:136        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:136          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:136          Constant:
+0:136            0 (const uint)
+0:137      move second child to first child (temp uint)
+0:137        'out_u1' (temp uint)
+0:137        imageAtomicMax (temp uint)
+0:137          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:137          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:137            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:137            Constant:
+0:137              2 (const uint)
+0:137          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:137            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:137            Constant:
+0:137              0 (const uint)
+0:138      imageAtomicMin (temp uint)
+0:138        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:138        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:138          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:138          Constant:
+0:138            2 (const uint)
+0:138        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:138          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:138          Constant:
+0:138            0 (const uint)
+0:139      move second child to first child (temp uint)
+0:139        'out_u1' (temp uint)
+0:139        imageAtomicMin (temp uint)
+0:139          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:139          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:139            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:139            Constant:
+0:139              2 (const uint)
+0:139          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:139            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:139            Constant:
+0:139              0 (const uint)
+0:140      imageAtomicOr (temp uint)
+0:140        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:140        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:140          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:140          Constant:
+0:140            2 (const uint)
+0:140        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:140          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:140          Constant:
+0:140            0 (const uint)
+0:141      move second child to first child (temp uint)
+0:141        'out_u1' (temp uint)
+0:141        imageAtomicOr (temp uint)
+0:141          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:141          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:141            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:141            Constant:
+0:141              2 (const uint)
+0:141          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:141            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:141            Constant:
+0:141              0 (const uint)
+0:142      imageAtomicXor (temp uint)
+0:142        'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:142        u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:142          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:142          Constant:
+0:142            2 (const uint)
+0:142        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:142          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:142          Constant:
+0:142            0 (const uint)
+0:143      move second child to first child (temp uint)
+0:143        'out_u1' (temp uint)
+0:143        imageAtomicXor (temp uint)
+0:143          'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:143          u3: direct index for structure (layout(offset=16 ) uniform 3-component vector of uint)
+0:143            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:143            Constant:
+0:143              2 (const uint)
+0:143          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:143            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:143            Constant:
+0:143              0 (const uint)
+0:146      imageAtomicAdd (temp int)
+0:146        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:146        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:146          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:146          Constant:
+0:146            6 (const uint)
+0:146        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:146          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:146          Constant:
+0:146            8 (const uint)
+0:147      move second child to first child (temp int)
+0:147        'out_i1' (temp int)
+0:147        imageAtomicAdd (temp int)
+0:147          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:147          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:147            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:147            Constant:
+0:147              6 (const uint)
+0:147          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:147            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:147            Constant:
+0:147              5 (const uint)
+0:148      imageAtomicAnd (temp int)
+0:148        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:148        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:148          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:148          Constant:
+0:148            6 (const uint)
+0:148        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:148          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:148          Constant:
+0:148            8 (const uint)
+0:149      move second child to first child (temp int)
+0:149        'out_i1' (temp int)
+0:149        imageAtomicAnd (temp int)
+0:149          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:149          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:149            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:149            Constant:
+0:149              6 (const uint)
+0:149          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:149            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:149            Constant:
+0:149              5 (const uint)
+0:150      move second child to first child (temp int)
+0:150        'out_i1' (temp int)
+0:150        imageAtomicCompSwap (temp int)
+0:150          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:150          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              6 (const uint)
+0:150          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              8 (const uint)
+0:150          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:150            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:150            Constant:
+0:150              9 (const uint)
+0:151      move second child to first child (temp int)
+0:151        'out_i1' (temp int)
+0:151        imageAtomicExchange (temp int)
+0:151          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:151          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:151            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:151            Constant:
+0:151              6 (const uint)
+0:151          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:151            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:151            Constant:
+0:151              5 (const uint)
+0:152      imageAtomicMax (temp int)
+0:152        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:152        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:152          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:152          Constant:
+0:152            6 (const uint)
+0:152        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:152          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:152          Constant:
+0:152            8 (const uint)
+0:153      move second child to first child (temp int)
+0:153        'out_i1' (temp int)
+0:153        imageAtomicMax (temp int)
+0:153          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:153          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:153            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:153            Constant:
+0:153              6 (const uint)
+0:153          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:153            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:153            Constant:
+0:153              5 (const uint)
+0:154      imageAtomicMin (temp int)
+0:154        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:154        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:154          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:154          Constant:
+0:154            6 (const uint)
+0:154        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:154          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:154          Constant:
+0:154            8 (const uint)
+0:155      move second child to first child (temp int)
+0:155        'out_i1' (temp int)
+0:155        imageAtomicMin (temp int)
+0:155          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:155          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:155            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:155            Constant:
+0:155              6 (const uint)
+0:155          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:155            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:155            Constant:
+0:155              5 (const uint)
+0:156      imageAtomicOr (temp int)
+0:156        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:156        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:156          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:156          Constant:
+0:156            6 (const uint)
+0:156        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:156          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:156          Constant:
+0:156            8 (const uint)
+0:157      move second child to first child (temp int)
+0:157        'out_i1' (temp int)
+0:157        imageAtomicOr (temp int)
+0:157          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:157          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:157            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:157            Constant:
+0:157              6 (const uint)
+0:157          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:157            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:157            Constant:
+0:157              5 (const uint)
+0:158      imageAtomicXor (temp int)
+0:158        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:158        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:158          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:158          Constant:
+0:158            6 (const uint)
+0:158        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:158          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:158          Constant:
+0:158            8 (const uint)
+0:159      move second child to first child (temp int)
+0:159        'out_i1' (temp int)
+0:159        imageAtomicXor (temp int)
+0:159          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:159          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:159            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:159            Constant:
+0:159              6 (const uint)
+0:159          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:159            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:159            Constant:
+0:159              5 (const uint)
+0:162      imageAtomicAdd (temp uint)
+0:162        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:162        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:162          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:162          Constant:
+0:162            1 (const uint)
+0:162        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:162          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:162          Constant:
+0:162            0 (const uint)
+0:163      move second child to first child (temp uint)
+0:163        'out_u1' (temp uint)
+0:163        imageAtomicAdd (temp uint)
+0:163          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:163          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:163            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:163            Constant:
+0:163              1 (const uint)
+0:163          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:163            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:163            Constant:
+0:163              0 (const uint)
+0:164      imageAtomicAnd (temp uint)
+0:164        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:164        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:164          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:164          Constant:
+0:164            1 (const uint)
+0:164        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:164          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:164          Constant:
+0:164            0 (const uint)
+0:165      move second child to first child (temp uint)
+0:165        'out_u1' (temp uint)
+0:165        imageAtomicAnd (temp uint)
+0:165          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:165          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:165            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:165            Constant:
+0:165              1 (const uint)
+0:165          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:165            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:165            Constant:
+0:165              0 (const uint)
+0:166      move second child to first child (temp uint)
+0:166        'out_u1' (temp uint)
+0:166        imageAtomicCompSwap (temp uint)
+0:166          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:166          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              1 (const uint)
+0:166          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              3 (const uint)
+0:166          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:166            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:166            Constant:
+0:166              4 (const uint)
+0:167      move second child to first child (temp uint)
+0:167        'out_u1' (temp uint)
+0:167        imageAtomicExchange (temp uint)
+0:167          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:167          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:167            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:167            Constant:
+0:167              1 (const uint)
+0:167          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:167            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:167            Constant:
+0:167              0 (const uint)
+0:168      imageAtomicMax (temp uint)
+0:168        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:168        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:168          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:168          Constant:
+0:168            1 (const uint)
+0:168        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:168          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:168          Constant:
+0:168            0 (const uint)
+0:169      move second child to first child (temp uint)
+0:169        'out_u1' (temp uint)
+0:169        imageAtomicMax (temp uint)
+0:169          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:169          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:169            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:169            Constant:
+0:169              1 (const uint)
+0:169          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:169            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:169            Constant:
+0:169              0 (const uint)
+0:170      imageAtomicMin (temp uint)
+0:170        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:170        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:170          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:170          Constant:
+0:170            1 (const uint)
+0:170        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:170          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:170          Constant:
+0:170            0 (const uint)
+0:171      move second child to first child (temp uint)
+0:171        'out_u1' (temp uint)
+0:171        imageAtomicMin (temp uint)
+0:171          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:171          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:171            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:171            Constant:
+0:171              1 (const uint)
+0:171          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:171            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:171            Constant:
+0:171              0 (const uint)
+0:172      imageAtomicOr (temp uint)
+0:172        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:172        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:172          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:172          Constant:
+0:172            1 (const uint)
+0:172        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:172          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:172          Constant:
+0:172            0 (const uint)
+0:173      move second child to first child (temp uint)
+0:173        'out_u1' (temp uint)
+0:173        imageAtomicOr (temp uint)
+0:173          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:173          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:173            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:173            Constant:
+0:173              1 (const uint)
+0:173          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:173            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:173            Constant:
+0:173              0 (const uint)
+0:174      imageAtomicXor (temp uint)
+0:174        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:174        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:174          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:174          Constant:
+0:174            1 (const uint)
+0:174        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:174          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:174          Constant:
+0:174            0 (const uint)
+0:175      move second child to first child (temp uint)
+0:175        'out_u1' (temp uint)
+0:175        imageAtomicXor (temp uint)
+0:175          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:175          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:175            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:175            Constant:
+0:175              1 (const uint)
+0:175          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:175            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:175            Constant:
+0:175              0 (const uint)
+0:178      imageAtomicAdd (temp int)
+0:178        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:178        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:178          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:178          Constant:
+0:178            6 (const uint)
+0:178        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:178          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:178          Constant:
+0:178            8 (const uint)
+0:179      move second child to first child (temp int)
+0:179        'out_i1' (temp int)
+0:179        imageAtomicAdd (temp int)
+0:179          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:179          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:179            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:179            Constant:
+0:179              6 (const uint)
+0:179          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:179            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:179            Constant:
+0:179              5 (const uint)
+0:180      imageAtomicAnd (temp int)
+0:180        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:180        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:180          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:180          Constant:
+0:180            6 (const uint)
+0:180        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:180          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:180          Constant:
+0:180            8 (const uint)
+0:181      move second child to first child (temp int)
+0:181        'out_i1' (temp int)
+0:181        imageAtomicAnd (temp int)
+0:181          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:181          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:181            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:181            Constant:
+0:181              6 (const uint)
+0:181          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:181            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:181            Constant:
+0:181              5 (const uint)
+0:182      move second child to first child (temp int)
+0:182        'out_i1' (temp int)
+0:182        imageAtomicCompSwap (temp int)
+0:182          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:182          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              6 (const uint)
+0:182          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              8 (const uint)
+0:182          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:182            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:182            Constant:
+0:182              9 (const uint)
+0:183      move second child to first child (temp int)
+0:183        'out_i1' (temp int)
+0:183        imageAtomicExchange (temp int)
+0:183          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:183          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:183            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:183            Constant:
+0:183              6 (const uint)
+0:183          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:183            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:183            Constant:
+0:183              5 (const uint)
+0:184      imageAtomicMax (temp int)
+0:184        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:184        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:184          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:184          Constant:
+0:184            6 (const uint)
+0:184        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:184          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:184          Constant:
+0:184            8 (const uint)
+0:185      move second child to first child (temp int)
+0:185        'out_i1' (temp int)
+0:185        imageAtomicMax (temp int)
+0:185          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:185          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:185            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:185            Constant:
+0:185              6 (const uint)
+0:185          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:185            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:185            Constant:
+0:185              5 (const uint)
+0:186      imageAtomicMin (temp int)
+0:186        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:186        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:186          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:186          Constant:
+0:186            6 (const uint)
+0:186        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:186          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:186          Constant:
+0:186            8 (const uint)
+0:187      move second child to first child (temp int)
+0:187        'out_i1' (temp int)
+0:187        imageAtomicMin (temp int)
+0:187          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:187          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:187            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:187            Constant:
+0:187              6 (const uint)
+0:187          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:187            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:187            Constant:
+0:187              5 (const uint)
+0:188      imageAtomicOr (temp int)
+0:188        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:188        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:188          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:188          Constant:
+0:188            6 (const uint)
+0:188        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:188          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:188          Constant:
+0:188            8 (const uint)
+0:189      move second child to first child (temp int)
+0:189        'out_i1' (temp int)
+0:189        imageAtomicOr (temp int)
+0:189          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:189          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:189            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:189            Constant:
+0:189              6 (const uint)
+0:189          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:189            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:189            Constant:
+0:189              5 (const uint)
+0:190      imageAtomicXor (temp int)
+0:190        'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:190        i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:190          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:190          Constant:
+0:190            6 (const uint)
+0:190        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:190          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:190          Constant:
+0:190            8 (const uint)
+0:191      move second child to first child (temp int)
+0:191        'out_i1' (temp int)
+0:191        imageAtomicXor (temp int)
+0:191          'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:191          i2: direct index for structure (layout(offset=40 ) uniform 2-component vector of int)
+0:191            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:191            Constant:
+0:191              6 (const uint)
+0:191          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:191            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:191            Constant:
+0:191              5 (const uint)
+0:194      imageAtomicAdd (temp uint)
+0:194        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:194        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:194          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:194          Constant:
+0:194            1 (const uint)
+0:194        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:194          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:194          Constant:
+0:194            0 (const uint)
+0:195      move second child to first child (temp uint)
+0:195        'out_u1' (temp uint)
+0:195        imageAtomicAdd (temp uint)
+0:195          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:195          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:195            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:195            Constant:
+0:195              1 (const uint)
+0:195          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:195            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:195            Constant:
+0:195              0 (const uint)
+0:196      imageAtomicAnd (temp uint)
+0:196        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:196        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:196          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:196          Constant:
+0:196            1 (const uint)
+0:196        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:196          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:196          Constant:
+0:196            0 (const uint)
+0:197      move second child to first child (temp uint)
+0:197        'out_u1' (temp uint)
+0:197        imageAtomicAnd (temp uint)
+0:197          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:197          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:197            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:197            Constant:
+0:197              1 (const uint)
+0:197          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:197            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:197            Constant:
+0:197              0 (const uint)
+0:198      move second child to first child (temp uint)
+0:198        'out_u1' (temp uint)
+0:198        imageAtomicCompSwap (temp uint)
+0:198          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:198          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              1 (const uint)
+0:198          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              3 (const uint)
+0:198          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:198            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:198            Constant:
+0:198              4 (const uint)
+0:199      move second child to first child (temp uint)
+0:199        'out_u1' (temp uint)
+0:199        imageAtomicExchange (temp uint)
+0:199          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:199          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:199            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:199            Constant:
+0:199              1 (const uint)
+0:199          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:199            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:199            Constant:
+0:199              0 (const uint)
+0:200      imageAtomicMax (temp uint)
+0:200        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:200        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:200          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:200          Constant:
+0:200            1 (const uint)
+0:200        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:200          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:200          Constant:
+0:200            0 (const uint)
+0:201      move second child to first child (temp uint)
+0:201        'out_u1' (temp uint)
+0:201        imageAtomicMax (temp uint)
+0:201          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:201          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:201            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:201            Constant:
+0:201              1 (const uint)
+0:201          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:201            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:201            Constant:
+0:201              0 (const uint)
+0:202      imageAtomicMin (temp uint)
+0:202        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:202        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:202          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:202          Constant:
+0:202            1 (const uint)
+0:202        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:202          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:202          Constant:
+0:202            0 (const uint)
+0:203      move second child to first child (temp uint)
+0:203        'out_u1' (temp uint)
+0:203        imageAtomicMin (temp uint)
+0:203          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:203          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:203            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:203            Constant:
+0:203              1 (const uint)
+0:203          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:203            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:203            Constant:
+0:203              0 (const uint)
+0:204      imageAtomicOr (temp uint)
+0:204        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:204        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:204          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:204          Constant:
+0:204            1 (const uint)
+0:204        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:204          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:204          Constant:
+0:204            0 (const uint)
+0:205      move second child to first child (temp uint)
+0:205        'out_u1' (temp uint)
+0:205        imageAtomicOr (temp uint)
+0:205          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:205          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:205            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:205            Constant:
+0:205              1 (const uint)
+0:205          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:205            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:205            Constant:
+0:205              0 (const uint)
+0:206      imageAtomicXor (temp uint)
+0:206        'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:206        u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:206          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:206          Constant:
+0:206            1 (const uint)
+0:206        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:206          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:206          Constant:
+0:206            0 (const uint)
+0:207      move second child to first child (temp uint)
+0:207        'out_u1' (temp uint)
+0:207        imageAtomicXor (temp uint)
+0:207          'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:207          u2: direct index for structure (layout(offset=8 ) uniform 2-component vector of uint)
+0:207            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:207            Constant:
+0:207              1 (const uint)
+0:207          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:207            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:207            Constant:
+0:207              0 (const uint)
+0:210      imageAtomicAdd (temp int)
+0:210        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:210        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:210          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:210          Constant:
+0:210            5 (const uint)
+0:210        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:210          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:210          Constant:
+0:210            8 (const uint)
+0:211      move second child to first child (temp int)
+0:211        'out_i1' (temp int)
+0:211        imageAtomicAdd (temp int)
+0:211          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:211          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:211            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:211            Constant:
+0:211              5 (const uint)
+0:211          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:211            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:211            Constant:
+0:211              5 (const uint)
+0:212      imageAtomicAnd (temp int)
+0:212        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:212        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:212          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:212          Constant:
+0:212            5 (const uint)
+0:212        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:212          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:212          Constant:
+0:212            8 (const uint)
+0:213      move second child to first child (temp int)
+0:213        'out_i1' (temp int)
+0:213        imageAtomicAnd (temp int)
+0:213          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:213          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:213            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:213            Constant:
+0:213              5 (const uint)
+0:213          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:213            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:213            Constant:
+0:213              5 (const uint)
+0:214      move second child to first child (temp int)
+0:214        'out_i1' (temp int)
+0:214        imageAtomicCompSwap (temp int)
+0:214          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:214          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              5 (const uint)
+0:214          i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              8 (const uint)
+0:214          i1c: direct index for structure (layout(offset=64 ) uniform int)
+0:214            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:214            Constant:
+0:214              9 (const uint)
+0:215      move second child to first child (temp int)
+0:215        'out_i1' (temp int)
+0:215        imageAtomicExchange (temp int)
+0:215          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:215          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:215            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:215            Constant:
+0:215              5 (const uint)
+0:215          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:215            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:215            Constant:
+0:215              5 (const uint)
+0:216      imageAtomicMax (temp int)
+0:216        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:216        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:216          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:216          Constant:
+0:216            5 (const uint)
+0:216        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:216          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:216          Constant:
+0:216            8 (const uint)
+0:217      move second child to first child (temp int)
+0:217        'out_i1' (temp int)
+0:217        imageAtomicMax (temp int)
+0:217          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:217          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:217            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:217            Constant:
+0:217              5 (const uint)
+0:217          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:217            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:217            Constant:
+0:217              5 (const uint)
+0:218      imageAtomicMin (temp int)
+0:218        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:218        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:218          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:218          Constant:
+0:218            5 (const uint)
+0:218        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:218          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:218          Constant:
+0:218            8 (const uint)
+0:219      move second child to first child (temp int)
+0:219        'out_i1' (temp int)
+0:219        imageAtomicMin (temp int)
+0:219          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:219          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:219            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:219            Constant:
+0:219              5 (const uint)
+0:219          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:219            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:219            Constant:
+0:219              5 (const uint)
+0:220      imageAtomicOr (temp int)
+0:220        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:220        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:220          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:220          Constant:
+0:220            5 (const uint)
+0:220        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:220          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:220          Constant:
+0:220            8 (const uint)
+0:221      move second child to first child (temp int)
+0:221        'out_i1' (temp int)
+0:221        imageAtomicOr (temp int)
+0:221          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:221          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:221            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:221            Constant:
+0:221              5 (const uint)
+0:221          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:221            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:221            Constant:
+0:221              5 (const uint)
+0:222      imageAtomicXor (temp int)
+0:222        'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:222        i1: direct index for structure (layout(offset=36 ) uniform int)
+0:222          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:222          Constant:
+0:222            5 (const uint)
+0:222        i1b: direct index for structure (layout(offset=60 ) uniform int)
+0:222          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:222          Constant:
+0:222            8 (const uint)
+0:223      move second child to first child (temp int)
+0:223        'out_i1' (temp int)
+0:223        imageAtomicXor (temp int)
+0:223          'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:223          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:223            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:223            Constant:
+0:223              5 (const uint)
+0:223          i1: direct index for structure (layout(offset=36 ) uniform int)
+0:223            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:223            Constant:
+0:223              5 (const uint)
+0:226      imageAtomicAdd (temp uint)
+0:226        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:226        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:226          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:226          Constant:
+0:226            0 (const uint)
+0:226        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:226          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:226          Constant:
+0:226            0 (const uint)
+0:227      move second child to first child (temp uint)
+0:227        'out_u1' (temp uint)
+0:227        imageAtomicAdd (temp uint)
+0:227          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:227          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:227            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:227            Constant:
+0:227              0 (const uint)
+0:227          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:227            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:227            Constant:
+0:227              0 (const uint)
+0:228      imageAtomicAnd (temp uint)
+0:228        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:228        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:228          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:228          Constant:
+0:228            0 (const uint)
+0:228        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:228          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:228          Constant:
+0:228            0 (const uint)
+0:229      move second child to first child (temp uint)
+0:229        'out_u1' (temp uint)
+0:229        imageAtomicAnd (temp uint)
+0:229          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:229          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:229            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:229            Constant:
+0:229              0 (const uint)
+0:229          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:229            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:229            Constant:
+0:229              0 (const uint)
+0:230      move second child to first child (temp uint)
+0:230        'out_u1' (temp uint)
+0:230        imageAtomicCompSwap (temp uint)
+0:230          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:230          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              0 (const uint)
+0:230          u1b: direct index for structure (layout(offset=28 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              3 (const uint)
+0:230          u1c: direct index for structure (layout(offset=32 ) uniform uint)
+0:230            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:230            Constant:
+0:230              4 (const uint)
+0:231      move second child to first child (temp uint)
+0:231        'out_u1' (temp uint)
+0:231        imageAtomicExchange (temp uint)
+0:231          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:231          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:231            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:231            Constant:
+0:231              0 (const uint)
+0:231          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:231            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:231            Constant:
+0:231              0 (const uint)
+0:232      imageAtomicMax (temp uint)
+0:232        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:232        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:232          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:232          Constant:
+0:232            0 (const uint)
+0:232        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:232          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:232          Constant:
+0:232            0 (const uint)
+0:233      move second child to first child (temp uint)
+0:233        'out_u1' (temp uint)
+0:233        imageAtomicMax (temp uint)
+0:233          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:233          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:233            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:233            Constant:
+0:233              0 (const uint)
+0:233          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:233            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:233            Constant:
+0:233              0 (const uint)
+0:234      imageAtomicMin (temp uint)
+0:234        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:234        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:234          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:234          Constant:
+0:234            0 (const uint)
+0:234        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:234          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:234          Constant:
+0:234            0 (const uint)
+0:235      move second child to first child (temp uint)
+0:235        'out_u1' (temp uint)
+0:235        imageAtomicMin (temp uint)
+0:235          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:235          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:235            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:235            Constant:
+0:235              0 (const uint)
+0:235          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:235            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:235            Constant:
+0:235              0 (const uint)
+0:236      imageAtomicOr (temp uint)
+0:236        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:236        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:236          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:236          Constant:
+0:236            0 (const uint)
+0:236        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:236          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:236          Constant:
+0:236            0 (const uint)
+0:237      move second child to first child (temp uint)
+0:237        'out_u1' (temp uint)
+0:237        imageAtomicOr (temp uint)
+0:237          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:237          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:237            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:237            Constant:
+0:237              0 (const uint)
+0:237          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:237            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:237            Constant:
+0:237              0 (const uint)
+0:238      imageAtomicXor (temp uint)
+0:238        'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:238        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:238          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:238          Constant:
+0:238            0 (const uint)
+0:238        u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:238          'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:238          Constant:
+0:238            0 (const uint)
+0:239      move second child to first child (temp uint)
+0:239        'out_u1' (temp uint)
+0:239        imageAtomicXor (temp uint)
+0:239          'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:239          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:239            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:239            Constant:
+0:239              0 (const uint)
+0:239          u1: direct index for structure (layout(offset=0 ) uniform uint)
+0:239            'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+0:239            Constant:
+0:239              0 (const uint)
+0:242      move second child to first child (temp 4-component vector of float)
+0:242        Color: direct index for structure (temp 4-component vector of float)
+0:242          'psout' (temp structure{temp 4-component vector of float Color})
+0:242          Constant:
+0:242            0 (const int)
+0:242        Constant:
+0:242          1.000000
+0:242          1.000000
+0:242          1.000000
+0:242          1.000000
+0:243      Sequence
+0:243        Sequence
+0:243          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:243            Color: direct index for structure (temp 4-component vector of float)
+0:243              'psout' (temp structure{temp 4-component vector of float Color})
+0:243              Constant:
+0:243                0 (const int)
+0:243        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_sSamp' (uniform sampler)
+0:?     'g_tTex1df1' (layout(r32f ) uniform image1D)
+0:?     'g_tTex1di1' (layout(r32i ) uniform iimage1D)
+0:?     'g_tTex1du1' (layout(r32ui ) uniform uimage1D)
+0:?     'g_tTex2df1' (layout(r32f ) uniform image2D)
+0:?     'g_tTex2di1' (layout(r32i ) uniform iimage2D)
+0:?     'g_tTex2du1' (layout(r32ui ) uniform uimage2D)
+0:?     'g_tTex3df1' (layout(r32f ) uniform image3D)
+0:?     'g_tTex3di1' (layout(r32i ) uniform iimage3D)
+0:?     'g_tTex3du1' (layout(r32ui ) uniform uimage3D)
+0:?     'g_tTex1df1a' (layout(r32f ) uniform image1DArray)
+0:?     'g_tTex1di1a' (layout(r32i ) uniform iimage1DArray)
+0:?     'g_tTex1du1a' (layout(r32ui ) uniform uimage1DArray)
+0:?     'g_tTex2df1a' (layout(r32f ) uniform image2DArray)
+0:?     'g_tTex2di1a' (layout(r32i ) uniform iimage2DArray)
+0:?     'g_tTex2du1a' (layout(r32ui ) uniform uimage2DArray)
+0:?     'g_tBuffF' (layout(r32f ) uniform imageBuffer)
+0:?     'g_tBuffI' (layout(r32i ) uniform iimageBuffer)
+0:?     'g_tBuffU' (layout(r32ui ) uniform uimageBuffer)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform uint u1, layout(offset=8 ) uniform 2-component vector of uint u2, layout(offset=16 ) uniform 3-component vector of uint u3, layout(offset=28 ) uniform uint u1b, layout(offset=32 ) uniform uint u1c, layout(offset=36 ) uniform int i1, layout(offset=40 ) uniform 2-component vector of int i2, layout(offset=48 ) uniform 3-component vector of int i3, layout(offset=60 ) uniform int i1b, layout(offset=64 ) uniform int i1c})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 1142
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 1111
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  "g_tTex1di1"
+                              Name 15  "$Global"
+                              MemberName 15($Global) 0  "u1"
+                              MemberName 15($Global) 1  "u2"
+                              MemberName 15($Global) 2  "u3"
+                              MemberName 15($Global) 3  "u1b"
+                              MemberName 15($Global) 4  "u1c"
+                              MemberName 15($Global) 5  "i1"
+                              MemberName 15($Global) 6  "i2"
+                              MemberName 15($Global) 7  "i3"
+                              MemberName 15($Global) 8  "i1b"
+                              MemberName 15($Global) 9  "i1c"
+                              Name 17  ""
+                              Name 31  "out_i1"
+                              Name 115  "g_tTex1du1"
+                              Name 126  "out_u1"
+                              Name 211  "g_tTex2di1"
+                              Name 302  "g_tTex2du1"
+                              Name 393  "g_tTex3di1"
+                              Name 484  "g_tTex3du1"
+                              Name 575  "g_tTex1di1a"
+                              Name 664  "g_tTex1du1a"
+                              Name 925  "g_tBuffI"
+                              Name 1014  "g_tBuffU"
+                              Name 1103  "PS_OUTPUT"
+                              MemberName 1103(PS_OUTPUT) 0  "Color"
+                              Name 1105  "psout"
+                              Name 1111  "Color"
+                              Name 1117  "g_sSamp"
+                              Name 1120  "g_tTex1df1"
+                              Name 1123  "g_tTex2df1"
+                              Name 1126  "g_tTex3df1"
+                              Name 1129  "g_tTex1df1a"
+                              Name 1132  "g_tTex2df1a"
+                              Name 1135  "g_tTex2di1a"
+                              Name 1138  "g_tTex2du1a"
+                              Name 1141  "g_tBuffF"
+                              Decorate 9(g_tTex1di1) DescriptorSet 0
+                              MemberDecorate 15($Global) 0 Offset 0
+                              MemberDecorate 15($Global) 1 Offset 8
+                              MemberDecorate 15($Global) 2 Offset 16
+                              MemberDecorate 15($Global) 3 Offset 28
+                              MemberDecorate 15($Global) 4 Offset 32
+                              MemberDecorate 15($Global) 5 Offset 36
+                              MemberDecorate 15($Global) 6 Offset 40
+                              MemberDecorate 15($Global) 7 Offset 48
+                              MemberDecorate 15($Global) 8 Offset 60
+                              MemberDecorate 15($Global) 9 Offset 64
+                              Decorate 15($Global) Block
+                              Decorate 17 DescriptorSet 0
+                              Decorate 115(g_tTex1du1) DescriptorSet 0
+                              Decorate 211(g_tTex2di1) DescriptorSet 0
+                              Decorate 302(g_tTex2du1) DescriptorSet 0
+                              Decorate 393(g_tTex3di1) DescriptorSet 0
+                              Decorate 484(g_tTex3du1) DescriptorSet 0
+                              Decorate 575(g_tTex1di1a) DescriptorSet 0
+                              Decorate 664(g_tTex1du1a) DescriptorSet 0
+                              Decorate 925(g_tBuffI) DescriptorSet 0
+                              Decorate 1014(g_tBuffU) DescriptorSet 0
+                              Decorate 1111(Color) Location 0
+                              Decorate 1117(g_sSamp) DescriptorSet 0
+                              Decorate 1120(g_tTex1df1) DescriptorSet 0
+                              Decorate 1123(g_tTex2df1) DescriptorSet 0
+                              Decorate 1126(g_tTex3df1) DescriptorSet 0
+                              Decorate 1129(g_tTex1df1a) DescriptorSet 0
+                              Decorate 1132(g_tTex2df1a) DescriptorSet 0
+                              Decorate 1135(g_tTex2di1a) DescriptorSet 0
+                              Decorate 1138(g_tTex2du1a) DescriptorSet 0
+                              Decorate 1141(g_tBuffF) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeImage 6(int) 1D nonsampled format:R32i
+               8:             TypePointer UniformConstant 7
+   9(g_tTex1di1):      8(ptr) Variable UniformConstant
+              10:             TypeInt 32 0
+              11:             TypeVector 10(int) 2
+              12:             TypeVector 10(int) 3
+              13:             TypeVector 6(int) 2
+              14:             TypeVector 6(int) 3
+     15($Global):             TypeStruct 10(int) 11(ivec2) 12(ivec3) 10(int) 10(int) 6(int) 13(ivec2) 14(ivec3) 6(int) 6(int)
+              16:             TypePointer Uniform 15($Global)
+              17:     16(ptr) Variable Uniform
+              18:      6(int) Constant 5
+              19:             TypePointer Uniform 6(int)
+              22:      6(int) Constant 8
+              25:     10(int) Constant 0
+              26:             TypePointer Image 6(int)
+              28:     10(int) Constant 1
+              30:             TypePointer Function 6(int)
+              54:      6(int) Constant 9
+             113:             TypeImage 10(int) 1D nonsampled format:R32ui
+             114:             TypePointer UniformConstant 113
+ 115(g_tTex1du1):    114(ptr) Variable UniformConstant
+             116:      6(int) Constant 0
+             117:             TypePointer Uniform 10(int)
+             122:             TypePointer Image 10(int)
+             125:             TypePointer Function 10(int)
+             147:      6(int) Constant 3
+             150:      6(int) Constant 4
+             209:             TypeImage 6(int) 2D nonsampled format:R32i
+             210:             TypePointer UniformConstant 209
+ 211(g_tTex2di1):    210(ptr) Variable UniformConstant
+             212:      6(int) Constant 6
+             213:             TypePointer Uniform 13(ivec2)
+             300:             TypeImage 10(int) 2D nonsampled format:R32ui
+             301:             TypePointer UniformConstant 300
+ 302(g_tTex2du1):    301(ptr) Variable UniformConstant
+             303:      6(int) Constant 1
+             304:             TypePointer Uniform 11(ivec2)
+             391:             TypeImage 6(int) 3D nonsampled format:R32i
+             392:             TypePointer UniformConstant 391
+ 393(g_tTex3di1):    392(ptr) Variable UniformConstant
+             394:      6(int) Constant 7
+             395:             TypePointer Uniform 14(ivec3)
+             482:             TypeImage 10(int) 3D nonsampled format:R32ui
+             483:             TypePointer UniformConstant 482
+ 484(g_tTex3du1):    483(ptr) Variable UniformConstant
+             485:      6(int) Constant 2
+             486:             TypePointer Uniform 12(ivec3)
+             573:             TypeImage 6(int) 1D array nonsampled format:R32i
+             574:             TypePointer UniformConstant 573
+575(g_tTex1di1a):    574(ptr) Variable UniformConstant
+             662:             TypeImage 10(int) 1D array nonsampled format:R32ui
+             663:             TypePointer UniformConstant 662
+664(g_tTex1du1a):    663(ptr) Variable UniformConstant
+             923:             TypeImage 6(int) Buffer nonsampled format:R32i
+             924:             TypePointer UniformConstant 923
+   925(g_tBuffI):    924(ptr) Variable UniformConstant
+            1012:             TypeImage 10(int) Buffer nonsampled format:R32ui
+            1013:             TypePointer UniformConstant 1012
+  1014(g_tBuffU):   1013(ptr) Variable UniformConstant
+            1101:             TypeFloat 32
+            1102:             TypeVector 1101(float) 4
+ 1103(PS_OUTPUT):             TypeStruct 1102(fvec4)
+            1104:             TypePointer Function 1103(PS_OUTPUT)
+            1106: 1101(float) Constant 1065353216
+            1107: 1102(fvec4) ConstantComposite 1106 1106 1106 1106
+            1108:             TypePointer Function 1102(fvec4)
+            1110:             TypePointer Output 1102(fvec4)
+     1111(Color):   1110(ptr) Variable Output
+            1115:             TypeSampler
+            1116:             TypePointer UniformConstant 1115
+   1117(g_sSamp):   1116(ptr) Variable UniformConstant
+            1118:             TypeImage 1101(float) 1D nonsampled format:R32f
+            1119:             TypePointer UniformConstant 1118
+1120(g_tTex1df1):   1119(ptr) Variable UniformConstant
+            1121:             TypeImage 1101(float) 2D nonsampled format:R32f
+            1122:             TypePointer UniformConstant 1121
+1123(g_tTex2df1):   1122(ptr) Variable UniformConstant
+            1124:             TypeImage 1101(float) 3D nonsampled format:R32f
+            1125:             TypePointer UniformConstant 1124
+1126(g_tTex3df1):   1125(ptr) Variable UniformConstant
+            1127:             TypeImage 1101(float) 1D array nonsampled format:R32f
+            1128:             TypePointer UniformConstant 1127
+1129(g_tTex1df1a):   1128(ptr) Variable UniformConstant
+            1130:             TypeImage 1101(float) 2D array nonsampled format:R32f
+            1131:             TypePointer UniformConstant 1130
+1132(g_tTex2df1a):   1131(ptr) Variable UniformConstant
+            1133:             TypeImage 6(int) 2D array nonsampled format:R32i
+            1134:             TypePointer UniformConstant 1133
+1135(g_tTex2di1a):   1134(ptr) Variable UniformConstant
+            1136:             TypeImage 10(int) 2D array nonsampled format:R32ui
+            1137:             TypePointer UniformConstant 1136
+1138(g_tTex2du1a):   1137(ptr) Variable UniformConstant
+            1139:             TypeImage 1101(float) Buffer nonsampled format:R32f
+            1140:             TypePointer UniformConstant 1139
+  1141(g_tBuffF):   1140(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      31(out_i1):     30(ptr) Variable Function
+     126(out_u1):    125(ptr) Variable Function
+     1105(psout):   1104(ptr) Variable Function
+              20:     19(ptr) AccessChain 17 18
+              21:      6(int) Load 20
+              23:     19(ptr) AccessChain 17 22
+              24:      6(int) Load 23
+              27:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 21 25
+              29:      6(int) AtomicIAdd 27 28 25 24
+              32:     19(ptr) AccessChain 17 18
+              33:      6(int) Load 32
+              34:     19(ptr) AccessChain 17 18
+              35:      6(int) Load 34
+              36:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 33 25
+              37:      6(int) AtomicIAdd 36 28 25 35
+                              Store 31(out_i1) 37
+              38:     19(ptr) AccessChain 17 18
+              39:      6(int) Load 38
+              40:     19(ptr) AccessChain 17 22
+              41:      6(int) Load 40
+              42:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 39 25
+              43:      6(int) AtomicAnd 42 28 25 41
+              44:     19(ptr) AccessChain 17 18
+              45:      6(int) Load 44
+              46:     19(ptr) AccessChain 17 18
+              47:      6(int) Load 46
+              48:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 45 25
+              49:      6(int) AtomicAnd 48 28 25 47
+                              Store 31(out_i1) 49
+              50:     19(ptr) AccessChain 17 18
+              51:      6(int) Load 50
+              52:     19(ptr) AccessChain 17 22
+              53:      6(int) Load 52
+              55:     19(ptr) AccessChain 17 54
+              56:      6(int) Load 55
+              57:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 51 25
+              58:      6(int) AtomicCompareExchange 57 28 25 25 56 53
+                              Store 31(out_i1) 58
+              59:     19(ptr) AccessChain 17 18
+              60:      6(int) Load 59
+              61:     19(ptr) AccessChain 17 18
+              62:      6(int) Load 61
+              63:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 60 25
+              64:      6(int) AtomicExchange 63 28 25 62
+                              Store 31(out_i1) 64
+              65:     19(ptr) AccessChain 17 18
+              66:      6(int) Load 65
+              67:     19(ptr) AccessChain 17 22
+              68:      6(int) Load 67
+              69:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 66 25
+              70:      6(int) AtomicSMax 69 28 25 68
+              71:     19(ptr) AccessChain 17 18
+              72:      6(int) Load 71
+              73:     19(ptr) AccessChain 17 18
+              74:      6(int) Load 73
+              75:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 72 25
+              76:      6(int) AtomicSMax 75 28 25 74
+                              Store 31(out_i1) 76
+              77:     19(ptr) AccessChain 17 18
+              78:      6(int) Load 77
+              79:     19(ptr) AccessChain 17 22
+              80:      6(int) Load 79
+              81:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 78 25
+              82:      6(int) AtomicSMin 81 28 25 80
+              83:     19(ptr) AccessChain 17 18
+              84:      6(int) Load 83
+              85:     19(ptr) AccessChain 17 18
+              86:      6(int) Load 85
+              87:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 84 25
+              88:      6(int) AtomicSMin 87 28 25 86
+                              Store 31(out_i1) 88
+              89:     19(ptr) AccessChain 17 18
+              90:      6(int) Load 89
+              91:     19(ptr) AccessChain 17 22
+              92:      6(int) Load 91
+              93:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 90 25
+              94:      6(int) AtomicOr 93 28 25 92
+              95:     19(ptr) AccessChain 17 18
+              96:      6(int) Load 95
+              97:     19(ptr) AccessChain 17 18
+              98:      6(int) Load 97
+              99:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 96 25
+             100:      6(int) AtomicOr 99 28 25 98
+                              Store 31(out_i1) 100
+             101:     19(ptr) AccessChain 17 18
+             102:      6(int) Load 101
+             103:     19(ptr) AccessChain 17 22
+             104:      6(int) Load 103
+             105:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 102 25
+             106:      6(int) AtomicXor 105 28 25 104
+             107:     19(ptr) AccessChain 17 18
+             108:      6(int) Load 107
+             109:     19(ptr) AccessChain 17 18
+             110:      6(int) Load 109
+             111:     26(ptr) ImageTexelPointer 9(g_tTex1di1) 108 25
+             112:      6(int) AtomicXor 111 28 25 110
+                              Store 31(out_i1) 112
+             118:    117(ptr) AccessChain 17 116
+             119:     10(int) Load 118
+             120:    117(ptr) AccessChain 17 116
+             121:     10(int) Load 120
+             123:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 119 25
+             124:     10(int) AtomicIAdd 123 28 25 121
+             127:    117(ptr) AccessChain 17 116
+             128:     10(int) Load 127
+             129:    117(ptr) AccessChain 17 116
+             130:     10(int) Load 129
+             131:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 128 25
+             132:     10(int) AtomicIAdd 131 28 25 130
+                              Store 126(out_u1) 132
+             133:    117(ptr) AccessChain 17 116
+             134:     10(int) Load 133
+             135:    117(ptr) AccessChain 17 116
+             136:     10(int) Load 135
+             137:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 134 25
+             138:     10(int) AtomicAnd 137 28 25 136
+             139:    117(ptr) AccessChain 17 116
+             140:     10(int) Load 139
+             141:    117(ptr) AccessChain 17 116
+             142:     10(int) Load 141
+             143:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 140 25
+             144:     10(int) AtomicAnd 143 28 25 142
+                              Store 126(out_u1) 144
+             145:    117(ptr) AccessChain 17 116
+             146:     10(int) Load 145
+             148:    117(ptr) AccessChain 17 147
+             149:     10(int) Load 148
+             151:    117(ptr) AccessChain 17 150
+             152:     10(int) Load 151
+             153:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 146 25
+             154:     10(int) AtomicCompareExchange 153 28 25 25 152 149
+                              Store 126(out_u1) 154
+             155:    117(ptr) AccessChain 17 116
+             156:     10(int) Load 155
+             157:    117(ptr) AccessChain 17 116
+             158:     10(int) Load 157
+             159:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 156 25
+             160:     10(int) AtomicExchange 159 28 25 158
+                              Store 126(out_u1) 160
+             161:    117(ptr) AccessChain 17 116
+             162:     10(int) Load 161
+             163:    117(ptr) AccessChain 17 116
+             164:     10(int) Load 163
+             165:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 162 25
+             166:     10(int) AtomicUMax 165 28 25 164
+             167:    117(ptr) AccessChain 17 116
+             168:     10(int) Load 167
+             169:    117(ptr) AccessChain 17 116
+             170:     10(int) Load 169
+             171:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 168 25
+             172:     10(int) AtomicUMax 171 28 25 170
+                              Store 126(out_u1) 172
+             173:    117(ptr) AccessChain 17 116
+             174:     10(int) Load 173
+             175:    117(ptr) AccessChain 17 116
+             176:     10(int) Load 175
+             177:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 174 25
+             178:     10(int) AtomicUMin 177 28 25 176
+             179:    117(ptr) AccessChain 17 116
+             180:     10(int) Load 179
+             181:    117(ptr) AccessChain 17 116
+             182:     10(int) Load 181
+             183:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 180 25
+             184:     10(int) AtomicUMin 183 28 25 182
+                              Store 126(out_u1) 184
+             185:    117(ptr) AccessChain 17 116
+             186:     10(int) Load 185
+             187:    117(ptr) AccessChain 17 116
+             188:     10(int) Load 187
+             189:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 186 25
+             190:     10(int) AtomicOr 189 28 25 188
+             191:    117(ptr) AccessChain 17 116
+             192:     10(int) Load 191
+             193:    117(ptr) AccessChain 17 116
+             194:     10(int) Load 193
+             195:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 192 25
+             196:     10(int) AtomicOr 195 28 25 194
+                              Store 126(out_u1) 196
+             197:    117(ptr) AccessChain 17 116
+             198:     10(int) Load 197
+             199:    117(ptr) AccessChain 17 116
+             200:     10(int) Load 199
+             201:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 198 25
+             202:     10(int) AtomicXor 201 28 25 200
+             203:    117(ptr) AccessChain 17 116
+             204:     10(int) Load 203
+             205:    117(ptr) AccessChain 17 116
+             206:     10(int) Load 205
+             207:    122(ptr) ImageTexelPointer 115(g_tTex1du1) 204 25
+             208:     10(int) AtomicXor 207 28 25 206
+                              Store 126(out_u1) 208
+             214:    213(ptr) AccessChain 17 212
+             215:   13(ivec2) Load 214
+             216:     19(ptr) AccessChain 17 22
+             217:      6(int) Load 216
+             218:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 215 25
+             219:      6(int) AtomicIAdd 218 28 25 217
+             220:    213(ptr) AccessChain 17 212
+             221:   13(ivec2) Load 220
+             222:     19(ptr) AccessChain 17 18
+             223:      6(int) Load 222
+             224:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 221 25
+             225:      6(int) AtomicIAdd 224 28 25 223
+                              Store 31(out_i1) 225
+             226:    213(ptr) AccessChain 17 212
+             227:   13(ivec2) Load 226
+             228:     19(ptr) AccessChain 17 22
+             229:      6(int) Load 228
+             230:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 227 25
+             231:      6(int) AtomicAnd 230 28 25 229
+             232:    213(ptr) AccessChain 17 212
+             233:   13(ivec2) Load 232
+             234:     19(ptr) AccessChain 17 18
+             235:      6(int) Load 234
+             236:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 233 25
+             237:      6(int) AtomicAnd 236 28 25 235
+                              Store 31(out_i1) 237
+             238:    213(ptr) AccessChain 17 212
+             239:   13(ivec2) Load 238
+             240:     19(ptr) AccessChain 17 22
+             241:      6(int) Load 240
+             242:     19(ptr) AccessChain 17 54
+             243:      6(int) Load 242
+             244:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 239 25
+             245:      6(int) AtomicCompareExchange 244 28 25 25 243 241
+                              Store 31(out_i1) 245
+             246:    213(ptr) AccessChain 17 212
+             247:   13(ivec2) Load 246
+             248:     19(ptr) AccessChain 17 18
+             249:      6(int) Load 248
+             250:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 247 25
+             251:      6(int) AtomicExchange 250 28 25 249
+                              Store 31(out_i1) 251
+             252:    213(ptr) AccessChain 17 212
+             253:   13(ivec2) Load 252
+             254:     19(ptr) AccessChain 17 22
+             255:      6(int) Load 254
+             256:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 253 25
+             257:      6(int) AtomicSMax 256 28 25 255
+             258:    213(ptr) AccessChain 17 212
+             259:   13(ivec2) Load 258
+             260:     19(ptr) AccessChain 17 18
+             261:      6(int) Load 260
+             262:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 259 25
+             263:      6(int) AtomicSMax 262 28 25 261
+                              Store 31(out_i1) 263
+             264:    213(ptr) AccessChain 17 212
+             265:   13(ivec2) Load 264
+             266:     19(ptr) AccessChain 17 22
+             267:      6(int) Load 266
+             268:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 265 25
+             269:      6(int) AtomicSMin 268 28 25 267
+             270:    213(ptr) AccessChain 17 212
+             271:   13(ivec2) Load 270
+             272:     19(ptr) AccessChain 17 18
+             273:      6(int) Load 272
+             274:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 271 25
+             275:      6(int) AtomicSMin 274 28 25 273
+                              Store 31(out_i1) 275
+             276:    213(ptr) AccessChain 17 212
+             277:   13(ivec2) Load 276
+             278:     19(ptr) AccessChain 17 22
+             279:      6(int) Load 278
+             280:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 277 25
+             281:      6(int) AtomicOr 280 28 25 279
+             282:    213(ptr) AccessChain 17 212
+             283:   13(ivec2) Load 282
+             284:     19(ptr) AccessChain 17 18
+             285:      6(int) Load 284
+             286:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 283 25
+             287:      6(int) AtomicOr 286 28 25 285
+                              Store 31(out_i1) 287
+             288:    213(ptr) AccessChain 17 212
+             289:   13(ivec2) Load 288
+             290:     19(ptr) AccessChain 17 22
+             291:      6(int) Load 290
+             292:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 289 25
+             293:      6(int) AtomicXor 292 28 25 291
+             294:    213(ptr) AccessChain 17 212
+             295:   13(ivec2) Load 294
+             296:     19(ptr) AccessChain 17 18
+             297:      6(int) Load 296
+             298:     26(ptr) ImageTexelPointer 211(g_tTex2di1) 295 25
+             299:      6(int) AtomicXor 298 28 25 297
+                              Store 31(out_i1) 299
+             305:    304(ptr) AccessChain 17 303
+             306:   11(ivec2) Load 305
+             307:    117(ptr) AccessChain 17 116
+             308:     10(int) Load 307
+             309:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 306 25
+             310:     10(int) AtomicIAdd 309 28 25 308
+             311:    304(ptr) AccessChain 17 303
+             312:   11(ivec2) Load 311
+             313:    117(ptr) AccessChain 17 116
+             314:     10(int) Load 313
+             315:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 312 25
+             316:     10(int) AtomicIAdd 315 28 25 314
+                              Store 126(out_u1) 316
+             317:    304(ptr) AccessChain 17 303
+             318:   11(ivec2) Load 317
+             319:    117(ptr) AccessChain 17 116
+             320:     10(int) Load 319
+             321:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 318 25
+             322:     10(int) AtomicAnd 321 28 25 320
+             323:    304(ptr) AccessChain 17 303
+             324:   11(ivec2) Load 323
+             325:    117(ptr) AccessChain 17 116
+             326:     10(int) Load 325
+             327:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 324 25
+             328:     10(int) AtomicAnd 327 28 25 326
+                              Store 126(out_u1) 328
+             329:    304(ptr) AccessChain 17 303
+             330:   11(ivec2) Load 329
+             331:    117(ptr) AccessChain 17 147
+             332:     10(int) Load 331
+             333:    117(ptr) AccessChain 17 150
+             334:     10(int) Load 333
+             335:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 330 25
+             336:     10(int) AtomicCompareExchange 335 28 25 25 334 332
+                              Store 126(out_u1) 336
+             337:    304(ptr) AccessChain 17 303
+             338:   11(ivec2) Load 337
+             339:    117(ptr) AccessChain 17 116
+             340:     10(int) Load 339
+             341:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 338 25
+             342:     10(int) AtomicExchange 341 28 25 340
+                              Store 126(out_u1) 342
+             343:    304(ptr) AccessChain 17 303
+             344:   11(ivec2) Load 343
+             345:    117(ptr) AccessChain 17 116
+             346:     10(int) Load 345
+             347:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 344 25
+             348:     10(int) AtomicUMax 347 28 25 346
+             349:    304(ptr) AccessChain 17 303
+             350:   11(ivec2) Load 349
+             351:    117(ptr) AccessChain 17 116
+             352:     10(int) Load 351
+             353:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 350 25
+             354:     10(int) AtomicUMax 353 28 25 352
+                              Store 126(out_u1) 354
+             355:    304(ptr) AccessChain 17 303
+             356:   11(ivec2) Load 355
+             357:    117(ptr) AccessChain 17 116
+             358:     10(int) Load 357
+             359:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 356 25
+             360:     10(int) AtomicUMin 359 28 25 358
+             361:    304(ptr) AccessChain 17 303
+             362:   11(ivec2) Load 361
+             363:    117(ptr) AccessChain 17 116
+             364:     10(int) Load 363
+             365:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 362 25
+             366:     10(int) AtomicUMin 365 28 25 364
+                              Store 126(out_u1) 366
+             367:    304(ptr) AccessChain 17 303
+             368:   11(ivec2) Load 367
+             369:    117(ptr) AccessChain 17 116
+             370:     10(int) Load 369
+             371:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 368 25
+             372:     10(int) AtomicOr 371 28 25 370
+             373:    304(ptr) AccessChain 17 303
+             374:   11(ivec2) Load 373
+             375:    117(ptr) AccessChain 17 116
+             376:     10(int) Load 375
+             377:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 374 25
+             378:     10(int) AtomicOr 377 28 25 376
+                              Store 126(out_u1) 378
+             379:    304(ptr) AccessChain 17 303
+             380:   11(ivec2) Load 379
+             381:    117(ptr) AccessChain 17 116
+             382:     10(int) Load 381
+             383:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 380 25
+             384:     10(int) AtomicXor 383 28 25 382
+             385:    304(ptr) AccessChain 17 303
+             386:   11(ivec2) Load 385
+             387:    117(ptr) AccessChain 17 116
+             388:     10(int) Load 387
+             389:    122(ptr) ImageTexelPointer 302(g_tTex2du1) 386 25
+             390:     10(int) AtomicXor 389 28 25 388
+                              Store 126(out_u1) 390
+             396:    395(ptr) AccessChain 17 394
+             397:   14(ivec3) Load 396
+             398:     19(ptr) AccessChain 17 22
+             399:      6(int) Load 398
+             400:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 397 25
+             401:      6(int) AtomicIAdd 400 28 25 399
+             402:    395(ptr) AccessChain 17 394
+             403:   14(ivec3) Load 402
+             404:     19(ptr) AccessChain 17 18
+             405:      6(int) Load 404
+             406:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 403 25
+             407:      6(int) AtomicIAdd 406 28 25 405
+                              Store 31(out_i1) 407
+             408:    395(ptr) AccessChain 17 394
+             409:   14(ivec3) Load 408
+             410:     19(ptr) AccessChain 17 22
+             411:      6(int) Load 410
+             412:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 409 25
+             413:      6(int) AtomicAnd 412 28 25 411
+             414:    395(ptr) AccessChain 17 394
+             415:   14(ivec3) Load 414
+             416:     19(ptr) AccessChain 17 18
+             417:      6(int) Load 416
+             418:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 415 25
+             419:      6(int) AtomicAnd 418 28 25 417
+                              Store 31(out_i1) 419
+             420:    395(ptr) AccessChain 17 394
+             421:   14(ivec3) Load 420
+             422:     19(ptr) AccessChain 17 22
+             423:      6(int) Load 422
+             424:     19(ptr) AccessChain 17 54
+             425:      6(int) Load 424
+             426:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 421 25
+             427:      6(int) AtomicCompareExchange 426 28 25 25 425 423
+                              Store 31(out_i1) 427
+             428:    395(ptr) AccessChain 17 394
+             429:   14(ivec3) Load 428
+             430:     19(ptr) AccessChain 17 18
+             431:      6(int) Load 430
+             432:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 429 25
+             433:      6(int) AtomicExchange 432 28 25 431
+                              Store 31(out_i1) 433
+             434:    395(ptr) AccessChain 17 394
+             435:   14(ivec3) Load 434
+             436:     19(ptr) AccessChain 17 22
+             437:      6(int) Load 436
+             438:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 435 25
+             439:      6(int) AtomicSMax 438 28 25 437
+             440:    395(ptr) AccessChain 17 394
+             441:   14(ivec3) Load 440
+             442:     19(ptr) AccessChain 17 18
+             443:      6(int) Load 442
+             444:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 441 25
+             445:      6(int) AtomicSMax 444 28 25 443
+                              Store 31(out_i1) 445
+             446:    395(ptr) AccessChain 17 394
+             447:   14(ivec3) Load 446
+             448:     19(ptr) AccessChain 17 22
+             449:      6(int) Load 448
+             450:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 447 25
+             451:      6(int) AtomicSMin 450 28 25 449
+             452:    395(ptr) AccessChain 17 394
+             453:   14(ivec3) Load 452
+             454:     19(ptr) AccessChain 17 18
+             455:      6(int) Load 454
+             456:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 453 25
+             457:      6(int) AtomicSMin 456 28 25 455
+                              Store 31(out_i1) 457
+             458:    395(ptr) AccessChain 17 394
+             459:   14(ivec3) Load 458
+             460:     19(ptr) AccessChain 17 22
+             461:      6(int) Load 460
+             462:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 459 25
+             463:      6(int) AtomicOr 462 28 25 461
+             464:    395(ptr) AccessChain 17 394
+             465:   14(ivec3) Load 464
+             466:     19(ptr) AccessChain 17 18
+             467:      6(int) Load 466
+             468:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 465 25
+             469:      6(int) AtomicOr 468 28 25 467
+                              Store 31(out_i1) 469
+             470:    395(ptr) AccessChain 17 394
+             471:   14(ivec3) Load 470
+             472:     19(ptr) AccessChain 17 22
+             473:      6(int) Load 472
+             474:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 471 25
+             475:      6(int) AtomicXor 474 28 25 473
+             476:    395(ptr) AccessChain 17 394
+             477:   14(ivec3) Load 476
+             478:     19(ptr) AccessChain 17 18
+             479:      6(int) Load 478
+             480:     26(ptr) ImageTexelPointer 393(g_tTex3di1) 477 25
+             481:      6(int) AtomicXor 480 28 25 479
+                              Store 31(out_i1) 481
+             487:    486(ptr) AccessChain 17 485
+             488:   12(ivec3) Load 487
+             489:    117(ptr) AccessChain 17 116
+             490:     10(int) Load 489
+             491:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 488 25
+             492:     10(int) AtomicIAdd 491 28 25 490
+             493:    486(ptr) AccessChain 17 485
+             494:   12(ivec3) Load 493
+             495:    117(ptr) AccessChain 17 116
+             496:     10(int) Load 495
+             497:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 494 25
+             498:     10(int) AtomicIAdd 497 28 25 496
+                              Store 126(out_u1) 498
+             499:    486(ptr) AccessChain 17 485
+             500:   12(ivec3) Load 499
+             501:    117(ptr) AccessChain 17 116
+             502:     10(int) Load 501
+             503:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 500 25
+             504:     10(int) AtomicAnd 503 28 25 502
+             505:    486(ptr) AccessChain 17 485
+             506:   12(ivec3) Load 505
+             507:    117(ptr) AccessChain 17 116
+             508:     10(int) Load 507
+             509:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 506 25
+             510:     10(int) AtomicAnd 509 28 25 508
+                              Store 126(out_u1) 510
+             511:    486(ptr) AccessChain 17 485
+             512:   12(ivec3) Load 511
+             513:    117(ptr) AccessChain 17 147
+             514:     10(int) Load 513
+             515:    117(ptr) AccessChain 17 150
+             516:     10(int) Load 515
+             517:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 512 25
+             518:     10(int) AtomicCompareExchange 517 28 25 25 516 514
+                              Store 126(out_u1) 518
+             519:    486(ptr) AccessChain 17 485
+             520:   12(ivec3) Load 519
+             521:    117(ptr) AccessChain 17 116
+             522:     10(int) Load 521
+             523:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 520 25
+             524:     10(int) AtomicExchange 523 28 25 522
+                              Store 126(out_u1) 524
+             525:    486(ptr) AccessChain 17 485
+             526:   12(ivec3) Load 525
+             527:    117(ptr) AccessChain 17 116
+             528:     10(int) Load 527
+             529:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 526 25
+             530:     10(int) AtomicUMax 529 28 25 528
+             531:    486(ptr) AccessChain 17 485
+             532:   12(ivec3) Load 531
+             533:    117(ptr) AccessChain 17 116
+             534:     10(int) Load 533
+             535:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 532 25
+             536:     10(int) AtomicUMax 535 28 25 534
+                              Store 126(out_u1) 536
+             537:    486(ptr) AccessChain 17 485
+             538:   12(ivec3) Load 537
+             539:    117(ptr) AccessChain 17 116
+             540:     10(int) Load 539
+             541:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 538 25
+             542:     10(int) AtomicUMin 541 28 25 540
+             543:    486(ptr) AccessChain 17 485
+             544:   12(ivec3) Load 543
+             545:    117(ptr) AccessChain 17 116
+             546:     10(int) Load 545
+             547:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 544 25
+             548:     10(int) AtomicUMin 547 28 25 546
+                              Store 126(out_u1) 548
+             549:    486(ptr) AccessChain 17 485
+             550:   12(ivec3) Load 549
+             551:    117(ptr) AccessChain 17 116
+             552:     10(int) Load 551
+             553:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 550 25
+             554:     10(int) AtomicOr 553 28 25 552
+             555:    486(ptr) AccessChain 17 485
+             556:   12(ivec3) Load 555
+             557:    117(ptr) AccessChain 17 116
+             558:     10(int) Load 557
+             559:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 556 25
+             560:     10(int) AtomicOr 559 28 25 558
+                              Store 126(out_u1) 560
+             561:    486(ptr) AccessChain 17 485
+             562:   12(ivec3) Load 561
+             563:    117(ptr) AccessChain 17 116
+             564:     10(int) Load 563
+             565:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 562 25
+             566:     10(int) AtomicXor 565 28 25 564
+             567:    486(ptr) AccessChain 17 485
+             568:   12(ivec3) Load 567
+             569:    117(ptr) AccessChain 17 116
+             570:     10(int) Load 569
+             571:    122(ptr) ImageTexelPointer 484(g_tTex3du1) 568 25
+             572:     10(int) AtomicXor 571 28 25 570
+                              Store 126(out_u1) 572
+             576:    213(ptr) AccessChain 17 212
+             577:   13(ivec2) Load 576
+             578:     19(ptr) AccessChain 17 22
+             579:      6(int) Load 578
+             580:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 577 25
+             581:      6(int) AtomicIAdd 580 28 25 579
+             582:    213(ptr) AccessChain 17 212
+             583:   13(ivec2) Load 582
+             584:     19(ptr) AccessChain 17 18
+             585:      6(int) Load 584
+             586:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 583 25
+             587:      6(int) AtomicIAdd 586 28 25 585
+                              Store 31(out_i1) 587
+             588:    213(ptr) AccessChain 17 212
+             589:   13(ivec2) Load 588
+             590:     19(ptr) AccessChain 17 22
+             591:      6(int) Load 590
+             592:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 589 25
+             593:      6(int) AtomicAnd 592 28 25 591
+             594:    213(ptr) AccessChain 17 212
+             595:   13(ivec2) Load 594
+             596:     19(ptr) AccessChain 17 18
+             597:      6(int) Load 596
+             598:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 595 25
+             599:      6(int) AtomicAnd 598 28 25 597
+                              Store 31(out_i1) 599
+             600:    213(ptr) AccessChain 17 212
+             601:   13(ivec2) Load 600
+             602:     19(ptr) AccessChain 17 22
+             603:      6(int) Load 602
+             604:     19(ptr) AccessChain 17 54
+             605:      6(int) Load 604
+             606:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 601 25
+             607:      6(int) AtomicCompareExchange 606 28 25 25 605 603
+                              Store 31(out_i1) 607
+             608:    213(ptr) AccessChain 17 212
+             609:   13(ivec2) Load 608
+             610:     19(ptr) AccessChain 17 18
+             611:      6(int) Load 610
+             612:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 609 25
+             613:      6(int) AtomicExchange 612 28 25 611
+                              Store 31(out_i1) 613
+             614:    213(ptr) AccessChain 17 212
+             615:   13(ivec2) Load 614
+             616:     19(ptr) AccessChain 17 22
+             617:      6(int) Load 616
+             618:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 615 25
+             619:      6(int) AtomicSMax 618 28 25 617
+             620:    213(ptr) AccessChain 17 212
+             621:   13(ivec2) Load 620
+             622:     19(ptr) AccessChain 17 18
+             623:      6(int) Load 622
+             624:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 621 25
+             625:      6(int) AtomicSMax 624 28 25 623
+                              Store 31(out_i1) 625
+             626:    213(ptr) AccessChain 17 212
+             627:   13(ivec2) Load 626
+             628:     19(ptr) AccessChain 17 22
+             629:      6(int) Load 628
+             630:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 627 25
+             631:      6(int) AtomicSMin 630 28 25 629
+             632:    213(ptr) AccessChain 17 212
+             633:   13(ivec2) Load 632
+             634:     19(ptr) AccessChain 17 18
+             635:      6(int) Load 634
+             636:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 633 25
+             637:      6(int) AtomicSMin 636 28 25 635
+                              Store 31(out_i1) 637
+             638:    213(ptr) AccessChain 17 212
+             639:   13(ivec2) Load 638
+             640:     19(ptr) AccessChain 17 22
+             641:      6(int) Load 640
+             642:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 639 25
+             643:      6(int) AtomicOr 642 28 25 641
+             644:    213(ptr) AccessChain 17 212
+             645:   13(ivec2) Load 644
+             646:     19(ptr) AccessChain 17 18
+             647:      6(int) Load 646
+             648:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 645 25
+             649:      6(int) AtomicOr 648 28 25 647
+                              Store 31(out_i1) 649
+             650:    213(ptr) AccessChain 17 212
+             651:   13(ivec2) Load 650
+             652:     19(ptr) AccessChain 17 22
+             653:      6(int) Load 652
+             654:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 651 25
+             655:      6(int) AtomicXor 654 28 25 653
+             656:    213(ptr) AccessChain 17 212
+             657:   13(ivec2) Load 656
+             658:     19(ptr) AccessChain 17 18
+             659:      6(int) Load 658
+             660:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 657 25
+             661:      6(int) AtomicXor 660 28 25 659
+                              Store 31(out_i1) 661
+             665:    304(ptr) AccessChain 17 303
+             666:   11(ivec2) Load 665
+             667:    117(ptr) AccessChain 17 116
+             668:     10(int) Load 667
+             669:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 666 25
+             670:     10(int) AtomicIAdd 669 28 25 668
+             671:    304(ptr) AccessChain 17 303
+             672:   11(ivec2) Load 671
+             673:    117(ptr) AccessChain 17 116
+             674:     10(int) Load 673
+             675:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 672 25
+             676:     10(int) AtomicIAdd 675 28 25 674
+                              Store 126(out_u1) 676
+             677:    304(ptr) AccessChain 17 303
+             678:   11(ivec2) Load 677
+             679:    117(ptr) AccessChain 17 116
+             680:     10(int) Load 679
+             681:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 678 25
+             682:     10(int) AtomicAnd 681 28 25 680
+             683:    304(ptr) AccessChain 17 303
+             684:   11(ivec2) Load 683
+             685:    117(ptr) AccessChain 17 116
+             686:     10(int) Load 685
+             687:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 684 25
+             688:     10(int) AtomicAnd 687 28 25 686
+                              Store 126(out_u1) 688
+             689:    304(ptr) AccessChain 17 303
+             690:   11(ivec2) Load 689
+             691:    117(ptr) AccessChain 17 147
+             692:     10(int) Load 691
+             693:    117(ptr) AccessChain 17 150
+             694:     10(int) Load 693
+             695:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 690 25
+             696:     10(int) AtomicCompareExchange 695 28 25 25 694 692
+                              Store 126(out_u1) 696
+             697:    304(ptr) AccessChain 17 303
+             698:   11(ivec2) Load 697
+             699:    117(ptr) AccessChain 17 116
+             700:     10(int) Load 699
+             701:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 698 25
+             702:     10(int) AtomicExchange 701 28 25 700
+                              Store 126(out_u1) 702
+             703:    304(ptr) AccessChain 17 303
+             704:   11(ivec2) Load 703
+             705:    117(ptr) AccessChain 17 116
+             706:     10(int) Load 705
+             707:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 704 25
+             708:     10(int) AtomicUMax 707 28 25 706
+             709:    304(ptr) AccessChain 17 303
+             710:   11(ivec2) Load 709
+             711:    117(ptr) AccessChain 17 116
+             712:     10(int) Load 711
+             713:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 710 25
+             714:     10(int) AtomicUMax 713 28 25 712
+                              Store 126(out_u1) 714
+             715:    304(ptr) AccessChain 17 303
+             716:   11(ivec2) Load 715
+             717:    117(ptr) AccessChain 17 116
+             718:     10(int) Load 717
+             719:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 716 25
+             720:     10(int) AtomicUMin 719 28 25 718
+             721:    304(ptr) AccessChain 17 303
+             722:   11(ivec2) Load 721
+             723:    117(ptr) AccessChain 17 116
+             724:     10(int) Load 723
+             725:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 722 25
+             726:     10(int) AtomicUMin 725 28 25 724
+                              Store 126(out_u1) 726
+             727:    304(ptr) AccessChain 17 303
+             728:   11(ivec2) Load 727
+             729:    117(ptr) AccessChain 17 116
+             730:     10(int) Load 729
+             731:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 728 25
+             732:     10(int) AtomicOr 731 28 25 730
+             733:    304(ptr) AccessChain 17 303
+             734:   11(ivec2) Load 733
+             735:    117(ptr) AccessChain 17 116
+             736:     10(int) Load 735
+             737:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 734 25
+             738:     10(int) AtomicOr 737 28 25 736
+                              Store 126(out_u1) 738
+             739:    304(ptr) AccessChain 17 303
+             740:   11(ivec2) Load 739
+             741:    117(ptr) AccessChain 17 116
+             742:     10(int) Load 741
+             743:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 740 25
+             744:     10(int) AtomicXor 743 28 25 742
+             745:    304(ptr) AccessChain 17 303
+             746:   11(ivec2) Load 745
+             747:    117(ptr) AccessChain 17 116
+             748:     10(int) Load 747
+             749:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 746 25
+             750:     10(int) AtomicXor 749 28 25 748
+                              Store 126(out_u1) 750
+             751:    213(ptr) AccessChain 17 212
+             752:   13(ivec2) Load 751
+             753:     19(ptr) AccessChain 17 22
+             754:      6(int) Load 753
+             755:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 752 25
+             756:      6(int) AtomicIAdd 755 28 25 754
+             757:    213(ptr) AccessChain 17 212
+             758:   13(ivec2) Load 757
+             759:     19(ptr) AccessChain 17 18
+             760:      6(int) Load 759
+             761:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 758 25
+             762:      6(int) AtomicIAdd 761 28 25 760
+                              Store 31(out_i1) 762
+             763:    213(ptr) AccessChain 17 212
+             764:   13(ivec2) Load 763
+             765:     19(ptr) AccessChain 17 22
+             766:      6(int) Load 765
+             767:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 764 25
+             768:      6(int) AtomicAnd 767 28 25 766
+             769:    213(ptr) AccessChain 17 212
+             770:   13(ivec2) Load 769
+             771:     19(ptr) AccessChain 17 18
+             772:      6(int) Load 771
+             773:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 770 25
+             774:      6(int) AtomicAnd 773 28 25 772
+                              Store 31(out_i1) 774
+             775:    213(ptr) AccessChain 17 212
+             776:   13(ivec2) Load 775
+             777:     19(ptr) AccessChain 17 22
+             778:      6(int) Load 777
+             779:     19(ptr) AccessChain 17 54
+             780:      6(int) Load 779
+             781:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 776 25
+             782:      6(int) AtomicCompareExchange 781 28 25 25 780 778
+                              Store 31(out_i1) 782
+             783:    213(ptr) AccessChain 17 212
+             784:   13(ivec2) Load 783
+             785:     19(ptr) AccessChain 17 18
+             786:      6(int) Load 785
+             787:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 784 25
+             788:      6(int) AtomicExchange 787 28 25 786
+                              Store 31(out_i1) 788
+             789:    213(ptr) AccessChain 17 212
+             790:   13(ivec2) Load 789
+             791:     19(ptr) AccessChain 17 22
+             792:      6(int) Load 791
+             793:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 790 25
+             794:      6(int) AtomicSMax 793 28 25 792
+             795:    213(ptr) AccessChain 17 212
+             796:   13(ivec2) Load 795
+             797:     19(ptr) AccessChain 17 18
+             798:      6(int) Load 797
+             799:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 796 25
+             800:      6(int) AtomicSMax 799 28 25 798
+                              Store 31(out_i1) 800
+             801:    213(ptr) AccessChain 17 212
+             802:   13(ivec2) Load 801
+             803:     19(ptr) AccessChain 17 22
+             804:      6(int) Load 803
+             805:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 802 25
+             806:      6(int) AtomicSMin 805 28 25 804
+             807:    213(ptr) AccessChain 17 212
+             808:   13(ivec2) Load 807
+             809:     19(ptr) AccessChain 17 18
+             810:      6(int) Load 809
+             811:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 808 25
+             812:      6(int) AtomicSMin 811 28 25 810
+                              Store 31(out_i1) 812
+             813:    213(ptr) AccessChain 17 212
+             814:   13(ivec2) Load 813
+             815:     19(ptr) AccessChain 17 22
+             816:      6(int) Load 815
+             817:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 814 25
+             818:      6(int) AtomicOr 817 28 25 816
+             819:    213(ptr) AccessChain 17 212
+             820:   13(ivec2) Load 819
+             821:     19(ptr) AccessChain 17 18
+             822:      6(int) Load 821
+             823:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 820 25
+             824:      6(int) AtomicOr 823 28 25 822
+                              Store 31(out_i1) 824
+             825:    213(ptr) AccessChain 17 212
+             826:   13(ivec2) Load 825
+             827:     19(ptr) AccessChain 17 22
+             828:      6(int) Load 827
+             829:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 826 25
+             830:      6(int) AtomicXor 829 28 25 828
+             831:    213(ptr) AccessChain 17 212
+             832:   13(ivec2) Load 831
+             833:     19(ptr) AccessChain 17 18
+             834:      6(int) Load 833
+             835:     26(ptr) ImageTexelPointer 575(g_tTex1di1a) 832 25
+             836:      6(int) AtomicXor 835 28 25 834
+                              Store 31(out_i1) 836
+             837:    304(ptr) AccessChain 17 303
+             838:   11(ivec2) Load 837
+             839:    117(ptr) AccessChain 17 116
+             840:     10(int) Load 839
+             841:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 838 25
+             842:     10(int) AtomicIAdd 841 28 25 840
+             843:    304(ptr) AccessChain 17 303
+             844:   11(ivec2) Load 843
+             845:    117(ptr) AccessChain 17 116
+             846:     10(int) Load 845
+             847:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 844 25
+             848:     10(int) AtomicIAdd 847 28 25 846
+                              Store 126(out_u1) 848
+             849:    304(ptr) AccessChain 17 303
+             850:   11(ivec2) Load 849
+             851:    117(ptr) AccessChain 17 116
+             852:     10(int) Load 851
+             853:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 850 25
+             854:     10(int) AtomicAnd 853 28 25 852
+             855:    304(ptr) AccessChain 17 303
+             856:   11(ivec2) Load 855
+             857:    117(ptr) AccessChain 17 116
+             858:     10(int) Load 857
+             859:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 856 25
+             860:     10(int) AtomicAnd 859 28 25 858
+                              Store 126(out_u1) 860
+             861:    304(ptr) AccessChain 17 303
+             862:   11(ivec2) Load 861
+             863:    117(ptr) AccessChain 17 147
+             864:     10(int) Load 863
+             865:    117(ptr) AccessChain 17 150
+             866:     10(int) Load 865
+             867:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 862 25
+             868:     10(int) AtomicCompareExchange 867 28 25 25 866 864
+                              Store 126(out_u1) 868
+             869:    304(ptr) AccessChain 17 303
+             870:   11(ivec2) Load 869
+             871:    117(ptr) AccessChain 17 116
+             872:     10(int) Load 871
+             873:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 870 25
+             874:     10(int) AtomicExchange 873 28 25 872
+                              Store 126(out_u1) 874
+             875:    304(ptr) AccessChain 17 303
+             876:   11(ivec2) Load 875
+             877:    117(ptr) AccessChain 17 116
+             878:     10(int) Load 877
+             879:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 876 25
+             880:     10(int) AtomicUMax 879 28 25 878
+             881:    304(ptr) AccessChain 17 303
+             882:   11(ivec2) Load 881
+             883:    117(ptr) AccessChain 17 116
+             884:     10(int) Load 883
+             885:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 882 25
+             886:     10(int) AtomicUMax 885 28 25 884
+                              Store 126(out_u1) 886
+             887:    304(ptr) AccessChain 17 303
+             888:   11(ivec2) Load 887
+             889:    117(ptr) AccessChain 17 116
+             890:     10(int) Load 889
+             891:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 888 25
+             892:     10(int) AtomicUMin 891 28 25 890
+             893:    304(ptr) AccessChain 17 303
+             894:   11(ivec2) Load 893
+             895:    117(ptr) AccessChain 17 116
+             896:     10(int) Load 895
+             897:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 894 25
+             898:     10(int) AtomicUMin 897 28 25 896
+                              Store 126(out_u1) 898
+             899:    304(ptr) AccessChain 17 303
+             900:   11(ivec2) Load 899
+             901:    117(ptr) AccessChain 17 116
+             902:     10(int) Load 901
+             903:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 900 25
+             904:     10(int) AtomicOr 903 28 25 902
+             905:    304(ptr) AccessChain 17 303
+             906:   11(ivec2) Load 905
+             907:    117(ptr) AccessChain 17 116
+             908:     10(int) Load 907
+             909:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 906 25
+             910:     10(int) AtomicOr 909 28 25 908
+                              Store 126(out_u1) 910
+             911:    304(ptr) AccessChain 17 303
+             912:   11(ivec2) Load 911
+             913:    117(ptr) AccessChain 17 116
+             914:     10(int) Load 913
+             915:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 912 25
+             916:     10(int) AtomicXor 915 28 25 914
+             917:    304(ptr) AccessChain 17 303
+             918:   11(ivec2) Load 917
+             919:    117(ptr) AccessChain 17 116
+             920:     10(int) Load 919
+             921:    122(ptr) ImageTexelPointer 664(g_tTex1du1a) 918 25
+             922:     10(int) AtomicXor 921 28 25 920
+                              Store 126(out_u1) 922
+             926:     19(ptr) AccessChain 17 18
+             927:      6(int) Load 926
+             928:     19(ptr) AccessChain 17 22
+             929:      6(int) Load 928
+             930:     26(ptr) ImageTexelPointer 925(g_tBuffI) 927 25
+             931:      6(int) AtomicIAdd 930 28 25 929
+             932:     19(ptr) AccessChain 17 18
+             933:      6(int) Load 932
+             934:     19(ptr) AccessChain 17 18
+             935:      6(int) Load 934
+             936:     26(ptr) ImageTexelPointer 925(g_tBuffI) 933 25
+             937:      6(int) AtomicIAdd 936 28 25 935
+                              Store 31(out_i1) 937
+             938:     19(ptr) AccessChain 17 18
+             939:      6(int) Load 938
+             940:     19(ptr) AccessChain 17 22
+             941:      6(int) Load 940
+             942:     26(ptr) ImageTexelPointer 925(g_tBuffI) 939 25
+             943:      6(int) AtomicAnd 942 28 25 941
+             944:     19(ptr) AccessChain 17 18
+             945:      6(int) Load 944
+             946:     19(ptr) AccessChain 17 18
+             947:      6(int) Load 946
+             948:     26(ptr) ImageTexelPointer 925(g_tBuffI) 945 25
+             949:      6(int) AtomicAnd 948 28 25 947
+                              Store 31(out_i1) 949
+             950:     19(ptr) AccessChain 17 18
+             951:      6(int) Load 950
+             952:     19(ptr) AccessChain 17 22
+             953:      6(int) Load 952
+             954:     19(ptr) AccessChain 17 54
+             955:      6(int) Load 954
+             956:     26(ptr) ImageTexelPointer 925(g_tBuffI) 951 25
+             957:      6(int) AtomicCompareExchange 956 28 25 25 955 953
+                              Store 31(out_i1) 957
+             958:     19(ptr) AccessChain 17 18
+             959:      6(int) Load 958
+             960:     19(ptr) AccessChain 17 18
+             961:      6(int) Load 960
+             962:     26(ptr) ImageTexelPointer 925(g_tBuffI) 959 25
+             963:      6(int) AtomicExchange 962 28 25 961
+                              Store 31(out_i1) 963
+             964:     19(ptr) AccessChain 17 18
+             965:      6(int) Load 964
+             966:     19(ptr) AccessChain 17 22
+             967:      6(int) Load 966
+             968:     26(ptr) ImageTexelPointer 925(g_tBuffI) 965 25
+             969:      6(int) AtomicSMax 968 28 25 967
+             970:     19(ptr) AccessChain 17 18
+             971:      6(int) Load 970
+             972:     19(ptr) AccessChain 17 18
+             973:      6(int) Load 972
+             974:     26(ptr) ImageTexelPointer 925(g_tBuffI) 971 25
+             975:      6(int) AtomicSMax 974 28 25 973
+                              Store 31(out_i1) 975
+             976:     19(ptr) AccessChain 17 18
+             977:      6(int) Load 976
+             978:     19(ptr) AccessChain 17 22
+             979:      6(int) Load 978
+             980:     26(ptr) ImageTexelPointer 925(g_tBuffI) 977 25
+             981:      6(int) AtomicSMin 980 28 25 979
+             982:     19(ptr) AccessChain 17 18
+             983:      6(int) Load 982
+             984:     19(ptr) AccessChain 17 18
+             985:      6(int) Load 984
+             986:     26(ptr) ImageTexelPointer 925(g_tBuffI) 983 25
+             987:      6(int) AtomicSMin 986 28 25 985
+                              Store 31(out_i1) 987
+             988:     19(ptr) AccessChain 17 18
+             989:      6(int) Load 988
+             990:     19(ptr) AccessChain 17 22
+             991:      6(int) Load 990
+             992:     26(ptr) ImageTexelPointer 925(g_tBuffI) 989 25
+             993:      6(int) AtomicOr 992 28 25 991
+             994:     19(ptr) AccessChain 17 18
+             995:      6(int) Load 994
+             996:     19(ptr) AccessChain 17 18
+             997:      6(int) Load 996
+             998:     26(ptr) ImageTexelPointer 925(g_tBuffI) 995 25
+             999:      6(int) AtomicOr 998 28 25 997
+                              Store 31(out_i1) 999
+            1000:     19(ptr) AccessChain 17 18
+            1001:      6(int) Load 1000
+            1002:     19(ptr) AccessChain 17 22
+            1003:      6(int) Load 1002
+            1004:     26(ptr) ImageTexelPointer 925(g_tBuffI) 1001 25
+            1005:      6(int) AtomicXor 1004 28 25 1003
+            1006:     19(ptr) AccessChain 17 18
+            1007:      6(int) Load 1006
+            1008:     19(ptr) AccessChain 17 18
+            1009:      6(int) Load 1008
+            1010:     26(ptr) ImageTexelPointer 925(g_tBuffI) 1007 25
+            1011:      6(int) AtomicXor 1010 28 25 1009
+                              Store 31(out_i1) 1011
+            1015:    117(ptr) AccessChain 17 116
+            1016:     10(int) Load 1015
+            1017:    117(ptr) AccessChain 17 116
+            1018:     10(int) Load 1017
+            1019:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1016 25
+            1020:     10(int) AtomicIAdd 1019 28 25 1018
+            1021:    117(ptr) AccessChain 17 116
+            1022:     10(int) Load 1021
+            1023:    117(ptr) AccessChain 17 116
+            1024:     10(int) Load 1023
+            1025:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1022 25
+            1026:     10(int) AtomicIAdd 1025 28 25 1024
+                              Store 126(out_u1) 1026
+            1027:    117(ptr) AccessChain 17 116
+            1028:     10(int) Load 1027
+            1029:    117(ptr) AccessChain 17 116
+            1030:     10(int) Load 1029
+            1031:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1028 25
+            1032:     10(int) AtomicAnd 1031 28 25 1030
+            1033:    117(ptr) AccessChain 17 116
+            1034:     10(int) Load 1033
+            1035:    117(ptr) AccessChain 17 116
+            1036:     10(int) Load 1035
+            1037:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1034 25
+            1038:     10(int) AtomicAnd 1037 28 25 1036
+                              Store 126(out_u1) 1038
+            1039:    117(ptr) AccessChain 17 116
+            1040:     10(int) Load 1039
+            1041:    117(ptr) AccessChain 17 147
+            1042:     10(int) Load 1041
+            1043:    117(ptr) AccessChain 17 150
+            1044:     10(int) Load 1043
+            1045:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1040 25
+            1046:     10(int) AtomicCompareExchange 1045 28 25 25 1044 1042
+                              Store 126(out_u1) 1046
+            1047:    117(ptr) AccessChain 17 116
+            1048:     10(int) Load 1047
+            1049:    117(ptr) AccessChain 17 116
+            1050:     10(int) Load 1049
+            1051:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1048 25
+            1052:     10(int) AtomicExchange 1051 28 25 1050
+                              Store 126(out_u1) 1052
+            1053:    117(ptr) AccessChain 17 116
+            1054:     10(int) Load 1053
+            1055:    117(ptr) AccessChain 17 116
+            1056:     10(int) Load 1055
+            1057:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1054 25
+            1058:     10(int) AtomicUMax 1057 28 25 1056
+            1059:    117(ptr) AccessChain 17 116
+            1060:     10(int) Load 1059
+            1061:    117(ptr) AccessChain 17 116
+            1062:     10(int) Load 1061
+            1063:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1060 25
+            1064:     10(int) AtomicUMax 1063 28 25 1062
+                              Store 126(out_u1) 1064
+            1065:    117(ptr) AccessChain 17 116
+            1066:     10(int) Load 1065
+            1067:    117(ptr) AccessChain 17 116
+            1068:     10(int) Load 1067
+            1069:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1066 25
+            1070:     10(int) AtomicUMin 1069 28 25 1068
+            1071:    117(ptr) AccessChain 17 116
+            1072:     10(int) Load 1071
+            1073:    117(ptr) AccessChain 17 116
+            1074:     10(int) Load 1073
+            1075:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1072 25
+            1076:     10(int) AtomicUMin 1075 28 25 1074
+                              Store 126(out_u1) 1076
+            1077:    117(ptr) AccessChain 17 116
+            1078:     10(int) Load 1077
+            1079:    117(ptr) AccessChain 17 116
+            1080:     10(int) Load 1079
+            1081:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1078 25
+            1082:     10(int) AtomicOr 1081 28 25 1080
+            1083:    117(ptr) AccessChain 17 116
+            1084:     10(int) Load 1083
+            1085:    117(ptr) AccessChain 17 116
+            1086:     10(int) Load 1085
+            1087:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1084 25
+            1088:     10(int) AtomicOr 1087 28 25 1086
+                              Store 126(out_u1) 1088
+            1089:    117(ptr) AccessChain 17 116
+            1090:     10(int) Load 1089
+            1091:    117(ptr) AccessChain 17 116
+            1092:     10(int) Load 1091
+            1093:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1090 25
+            1094:     10(int) AtomicXor 1093 28 25 1092
+            1095:    117(ptr) AccessChain 17 116
+            1096:     10(int) Load 1095
+            1097:    117(ptr) AccessChain 17 116
+            1098:     10(int) Load 1097
+            1099:    122(ptr) ImageTexelPointer 1014(g_tBuffU) 1096 25
+            1100:     10(int) AtomicXor 1099 28 25 1098
+                              Store 126(out_u1) 1100
+            1109:   1108(ptr) AccessChain 1105(psout) 116
+                              Store 1109 1107
+            1112:   1108(ptr) AccessChain 1105(psout) 116
+            1113: 1102(fvec4) Load 1112
+                              Store 1111(Color) 1113
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
index c6e3c89..31ed4a9 100644
--- a/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -847,6 +847,7 @@
 0:139                0 (const int)
 0:139        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -863,8 +864,7 @@
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
 
 
 Linked fragment stage:
@@ -1718,6 +1718,7 @@
 0:139                0 (const int)
 0:139        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D)
 0:?     'g_tTex1di4' (layout(rgba32i ) uniform iimage1D)
@@ -1734,8 +1735,7 @@
 0:?     'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray)
 0:?     'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray)
 0:?     'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out
new file mode 100644
index 0000000..f369cac
--- /dev/null
+++ b/Test/baseResults/hlsl.rw.register.frag.out
@@ -0,0 +1,158 @@
+hlsl.rw.register.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:11    Function Parameters: 
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child (temp float)
+0:12          'r00' (temp float)
+0:12          imageLoad (temp float)
+0:12            'g_tTex1df1' (layout(binding=2 r32f ) uniform image1D)
+0:12            Constant:
+0:12              0 (const int)
+0:13      Sequence
+0:13        move second child to first child (temp uint)
+0:13          'r01' (temp uint)
+0:13          imageLoad (temp uint)
+0:13            'g_tBuf1du1' (layout(binding=3 r32ui ) uniform uimageBuffer)
+0:13            Constant:
+0:13              0 (const int)
+0:16      move second child to first child (temp 4-component vector of float)
+0:16        Color: direct index for structure (temp 4-component vector of float)
+0:16          'psout' (temp structure{temp 4-component vector of float Color})
+0:16          Constant:
+0:16            0 (const int)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      Sequence
+0:17        Sequence
+0:17          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:17            Color: direct index for structure (temp 4-component vector of float)
+0:17              'psout' (temp structure{temp 4-component vector of float Color})
+0:17              Constant:
+0:17                0 (const int)
+0:17        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_tTex1df1' (layout(binding=2 r32f ) uniform image1D)
+0:?     'g_tBuf1du1' (layout(binding=3 r32ui ) uniform uimageBuffer)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: main( (temp structure{temp 4-component vector of float Color})
+0:11    Function Parameters: 
+0:?     Sequence
+0:12      Sequence
+0:12        move second child to first child (temp float)
+0:12          'r00' (temp float)
+0:12          imageLoad (temp float)
+0:12            'g_tTex1df1' (layout(binding=2 r32f ) uniform image1D)
+0:12            Constant:
+0:12              0 (const int)
+0:13      Sequence
+0:13        move second child to first child (temp uint)
+0:13          'r01' (temp uint)
+0:13          imageLoad (temp uint)
+0:13            'g_tBuf1du1' (layout(binding=3 r32ui ) uniform uimageBuffer)
+0:13            Constant:
+0:13              0 (const int)
+0:16      move second child to first child (temp 4-component vector of float)
+0:16        Color: direct index for structure (temp 4-component vector of float)
+0:16          'psout' (temp structure{temp 4-component vector of float Color})
+0:16          Constant:
+0:16            0 (const int)
+0:16        Constant:
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:16          1.000000
+0:17      Sequence
+0:17        Sequence
+0:17          move second child to first child (temp 4-component vector of float)
+0:?             'Color' (layout(location=0 ) out 4-component vector of float)
+0:17            Color: direct index for structure (temp 4-component vector of float)
+0:17              'psout' (temp structure{temp 4-component vector of float Color})
+0:17              Constant:
+0:17                0 (const int)
+0:17        Branch: Return
+0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'g_tTex1df1' (layout(binding=2 r32f ) uniform image1D)
+0:?     'g_tBuf1du1' (layout(binding=3 r32ui ) uniform uimageBuffer)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 37
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 33
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "r00"
+                              Name 11  "g_tTex1df1"
+                              Name 18  "r01"
+                              Name 21  "g_tBuf1du1"
+                              Name 25  "PS_OUTPUT"
+                              MemberName 25(PS_OUTPUT) 0  "Color"
+                              Name 27  "psout"
+                              Name 33  "Color"
+                              Decorate 11(g_tTex1df1) DescriptorSet 0
+                              Decorate 11(g_tTex1df1) Binding 2
+                              Decorate 21(g_tBuf1du1) DescriptorSet 0
+                              Decorate 21(g_tBuf1du1) Binding 3
+                              Decorate 33(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D nonsampled format:R32f
+              10:             TypePointer UniformConstant 9
+  11(g_tTex1df1):     10(ptr) Variable UniformConstant
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              16:             TypeInt 32 0
+              17:             TypePointer Function 16(int)
+              19:             TypeImage 16(int) Buffer nonsampled format:R32ui
+              20:             TypePointer UniformConstant 19
+  21(g_tBuf1du1):     20(ptr) Variable UniformConstant
+              24:             TypeVector 6(float) 4
+   25(PS_OUTPUT):             TypeStruct 24(fvec4)
+              26:             TypePointer Function 25(PS_OUTPUT)
+              28:    6(float) Constant 1065353216
+              29:   24(fvec4) ConstantComposite 28 28 28 28
+              30:             TypePointer Function 24(fvec4)
+              32:             TypePointer Output 24(fvec4)
+       33(Color):     32(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+          8(r00):      7(ptr) Variable Function
+         18(r01):     17(ptr) Variable Function
+       27(psout):     26(ptr) Variable Function
+              12:           9 Load 11(g_tTex1df1)
+              15:    6(float) ImageRead 12 14
+                              Store 8(r00) 15
+              22:          19 Load 21(g_tBuf1du1)
+              23:     16(int) ImageRead 22 14
+                              Store 18(r01) 23
+              31:     30(ptr) AccessChain 27(psout) 14
+                              Store 31 29
+              34:     30(ptr) AccessChain 27(psout) 14
+              35:   24(fvec4) Load 34
+                              Store 33(Color) 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
index 904c2da..8e40fd2 100644
--- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -820,6 +820,7 @@
 0:139                0 (const int)
 0:139        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df1' (layout(r32f ) uniform image1D)
 0:?     'g_tTex1di1' (layout(r32i ) uniform iimage1D)
@@ -836,8 +837,7 @@
 0:?     'g_tTex2df1a' (layout(r32f ) uniform image2DArray)
 0:?     'g_tTex2di1a' (layout(r32i ) uniform iimage2DArray)
 0:?     'g_tTex2du1a' (layout(r32ui ) uniform uimage2DArray)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
 
 
 Linked fragment stage:
@@ -1664,6 +1664,7 @@
 0:139                0 (const int)
 0:139        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df1' (layout(r32f ) uniform image1D)
 0:?     'g_tTex1di1' (layout(r32i ) uniform iimage1D)
@@ -1680,8 +1681,7 @@
 0:?     'g_tTex2df1a' (layout(r32f ) uniform image2DArray)
 0:?     'g_tTex2di1a' (layout(r32i ) uniform iimage2DArray)
 0:?     'g_tTex2du1a' (layout(r32ui ) uniform uimage2DArray)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform float uf1, layout(offset=100 ) uniform int ui1, layout(offset=104 ) uniform uint uu1})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
index b8452c3..7ca7e3e 100644
--- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -829,6 +829,7 @@
 0:139                0 (const int)
 0:139        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df2' (layout(rg32f ) uniform image1D)
 0:?     'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
@@ -845,8 +846,7 @@
 0:?     'g_tTex2df2a' (layout(rg32f ) uniform image2DArray)
 0:?     'g_tTex2di2a' (layout(rg32i ) uniform iimage2DArray)
 0:?     'g_tTex2du2a' (layout(rg32ui ) uniform uimage2DArray)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
 
 
 Linked fragment stage:
@@ -1682,6 +1682,7 @@
 0:139                0 (const int)
 0:139        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df2' (layout(rg32f ) uniform image1D)
 0:?     'g_tTex1di2' (layout(rg32i ) uniform iimage1D)
@@ -1698,8 +1699,7 @@
 0:?     'g_tTex2df2a' (layout(rg32f ) uniform image2DArray)
 0:?     'g_tTex2di2a' (layout(rg32i ) uniform iimage2DArray)
 0:?     'g_tTex2du2a' (layout(rg32ui ) uniform uimage2DArray)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 2-component vector of float uf2, layout(offset=104 ) uniform 2-component vector of int ui2, layout(offset=112 ) uniform 2-component vector of uint uu2})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 6c6f187..f223e4b 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -137,6 +137,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -148,8 +150,6 @@
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -293,6 +293,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -304,8 +306,6 @@
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index de9a4f4..a222125 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -247,6 +247,8 @@
 0:89                1 (const int)
 0:89        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_sSamp2D_b' (uniform sampler)
@@ -263,8 +265,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -516,6 +516,8 @@
 0:89                1 (const int)
 0:89        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_sSamp2D_b' (uniform sampler)
@@ -532,8 +534,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index 67bf043..a148a86 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -155,6 +155,8 @@
 0:48                1 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -169,8 +171,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -332,6 +332,8 @@
 0:48                1 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -346,8 +348,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index 83a0e8b..abdf032 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -116,6 +116,8 @@
 0:36                1 (const int)
 0:36        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -124,8 +126,6 @@
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -248,6 +248,8 @@
 0:36                1 (const int)
 0:36        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -256,8 +258,6 @@
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index 5a97ed9..bfbad5c 100644
--- a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -64,12 +64,12 @@
 0:23                0 (const int)
 0:23        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df1' (uniform texture1D)
 0:?     'g_tTex1df2' (uniform texture1D)
 0:?     'g_tTex1df3' (uniform texture1D)
 0:?     'g_tTex1df4' (uniform texture1D)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 
 
 Linked fragment stage:
@@ -140,12 +140,12 @@
 0:23                0 (const int)
 0:23        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df1' (uniform texture1D)
 0:?     'g_tTex1df2' (uniform texture1D)
 0:?     'g_tTex1df3' (uniform texture1D)
 0:?     'g_tTex1df4' (uniform texture1D)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index b2b38b6..05ac32a 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -155,6 +155,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -166,8 +168,6 @@
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -329,6 +329,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -340,8 +342,6 @@
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index c794914..1442fc3 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -185,6 +185,8 @@
 0:50                1 (const int)
 0:50        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -199,8 +201,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -392,6 +392,8 @@
 0:50                1 (const int)
 0:50        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -406,8 +408,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index 900eb4b..01facb6 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -173,6 +173,8 @@
 0:48                1 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -187,8 +189,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -368,6 +368,8 @@
 0:48                1 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -382,8 +384,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index bd21622..17aef7a 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -128,6 +128,8 @@
 0:36                1 (const int)
 0:36        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -136,8 +138,6 @@
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -272,6 +272,8 @@
 0:36                1 (const int)
 0:36        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -280,8 +282,6 @@
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 05f53c7..c4f5d11 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -8,11 +8,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r10' (temp float)
-0:42          texture (global float)
+0:42          texture (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -21,11 +21,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r12' (temp float)
-0:43          texture (global float)
+0:43          texture (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -34,11 +34,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r14' (temp float)
-0:44          texture (global float)
+0:44          texture (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -47,11 +47,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r30' (temp float)
-0:47          texture (global float)
+0:47          texture (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -61,11 +61,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r32' (temp float)
-0:48          texture (global float)
+0:48          texture (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -75,11 +75,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r34' (temp float)
-0:49          texture (global float)
+0:49          texture (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -89,11 +89,11 @@
 0:52      Sequence
 0:52        move second child to first child (temp float)
 0:52          'r60' (temp float)
-0:52          texture (global float)
+0:52          texture (temp float)
 0:52            Construct combined texture-sampler (temp samplerCubeArrayShadow)
 0:52              'g_tTexcdf4a' (uniform textureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            Construct vec4 (temp float)
+0:52            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -104,11 +104,11 @@
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r62' (temp float)
-0:53          texture (global float)
+0:53          texture (temp float)
 0:53            Construct combined texture-sampler (temp isamplerCubeArrayShadow)
 0:53              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -119,11 +119,11 @@
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r64' (temp float)
-0:54          texture (global float)
+0:54          texture (temp float)
 0:54            Construct combined texture-sampler (temp usamplerCubeArrayShadow)
 0:54              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -164,6 +164,8 @@
 0:59                1 (const int)
 0:59        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -186,8 +188,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -202,11 +202,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r10' (temp float)
-0:42          texture (global float)
+0:42          texture (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -215,11 +215,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r12' (temp float)
-0:43          texture (global float)
+0:43          texture (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -228,11 +228,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r14' (temp float)
-0:44          texture (global float)
+0:44          texture (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -241,11 +241,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r30' (temp float)
-0:47          texture (global float)
+0:47          texture (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -255,11 +255,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r32' (temp float)
-0:48          texture (global float)
+0:48          texture (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -269,11 +269,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r34' (temp float)
-0:49          texture (global float)
+0:49          texture (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -283,11 +283,11 @@
 0:52      Sequence
 0:52        move second child to first child (temp float)
 0:52          'r60' (temp float)
-0:52          texture (global float)
+0:52          texture (temp float)
 0:52            Construct combined texture-sampler (temp samplerCubeArrayShadow)
 0:52              'g_tTexcdf4a' (uniform textureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            Construct vec4 (temp float)
+0:52            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -298,11 +298,11 @@
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r62' (temp float)
-0:53          texture (global float)
+0:53          texture (temp float)
 0:53            Construct combined texture-sampler (temp isamplerCubeArrayShadow)
 0:53              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -313,11 +313,11 @@
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r64' (temp float)
-0:54          texture (global float)
+0:54          texture (temp float)
 0:54            Construct combined texture-sampler (temp usamplerCubeArrayShadow)
 0:54              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -358,6 +358,8 @@
 0:59                1 (const int)
 0:59        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -380,84 +382,82 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 184
+// Id's are bound by 211
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 140 144
+                              EntryPoint Fragment 4  "main" 167 171
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r10"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 28  "r12"
-                              Name 32  "g_tTex1di4a"
-                              Name 41  "r14"
-                              Name 45  "g_tTex1du4a"
-                              Name 54  "r30"
-                              Name 57  "g_tTex2df4a"
-                              Name 69  "r32"
-                              Name 72  "g_tTex2di4a"
-                              Name 81  "r34"
-                              Name 84  "g_tTex2du4a"
-                              Name 93  "r60"
-                              Name 96  "g_tTexcdf4a"
-                              Name 107  "r62"
-                              Name 110  "g_tTexcdi4a"
-                              Name 118  "r64"
-                              Name 121  "g_tTexcdu4a"
-                              Name 129  "PS_OUTPUT"
-                              MemberName 129(PS_OUTPUT) 0  "Color"
-                              MemberName 129(PS_OUTPUT) 1  "Depth"
-                              Name 131  "psout"
-                              Name 140  "Color"
-                              Name 144  "Depth"
-                              Name 150  "g_tTex1df4"
-                              Name 153  "g_tTex1di4"
-                              Name 156  "g_tTex1du4"
-                              Name 159  "g_tTex2df4"
-                              Name 162  "g_tTex2di4"
-                              Name 165  "g_tTex2du4"
-                              Name 168  "g_tTex3df4"
-                              Name 171  "g_tTex3di4"
-                              Name 174  "g_tTex3du4"
-                              Name 177  "g_tTexcdf4"
-                              Name 180  "g_tTexcdi4"
-                              Name 183  "g_tTexcdu4"
+                              Name 31  "r12"
+                              Name 35  "g_tTex1di4a"
+                              Name 46  "r14"
+                              Name 50  "g_tTex1du4a"
+                              Name 61  "r30"
+                              Name 64  "g_tTex2df4a"
+                              Name 79  "r32"
+                              Name 82  "g_tTex2di4a"
+                              Name 94  "r34"
+                              Name 97  "g_tTex2du4a"
+                              Name 109  "r60"
+                              Name 112  "g_tTexcdf4a"
+                              Name 126  "r62"
+                              Name 129  "g_tTexcdi4a"
+                              Name 141  "r64"
+                              Name 144  "g_tTexcdu4a"
+                              Name 156  "PS_OUTPUT"
+                              MemberName 156(PS_OUTPUT) 0  "Color"
+                              MemberName 156(PS_OUTPUT) 1  "Depth"
+                              Name 158  "psout"
+                              Name 167  "Color"
+                              Name 171  "Depth"
+                              Name 177  "g_tTex1df4"
+                              Name 180  "g_tTex1di4"
+                              Name 183  "g_tTex1du4"
+                              Name 186  "g_tTex2df4"
+                              Name 189  "g_tTex2di4"
+                              Name 192  "g_tTex2du4"
+                              Name 195  "g_tTex3df4"
+                              Name 198  "g_tTex3di4"
+                              Name 201  "g_tTex3du4"
+                              Name 204  "g_tTexcdf4"
+                              Name 207  "g_tTexcdi4"
+                              Name 210  "g_tTexcdu4"
                               Decorate 11(g_tTex1df4a) DescriptorSet 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 32(g_tTex1di4a) DescriptorSet 0
-                              Decorate 45(g_tTex1du4a) DescriptorSet 0
-                              Decorate 57(g_tTex2df4a) DescriptorSet 0
-                              Decorate 72(g_tTex2di4a) DescriptorSet 0
-                              Decorate 84(g_tTex2du4a) DescriptorSet 0
-                              Decorate 96(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 110(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 121(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 140(Color) Location 0
-                              Decorate 144(Depth) BuiltIn FragDepth
-                              Decorate 150(g_tTex1df4) DescriptorSet 0
-                              Decorate 150(g_tTex1df4) Binding 0
-                              Decorate 153(g_tTex1di4) DescriptorSet 0
-                              Decorate 156(g_tTex1du4) DescriptorSet 0
-                              Decorate 159(g_tTex2df4) DescriptorSet 0
-                              Decorate 162(g_tTex2di4) DescriptorSet 0
-                              Decorate 165(g_tTex2du4) DescriptorSet 0
-                              Decorate 168(g_tTex3df4) DescriptorSet 0
-                              Decorate 171(g_tTex3di4) DescriptorSet 0
-                              Decorate 174(g_tTex3du4) DescriptorSet 0
-                              Decorate 177(g_tTexcdf4) DescriptorSet 0
-                              Decorate 180(g_tTexcdi4) DescriptorSet 0
-                              Decorate 183(g_tTexcdu4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4a) DescriptorSet 0
+                              Decorate 50(g_tTex1du4a) DescriptorSet 0
+                              Decorate 64(g_tTex2df4a) DescriptorSet 0
+                              Decorate 82(g_tTex2di4a) DescriptorSet 0
+                              Decorate 97(g_tTex2du4a) DescriptorSet 0
+                              Decorate 112(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 129(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 144(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 167(Color) Location 0
+                              Decorate 171(Depth) BuiltIn FragDepth
+                              Decorate 177(g_tTex1df4) DescriptorSet 0
+                              Decorate 177(g_tTex1df4) Binding 0
+                              Decorate 180(g_tTex1di4) DescriptorSet 0
+                              Decorate 183(g_tTex1du4) DescriptorSet 0
+                              Decorate 186(g_tTex2df4) DescriptorSet 0
+                              Decorate 189(g_tTex2di4) DescriptorSet 0
+                              Decorate 192(g_tTex2du4) DescriptorSet 0
+                              Decorate 195(g_tTex3df4) DescriptorSet 0
+                              Decorate 198(g_tTex3di4) DescriptorSet 0
+                              Decorate 201(g_tTex3du4) DescriptorSet 0
+                              Decorate 204(g_tTexcdf4) DescriptorSet 0
+                              Decorate 207(g_tTexcdi4) DescriptorSet 0
+                              Decorate 210(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -475,182 +475,209 @@
               22:    6(float) Constant 1045220557
               23:   20(fvec2) ConstantComposite 21 22
               24:    6(float) Constant 1061158912
-              29:             TypeInt 32 1
-              30:             TypeImage 29(int) 1D array sampled format:Unknown
-              31:             TypePointer UniformConstant 30
- 32(g_tTex1di4a):     31(ptr) Variable UniformConstant
-              35:             TypeImage 29(int) 1D depth array sampled format:Unknown
-              36:             TypeSampledImage 35
-              42:             TypeInt 32 0
-              43:             TypeImage 42(int) 1D array sampled format:Unknown
-              44:             TypePointer UniformConstant 43
- 45(g_tTex1du4a):     44(ptr) Variable UniformConstant
-              48:             TypeImage 42(int) 1D depth array sampled format:Unknown
-              49:             TypeSampledImage 48
-              55:             TypeImage 6(float) 2D array sampled format:Unknown
-              56:             TypePointer UniformConstant 55
- 57(g_tTex2df4a):     56(ptr) Variable UniformConstant
-              60:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              61:             TypeSampledImage 60
-              63:             TypeVector 6(float) 3
-              64:    6(float) Constant 1050253722
-              65:   63(fvec3) ConstantComposite 21 22 64
-              70:             TypeImage 29(int) 2D array sampled format:Unknown
-              71:             TypePointer UniformConstant 70
- 72(g_tTex2di4a):     71(ptr) Variable UniformConstant
-              75:             TypeImage 29(int) 2D depth array sampled format:Unknown
-              76:             TypeSampledImage 75
-              82:             TypeImage 42(int) 2D array sampled format:Unknown
-              83:             TypePointer UniformConstant 82
- 84(g_tTex2du4a):     83(ptr) Variable UniformConstant
-              87:             TypeImage 42(int) 2D depth array sampled format:Unknown
-              88:             TypeSampledImage 87
-              94:             TypeImage 6(float) Cube array sampled format:Unknown
-              95:             TypePointer UniformConstant 94
- 96(g_tTexcdf4a):     95(ptr) Variable UniformConstant
-              99:             TypeImage 6(float) Cube depth array sampled format:Unknown
-             100:             TypeSampledImage 99
-             102:             TypeVector 6(float) 4
-             103:    6(float) Constant 1053609165
-             104:  102(fvec4) ConstantComposite 21 22 64 103
-             108:             TypeImage 29(int) Cube array sampled format:Unknown
-             109:             TypePointer UniformConstant 108
-110(g_tTexcdi4a):    109(ptr) Variable UniformConstant
-             113:             TypeImage 29(int) Cube depth array sampled format:Unknown
-             114:             TypeSampledImage 113
-             119:             TypeImage 42(int) Cube array sampled format:Unknown
-             120:             TypePointer UniformConstant 119
-121(g_tTexcdu4a):    120(ptr) Variable UniformConstant
-             124:             TypeImage 42(int) Cube depth array sampled format:Unknown
-             125:             TypeSampledImage 124
-  129(PS_OUTPUT):             TypeStruct 102(fvec4) 6(float)
-             130:             TypePointer Function 129(PS_OUTPUT)
-             132:     29(int) Constant 0
-             133:    6(float) Constant 1065353216
-             134:  102(fvec4) ConstantComposite 133 133 133 133
-             135:             TypePointer Function 102(fvec4)
-             137:     29(int) Constant 1
-             139:             TypePointer Output 102(fvec4)
-      140(Color):    139(ptr) Variable Output
-             143:             TypePointer Output 6(float)
-      144(Depth):    143(ptr) Variable Output
-             148:             TypeImage 6(float) 1D sampled format:Unknown
-             149:             TypePointer UniformConstant 148
- 150(g_tTex1df4):    149(ptr) Variable UniformConstant
-             151:             TypeImage 29(int) 1D sampled format:Unknown
-             152:             TypePointer UniformConstant 151
- 153(g_tTex1di4):    152(ptr) Variable UniformConstant
-             154:             TypeImage 42(int) 1D sampled format:Unknown
-             155:             TypePointer UniformConstant 154
- 156(g_tTex1du4):    155(ptr) Variable UniformConstant
-             157:             TypeImage 6(float) 2D sampled format:Unknown
-             158:             TypePointer UniformConstant 157
- 159(g_tTex2df4):    158(ptr) Variable UniformConstant
-             160:             TypeImage 29(int) 2D sampled format:Unknown
-             161:             TypePointer UniformConstant 160
- 162(g_tTex2di4):    161(ptr) Variable UniformConstant
-             163:             TypeImage 42(int) 2D sampled format:Unknown
-             164:             TypePointer UniformConstant 163
- 165(g_tTex2du4):    164(ptr) Variable UniformConstant
-             166:             TypeImage 6(float) 3D sampled format:Unknown
-             167:             TypePointer UniformConstant 166
- 168(g_tTex3df4):    167(ptr) Variable UniformConstant
-             169:             TypeImage 29(int) 3D sampled format:Unknown
-             170:             TypePointer UniformConstant 169
- 171(g_tTex3di4):    170(ptr) Variable UniformConstant
-             172:             TypeImage 42(int) 3D sampled format:Unknown
-             173:             TypePointer UniformConstant 172
- 174(g_tTex3du4):    173(ptr) Variable UniformConstant
-             175:             TypeImage 6(float) Cube sampled format:Unknown
+              25:             TypeVector 6(float) 3
+              32:             TypeInt 32 1
+              33:             TypeImage 32(int) 1D array sampled format:Unknown
+              34:             TypePointer UniformConstant 33
+ 35(g_tTex1di4a):     34(ptr) Variable UniformConstant
+              38:             TypeImage 32(int) 1D depth array sampled format:Unknown
+              39:             TypeSampledImage 38
+              47:             TypeInt 32 0
+              48:             TypeImage 47(int) 1D array sampled format:Unknown
+              49:             TypePointer UniformConstant 48
+ 50(g_tTex1du4a):     49(ptr) Variable UniformConstant
+              53:             TypeImage 47(int) 1D depth array sampled format:Unknown
+              54:             TypeSampledImage 53
+              62:             TypeImage 6(float) 2D array sampled format:Unknown
+              63:             TypePointer UniformConstant 62
+ 64(g_tTex2df4a):     63(ptr) Variable UniformConstant
+              67:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              68:             TypeSampledImage 67
+              70:    6(float) Constant 1050253722
+              71:   25(fvec3) ConstantComposite 21 22 70
+              72:             TypeVector 6(float) 4
+              80:             TypeImage 32(int) 2D array sampled format:Unknown
+              81:             TypePointer UniformConstant 80
+ 82(g_tTex2di4a):     81(ptr) Variable UniformConstant
+              85:             TypeImage 32(int) 2D depth array sampled format:Unknown
+              86:             TypeSampledImage 85
+              95:             TypeImage 47(int) 2D array sampled format:Unknown
+              96:             TypePointer UniformConstant 95
+ 97(g_tTex2du4a):     96(ptr) Variable UniformConstant
+             100:             TypeImage 47(int) 2D depth array sampled format:Unknown
+             101:             TypeSampledImage 100
+             110:             TypeImage 6(float) Cube array sampled format:Unknown
+             111:             TypePointer UniformConstant 110
+112(g_tTexcdf4a):    111(ptr) Variable UniformConstant
+             115:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             116:             TypeSampledImage 115
+             118:    6(float) Constant 1053609165
+             119:   72(fvec4) ConstantComposite 21 22 70 118
+             127:             TypeImage 32(int) Cube array sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+129(g_tTexcdi4a):    128(ptr) Variable UniformConstant
+             132:             TypeImage 32(int) Cube depth array sampled format:Unknown
+             133:             TypeSampledImage 132
+             142:             TypeImage 47(int) Cube array sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+144(g_tTexcdu4a):    143(ptr) Variable UniformConstant
+             147:             TypeImage 47(int) Cube depth array sampled format:Unknown
+             148:             TypeSampledImage 147
+  156(PS_OUTPUT):             TypeStruct 72(fvec4) 6(float)
+             157:             TypePointer Function 156(PS_OUTPUT)
+             159:     32(int) Constant 0
+             160:    6(float) Constant 1065353216
+             161:   72(fvec4) ConstantComposite 160 160 160 160
+             162:             TypePointer Function 72(fvec4)
+             164:     32(int) Constant 1
+             166:             TypePointer Output 72(fvec4)
+      167(Color):    166(ptr) Variable Output
+             170:             TypePointer Output 6(float)
+      171(Depth):    170(ptr) Variable Output
+             175:             TypeImage 6(float) 1D sampled format:Unknown
              176:             TypePointer UniformConstant 175
- 177(g_tTexcdf4):    176(ptr) Variable UniformConstant
-             178:             TypeImage 29(int) Cube sampled format:Unknown
+ 177(g_tTex1df4):    176(ptr) Variable UniformConstant
+             178:             TypeImage 32(int) 1D sampled format:Unknown
              179:             TypePointer UniformConstant 178
- 180(g_tTexcdi4):    179(ptr) Variable UniformConstant
-             181:             TypeImage 42(int) Cube sampled format:Unknown
+ 180(g_tTex1di4):    179(ptr) Variable UniformConstant
+             181:             TypeImage 47(int) 1D sampled format:Unknown
              182:             TypePointer UniformConstant 181
- 183(g_tTexcdu4):    182(ptr) Variable UniformConstant
+ 183(g_tTex1du4):    182(ptr) Variable UniformConstant
+             184:             TypeImage 6(float) 2D sampled format:Unknown
+             185:             TypePointer UniformConstant 184
+ 186(g_tTex2df4):    185(ptr) Variable UniformConstant
+             187:             TypeImage 32(int) 2D sampled format:Unknown
+             188:             TypePointer UniformConstant 187
+ 189(g_tTex2di4):    188(ptr) Variable UniformConstant
+             190:             TypeImage 47(int) 2D sampled format:Unknown
+             191:             TypePointer UniformConstant 190
+ 192(g_tTex2du4):    191(ptr) Variable UniformConstant
+             193:             TypeImage 6(float) 3D sampled format:Unknown
+             194:             TypePointer UniformConstant 193
+ 195(g_tTex3df4):    194(ptr) Variable UniformConstant
+             196:             TypeImage 32(int) 3D sampled format:Unknown
+             197:             TypePointer UniformConstant 196
+ 198(g_tTex3di4):    197(ptr) Variable UniformConstant
+             199:             TypeImage 47(int) 3D sampled format:Unknown
+             200:             TypePointer UniformConstant 199
+ 201(g_tTex3du4):    200(ptr) Variable UniformConstant
+             202:             TypeImage 6(float) Cube sampled format:Unknown
+             203:             TypePointer UniformConstant 202
+ 204(g_tTexcdf4):    203(ptr) Variable UniformConstant
+             205:             TypeImage 32(int) Cube sampled format:Unknown
+             206:             TypePointer UniformConstant 205
+ 207(g_tTexcdi4):    206(ptr) Variable UniformConstant
+             208:             TypeImage 47(int) Cube sampled format:Unknown
+             209:             TypePointer UniformConstant 208
+ 210(g_tTexcdu4):    209(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r10):      7(ptr) Variable Function
-         28(r12):      7(ptr) Variable Function
-         41(r14):      7(ptr) Variable Function
-         54(r30):      7(ptr) Variable Function
-         69(r32):      7(ptr) Variable Function
-         81(r34):      7(ptr) Variable Function
-         93(r60):      7(ptr) Variable Function
-        107(r62):      7(ptr) Variable Function
-        118(r64):      7(ptr) Variable Function
-      131(psout):    130(ptr) Variable Function
+         31(r12):      7(ptr) Variable Function
+         46(r14):      7(ptr) Variable Function
+         61(r30):      7(ptr) Variable Function
+         79(r32):      7(ptr) Variable Function
+         94(r34):      7(ptr) Variable Function
+        109(r60):      7(ptr) Variable Function
+        126(r62):      7(ptr) Variable Function
+        141(r64):      7(ptr) Variable Function
+      158(psout):    157(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4a)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 23 0
-              26:    6(float) CompositeExtract 25 0
-              27:    6(float) ImageSampleDrefImplicitLod 19 25 26
-                              Store 8(r10) 27
-              33:          30 Load 32(g_tTex1di4a)
-              34:          13 Load 15(g_sSamp)
-              37:          36 SampledImage 33 34
-              38:    6(float) CompositeExtract 23 0
-              39:    6(float) CompositeExtract 38 0
-              40:    6(float) ImageSampleDrefImplicitLod 37 38 39
-                              Store 28(r12) 40
-              46:          43 Load 45(g_tTex1du4a)
-              47:          13 Load 15(g_sSamp)
-              50:          49 SampledImage 46 47
-              51:    6(float) CompositeExtract 23 0
-              52:    6(float) CompositeExtract 51 0
-              53:    6(float) ImageSampleDrefImplicitLod 50 51 52
-                              Store 41(r14) 53
-              58:          55 Load 57(g_tTex2df4a)
-              59:          13 Load 15(g_sSamp)
-              62:          61 SampledImage 58 59
-              66:    6(float) CompositeExtract 65 0
-              67:    6(float) CompositeExtract 66 0
-              68:    6(float) ImageSampleDrefImplicitLod 62 66 67
-                              Store 54(r30) 68
-              73:          70 Load 72(g_tTex2di4a)
-              74:          13 Load 15(g_sSamp)
-              77:          76 SampledImage 73 74
-              78:    6(float) CompositeExtract 65 0
-              79:    6(float) CompositeExtract 78 0
-              80:    6(float) ImageSampleDrefImplicitLod 77 78 79
-                              Store 69(r32) 80
-              85:          82 Load 84(g_tTex2du4a)
-              86:          13 Load 15(g_sSamp)
-              89:          88 SampledImage 85 86
-              90:    6(float) CompositeExtract 65 0
-              91:    6(float) CompositeExtract 90 0
-              92:    6(float) ImageSampleDrefImplicitLod 89 90 91
-                              Store 81(r34) 92
-              97:          94 Load 96(g_tTexcdf4a)
-              98:          13 Load 15(g_sSamp)
-             101:         100 SampledImage 97 98
-             105:    6(float) CompositeExtract 104 0
-             106:    6(float) ImageSampleDrefImplicitLod 101 105 24
-                              Store 93(r60) 106
-             111:         108 Load 110(g_tTexcdi4a)
-             112:          13 Load 15(g_sSamp)
-             115:         114 SampledImage 111 112
-             116:    6(float) CompositeExtract 104 0
-             117:    6(float) ImageSampleDrefImplicitLod 115 116 24
-                              Store 107(r62) 117
-             122:         119 Load 121(g_tTexcdu4a)
-             123:          13 Load 15(g_sSamp)
-             126:         125 SampledImage 122 123
-             127:    6(float) CompositeExtract 104 0
-             128:    6(float) ImageSampleDrefImplicitLod 126 127 24
-                              Store 118(r64) 128
-             136:    135(ptr) AccessChain 131(psout) 132
-                              Store 136 134
-             138:      7(ptr) AccessChain 131(psout) 137
-                              Store 138 133
-             141:    135(ptr) AccessChain 131(psout) 132
-             142:  102(fvec4) Load 141
-                              Store 140(Color) 142
-             145:      7(ptr) AccessChain 131(psout) 137
-             146:    6(float) Load 145
-                              Store 144(Depth) 146
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:   25(fvec3) CompositeConstruct 26 27 24
+              29:    6(float) CompositeExtract 28 2
+              30:    6(float) ImageSampleDrefImplicitLod 19 28 29
+                              Store 8(r10) 30
+              36:          33 Load 35(g_tTex1di4a)
+              37:          13 Load 15(g_sSamp)
+              40:          39 SampledImage 36 37
+              41:    6(float) CompositeExtract 23 0
+              42:    6(float) CompositeExtract 23 1
+              43:   25(fvec3) CompositeConstruct 41 42 24
+              44:    6(float) CompositeExtract 43 2
+              45:    6(float) ImageSampleDrefImplicitLod 40 43 44
+                              Store 31(r12) 45
+              51:          48 Load 50(g_tTex1du4a)
+              52:          13 Load 15(g_sSamp)
+              55:          54 SampledImage 51 52
+              56:    6(float) CompositeExtract 23 0
+              57:    6(float) CompositeExtract 23 1
+              58:   25(fvec3) CompositeConstruct 56 57 24
+              59:    6(float) CompositeExtract 58 2
+              60:    6(float) ImageSampleDrefImplicitLod 55 58 59
+                              Store 46(r14) 60
+              65:          62 Load 64(g_tTex2df4a)
+              66:          13 Load 15(g_sSamp)
+              69:          68 SampledImage 65 66
+              73:    6(float) CompositeExtract 71 0
+              74:    6(float) CompositeExtract 71 1
+              75:    6(float) CompositeExtract 71 2
+              76:   72(fvec4) CompositeConstruct 73 74 75 24
+              77:    6(float) CompositeExtract 76 3
+              78:    6(float) ImageSampleDrefImplicitLod 69 76 77
+                              Store 61(r30) 78
+              83:          80 Load 82(g_tTex2di4a)
+              84:          13 Load 15(g_sSamp)
+              87:          86 SampledImage 83 84
+              88:    6(float) CompositeExtract 71 0
+              89:    6(float) CompositeExtract 71 1
+              90:    6(float) CompositeExtract 71 2
+              91:   72(fvec4) CompositeConstruct 88 89 90 24
+              92:    6(float) CompositeExtract 91 3
+              93:    6(float) ImageSampleDrefImplicitLod 87 91 92
+                              Store 79(r32) 93
+              98:          95 Load 97(g_tTex2du4a)
+              99:          13 Load 15(g_sSamp)
+             102:         101 SampledImage 98 99
+             103:    6(float) CompositeExtract 71 0
+             104:    6(float) CompositeExtract 71 1
+             105:    6(float) CompositeExtract 71 2
+             106:   72(fvec4) CompositeConstruct 103 104 105 24
+             107:    6(float) CompositeExtract 106 3
+             108:    6(float) ImageSampleDrefImplicitLod 102 106 107
+                              Store 94(r34) 108
+             113:         110 Load 112(g_tTexcdf4a)
+             114:          13 Load 15(g_sSamp)
+             117:         116 SampledImage 113 114
+             120:    6(float) CompositeExtract 119 0
+             121:    6(float) CompositeExtract 119 1
+             122:    6(float) CompositeExtract 119 2
+             123:    6(float) CompositeExtract 119 3
+             124:   72(fvec4) CompositeConstruct 120 121 122 123
+             125:    6(float) ImageSampleDrefImplicitLod 117 124 24
+                              Store 109(r60) 125
+             130:         127 Load 129(g_tTexcdi4a)
+             131:          13 Load 15(g_sSamp)
+             134:         133 SampledImage 130 131
+             135:    6(float) CompositeExtract 119 0
+             136:    6(float) CompositeExtract 119 1
+             137:    6(float) CompositeExtract 119 2
+             138:    6(float) CompositeExtract 119 3
+             139:   72(fvec4) CompositeConstruct 135 136 137 138
+             140:    6(float) ImageSampleDrefImplicitLod 134 139 24
+                              Store 126(r62) 140
+             145:         142 Load 144(g_tTexcdu4a)
+             146:          13 Load 15(g_sSamp)
+             149:         148 SampledImage 145 146
+             150:    6(float) CompositeExtract 119 0
+             151:    6(float) CompositeExtract 119 1
+             152:    6(float) CompositeExtract 119 2
+             153:    6(float) CompositeExtract 119 3
+             154:   72(fvec4) CompositeConstruct 150 151 152 153
+             155:    6(float) ImageSampleDrefImplicitLod 149 154 24
+                              Store 141(r64) 155
+             163:    162(ptr) AccessChain 158(psout) 159
+                              Store 163 161
+             165:      7(ptr) AccessChain 158(psout) 164
+                              Store 165 160
+             168:    162(ptr) AccessChain 158(psout) 159
+             169:   72(fvec4) Load 168
+                              Store 167(Color) 169
+             172:      7(ptr) AccessChain 158(psout) 164
+             173:    6(float) Load 172
+                              Store 171(Depth) 173
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index d7a6b2f..acd24b8 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -8,11 +8,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r00' (temp float)
-0:42          texture (global float)
+0:42          texture (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -20,11 +20,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r02' (temp float)
-0:43          texture (global float)
+0:43          texture (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -32,11 +32,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r04' (temp float)
-0:44          texture (global float)
+0:44          texture (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -44,11 +44,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r20' (temp float)
-0:47          texture (global float)
+0:47          texture (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -57,11 +57,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r22' (temp float)
-0:48          texture (global float)
+0:48          texture (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -70,11 +70,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r24' (temp float)
-0:49          texture (global float)
+0:49          texture (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -83,11 +83,11 @@
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r50' (temp float)
-0:53          texture (global float)
+0:53          texture (temp float)
 0:53            Construct combined texture-sampler (temp samplerCubeShadow)
 0:53              'g_tTexcdf4' (uniform textureCube)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -97,11 +97,11 @@
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r52' (temp float)
-0:54          texture (global float)
+0:54          texture (temp float)
 0:54            Construct combined texture-sampler (temp isamplerCubeShadow)
 0:54              'g_tTexcdi4' (uniform itextureCube)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -111,11 +111,11 @@
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r54' (temp float)
-0:55          texture (global float)
+0:55          texture (temp float)
 0:55            Construct combined texture-sampler (temp usamplerCubeShadow)
 0:55              'g_tTexcdu4' (uniform utextureCube)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            Construct vec4 (temp float)
+0:55            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -155,6 +155,8 @@
 0:60                1 (const int)
 0:60        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -177,8 +179,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -193,11 +193,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r00' (temp float)
-0:42          texture (global float)
+0:42          texture (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -205,11 +205,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r02' (temp float)
-0:43          texture (global float)
+0:43          texture (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -217,11 +217,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r04' (temp float)
-0:44          texture (global float)
+0:44          texture (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -229,11 +229,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r20' (temp float)
-0:47          texture (global float)
+0:47          texture (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -242,11 +242,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r22' (temp float)
-0:48          texture (global float)
+0:48          texture (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -255,11 +255,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r24' (temp float)
-0:49          texture (global float)
+0:49          texture (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -268,11 +268,11 @@
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r50' (temp float)
-0:53          texture (global float)
+0:53          texture (temp float)
 0:53            Construct combined texture-sampler (temp samplerCubeShadow)
 0:53              'g_tTexcdf4' (uniform textureCube)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -282,11 +282,11 @@
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r52' (temp float)
-0:54          texture (global float)
+0:54          texture (temp float)
 0:54            Construct combined texture-sampler (temp isamplerCubeShadow)
 0:54              'g_tTexcdi4' (uniform itextureCube)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -296,11 +296,11 @@
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r54' (temp float)
-0:55          texture (global float)
+0:55          texture (temp float)
 0:55            Construct combined texture-sampler (temp usamplerCubeShadow)
 0:55              'g_tTexcdu4' (uniform utextureCube)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            Construct vec4 (temp float)
+0:55            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -340,6 +340,8 @@
 0:60                1 (const int)
 0:60        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -362,84 +364,82 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 182
+// Id's are bound by 200
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 138 142
+                              EntryPoint Fragment 4  "main" 156 160
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r00"
                               Name 11  "g_tTex1df4"
                               Name 15  "g_sSamp"
-                              Name 24  "r02"
-                              Name 28  "g_tTex1di4"
-                              Name 36  "r04"
-                              Name 40  "g_tTex1du4"
-                              Name 48  "r20"
-                              Name 51  "g_tTex2df4"
-                              Name 63  "r22"
-                              Name 66  "g_tTex2di4"
-                              Name 75  "r24"
-                              Name 78  "g_tTex2du4"
-                              Name 87  "r50"
-                              Name 90  "g_tTexcdf4"
-                              Name 102  "r52"
-                              Name 105  "g_tTexcdi4"
-                              Name 114  "r54"
-                              Name 117  "g_tTexcdu4"
-                              Name 127  "PS_OUTPUT"
-                              MemberName 127(PS_OUTPUT) 0  "Color"
-                              MemberName 127(PS_OUTPUT) 1  "Depth"
-                              Name 129  "psout"
-                              Name 138  "Color"
-                              Name 142  "Depth"
-                              Name 148  "g_tTex3df4"
-                              Name 151  "g_tTex3di4"
-                              Name 154  "g_tTex3du4"
-                              Name 157  "g_tTex1df4a"
-                              Name 160  "g_tTex1di4a"
-                              Name 163  "g_tTex1du4a"
-                              Name 166  "g_tTex2df4a"
-                              Name 169  "g_tTex2di4a"
-                              Name 172  "g_tTex2du4a"
-                              Name 175  "g_tTexcdf4a"
-                              Name 178  "g_tTexcdi4a"
-                              Name 181  "g_tTexcdu4a"
+                              Name 26  "r02"
+                              Name 30  "g_tTex1di4"
+                              Name 39  "r04"
+                              Name 43  "g_tTex1du4"
+                              Name 52  "r20"
+                              Name 55  "g_tTex2df4"
+                              Name 69  "r22"
+                              Name 72  "g_tTex2di4"
+                              Name 83  "r24"
+                              Name 86  "g_tTex2du4"
+                              Name 97  "r50"
+                              Name 100  "g_tTexcdf4"
+                              Name 115  "r52"
+                              Name 118  "g_tTexcdi4"
+                              Name 130  "r54"
+                              Name 133  "g_tTexcdu4"
+                              Name 145  "PS_OUTPUT"
+                              MemberName 145(PS_OUTPUT) 0  "Color"
+                              MemberName 145(PS_OUTPUT) 1  "Depth"
+                              Name 147  "psout"
+                              Name 156  "Color"
+                              Name 160  "Depth"
+                              Name 166  "g_tTex3df4"
+                              Name 169  "g_tTex3di4"
+                              Name 172  "g_tTex3du4"
+                              Name 175  "g_tTex1df4a"
+                              Name 178  "g_tTex1di4a"
+                              Name 181  "g_tTex1du4a"
+                              Name 184  "g_tTex2df4a"
+                              Name 187  "g_tTex2di4a"
+                              Name 190  "g_tTex2du4a"
+                              Name 193  "g_tTexcdf4a"
+                              Name 196  "g_tTexcdi4a"
+                              Name 199  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4) DescriptorSet 0
                               Decorate 11(g_tTex1df4) Binding 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 28(g_tTex1di4) DescriptorSet 0
-                              Decorate 40(g_tTex1du4) DescriptorSet 0
-                              Decorate 51(g_tTex2df4) DescriptorSet 0
-                              Decorate 66(g_tTex2di4) DescriptorSet 0
-                              Decorate 78(g_tTex2du4) DescriptorSet 0
-                              Decorate 90(g_tTexcdf4) DescriptorSet 0
-                              Decorate 105(g_tTexcdi4) DescriptorSet 0
-                              Decorate 117(g_tTexcdu4) DescriptorSet 0
-                              Decorate 138(Color) Location 0
-                              Decorate 142(Depth) BuiltIn FragDepth
-                              Decorate 148(g_tTex3df4) DescriptorSet 0
-                              Decorate 151(g_tTex3di4) DescriptorSet 0
-                              Decorate 154(g_tTex3du4) DescriptorSet 0
-                              Decorate 157(g_tTex1df4a) DescriptorSet 0
-                              Decorate 160(g_tTex1di4a) DescriptorSet 0
-                              Decorate 163(g_tTex1du4a) DescriptorSet 0
-                              Decorate 166(g_tTex2df4a) DescriptorSet 0
-                              Decorate 169(g_tTex2di4a) DescriptorSet 0
-                              Decorate 172(g_tTex2du4a) DescriptorSet 0
-                              Decorate 175(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 178(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 181(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 30(g_tTex1di4) DescriptorSet 0
+                              Decorate 43(g_tTex1du4) DescriptorSet 0
+                              Decorate 55(g_tTex2df4) DescriptorSet 0
+                              Decorate 72(g_tTex2di4) DescriptorSet 0
+                              Decorate 86(g_tTex2du4) DescriptorSet 0
+                              Decorate 100(g_tTexcdf4) DescriptorSet 0
+                              Decorate 118(g_tTexcdi4) DescriptorSet 0
+                              Decorate 133(g_tTexcdu4) DescriptorSet 0
+                              Decorate 156(Color) Location 0
+                              Decorate 160(Depth) BuiltIn FragDepth
+                              Decorate 166(g_tTex3df4) DescriptorSet 0
+                              Decorate 169(g_tTex3di4) DescriptorSet 0
+                              Decorate 172(g_tTex3du4) DescriptorSet 0
+                              Decorate 175(g_tTex1df4a) DescriptorSet 0
+                              Decorate 178(g_tTex1di4a) DescriptorSet 0
+                              Decorate 181(g_tTex1du4a) DescriptorSet 0
+                              Decorate 184(g_tTex2df4a) DescriptorSet 0
+                              Decorate 187(g_tTex2di4a) DescriptorSet 0
+                              Decorate 190(g_tTex2du4a) DescriptorSet 0
+                              Decorate 193(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 196(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 199(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -454,183 +454,201 @@
               18:             TypeSampledImage 17
               20:    6(float) Constant 1036831949
               21:    6(float) Constant 1061158912
-              25:             TypeInt 32 1
-              26:             TypeImage 25(int) 1D sampled format:Unknown
-              27:             TypePointer UniformConstant 26
-  28(g_tTex1di4):     27(ptr) Variable UniformConstant
-              31:             TypeImage 25(int) 1D depth sampled format:Unknown
-              32:             TypeSampledImage 31
-              37:             TypeInt 32 0
-              38:             TypeImage 37(int) 1D sampled format:Unknown
-              39:             TypePointer UniformConstant 38
-  40(g_tTex1du4):     39(ptr) Variable UniformConstant
-              43:             TypeImage 37(int) 1D depth sampled format:Unknown
-              44:             TypeSampledImage 43
-              49:             TypeImage 6(float) 2D sampled format:Unknown
-              50:             TypePointer UniformConstant 49
-  51(g_tTex2df4):     50(ptr) Variable UniformConstant
-              54:             TypeImage 6(float) 2D depth sampled format:Unknown
-              55:             TypeSampledImage 54
-              57:             TypeVector 6(float) 2
-              58:    6(float) Constant 1045220557
-              59:   57(fvec2) ConstantComposite 20 58
-              64:             TypeImage 25(int) 2D sampled format:Unknown
-              65:             TypePointer UniformConstant 64
-  66(g_tTex2di4):     65(ptr) Variable UniformConstant
-              69:             TypeImage 25(int) 2D depth sampled format:Unknown
-              70:             TypeSampledImage 69
-              76:             TypeImage 37(int) 2D sampled format:Unknown
-              77:             TypePointer UniformConstant 76
-  78(g_tTex2du4):     77(ptr) Variable UniformConstant
-              81:             TypeImage 37(int) 2D depth sampled format:Unknown
-              82:             TypeSampledImage 81
-              88:             TypeImage 6(float) Cube sampled format:Unknown
-              89:             TypePointer UniformConstant 88
-  90(g_tTexcdf4):     89(ptr) Variable UniformConstant
-              93:             TypeImage 6(float) Cube depth sampled format:Unknown
-              94:             TypeSampledImage 93
-              96:             TypeVector 6(float) 3
-              97:    6(float) Constant 1050253722
-              98:   96(fvec3) ConstantComposite 20 58 97
-             103:             TypeImage 25(int) Cube sampled format:Unknown
-             104:             TypePointer UniformConstant 103
- 105(g_tTexcdi4):    104(ptr) Variable UniformConstant
-             108:             TypeImage 25(int) Cube depth sampled format:Unknown
-             109:             TypeSampledImage 108
-             115:             TypeImage 37(int) Cube sampled format:Unknown
-             116:             TypePointer UniformConstant 115
- 117(g_tTexcdu4):    116(ptr) Variable UniformConstant
-             120:             TypeImage 37(int) Cube depth sampled format:Unknown
-             121:             TypeSampledImage 120
-             126:             TypeVector 6(float) 4
-  127(PS_OUTPUT):             TypeStruct 126(fvec4) 6(float)
-             128:             TypePointer Function 127(PS_OUTPUT)
-             130:     25(int) Constant 0
-             131:    6(float) Constant 1065353216
-             132:  126(fvec4) ConstantComposite 131 131 131 131
-             133:             TypePointer Function 126(fvec4)
-             135:     25(int) Constant 1
-             137:             TypePointer Output 126(fvec4)
-      138(Color):    137(ptr) Variable Output
-             141:             TypePointer Output 6(float)
-      142(Depth):    141(ptr) Variable Output
-             146:             TypeImage 6(float) 3D sampled format:Unknown
-             147:             TypePointer UniformConstant 146
- 148(g_tTex3df4):    147(ptr) Variable UniformConstant
-             149:             TypeImage 25(int) 3D sampled format:Unknown
-             150:             TypePointer UniformConstant 149
- 151(g_tTex3di4):    150(ptr) Variable UniformConstant
-             152:             TypeImage 37(int) 3D sampled format:Unknown
-             153:             TypePointer UniformConstant 152
- 154(g_tTex3du4):    153(ptr) Variable UniformConstant
-             155:             TypeImage 6(float) 1D array sampled format:Unknown
-             156:             TypePointer UniformConstant 155
-157(g_tTex1df4a):    156(ptr) Variable UniformConstant
-             158:             TypeImage 25(int) 1D array sampled format:Unknown
-             159:             TypePointer UniformConstant 158
-160(g_tTex1di4a):    159(ptr) Variable UniformConstant
-             161:             TypeImage 37(int) 1D array sampled format:Unknown
-             162:             TypePointer UniformConstant 161
-163(g_tTex1du4a):    162(ptr) Variable UniformConstant
-             164:             TypeImage 6(float) 2D array sampled format:Unknown
+              22:             TypeVector 6(float) 2
+              27:             TypeInt 32 1
+              28:             TypeImage 27(int) 1D sampled format:Unknown
+              29:             TypePointer UniformConstant 28
+  30(g_tTex1di4):     29(ptr) Variable UniformConstant
+              33:             TypeImage 27(int) 1D depth sampled format:Unknown
+              34:             TypeSampledImage 33
+              40:             TypeInt 32 0
+              41:             TypeImage 40(int) 1D sampled format:Unknown
+              42:             TypePointer UniformConstant 41
+  43(g_tTex1du4):     42(ptr) Variable UniformConstant
+              46:             TypeImage 40(int) 1D depth sampled format:Unknown
+              47:             TypeSampledImage 46
+              53:             TypeImage 6(float) 2D sampled format:Unknown
+              54:             TypePointer UniformConstant 53
+  55(g_tTex2df4):     54(ptr) Variable UniformConstant
+              58:             TypeImage 6(float) 2D depth sampled format:Unknown
+              59:             TypeSampledImage 58
+              61:    6(float) Constant 1045220557
+              62:   22(fvec2) ConstantComposite 20 61
+              63:             TypeVector 6(float) 3
+              70:             TypeImage 27(int) 2D sampled format:Unknown
+              71:             TypePointer UniformConstant 70
+  72(g_tTex2di4):     71(ptr) Variable UniformConstant
+              75:             TypeImage 27(int) 2D depth sampled format:Unknown
+              76:             TypeSampledImage 75
+              84:             TypeImage 40(int) 2D sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+  86(g_tTex2du4):     85(ptr) Variable UniformConstant
+              89:             TypeImage 40(int) 2D depth sampled format:Unknown
+              90:             TypeSampledImage 89
+              98:             TypeImage 6(float) Cube sampled format:Unknown
+              99:             TypePointer UniformConstant 98
+ 100(g_tTexcdf4):     99(ptr) Variable UniformConstant
+             103:             TypeImage 6(float) Cube depth sampled format:Unknown
+             104:             TypeSampledImage 103
+             106:    6(float) Constant 1050253722
+             107:   63(fvec3) ConstantComposite 20 61 106
+             108:             TypeVector 6(float) 4
+             116:             TypeImage 27(int) Cube sampled format:Unknown
+             117:             TypePointer UniformConstant 116
+ 118(g_tTexcdi4):    117(ptr) Variable UniformConstant
+             121:             TypeImage 27(int) Cube depth sampled format:Unknown
+             122:             TypeSampledImage 121
+             131:             TypeImage 40(int) Cube sampled format:Unknown
+             132:             TypePointer UniformConstant 131
+ 133(g_tTexcdu4):    132(ptr) Variable UniformConstant
+             136:             TypeImage 40(int) Cube depth sampled format:Unknown
+             137:             TypeSampledImage 136
+  145(PS_OUTPUT):             TypeStruct 108(fvec4) 6(float)
+             146:             TypePointer Function 145(PS_OUTPUT)
+             148:     27(int) Constant 0
+             149:    6(float) Constant 1065353216
+             150:  108(fvec4) ConstantComposite 149 149 149 149
+             151:             TypePointer Function 108(fvec4)
+             153:     27(int) Constant 1
+             155:             TypePointer Output 108(fvec4)
+      156(Color):    155(ptr) Variable Output
+             159:             TypePointer Output 6(float)
+      160(Depth):    159(ptr) Variable Output
+             164:             TypeImage 6(float) 3D sampled format:Unknown
              165:             TypePointer UniformConstant 164
-166(g_tTex2df4a):    165(ptr) Variable UniformConstant
-             167:             TypeImage 25(int) 2D array sampled format:Unknown
+ 166(g_tTex3df4):    165(ptr) Variable UniformConstant
+             167:             TypeImage 27(int) 3D sampled format:Unknown
              168:             TypePointer UniformConstant 167
-169(g_tTex2di4a):    168(ptr) Variable UniformConstant
-             170:             TypeImage 37(int) 2D array sampled format:Unknown
+ 169(g_tTex3di4):    168(ptr) Variable UniformConstant
+             170:             TypeImage 40(int) 3D sampled format:Unknown
              171:             TypePointer UniformConstant 170
-172(g_tTex2du4a):    171(ptr) Variable UniformConstant
-             173:             TypeImage 6(float) Cube array sampled format:Unknown
+ 172(g_tTex3du4):    171(ptr) Variable UniformConstant
+             173:             TypeImage 6(float) 1D array sampled format:Unknown
              174:             TypePointer UniformConstant 173
-175(g_tTexcdf4a):    174(ptr) Variable UniformConstant
-             176:             TypeImage 25(int) Cube array sampled format:Unknown
+175(g_tTex1df4a):    174(ptr) Variable UniformConstant
+             176:             TypeImage 27(int) 1D array sampled format:Unknown
              177:             TypePointer UniformConstant 176
-178(g_tTexcdi4a):    177(ptr) Variable UniformConstant
-             179:             TypeImage 37(int) Cube array sampled format:Unknown
+178(g_tTex1di4a):    177(ptr) Variable UniformConstant
+             179:             TypeImage 40(int) 1D array sampled format:Unknown
              180:             TypePointer UniformConstant 179
-181(g_tTexcdu4a):    180(ptr) Variable UniformConstant
+181(g_tTex1du4a):    180(ptr) Variable UniformConstant
+             182:             TypeImage 6(float) 2D array sampled format:Unknown
+             183:             TypePointer UniformConstant 182
+184(g_tTex2df4a):    183(ptr) Variable UniformConstant
+             185:             TypeImage 27(int) 2D array sampled format:Unknown
+             186:             TypePointer UniformConstant 185
+187(g_tTex2di4a):    186(ptr) Variable UniformConstant
+             188:             TypeImage 40(int) 2D array sampled format:Unknown
+             189:             TypePointer UniformConstant 188
+190(g_tTex2du4a):    189(ptr) Variable UniformConstant
+             191:             TypeImage 6(float) Cube array sampled format:Unknown
+             192:             TypePointer UniformConstant 191
+193(g_tTexcdf4a):    192(ptr) Variable UniformConstant
+             194:             TypeImage 27(int) Cube array sampled format:Unknown
+             195:             TypePointer UniformConstant 194
+196(g_tTexcdi4a):    195(ptr) Variable UniformConstant
+             197:             TypeImage 40(int) Cube array sampled format:Unknown
+             198:             TypePointer UniformConstant 197
+199(g_tTexcdu4a):    198(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r00):      7(ptr) Variable Function
-         24(r02):      7(ptr) Variable Function
-         36(r04):      7(ptr) Variable Function
-         48(r20):      7(ptr) Variable Function
-         63(r22):      7(ptr) Variable Function
-         75(r24):      7(ptr) Variable Function
-         87(r50):      7(ptr) Variable Function
-        102(r52):      7(ptr) Variable Function
-        114(r54):      7(ptr) Variable Function
-      129(psout):    128(ptr) Variable Function
+         26(r02):      7(ptr) Variable Function
+         39(r04):      7(ptr) Variable Function
+         52(r20):      7(ptr) Variable Function
+         69(r22):      7(ptr) Variable Function
+         83(r24):      7(ptr) Variable Function
+         97(r50):      7(ptr) Variable Function
+        115(r52):      7(ptr) Variable Function
+        130(r54):      7(ptr) Variable Function
+      147(psout):    146(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              22:    6(float) CompositeExtract 20 0
-              23:    6(float) ImageSampleDrefImplicitLod 19 20 22
-                              Store 8(r00) 23
-              29:          26 Load 28(g_tTex1di4)
-              30:          13 Load 15(g_sSamp)
-              33:          32 SampledImage 29 30
-              34:    6(float) CompositeExtract 20 0
-              35:    6(float) ImageSampleDrefImplicitLod 33 20 34
-                              Store 24(r02) 35
-              41:          38 Load 40(g_tTex1du4)
-              42:          13 Load 15(g_sSamp)
-              45:          44 SampledImage 41 42
-              46:    6(float) CompositeExtract 20 0
-              47:    6(float) ImageSampleDrefImplicitLod 45 20 46
-                              Store 36(r04) 47
-              52:          49 Load 51(g_tTex2df4)
-              53:          13 Load 15(g_sSamp)
-              56:          55 SampledImage 52 53
-              60:    6(float) CompositeExtract 59 0
-              61:    6(float) CompositeExtract 60 0
-              62:    6(float) ImageSampleDrefImplicitLod 56 60 61
-                              Store 48(r20) 62
-              67:          64 Load 66(g_tTex2di4)
-              68:          13 Load 15(g_sSamp)
-              71:          70 SampledImage 67 68
-              72:    6(float) CompositeExtract 59 0
-              73:    6(float) CompositeExtract 72 0
-              74:    6(float) ImageSampleDrefImplicitLod 71 72 73
-                              Store 63(r22) 74
-              79:          76 Load 78(g_tTex2du4)
-              80:          13 Load 15(g_sSamp)
-              83:          82 SampledImage 79 80
-              84:    6(float) CompositeExtract 59 0
-              85:    6(float) CompositeExtract 84 0
-              86:    6(float) ImageSampleDrefImplicitLod 83 84 85
-                              Store 75(r24) 86
-              91:          88 Load 90(g_tTexcdf4)
-              92:          13 Load 15(g_sSamp)
-              95:          94 SampledImage 91 92
-              99:    6(float) CompositeExtract 98 0
-             100:    6(float) CompositeExtract 99 0
-             101:    6(float) ImageSampleDrefImplicitLod 95 99 100
-                              Store 87(r50) 101
-             106:         103 Load 105(g_tTexcdi4)
-             107:          13 Load 15(g_sSamp)
-             110:         109 SampledImage 106 107
-             111:    6(float) CompositeExtract 98 0
-             112:    6(float) CompositeExtract 111 0
-             113:    6(float) ImageSampleDrefImplicitLod 110 111 112
-                              Store 102(r52) 113
-             118:         115 Load 117(g_tTexcdu4)
-             119:          13 Load 15(g_sSamp)
-             122:         121 SampledImage 118 119
-             123:    6(float) CompositeExtract 98 0
-             124:    6(float) CompositeExtract 123 0
-             125:    6(float) ImageSampleDrefImplicitLod 122 123 124
-                              Store 114(r54) 125
-             134:    133(ptr) AccessChain 129(psout) 130
-                              Store 134 132
-             136:      7(ptr) AccessChain 129(psout) 135
-                              Store 136 131
-             139:    133(ptr) AccessChain 129(psout) 130
-             140:  126(fvec4) Load 139
-                              Store 138(Color) 140
-             143:      7(ptr) AccessChain 129(psout) 135
-             144:    6(float) Load 143
-                              Store 142(Depth) 144
+              23:   22(fvec2) CompositeConstruct 20 21
+              24:    6(float) CompositeExtract 23 1
+              25:    6(float) ImageSampleDrefImplicitLod 19 23 24
+                              Store 8(r00) 25
+              31:          28 Load 30(g_tTex1di4)
+              32:          13 Load 15(g_sSamp)
+              35:          34 SampledImage 31 32
+              36:   22(fvec2) CompositeConstruct 20 21
+              37:    6(float) CompositeExtract 36 1
+              38:    6(float) ImageSampleDrefImplicitLod 35 36 37
+                              Store 26(r02) 38
+              44:          41 Load 43(g_tTex1du4)
+              45:          13 Load 15(g_sSamp)
+              48:          47 SampledImage 44 45
+              49:   22(fvec2) CompositeConstruct 20 21
+              50:    6(float) CompositeExtract 49 1
+              51:    6(float) ImageSampleDrefImplicitLod 48 49 50
+                              Store 39(r04) 51
+              56:          53 Load 55(g_tTex2df4)
+              57:          13 Load 15(g_sSamp)
+              60:          59 SampledImage 56 57
+              64:    6(float) CompositeExtract 62 0
+              65:    6(float) CompositeExtract 62 1
+              66:   63(fvec3) CompositeConstruct 64 65 21
+              67:    6(float) CompositeExtract 66 2
+              68:    6(float) ImageSampleDrefImplicitLod 60 66 67
+                              Store 52(r20) 68
+              73:          70 Load 72(g_tTex2di4)
+              74:          13 Load 15(g_sSamp)
+              77:          76 SampledImage 73 74
+              78:    6(float) CompositeExtract 62 0
+              79:    6(float) CompositeExtract 62 1
+              80:   63(fvec3) CompositeConstruct 78 79 21
+              81:    6(float) CompositeExtract 80 2
+              82:    6(float) ImageSampleDrefImplicitLod 77 80 81
+                              Store 69(r22) 82
+              87:          84 Load 86(g_tTex2du4)
+              88:          13 Load 15(g_sSamp)
+              91:          90 SampledImage 87 88
+              92:    6(float) CompositeExtract 62 0
+              93:    6(float) CompositeExtract 62 1
+              94:   63(fvec3) CompositeConstruct 92 93 21
+              95:    6(float) CompositeExtract 94 2
+              96:    6(float) ImageSampleDrefImplicitLod 91 94 95
+                              Store 83(r24) 96
+             101:          98 Load 100(g_tTexcdf4)
+             102:          13 Load 15(g_sSamp)
+             105:         104 SampledImage 101 102
+             109:    6(float) CompositeExtract 107 0
+             110:    6(float) CompositeExtract 107 1
+             111:    6(float) CompositeExtract 107 2
+             112:  108(fvec4) CompositeConstruct 109 110 111 21
+             113:    6(float) CompositeExtract 112 3
+             114:    6(float) ImageSampleDrefImplicitLod 105 112 113
+                              Store 97(r50) 114
+             119:         116 Load 118(g_tTexcdi4)
+             120:          13 Load 15(g_sSamp)
+             123:         122 SampledImage 119 120
+             124:    6(float) CompositeExtract 107 0
+             125:    6(float) CompositeExtract 107 1
+             126:    6(float) CompositeExtract 107 2
+             127:  108(fvec4) CompositeConstruct 124 125 126 21
+             128:    6(float) CompositeExtract 127 3
+             129:    6(float) ImageSampleDrefImplicitLod 123 127 128
+                              Store 115(r52) 129
+             134:         131 Load 133(g_tTexcdu4)
+             135:          13 Load 15(g_sSamp)
+             138:         137 SampledImage 134 135
+             139:    6(float) CompositeExtract 107 0
+             140:    6(float) CompositeExtract 107 1
+             141:    6(float) CompositeExtract 107 2
+             142:  108(fvec4) CompositeConstruct 139 140 141 21
+             143:    6(float) CompositeExtract 142 3
+             144:    6(float) ImageSampleDrefImplicitLod 138 142 143
+                              Store 130(r54) 144
+             152:    151(ptr) AccessChain 147(psout) 148
+                              Store 152 150
+             154:      7(ptr) AccessChain 147(psout) 153
+                              Store 154 149
+             157:    151(ptr) AccessChain 147(psout) 148
+             158:  108(fvec4) Load 157
+                              Store 156(Color) 158
+             161:      7(ptr) AccessChain 147(psout) 153
+             162:    6(float) Load 161
+                              Store 160(Depth) 162
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index 021e08f..fe2c74f 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -8,11 +8,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r01' (temp float)
-0:42          textureOffset (global float)
+0:42          textureOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -22,11 +22,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r03' (temp float)
-0:43          textureOffset (global float)
+0:43          textureOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -36,11 +36,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r05' (temp float)
-0:44          textureOffset (global float)
+0:44          textureOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -50,11 +50,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r21' (temp float)
-0:47          textureOffset (global float)
+0:47          textureOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -66,11 +66,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r23' (temp float)
-0:48          textureOffset (global float)
+0:48          textureOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -82,11 +82,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r25' (temp float)
-0:49          textureOffset (global float)
+0:49          textureOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -128,6 +128,8 @@
 0:65                1 (const int)
 0:65        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -150,8 +152,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -166,11 +166,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r01' (temp float)
-0:42          textureOffset (global float)
+0:42          textureOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -180,11 +180,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r03' (temp float)
-0:43          textureOffset (global float)
+0:43          textureOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -194,11 +194,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r05' (temp float)
-0:44          textureOffset (global float)
+0:44          textureOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -208,11 +208,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r21' (temp float)
-0:47          textureOffset (global float)
+0:47          textureOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -224,11 +224,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r23' (temp float)
-0:48          textureOffset (global float)
+0:48          textureOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -240,11 +240,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r25' (temp float)
-0:49          textureOffset (global float)
+0:49          textureOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -286,6 +286,8 @@
 0:65                1 (const int)
 0:65        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -308,81 +310,79 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 156
+// Id's are bound by 166
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 103 107
+                              EntryPoint Fragment 4  "main" 113 117
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r01"
                               Name 11  "g_tTex1df4"
                               Name 15  "g_sSamp"
-                              Name 26  "r03"
-                              Name 29  "g_tTex1di4"
-                              Name 37  "r05"
-                              Name 41  "g_tTex1du4"
-                              Name 49  "r21"
-                              Name 52  "g_tTex2df4"
-                              Name 67  "r23"
-                              Name 70  "g_tTex2di4"
-                              Name 79  "r25"
-                              Name 82  "g_tTex2du4"
-                              Name 92  "PS_OUTPUT"
-                              MemberName 92(PS_OUTPUT) 0  "Color"
-                              MemberName 92(PS_OUTPUT) 1  "Depth"
-                              Name 94  "psout"
-                              Name 103  "Color"
-                              Name 107  "Depth"
-                              Name 113  "g_tTex3df4"
-                              Name 116  "g_tTex3di4"
-                              Name 119  "g_tTex3du4"
-                              Name 122  "g_tTexcdf4"
-                              Name 125  "g_tTexcdi4"
-                              Name 128  "g_tTexcdu4"
-                              Name 131  "g_tTex1df4a"
-                              Name 134  "g_tTex1di4a"
-                              Name 137  "g_tTex1du4a"
-                              Name 140  "g_tTex2df4a"
-                              Name 143  "g_tTex2di4a"
-                              Name 146  "g_tTex2du4a"
-                              Name 149  "g_tTexcdf4a"
-                              Name 152  "g_tTexcdi4a"
-                              Name 155  "g_tTexcdu4a"
+                              Name 28  "r03"
+                              Name 31  "g_tTex1di4"
+                              Name 40  "r05"
+                              Name 44  "g_tTex1du4"
+                              Name 53  "r21"
+                              Name 56  "g_tTex2df4"
+                              Name 73  "r23"
+                              Name 76  "g_tTex2di4"
+                              Name 87  "r25"
+                              Name 90  "g_tTex2du4"
+                              Name 102  "PS_OUTPUT"
+                              MemberName 102(PS_OUTPUT) 0  "Color"
+                              MemberName 102(PS_OUTPUT) 1  "Depth"
+                              Name 104  "psout"
+                              Name 113  "Color"
+                              Name 117  "Depth"
+                              Name 123  "g_tTex3df4"
+                              Name 126  "g_tTex3di4"
+                              Name 129  "g_tTex3du4"
+                              Name 132  "g_tTexcdf4"
+                              Name 135  "g_tTexcdi4"
+                              Name 138  "g_tTexcdu4"
+                              Name 141  "g_tTex1df4a"
+                              Name 144  "g_tTex1di4a"
+                              Name 147  "g_tTex1du4a"
+                              Name 150  "g_tTex2df4a"
+                              Name 153  "g_tTex2di4a"
+                              Name 156  "g_tTex2du4a"
+                              Name 159  "g_tTexcdf4a"
+                              Name 162  "g_tTexcdi4a"
+                              Name 165  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4) DescriptorSet 0
                               Decorate 11(g_tTex1df4) Binding 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 29(g_tTex1di4) DescriptorSet 0
-                              Decorate 41(g_tTex1du4) DescriptorSet 0
-                              Decorate 52(g_tTex2df4) DescriptorSet 0
-                              Decorate 70(g_tTex2di4) DescriptorSet 0
-                              Decorate 82(g_tTex2du4) DescriptorSet 0
-                              Decorate 103(Color) Location 0
-                              Decorate 107(Depth) BuiltIn FragDepth
-                              Decorate 113(g_tTex3df4) DescriptorSet 0
-                              Decorate 116(g_tTex3di4) DescriptorSet 0
-                              Decorate 119(g_tTex3du4) DescriptorSet 0
-                              Decorate 122(g_tTexcdf4) DescriptorSet 0
-                              Decorate 125(g_tTexcdi4) DescriptorSet 0
-                              Decorate 128(g_tTexcdu4) DescriptorSet 0
-                              Decorate 131(g_tTex1df4a) DescriptorSet 0
-                              Decorate 134(g_tTex1di4a) DescriptorSet 0
-                              Decorate 137(g_tTex1du4a) DescriptorSet 0
-                              Decorate 140(g_tTex2df4a) DescriptorSet 0
-                              Decorate 143(g_tTex2di4a) DescriptorSet 0
-                              Decorate 146(g_tTex2du4a) DescriptorSet 0
-                              Decorate 149(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 152(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 155(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 31(g_tTex1di4) DescriptorSet 0
+                              Decorate 44(g_tTex1du4) DescriptorSet 0
+                              Decorate 56(g_tTex2df4) DescriptorSet 0
+                              Decorate 76(g_tTex2di4) DescriptorSet 0
+                              Decorate 90(g_tTex2du4) DescriptorSet 0
+                              Decorate 113(Color) Location 0
+                              Decorate 117(Depth) BuiltIn FragDepth
+                              Decorate 123(g_tTex3df4) DescriptorSet 0
+                              Decorate 126(g_tTex3di4) DescriptorSet 0
+                              Decorate 129(g_tTex3du4) DescriptorSet 0
+                              Decorate 132(g_tTexcdf4) DescriptorSet 0
+                              Decorate 135(g_tTexcdi4) DescriptorSet 0
+                              Decorate 138(g_tTexcdu4) DescriptorSet 0
+                              Decorate 141(g_tTex1df4a) DescriptorSet 0
+                              Decorate 144(g_tTex1di4a) DescriptorSet 0
+                              Decorate 147(g_tTex1du4a) DescriptorSet 0
+                              Decorate 150(g_tTex2df4a) DescriptorSet 0
+                              Decorate 153(g_tTex2di4a) DescriptorSet 0
+                              Decorate 156(g_tTex2du4a) DescriptorSet 0
+                              Decorate 159(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 162(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 165(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -397,154 +397,164 @@
               18:             TypeSampledImage 17
               20:    6(float) Constant 1036831949
               21:    6(float) Constant 1061158912
-              22:             TypeInt 32 1
-              23:     22(int) Constant 2
-              27:             TypeImage 22(int) 1D sampled format:Unknown
-              28:             TypePointer UniformConstant 27
-  29(g_tTex1di4):     28(ptr) Variable UniformConstant
-              32:             TypeImage 22(int) 1D depth sampled format:Unknown
-              33:             TypeSampledImage 32
-              38:             TypeInt 32 0
-              39:             TypeImage 38(int) 1D sampled format:Unknown
-              40:             TypePointer UniformConstant 39
-  41(g_tTex1du4):     40(ptr) Variable UniformConstant
-              44:             TypeImage 38(int) 1D depth sampled format:Unknown
-              45:             TypeSampledImage 44
-              50:             TypeImage 6(float) 2D sampled format:Unknown
-              51:             TypePointer UniformConstant 50
-  52(g_tTex2df4):     51(ptr) Variable UniformConstant
-              55:             TypeImage 6(float) 2D depth sampled format:Unknown
-              56:             TypeSampledImage 55
-              58:             TypeVector 6(float) 2
-              59:    6(float) Constant 1045220557
-              60:   58(fvec2) ConstantComposite 20 59
-              62:             TypeVector 22(int) 2
-              63:     22(int) Constant 3
-              64:   62(ivec2) ConstantComposite 23 63
-              68:             TypeImage 22(int) 2D sampled format:Unknown
-              69:             TypePointer UniformConstant 68
-  70(g_tTex2di4):     69(ptr) Variable UniformConstant
-              73:             TypeImage 22(int) 2D depth sampled format:Unknown
-              74:             TypeSampledImage 73
-              80:             TypeImage 38(int) 2D sampled format:Unknown
-              81:             TypePointer UniformConstant 80
-  82(g_tTex2du4):     81(ptr) Variable UniformConstant
-              85:             TypeImage 38(int) 2D depth sampled format:Unknown
-              86:             TypeSampledImage 85
-              91:             TypeVector 6(float) 4
-   92(PS_OUTPUT):             TypeStruct 91(fvec4) 6(float)
-              93:             TypePointer Function 92(PS_OUTPUT)
-              95:     22(int) Constant 0
-              96:    6(float) Constant 1065353216
-              97:   91(fvec4) ConstantComposite 96 96 96 96
-              98:             TypePointer Function 91(fvec4)
-             100:     22(int) Constant 1
-             102:             TypePointer Output 91(fvec4)
-      103(Color):    102(ptr) Variable Output
-             106:             TypePointer Output 6(float)
-      107(Depth):    106(ptr) Variable Output
-             111:             TypeImage 6(float) 3D sampled format:Unknown
-             112:             TypePointer UniformConstant 111
- 113(g_tTex3df4):    112(ptr) Variable UniformConstant
-             114:             TypeImage 22(int) 3D sampled format:Unknown
-             115:             TypePointer UniformConstant 114
- 116(g_tTex3di4):    115(ptr) Variable UniformConstant
-             117:             TypeImage 38(int) 3D sampled format:Unknown
-             118:             TypePointer UniformConstant 117
- 119(g_tTex3du4):    118(ptr) Variable UniformConstant
-             120:             TypeImage 6(float) Cube sampled format:Unknown
-             121:             TypePointer UniformConstant 120
- 122(g_tTexcdf4):    121(ptr) Variable UniformConstant
-             123:             TypeImage 22(int) Cube sampled format:Unknown
-             124:             TypePointer UniformConstant 123
- 125(g_tTexcdi4):    124(ptr) Variable UniformConstant
-             126:             TypeImage 38(int) Cube sampled format:Unknown
-             127:             TypePointer UniformConstant 126
- 128(g_tTexcdu4):    127(ptr) Variable UniformConstant
-             129:             TypeImage 6(float) 1D array sampled format:Unknown
-             130:             TypePointer UniformConstant 129
-131(g_tTex1df4a):    130(ptr) Variable UniformConstant
-             132:             TypeImage 22(int) 1D array sampled format:Unknown
-             133:             TypePointer UniformConstant 132
-134(g_tTex1di4a):    133(ptr) Variable UniformConstant
-             135:             TypeImage 38(int) 1D array sampled format:Unknown
-             136:             TypePointer UniformConstant 135
-137(g_tTex1du4a):    136(ptr) Variable UniformConstant
-             138:             TypeImage 6(float) 2D array sampled format:Unknown
-             139:             TypePointer UniformConstant 138
-140(g_tTex2df4a):    139(ptr) Variable UniformConstant
-             141:             TypeImage 22(int) 2D array sampled format:Unknown
-             142:             TypePointer UniformConstant 141
-143(g_tTex2di4a):    142(ptr) Variable UniformConstant
-             144:             TypeImage 38(int) 2D array sampled format:Unknown
-             145:             TypePointer UniformConstant 144
-146(g_tTex2du4a):    145(ptr) Variable UniformConstant
-             147:             TypeImage 6(float) Cube array sampled format:Unknown
-             148:             TypePointer UniformConstant 147
-149(g_tTexcdf4a):    148(ptr) Variable UniformConstant
-             150:             TypeImage 22(int) Cube array sampled format:Unknown
-             151:             TypePointer UniformConstant 150
-152(g_tTexcdi4a):    151(ptr) Variable UniformConstant
-             153:             TypeImage 38(int) Cube array sampled format:Unknown
-             154:             TypePointer UniformConstant 153
-155(g_tTexcdu4a):    154(ptr) Variable UniformConstant
+              22:             TypeVector 6(float) 2
+              24:             TypeInt 32 1
+              25:     24(int) Constant 2
+              29:             TypeImage 24(int) 1D sampled format:Unknown
+              30:             TypePointer UniformConstant 29
+  31(g_tTex1di4):     30(ptr) Variable UniformConstant
+              34:             TypeImage 24(int) 1D depth sampled format:Unknown
+              35:             TypeSampledImage 34
+              41:             TypeInt 32 0
+              42:             TypeImage 41(int) 1D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(g_tTex1du4):     43(ptr) Variable UniformConstant
+              47:             TypeImage 41(int) 1D depth sampled format:Unknown
+              48:             TypeSampledImage 47
+              54:             TypeImage 6(float) 2D sampled format:Unknown
+              55:             TypePointer UniformConstant 54
+  56(g_tTex2df4):     55(ptr) Variable UniformConstant
+              59:             TypeImage 6(float) 2D depth sampled format:Unknown
+              60:             TypeSampledImage 59
+              62:    6(float) Constant 1045220557
+              63:   22(fvec2) ConstantComposite 20 62
+              64:             TypeVector 6(float) 3
+              68:             TypeVector 24(int) 2
+              69:     24(int) Constant 3
+              70:   68(ivec2) ConstantComposite 25 69
+              74:             TypeImage 24(int) 2D sampled format:Unknown
+              75:             TypePointer UniformConstant 74
+  76(g_tTex2di4):     75(ptr) Variable UniformConstant
+              79:             TypeImage 24(int) 2D depth sampled format:Unknown
+              80:             TypeSampledImage 79
+              88:             TypeImage 41(int) 2D sampled format:Unknown
+              89:             TypePointer UniformConstant 88
+  90(g_tTex2du4):     89(ptr) Variable UniformConstant
+              93:             TypeImage 41(int) 2D depth sampled format:Unknown
+              94:             TypeSampledImage 93
+             101:             TypeVector 6(float) 4
+  102(PS_OUTPUT):             TypeStruct 101(fvec4) 6(float)
+             103:             TypePointer Function 102(PS_OUTPUT)
+             105:     24(int) Constant 0
+             106:    6(float) Constant 1065353216
+             107:  101(fvec4) ConstantComposite 106 106 106 106
+             108:             TypePointer Function 101(fvec4)
+             110:     24(int) Constant 1
+             112:             TypePointer Output 101(fvec4)
+      113(Color):    112(ptr) Variable Output
+             116:             TypePointer Output 6(float)
+      117(Depth):    116(ptr) Variable Output
+             121:             TypeImage 6(float) 3D sampled format:Unknown
+             122:             TypePointer UniformConstant 121
+ 123(g_tTex3df4):    122(ptr) Variable UniformConstant
+             124:             TypeImage 24(int) 3D sampled format:Unknown
+             125:             TypePointer UniformConstant 124
+ 126(g_tTex3di4):    125(ptr) Variable UniformConstant
+             127:             TypeImage 41(int) 3D sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+ 129(g_tTex3du4):    128(ptr) Variable UniformConstant
+             130:             TypeImage 6(float) Cube sampled format:Unknown
+             131:             TypePointer UniformConstant 130
+ 132(g_tTexcdf4):    131(ptr) Variable UniformConstant
+             133:             TypeImage 24(int) Cube sampled format:Unknown
+             134:             TypePointer UniformConstant 133
+ 135(g_tTexcdi4):    134(ptr) Variable UniformConstant
+             136:             TypeImage 41(int) Cube sampled format:Unknown
+             137:             TypePointer UniformConstant 136
+ 138(g_tTexcdu4):    137(ptr) Variable UniformConstant
+             139:             TypeImage 6(float) 1D array sampled format:Unknown
+             140:             TypePointer UniformConstant 139
+141(g_tTex1df4a):    140(ptr) Variable UniformConstant
+             142:             TypeImage 24(int) 1D array sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+144(g_tTex1di4a):    143(ptr) Variable UniformConstant
+             145:             TypeImage 41(int) 1D array sampled format:Unknown
+             146:             TypePointer UniformConstant 145
+147(g_tTex1du4a):    146(ptr) Variable UniformConstant
+             148:             TypeImage 6(float) 2D array sampled format:Unknown
+             149:             TypePointer UniformConstant 148
+150(g_tTex2df4a):    149(ptr) Variable UniformConstant
+             151:             TypeImage 24(int) 2D array sampled format:Unknown
+             152:             TypePointer UniformConstant 151
+153(g_tTex2di4a):    152(ptr) Variable UniformConstant
+             154:             TypeImage 41(int) 2D array sampled format:Unknown
+             155:             TypePointer UniformConstant 154
+156(g_tTex2du4a):    155(ptr) Variable UniformConstant
+             157:             TypeImage 6(float) Cube array sampled format:Unknown
+             158:             TypePointer UniformConstant 157
+159(g_tTexcdf4a):    158(ptr) Variable UniformConstant
+             160:             TypeImage 24(int) Cube array sampled format:Unknown
+             161:             TypePointer UniformConstant 160
+162(g_tTexcdi4a):    161(ptr) Variable UniformConstant
+             163:             TypeImage 41(int) Cube array sampled format:Unknown
+             164:             TypePointer UniformConstant 163
+165(g_tTexcdu4a):    164(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r01):      7(ptr) Variable Function
-         26(r03):      7(ptr) Variable Function
-         37(r05):      7(ptr) Variable Function
-         49(r21):      7(ptr) Variable Function
-         67(r23):      7(ptr) Variable Function
-         79(r25):      7(ptr) Variable Function
-       94(psout):     93(ptr) Variable Function
+         28(r03):      7(ptr) Variable Function
+         40(r05):      7(ptr) Variable Function
+         53(r21):      7(ptr) Variable Function
+         73(r23):      7(ptr) Variable Function
+         87(r25):      7(ptr) Variable Function
+      104(psout):    103(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              24:    6(float) CompositeExtract 20 0
-              25:    6(float) ImageSampleDrefImplicitLod 19 20 24 ConstOffset 23
-                              Store 8(r01) 25
-              30:          27 Load 29(g_tTex1di4)
-              31:          13 Load 15(g_sSamp)
-              34:          33 SampledImage 30 31
-              35:    6(float) CompositeExtract 20 0
-              36:    6(float) ImageSampleDrefImplicitLod 34 20 35 ConstOffset 23
-                              Store 26(r03) 36
-              42:          39 Load 41(g_tTex1du4)
-              43:          13 Load 15(g_sSamp)
-              46:          45 SampledImage 42 43
-              47:    6(float) CompositeExtract 20 0
-              48:    6(float) ImageSampleDrefImplicitLod 46 20 47 ConstOffset 23
-                              Store 37(r05) 48
-              53:          50 Load 52(g_tTex2df4)
-              54:          13 Load 15(g_sSamp)
-              57:          56 SampledImage 53 54
-              61:    6(float) CompositeExtract 60 0
-              65:    6(float) CompositeExtract 61 0
-              66:    6(float) ImageSampleDrefImplicitLod 57 61 65 ConstOffset 64
-                              Store 49(r21) 66
-              71:          68 Load 70(g_tTex2di4)
-              72:          13 Load 15(g_sSamp)
-              75:          74 SampledImage 71 72
-              76:    6(float) CompositeExtract 60 0
-              77:    6(float) CompositeExtract 76 0
-              78:    6(float) ImageSampleDrefImplicitLod 75 76 77 ConstOffset 64
-                              Store 67(r23) 78
-              83:          80 Load 82(g_tTex2du4)
-              84:          13 Load 15(g_sSamp)
-              87:          86 SampledImage 83 84
-              88:    6(float) CompositeExtract 60 0
-              89:    6(float) CompositeExtract 88 0
-              90:    6(float) ImageSampleDrefImplicitLod 87 88 89 ConstOffset 64
-                              Store 79(r25) 90
-              99:     98(ptr) AccessChain 94(psout) 95
-                              Store 99 97
-             101:      7(ptr) AccessChain 94(psout) 100
-                              Store 101 96
-             104:     98(ptr) AccessChain 94(psout) 95
-             105:   91(fvec4) Load 104
-                              Store 103(Color) 105
-             108:      7(ptr) AccessChain 94(psout) 100
-             109:    6(float) Load 108
-                              Store 107(Depth) 109
+              23:   22(fvec2) CompositeConstruct 20 21
+              26:    6(float) CompositeExtract 23 1
+              27:    6(float) ImageSampleDrefImplicitLod 19 23 26 ConstOffset 25
+                              Store 8(r01) 27
+              32:          29 Load 31(g_tTex1di4)
+              33:          13 Load 15(g_sSamp)
+              36:          35 SampledImage 32 33
+              37:   22(fvec2) CompositeConstruct 20 21
+              38:    6(float) CompositeExtract 37 1
+              39:    6(float) ImageSampleDrefImplicitLod 36 37 38 ConstOffset 25
+                              Store 28(r03) 39
+              45:          42 Load 44(g_tTex1du4)
+              46:          13 Load 15(g_sSamp)
+              49:          48 SampledImage 45 46
+              50:   22(fvec2) CompositeConstruct 20 21
+              51:    6(float) CompositeExtract 50 1
+              52:    6(float) ImageSampleDrefImplicitLod 49 50 51 ConstOffset 25
+                              Store 40(r05) 52
+              57:          54 Load 56(g_tTex2df4)
+              58:          13 Load 15(g_sSamp)
+              61:          60 SampledImage 57 58
+              65:    6(float) CompositeExtract 63 0
+              66:    6(float) CompositeExtract 63 1
+              67:   64(fvec3) CompositeConstruct 65 66 21
+              71:    6(float) CompositeExtract 67 2
+              72:    6(float) ImageSampleDrefImplicitLod 61 67 71 ConstOffset 70
+                              Store 53(r21) 72
+              77:          74 Load 76(g_tTex2di4)
+              78:          13 Load 15(g_sSamp)
+              81:          80 SampledImage 77 78
+              82:    6(float) CompositeExtract 63 0
+              83:    6(float) CompositeExtract 63 1
+              84:   64(fvec3) CompositeConstruct 82 83 21
+              85:    6(float) CompositeExtract 84 2
+              86:    6(float) ImageSampleDrefImplicitLod 81 84 85 ConstOffset 70
+                              Store 73(r23) 86
+              91:          88 Load 90(g_tTex2du4)
+              92:          13 Load 15(g_sSamp)
+              95:          94 SampledImage 91 92
+              96:    6(float) CompositeExtract 63 0
+              97:    6(float) CompositeExtract 63 1
+              98:   64(fvec3) CompositeConstruct 96 97 21
+              99:    6(float) CompositeExtract 98 2
+             100:    6(float) ImageSampleDrefImplicitLod 95 98 99 ConstOffset 70
+                              Store 87(r25) 100
+             109:    108(ptr) AccessChain 104(psout) 105
+                              Store 109 107
+             111:      7(ptr) AccessChain 104(psout) 110
+                              Store 111 106
+             114:    108(ptr) AccessChain 104(psout) 105
+             115:  101(fvec4) Load 114
+                              Store 113(Color) 115
+             118:      7(ptr) AccessChain 104(psout) 110
+             119:    6(float) Load 118
+                              Store 117(Depth) 119
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index 73a2a89..013a645 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -8,11 +8,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r11' (temp float)
-0:42          textureOffset (global float)
+0:42          textureOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -23,11 +23,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r13' (temp float)
-0:43          textureOffset (global float)
+0:43          textureOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -38,11 +38,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r15' (temp float)
-0:44          textureOffset (global float)
+0:44          textureOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -53,11 +53,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r31' (temp float)
-0:47          textureOffset (global float)
+0:47          textureOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -70,11 +70,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r33' (temp float)
-0:48          textureOffset (global float)
+0:48          textureOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -87,11 +87,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r35' (temp float)
-0:49          textureOffset (global float)
+0:49          textureOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -134,6 +134,8 @@
 0:66                1 (const int)
 0:66        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -156,8 +158,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -172,11 +172,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r11' (temp float)
-0:42          textureOffset (global float)
+0:42          textureOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -187,11 +187,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r13' (temp float)
-0:43          textureOffset (global float)
+0:43          textureOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -202,11 +202,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r15' (temp float)
-0:44          textureOffset (global float)
+0:44          textureOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -217,11 +217,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r31' (temp float)
-0:47          textureOffset (global float)
+0:47          textureOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -234,11 +234,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r33' (temp float)
-0:48          textureOffset (global float)
+0:48          textureOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -251,11 +251,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r35' (temp float)
-0:49          textureOffset (global float)
+0:49          textureOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -298,6 +298,8 @@
 0:66                1 (const int)
 0:66        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -320,81 +322,79 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 162
+// Id's are bound by 177
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 109 113
+                              EntryPoint Fragment 4  "main" 124 128
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r11"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 30  "r13"
-                              Name 33  "g_tTex1di4a"
-                              Name 42  "r15"
-                              Name 46  "g_tTex1du4a"
-                              Name 55  "r31"
-                              Name 58  "g_tTex2df4a"
-                              Name 73  "r33"
-                              Name 76  "g_tTex2di4a"
-                              Name 85  "r35"
-                              Name 88  "g_tTex2du4a"
-                              Name 98  "PS_OUTPUT"
-                              MemberName 98(PS_OUTPUT) 0  "Color"
-                              MemberName 98(PS_OUTPUT) 1  "Depth"
-                              Name 100  "psout"
-                              Name 109  "Color"
-                              Name 113  "Depth"
-                              Name 119  "g_tTex1df4"
-                              Name 122  "g_tTex1di4"
-                              Name 125  "g_tTex1du4"
-                              Name 128  "g_tTex2df4"
-                              Name 131  "g_tTex2di4"
-                              Name 134  "g_tTex2du4"
-                              Name 137  "g_tTex3df4"
-                              Name 140  "g_tTex3di4"
-                              Name 143  "g_tTex3du4"
-                              Name 146  "g_tTexcdf4"
-                              Name 149  "g_tTexcdi4"
-                              Name 152  "g_tTexcdu4"
-                              Name 155  "g_tTexcdf4a"
-                              Name 158  "g_tTexcdi4a"
-                              Name 161  "g_tTexcdu4a"
+                              Name 33  "r13"
+                              Name 36  "g_tTex1di4a"
+                              Name 47  "r15"
+                              Name 51  "g_tTex1du4a"
+                              Name 62  "r31"
+                              Name 65  "g_tTex2df4a"
+                              Name 83  "r33"
+                              Name 86  "g_tTex2di4a"
+                              Name 98  "r35"
+                              Name 101  "g_tTex2du4a"
+                              Name 113  "PS_OUTPUT"
+                              MemberName 113(PS_OUTPUT) 0  "Color"
+                              MemberName 113(PS_OUTPUT) 1  "Depth"
+                              Name 115  "psout"
+                              Name 124  "Color"
+                              Name 128  "Depth"
+                              Name 134  "g_tTex1df4"
+                              Name 137  "g_tTex1di4"
+                              Name 140  "g_tTex1du4"
+                              Name 143  "g_tTex2df4"
+                              Name 146  "g_tTex2di4"
+                              Name 149  "g_tTex2du4"
+                              Name 152  "g_tTex3df4"
+                              Name 155  "g_tTex3di4"
+                              Name 158  "g_tTex3du4"
+                              Name 161  "g_tTexcdf4"
+                              Name 164  "g_tTexcdi4"
+                              Name 167  "g_tTexcdu4"
+                              Name 170  "g_tTexcdf4a"
+                              Name 173  "g_tTexcdi4a"
+                              Name 176  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4a) DescriptorSet 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4a) DescriptorSet 0
-                              Decorate 46(g_tTex1du4a) DescriptorSet 0
-                              Decorate 58(g_tTex2df4a) DescriptorSet 0
-                              Decorate 76(g_tTex2di4a) DescriptorSet 0
-                              Decorate 88(g_tTex2du4a) DescriptorSet 0
-                              Decorate 109(Color) Location 0
-                              Decorate 113(Depth) BuiltIn FragDepth
-                              Decorate 119(g_tTex1df4) DescriptorSet 0
-                              Decorate 119(g_tTex1df4) Binding 0
-                              Decorate 122(g_tTex1di4) DescriptorSet 0
-                              Decorate 125(g_tTex1du4) DescriptorSet 0
-                              Decorate 128(g_tTex2df4) DescriptorSet 0
-                              Decorate 131(g_tTex2di4) DescriptorSet 0
-                              Decorate 134(g_tTex2du4) DescriptorSet 0
-                              Decorate 137(g_tTex3df4) DescriptorSet 0
-                              Decorate 140(g_tTex3di4) DescriptorSet 0
-                              Decorate 143(g_tTex3du4) DescriptorSet 0
-                              Decorate 146(g_tTexcdf4) DescriptorSet 0
-                              Decorate 149(g_tTexcdi4) DescriptorSet 0
-                              Decorate 152(g_tTexcdu4) DescriptorSet 0
-                              Decorate 155(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 158(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 161(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 36(g_tTex1di4a) DescriptorSet 0
+                              Decorate 51(g_tTex1du4a) DescriptorSet 0
+                              Decorate 65(g_tTex2df4a) DescriptorSet 0
+                              Decorate 86(g_tTex2di4a) DescriptorSet 0
+                              Decorate 101(g_tTex2du4a) DescriptorSet 0
+                              Decorate 124(Color) Location 0
+                              Decorate 128(Depth) BuiltIn FragDepth
+                              Decorate 134(g_tTex1df4) DescriptorSet 0
+                              Decorate 134(g_tTex1df4) Binding 0
+                              Decorate 137(g_tTex1di4) DescriptorSet 0
+                              Decorate 140(g_tTex1du4) DescriptorSet 0
+                              Decorate 143(g_tTex2df4) DescriptorSet 0
+                              Decorate 146(g_tTex2di4) DescriptorSet 0
+                              Decorate 149(g_tTex2du4) DescriptorSet 0
+                              Decorate 152(g_tTex3df4) DescriptorSet 0
+                              Decorate 155(g_tTex3di4) DescriptorSet 0
+                              Decorate 158(g_tTex3du4) DescriptorSet 0
+                              Decorate 161(g_tTexcdf4) DescriptorSet 0
+                              Decorate 164(g_tTexcdi4) DescriptorSet 0
+                              Decorate 167(g_tTexcdu4) DescriptorSet 0
+                              Decorate 170(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 173(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 176(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -412,157 +412,172 @@
               22:    6(float) Constant 1045220557
               23:   20(fvec2) ConstantComposite 21 22
               24:    6(float) Constant 1061158912
-              26:             TypeInt 32 1
-              27:     26(int) Constant 2
-              31:             TypeImage 26(int) 1D array sampled format:Unknown
-              32:             TypePointer UniformConstant 31
- 33(g_tTex1di4a):     32(ptr) Variable UniformConstant
-              36:             TypeImage 26(int) 1D depth array sampled format:Unknown
-              37:             TypeSampledImage 36
-              43:             TypeInt 32 0
-              44:             TypeImage 43(int) 1D array sampled format:Unknown
-              45:             TypePointer UniformConstant 44
- 46(g_tTex1du4a):     45(ptr) Variable UniformConstant
-              49:             TypeImage 43(int) 1D depth array sampled format:Unknown
-              50:             TypeSampledImage 49
-              56:             TypeImage 6(float) 2D array sampled format:Unknown
-              57:             TypePointer UniformConstant 56
- 58(g_tTex2df4a):     57(ptr) Variable UniformConstant
-              61:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              62:             TypeSampledImage 61
-              64:             TypeVector 6(float) 3
-              65:    6(float) Constant 1050253722
-              66:   64(fvec3) ConstantComposite 21 22 65
-              68:             TypeVector 26(int) 2
-              69:     26(int) Constant 3
-              70:   68(ivec2) ConstantComposite 27 69
-              74:             TypeImage 26(int) 2D array sampled format:Unknown
-              75:             TypePointer UniformConstant 74
- 76(g_tTex2di4a):     75(ptr) Variable UniformConstant
-              79:             TypeImage 26(int) 2D depth array sampled format:Unknown
-              80:             TypeSampledImage 79
-              86:             TypeImage 43(int) 2D array sampled format:Unknown
-              87:             TypePointer UniformConstant 86
- 88(g_tTex2du4a):     87(ptr) Variable UniformConstant
-              91:             TypeImage 43(int) 2D depth array sampled format:Unknown
-              92:             TypeSampledImage 91
-              97:             TypeVector 6(float) 4
-   98(PS_OUTPUT):             TypeStruct 97(fvec4) 6(float)
-              99:             TypePointer Function 98(PS_OUTPUT)
-             101:     26(int) Constant 0
-             102:    6(float) Constant 1065353216
-             103:   97(fvec4) ConstantComposite 102 102 102 102
-             104:             TypePointer Function 97(fvec4)
-             106:     26(int) Constant 1
-             108:             TypePointer Output 97(fvec4)
-      109(Color):    108(ptr) Variable Output
-             112:             TypePointer Output 6(float)
-      113(Depth):    112(ptr) Variable Output
-             117:             TypeImage 6(float) 1D sampled format:Unknown
-             118:             TypePointer UniformConstant 117
- 119(g_tTex1df4):    118(ptr) Variable UniformConstant
-             120:             TypeImage 26(int) 1D sampled format:Unknown
-             121:             TypePointer UniformConstant 120
- 122(g_tTex1di4):    121(ptr) Variable UniformConstant
-             123:             TypeImage 43(int) 1D sampled format:Unknown
-             124:             TypePointer UniformConstant 123
- 125(g_tTex1du4):    124(ptr) Variable UniformConstant
-             126:             TypeImage 6(float) 2D sampled format:Unknown
-             127:             TypePointer UniformConstant 126
- 128(g_tTex2df4):    127(ptr) Variable UniformConstant
-             129:             TypeImage 26(int) 2D sampled format:Unknown
-             130:             TypePointer UniformConstant 129
- 131(g_tTex2di4):    130(ptr) Variable UniformConstant
-             132:             TypeImage 43(int) 2D sampled format:Unknown
+              25:             TypeVector 6(float) 3
+              29:             TypeInt 32 1
+              30:     29(int) Constant 2
+              34:             TypeImage 29(int) 1D array sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+ 36(g_tTex1di4a):     35(ptr) Variable UniformConstant
+              39:             TypeImage 29(int) 1D depth array sampled format:Unknown
+              40:             TypeSampledImage 39
+              48:             TypeInt 32 0
+              49:             TypeImage 48(int) 1D array sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+ 51(g_tTex1du4a):     50(ptr) Variable UniformConstant
+              54:             TypeImage 48(int) 1D depth array sampled format:Unknown
+              55:             TypeSampledImage 54
+              63:             TypeImage 6(float) 2D array sampled format:Unknown
+              64:             TypePointer UniformConstant 63
+ 65(g_tTex2df4a):     64(ptr) Variable UniformConstant
+              68:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              69:             TypeSampledImage 68
+              71:    6(float) Constant 1050253722
+              72:   25(fvec3) ConstantComposite 21 22 71
+              73:             TypeVector 6(float) 4
+              78:             TypeVector 29(int) 2
+              79:     29(int) Constant 3
+              80:   78(ivec2) ConstantComposite 30 79
+              84:             TypeImage 29(int) 2D array sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+ 86(g_tTex2di4a):     85(ptr) Variable UniformConstant
+              89:             TypeImage 29(int) 2D depth array sampled format:Unknown
+              90:             TypeSampledImage 89
+              99:             TypeImage 48(int) 2D array sampled format:Unknown
+             100:             TypePointer UniformConstant 99
+101(g_tTex2du4a):    100(ptr) Variable UniformConstant
+             104:             TypeImage 48(int) 2D depth array sampled format:Unknown
+             105:             TypeSampledImage 104
+  113(PS_OUTPUT):             TypeStruct 73(fvec4) 6(float)
+             114:             TypePointer Function 113(PS_OUTPUT)
+             116:     29(int) Constant 0
+             117:    6(float) Constant 1065353216
+             118:   73(fvec4) ConstantComposite 117 117 117 117
+             119:             TypePointer Function 73(fvec4)
+             121:     29(int) Constant 1
+             123:             TypePointer Output 73(fvec4)
+      124(Color):    123(ptr) Variable Output
+             127:             TypePointer Output 6(float)
+      128(Depth):    127(ptr) Variable Output
+             132:             TypeImage 6(float) 1D sampled format:Unknown
              133:             TypePointer UniformConstant 132
- 134(g_tTex2du4):    133(ptr) Variable UniformConstant
-             135:             TypeImage 6(float) 3D sampled format:Unknown
+ 134(g_tTex1df4):    133(ptr) Variable UniformConstant
+             135:             TypeImage 29(int) 1D sampled format:Unknown
              136:             TypePointer UniformConstant 135
- 137(g_tTex3df4):    136(ptr) Variable UniformConstant
-             138:             TypeImage 26(int) 3D sampled format:Unknown
+ 137(g_tTex1di4):    136(ptr) Variable UniformConstant
+             138:             TypeImage 48(int) 1D sampled format:Unknown
              139:             TypePointer UniformConstant 138
- 140(g_tTex3di4):    139(ptr) Variable UniformConstant
-             141:             TypeImage 43(int) 3D sampled format:Unknown
+ 140(g_tTex1du4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 6(float) 2D sampled format:Unknown
              142:             TypePointer UniformConstant 141
- 143(g_tTex3du4):    142(ptr) Variable UniformConstant
-             144:             TypeImage 6(float) Cube sampled format:Unknown
+ 143(g_tTex2df4):    142(ptr) Variable UniformConstant
+             144:             TypeImage 29(int) 2D sampled format:Unknown
              145:             TypePointer UniformConstant 144
- 146(g_tTexcdf4):    145(ptr) Variable UniformConstant
-             147:             TypeImage 26(int) Cube sampled format:Unknown
+ 146(g_tTex2di4):    145(ptr) Variable UniformConstant
+             147:             TypeImage 48(int) 2D sampled format:Unknown
              148:             TypePointer UniformConstant 147
- 149(g_tTexcdi4):    148(ptr) Variable UniformConstant
-             150:             TypeImage 43(int) Cube sampled format:Unknown
+ 149(g_tTex2du4):    148(ptr) Variable UniformConstant
+             150:             TypeImage 6(float) 3D sampled format:Unknown
              151:             TypePointer UniformConstant 150
- 152(g_tTexcdu4):    151(ptr) Variable UniformConstant
-             153:             TypeImage 6(float) Cube array sampled format:Unknown
+ 152(g_tTex3df4):    151(ptr) Variable UniformConstant
+             153:             TypeImage 29(int) 3D sampled format:Unknown
              154:             TypePointer UniformConstant 153
-155(g_tTexcdf4a):    154(ptr) Variable UniformConstant
-             156:             TypeImage 26(int) Cube array sampled format:Unknown
+ 155(g_tTex3di4):    154(ptr) Variable UniformConstant
+             156:             TypeImage 48(int) 3D sampled format:Unknown
              157:             TypePointer UniformConstant 156
-158(g_tTexcdi4a):    157(ptr) Variable UniformConstant
-             159:             TypeImage 43(int) Cube array sampled format:Unknown
+ 158(g_tTex3du4):    157(ptr) Variable UniformConstant
+             159:             TypeImage 6(float) Cube sampled format:Unknown
              160:             TypePointer UniformConstant 159
-161(g_tTexcdu4a):    160(ptr) Variable UniformConstant
+ 161(g_tTexcdf4):    160(ptr) Variable UniformConstant
+             162:             TypeImage 29(int) Cube sampled format:Unknown
+             163:             TypePointer UniformConstant 162
+ 164(g_tTexcdi4):    163(ptr) Variable UniformConstant
+             165:             TypeImage 48(int) Cube sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+ 167(g_tTexcdu4):    166(ptr) Variable UniformConstant
+             168:             TypeImage 6(float) Cube array sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+170(g_tTexcdf4a):    169(ptr) Variable UniformConstant
+             171:             TypeImage 29(int) Cube array sampled format:Unknown
+             172:             TypePointer UniformConstant 171
+173(g_tTexcdi4a):    172(ptr) Variable UniformConstant
+             174:             TypeImage 48(int) Cube array sampled format:Unknown
+             175:             TypePointer UniformConstant 174
+176(g_tTexcdu4a):    175(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r11):      7(ptr) Variable Function
-         30(r13):      7(ptr) Variable Function
-         42(r15):      7(ptr) Variable Function
-         55(r31):      7(ptr) Variable Function
-         73(r33):      7(ptr) Variable Function
-         85(r35):      7(ptr) Variable Function
-      100(psout):     99(ptr) Variable Function
+         33(r13):      7(ptr) Variable Function
+         47(r15):      7(ptr) Variable Function
+         62(r31):      7(ptr) Variable Function
+         83(r33):      7(ptr) Variable Function
+         98(r35):      7(ptr) Variable Function
+      115(psout):    114(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4a)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 23 0
-              28:    6(float) CompositeExtract 25 0
-              29:    6(float) ImageSampleDrefImplicitLod 19 25 28 ConstOffset 27
-                              Store 8(r11) 29
-              34:          31 Load 33(g_tTex1di4a)
-              35:          13 Load 15(g_sSamp)
-              38:          37 SampledImage 34 35
-              39:    6(float) CompositeExtract 23 0
-              40:    6(float) CompositeExtract 39 0
-              41:    6(float) ImageSampleDrefImplicitLod 38 39 40 ConstOffset 27
-                              Store 30(r13) 41
-              47:          44 Load 46(g_tTex1du4a)
-              48:          13 Load 15(g_sSamp)
-              51:          50 SampledImage 47 48
-              52:    6(float) CompositeExtract 23 0
-              53:    6(float) CompositeExtract 52 0
-              54:    6(float) ImageSampleDrefImplicitLod 51 52 53 ConstOffset 27
-                              Store 42(r15) 54
-              59:          56 Load 58(g_tTex2df4a)
-              60:          13 Load 15(g_sSamp)
-              63:          62 SampledImage 59 60
-              67:    6(float) CompositeExtract 66 0
-              71:    6(float) CompositeExtract 67 0
-              72:    6(float) ImageSampleDrefImplicitLod 63 67 71 ConstOffset 70
-                              Store 55(r31) 72
-              77:          74 Load 76(g_tTex2di4a)
-              78:          13 Load 15(g_sSamp)
-              81:          80 SampledImage 77 78
-              82:    6(float) CompositeExtract 66 0
-              83:    6(float) CompositeExtract 82 0
-              84:    6(float) ImageSampleDrefImplicitLod 81 82 83 ConstOffset 70
-                              Store 73(r33) 84
-              89:          86 Load 88(g_tTex2du4a)
-              90:          13 Load 15(g_sSamp)
-              93:          92 SampledImage 89 90
-              94:    6(float) CompositeExtract 66 0
-              95:    6(float) CompositeExtract 94 0
-              96:    6(float) ImageSampleDrefImplicitLod 93 94 95 ConstOffset 70
-                              Store 85(r35) 96
-             105:    104(ptr) AccessChain 100(psout) 101
-                              Store 105 103
-             107:      7(ptr) AccessChain 100(psout) 106
-                              Store 107 102
-             110:    104(ptr) AccessChain 100(psout) 101
-             111:   97(fvec4) Load 110
-                              Store 109(Color) 111
-             114:      7(ptr) AccessChain 100(psout) 106
-             115:    6(float) Load 114
-                              Store 113(Depth) 115
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:   25(fvec3) CompositeConstruct 26 27 24
+              31:    6(float) CompositeExtract 28 2
+              32:    6(float) ImageSampleDrefImplicitLod 19 28 31 ConstOffset 30
+                              Store 8(r11) 32
+              37:          34 Load 36(g_tTex1di4a)
+              38:          13 Load 15(g_sSamp)
+              41:          40 SampledImage 37 38
+              42:    6(float) CompositeExtract 23 0
+              43:    6(float) CompositeExtract 23 1
+              44:   25(fvec3) CompositeConstruct 42 43 24
+              45:    6(float) CompositeExtract 44 2
+              46:    6(float) ImageSampleDrefImplicitLod 41 44 45 ConstOffset 30
+                              Store 33(r13) 46
+              52:          49 Load 51(g_tTex1du4a)
+              53:          13 Load 15(g_sSamp)
+              56:          55 SampledImage 52 53
+              57:    6(float) CompositeExtract 23 0
+              58:    6(float) CompositeExtract 23 1
+              59:   25(fvec3) CompositeConstruct 57 58 24
+              60:    6(float) CompositeExtract 59 2
+              61:    6(float) ImageSampleDrefImplicitLod 56 59 60 ConstOffset 30
+                              Store 47(r15) 61
+              66:          63 Load 65(g_tTex2df4a)
+              67:          13 Load 15(g_sSamp)
+              70:          69 SampledImage 66 67
+              74:    6(float) CompositeExtract 72 0
+              75:    6(float) CompositeExtract 72 1
+              76:    6(float) CompositeExtract 72 2
+              77:   73(fvec4) CompositeConstruct 74 75 76 24
+              81:    6(float) CompositeExtract 77 3
+              82:    6(float) ImageSampleDrefImplicitLod 70 77 81 ConstOffset 80
+                              Store 62(r31) 82
+              87:          84 Load 86(g_tTex2di4a)
+              88:          13 Load 15(g_sSamp)
+              91:          90 SampledImage 87 88
+              92:    6(float) CompositeExtract 72 0
+              93:    6(float) CompositeExtract 72 1
+              94:    6(float) CompositeExtract 72 2
+              95:   73(fvec4) CompositeConstruct 92 93 94 24
+              96:    6(float) CompositeExtract 95 3
+              97:    6(float) ImageSampleDrefImplicitLod 91 95 96 ConstOffset 80
+                              Store 83(r33) 97
+             102:          99 Load 101(g_tTex2du4a)
+             103:          13 Load 15(g_sSamp)
+             106:         105 SampledImage 102 103
+             107:    6(float) CompositeExtract 72 0
+             108:    6(float) CompositeExtract 72 1
+             109:    6(float) CompositeExtract 72 2
+             110:   73(fvec4) CompositeConstruct 107 108 109 24
+             111:    6(float) CompositeExtract 110 3
+             112:    6(float) ImageSampleDrefImplicitLod 106 110 111 ConstOffset 80
+                              Store 98(r35) 112
+             120:    119(ptr) AccessChain 115(psout) 116
+                              Store 120 118
+             122:      7(ptr) AccessChain 115(psout) 121
+                              Store 122 117
+             125:    119(ptr) AccessChain 115(psout) 116
+             126:   73(fvec4) Load 125
+                              Store 124(Color) 126
+             129:      7(ptr) AccessChain 115(psout) 121
+             130:    6(float) Load 129
+                              Store 128(Depth) 130
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index c5009ff..29e02cd 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -8,11 +8,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r10' (temp float)
-0:42          textureLod (global float)
+0:42          textureLod (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -23,11 +23,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r12' (temp float)
-0:43          textureLod (global float)
+0:43          textureLod (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -38,11 +38,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r14' (temp float)
-0:44          textureLod (global float)
+0:44          textureLod (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -53,11 +53,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r30' (temp float)
-0:47          textureLod (global float)
+0:47          textureLod (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -69,11 +69,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r32' (temp float)
-0:48          textureLod (global float)
+0:48          textureLod (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -85,11 +85,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r34' (temp float)
-0:49          textureLod (global float)
+0:49          textureLod (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -101,11 +101,11 @@
 0:52      Sequence
 0:52        move second child to first child (temp float)
 0:52          'r60' (temp float)
-0:52          textureLod (global float)
+0:52          textureLod (temp float)
 0:52            Construct combined texture-sampler (temp samplerCubeArrayShadow)
 0:52              'g_tTexcdf4a' (uniform textureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            Construct vec4 (temp float)
+0:52            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -118,11 +118,11 @@
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r62' (temp float)
-0:53          textureLod (global float)
+0:53          textureLod (temp float)
 0:53            Construct combined texture-sampler (temp isamplerCubeArrayShadow)
 0:53              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -135,11 +135,11 @@
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r64' (temp float)
-0:54          textureLod (global float)
+0:54          textureLod (temp float)
 0:54            Construct combined texture-sampler (temp usamplerCubeArrayShadow)
 0:54              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -182,6 +182,8 @@
 0:59                1 (const int)
 0:59        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -204,8 +206,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -220,11 +220,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r10' (temp float)
-0:42          textureLod (global float)
+0:42          textureLod (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -235,11 +235,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r12' (temp float)
-0:43          textureLod (global float)
+0:43          textureLod (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -250,11 +250,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r14' (temp float)
-0:44          textureLod (global float)
+0:44          textureLod (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -265,11 +265,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r30' (temp float)
-0:47          textureLod (global float)
+0:47          textureLod (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -281,11 +281,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r32' (temp float)
-0:48          textureLod (global float)
+0:48          textureLod (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -297,11 +297,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r34' (temp float)
-0:49          textureLod (global float)
+0:49          textureLod (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -313,11 +313,11 @@
 0:52      Sequence
 0:52        move second child to first child (temp float)
 0:52          'r60' (temp float)
-0:52          textureLod (global float)
+0:52          textureLod (temp float)
 0:52            Construct combined texture-sampler (temp samplerCubeArrayShadow)
 0:52              'g_tTexcdf4a' (uniform textureCubeArray)
 0:52              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:52            Construct vec4 (temp float)
+0:52            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -330,11 +330,11 @@
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r62' (temp float)
-0:53          textureLod (global float)
+0:53          textureLod (temp float)
 0:53            Construct combined texture-sampler (temp isamplerCubeArrayShadow)
 0:53              'g_tTexcdi4a' (uniform itextureCubeArray)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -347,11 +347,11 @@
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r64' (temp float)
-0:54          textureLod (global float)
+0:54          textureLod (temp float)
 0:54            Construct combined texture-sampler (temp usamplerCubeArrayShadow)
 0:54              'g_tTexcdu4a' (uniform utextureCubeArray)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -394,6 +394,8 @@
 0:59                1 (const int)
 0:59        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -416,84 +418,82 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 185
+// Id's are bound by 212
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 141 145
+                              EntryPoint Fragment 4  "main" 168 172
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r10"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 29  "r12"
-                              Name 33  "g_tTex1di4a"
-                              Name 42  "r14"
-                              Name 46  "g_tTex1du4a"
-                              Name 55  "r30"
-                              Name 58  "g_tTex2df4a"
-                              Name 70  "r32"
-                              Name 73  "g_tTex2di4a"
-                              Name 82  "r34"
-                              Name 85  "g_tTex2du4a"
-                              Name 94  "r60"
-                              Name 97  "g_tTexcdf4a"
-                              Name 108  "r62"
-                              Name 111  "g_tTexcdi4a"
-                              Name 119  "r64"
-                              Name 122  "g_tTexcdu4a"
-                              Name 130  "PS_OUTPUT"
-                              MemberName 130(PS_OUTPUT) 0  "Color"
-                              MemberName 130(PS_OUTPUT) 1  "Depth"
-                              Name 132  "psout"
-                              Name 141  "Color"
-                              Name 145  "Depth"
-                              Name 151  "g_tTex1df4"
-                              Name 154  "g_tTex1di4"
-                              Name 157  "g_tTex1du4"
-                              Name 160  "g_tTex2df4"
-                              Name 163  "g_tTex2di4"
-                              Name 166  "g_tTex2du4"
-                              Name 169  "g_tTex3df4"
-                              Name 172  "g_tTex3di4"
-                              Name 175  "g_tTex3du4"
-                              Name 178  "g_tTexcdf4"
-                              Name 181  "g_tTexcdi4"
-                              Name 184  "g_tTexcdu4"
+                              Name 32  "r12"
+                              Name 36  "g_tTex1di4a"
+                              Name 47  "r14"
+                              Name 51  "g_tTex1du4a"
+                              Name 62  "r30"
+                              Name 65  "g_tTex2df4a"
+                              Name 80  "r32"
+                              Name 83  "g_tTex2di4a"
+                              Name 95  "r34"
+                              Name 98  "g_tTex2du4a"
+                              Name 110  "r60"
+                              Name 113  "g_tTexcdf4a"
+                              Name 127  "r62"
+                              Name 130  "g_tTexcdi4a"
+                              Name 142  "r64"
+                              Name 145  "g_tTexcdu4a"
+                              Name 157  "PS_OUTPUT"
+                              MemberName 157(PS_OUTPUT) 0  "Color"
+                              MemberName 157(PS_OUTPUT) 1  "Depth"
+                              Name 159  "psout"
+                              Name 168  "Color"
+                              Name 172  "Depth"
+                              Name 178  "g_tTex1df4"
+                              Name 181  "g_tTex1di4"
+                              Name 184  "g_tTex1du4"
+                              Name 187  "g_tTex2df4"
+                              Name 190  "g_tTex2di4"
+                              Name 193  "g_tTex2du4"
+                              Name 196  "g_tTex3df4"
+                              Name 199  "g_tTex3di4"
+                              Name 202  "g_tTex3du4"
+                              Name 205  "g_tTexcdf4"
+                              Name 208  "g_tTexcdi4"
+                              Name 211  "g_tTexcdu4"
                               Decorate 11(g_tTex1df4a) DescriptorSet 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4a) DescriptorSet 0
-                              Decorate 46(g_tTex1du4a) DescriptorSet 0
-                              Decorate 58(g_tTex2df4a) DescriptorSet 0
-                              Decorate 73(g_tTex2di4a) DescriptorSet 0
-                              Decorate 85(g_tTex2du4a) DescriptorSet 0
-                              Decorate 97(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 111(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 122(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 141(Color) Location 0
-                              Decorate 145(Depth) BuiltIn FragDepth
-                              Decorate 151(g_tTex1df4) DescriptorSet 0
-                              Decorate 151(g_tTex1df4) Binding 0
-                              Decorate 154(g_tTex1di4) DescriptorSet 0
-                              Decorate 157(g_tTex1du4) DescriptorSet 0
-                              Decorate 160(g_tTex2df4) DescriptorSet 0
-                              Decorate 163(g_tTex2di4) DescriptorSet 0
-                              Decorate 166(g_tTex2du4) DescriptorSet 0
-                              Decorate 169(g_tTex3df4) DescriptorSet 0
-                              Decorate 172(g_tTex3di4) DescriptorSet 0
-                              Decorate 175(g_tTex3du4) DescriptorSet 0
-                              Decorate 178(g_tTexcdf4) DescriptorSet 0
-                              Decorate 181(g_tTexcdi4) DescriptorSet 0
-                              Decorate 184(g_tTexcdu4) DescriptorSet 0
+                              Decorate 36(g_tTex1di4a) DescriptorSet 0
+                              Decorate 51(g_tTex1du4a) DescriptorSet 0
+                              Decorate 65(g_tTex2df4a) DescriptorSet 0
+                              Decorate 83(g_tTex2di4a) DescriptorSet 0
+                              Decorate 98(g_tTex2du4a) DescriptorSet 0
+                              Decorate 113(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 130(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 145(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 168(Color) Location 0
+                              Decorate 172(Depth) BuiltIn FragDepth
+                              Decorate 178(g_tTex1df4) DescriptorSet 0
+                              Decorate 178(g_tTex1df4) Binding 0
+                              Decorate 181(g_tTex1di4) DescriptorSet 0
+                              Decorate 184(g_tTex1du4) DescriptorSet 0
+                              Decorate 187(g_tTex2df4) DescriptorSet 0
+                              Decorate 190(g_tTex2di4) DescriptorSet 0
+                              Decorate 193(g_tTex2du4) DescriptorSet 0
+                              Decorate 196(g_tTex3df4) DescriptorSet 0
+                              Decorate 199(g_tTex3di4) DescriptorSet 0
+                              Decorate 202(g_tTex3du4) DescriptorSet 0
+                              Decorate 205(g_tTexcdf4) DescriptorSet 0
+                              Decorate 208(g_tTexcdi4) DescriptorSet 0
+                              Decorate 211(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -511,183 +511,210 @@
               22:    6(float) Constant 1045220557
               23:   20(fvec2) ConstantComposite 21 22
               24:    6(float) Constant 1061158912
-              26:    6(float) Constant 0
-              30:             TypeInt 32 1
-              31:             TypeImage 30(int) 1D array sampled format:Unknown
-              32:             TypePointer UniformConstant 31
- 33(g_tTex1di4a):     32(ptr) Variable UniformConstant
-              36:             TypeImage 30(int) 1D depth array sampled format:Unknown
-              37:             TypeSampledImage 36
-              43:             TypeInt 32 0
-              44:             TypeImage 43(int) 1D array sampled format:Unknown
-              45:             TypePointer UniformConstant 44
- 46(g_tTex1du4a):     45(ptr) Variable UniformConstant
-              49:             TypeImage 43(int) 1D depth array sampled format:Unknown
-              50:             TypeSampledImage 49
-              56:             TypeImage 6(float) 2D array sampled format:Unknown
-              57:             TypePointer UniformConstant 56
- 58(g_tTex2df4a):     57(ptr) Variable UniformConstant
-              61:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              62:             TypeSampledImage 61
-              64:             TypeVector 6(float) 3
-              65:    6(float) Constant 1050253722
-              66:   64(fvec3) ConstantComposite 21 22 65
-              71:             TypeImage 30(int) 2D array sampled format:Unknown
-              72:             TypePointer UniformConstant 71
- 73(g_tTex2di4a):     72(ptr) Variable UniformConstant
-              76:             TypeImage 30(int) 2D depth array sampled format:Unknown
-              77:             TypeSampledImage 76
-              83:             TypeImage 43(int) 2D array sampled format:Unknown
-              84:             TypePointer UniformConstant 83
- 85(g_tTex2du4a):     84(ptr) Variable UniformConstant
-              88:             TypeImage 43(int) 2D depth array sampled format:Unknown
-              89:             TypeSampledImage 88
-              95:             TypeImage 6(float) Cube array sampled format:Unknown
-              96:             TypePointer UniformConstant 95
- 97(g_tTexcdf4a):     96(ptr) Variable UniformConstant
-             100:             TypeImage 6(float) Cube depth array sampled format:Unknown
-             101:             TypeSampledImage 100
-             103:             TypeVector 6(float) 4
-             104:    6(float) Constant 1053609165
-             105:  103(fvec4) ConstantComposite 21 22 65 104
-             109:             TypeImage 30(int) Cube array sampled format:Unknown
-             110:             TypePointer UniformConstant 109
-111(g_tTexcdi4a):    110(ptr) Variable UniformConstant
-             114:             TypeImage 30(int) Cube depth array sampled format:Unknown
-             115:             TypeSampledImage 114
-             120:             TypeImage 43(int) Cube array sampled format:Unknown
-             121:             TypePointer UniformConstant 120
-122(g_tTexcdu4a):    121(ptr) Variable UniformConstant
-             125:             TypeImage 43(int) Cube depth array sampled format:Unknown
-             126:             TypeSampledImage 125
-  130(PS_OUTPUT):             TypeStruct 103(fvec4) 6(float)
-             131:             TypePointer Function 130(PS_OUTPUT)
-             133:     30(int) Constant 0
-             134:    6(float) Constant 1065353216
-             135:  103(fvec4) ConstantComposite 134 134 134 134
-             136:             TypePointer Function 103(fvec4)
-             138:     30(int) Constant 1
-             140:             TypePointer Output 103(fvec4)
-      141(Color):    140(ptr) Variable Output
-             144:             TypePointer Output 6(float)
-      145(Depth):    144(ptr) Variable Output
-             149:             TypeImage 6(float) 1D sampled format:Unknown
-             150:             TypePointer UniformConstant 149
- 151(g_tTex1df4):    150(ptr) Variable UniformConstant
-             152:             TypeImage 30(int) 1D sampled format:Unknown
-             153:             TypePointer UniformConstant 152
- 154(g_tTex1di4):    153(ptr) Variable UniformConstant
-             155:             TypeImage 43(int) 1D sampled format:Unknown
-             156:             TypePointer UniformConstant 155
- 157(g_tTex1du4):    156(ptr) Variable UniformConstant
-             158:             TypeImage 6(float) 2D sampled format:Unknown
-             159:             TypePointer UniformConstant 158
- 160(g_tTex2df4):    159(ptr) Variable UniformConstant
-             161:             TypeImage 30(int) 2D sampled format:Unknown
-             162:             TypePointer UniformConstant 161
- 163(g_tTex2di4):    162(ptr) Variable UniformConstant
-             164:             TypeImage 43(int) 2D sampled format:Unknown
-             165:             TypePointer UniformConstant 164
- 166(g_tTex2du4):    165(ptr) Variable UniformConstant
-             167:             TypeImage 6(float) 3D sampled format:Unknown
-             168:             TypePointer UniformConstant 167
- 169(g_tTex3df4):    168(ptr) Variable UniformConstant
-             170:             TypeImage 30(int) 3D sampled format:Unknown
-             171:             TypePointer UniformConstant 170
- 172(g_tTex3di4):    171(ptr) Variable UniformConstant
-             173:             TypeImage 43(int) 3D sampled format:Unknown
-             174:             TypePointer UniformConstant 173
- 175(g_tTex3du4):    174(ptr) Variable UniformConstant
-             176:             TypeImage 6(float) Cube sampled format:Unknown
+              25:             TypeVector 6(float) 3
+              29:    6(float) Constant 0
+              33:             TypeInt 32 1
+              34:             TypeImage 33(int) 1D array sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+ 36(g_tTex1di4a):     35(ptr) Variable UniformConstant
+              39:             TypeImage 33(int) 1D depth array sampled format:Unknown
+              40:             TypeSampledImage 39
+              48:             TypeInt 32 0
+              49:             TypeImage 48(int) 1D array sampled format:Unknown
+              50:             TypePointer UniformConstant 49
+ 51(g_tTex1du4a):     50(ptr) Variable UniformConstant
+              54:             TypeImage 48(int) 1D depth array sampled format:Unknown
+              55:             TypeSampledImage 54
+              63:             TypeImage 6(float) 2D array sampled format:Unknown
+              64:             TypePointer UniformConstant 63
+ 65(g_tTex2df4a):     64(ptr) Variable UniformConstant
+              68:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              69:             TypeSampledImage 68
+              71:    6(float) Constant 1050253722
+              72:   25(fvec3) ConstantComposite 21 22 71
+              73:             TypeVector 6(float) 4
+              81:             TypeImage 33(int) 2D array sampled format:Unknown
+              82:             TypePointer UniformConstant 81
+ 83(g_tTex2di4a):     82(ptr) Variable UniformConstant
+              86:             TypeImage 33(int) 2D depth array sampled format:Unknown
+              87:             TypeSampledImage 86
+              96:             TypeImage 48(int) 2D array sampled format:Unknown
+              97:             TypePointer UniformConstant 96
+ 98(g_tTex2du4a):     97(ptr) Variable UniformConstant
+             101:             TypeImage 48(int) 2D depth array sampled format:Unknown
+             102:             TypeSampledImage 101
+             111:             TypeImage 6(float) Cube array sampled format:Unknown
+             112:             TypePointer UniformConstant 111
+113(g_tTexcdf4a):    112(ptr) Variable UniformConstant
+             116:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             117:             TypeSampledImage 116
+             119:    6(float) Constant 1053609165
+             120:   73(fvec4) ConstantComposite 21 22 71 119
+             128:             TypeImage 33(int) Cube array sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+130(g_tTexcdi4a):    129(ptr) Variable UniformConstant
+             133:             TypeImage 33(int) Cube depth array sampled format:Unknown
+             134:             TypeSampledImage 133
+             143:             TypeImage 48(int) Cube array sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+145(g_tTexcdu4a):    144(ptr) Variable UniformConstant
+             148:             TypeImage 48(int) Cube depth array sampled format:Unknown
+             149:             TypeSampledImage 148
+  157(PS_OUTPUT):             TypeStruct 73(fvec4) 6(float)
+             158:             TypePointer Function 157(PS_OUTPUT)
+             160:     33(int) Constant 0
+             161:    6(float) Constant 1065353216
+             162:   73(fvec4) ConstantComposite 161 161 161 161
+             163:             TypePointer Function 73(fvec4)
+             165:     33(int) Constant 1
+             167:             TypePointer Output 73(fvec4)
+      168(Color):    167(ptr) Variable Output
+             171:             TypePointer Output 6(float)
+      172(Depth):    171(ptr) Variable Output
+             176:             TypeImage 6(float) 1D sampled format:Unknown
              177:             TypePointer UniformConstant 176
- 178(g_tTexcdf4):    177(ptr) Variable UniformConstant
-             179:             TypeImage 30(int) Cube sampled format:Unknown
+ 178(g_tTex1df4):    177(ptr) Variable UniformConstant
+             179:             TypeImage 33(int) 1D sampled format:Unknown
              180:             TypePointer UniformConstant 179
- 181(g_tTexcdi4):    180(ptr) Variable UniformConstant
-             182:             TypeImage 43(int) Cube sampled format:Unknown
+ 181(g_tTex1di4):    180(ptr) Variable UniformConstant
+             182:             TypeImage 48(int) 1D sampled format:Unknown
              183:             TypePointer UniformConstant 182
- 184(g_tTexcdu4):    183(ptr) Variable UniformConstant
+ 184(g_tTex1du4):    183(ptr) Variable UniformConstant
+             185:             TypeImage 6(float) 2D sampled format:Unknown
+             186:             TypePointer UniformConstant 185
+ 187(g_tTex2df4):    186(ptr) Variable UniformConstant
+             188:             TypeImage 33(int) 2D sampled format:Unknown
+             189:             TypePointer UniformConstant 188
+ 190(g_tTex2di4):    189(ptr) Variable UniformConstant
+             191:             TypeImage 48(int) 2D sampled format:Unknown
+             192:             TypePointer UniformConstant 191
+ 193(g_tTex2du4):    192(ptr) Variable UniformConstant
+             194:             TypeImage 6(float) 3D sampled format:Unknown
+             195:             TypePointer UniformConstant 194
+ 196(g_tTex3df4):    195(ptr) Variable UniformConstant
+             197:             TypeImage 33(int) 3D sampled format:Unknown
+             198:             TypePointer UniformConstant 197
+ 199(g_tTex3di4):    198(ptr) Variable UniformConstant
+             200:             TypeImage 48(int) 3D sampled format:Unknown
+             201:             TypePointer UniformConstant 200
+ 202(g_tTex3du4):    201(ptr) Variable UniformConstant
+             203:             TypeImage 6(float) Cube sampled format:Unknown
+             204:             TypePointer UniformConstant 203
+ 205(g_tTexcdf4):    204(ptr) Variable UniformConstant
+             206:             TypeImage 33(int) Cube sampled format:Unknown
+             207:             TypePointer UniformConstant 206
+ 208(g_tTexcdi4):    207(ptr) Variable UniformConstant
+             209:             TypeImage 48(int) Cube sampled format:Unknown
+             210:             TypePointer UniformConstant 209
+ 211(g_tTexcdu4):    210(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r10):      7(ptr) Variable Function
-         29(r12):      7(ptr) Variable Function
-         42(r14):      7(ptr) Variable Function
-         55(r30):      7(ptr) Variable Function
-         70(r32):      7(ptr) Variable Function
-         82(r34):      7(ptr) Variable Function
-         94(r60):      7(ptr) Variable Function
-        108(r62):      7(ptr) Variable Function
-        119(r64):      7(ptr) Variable Function
-      132(psout):    131(ptr) Variable Function
+         32(r12):      7(ptr) Variable Function
+         47(r14):      7(ptr) Variable Function
+         62(r30):      7(ptr) Variable Function
+         80(r32):      7(ptr) Variable Function
+         95(r34):      7(ptr) Variable Function
+        110(r60):      7(ptr) Variable Function
+        127(r62):      7(ptr) Variable Function
+        142(r64):      7(ptr) Variable Function
+      159(psout):    158(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4a)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 23 0
-              27:    6(float) CompositeExtract 25 0
-              28:    6(float) ImageSampleDrefExplicitLod 19 25 27 Lod 26
-                              Store 8(r10) 28
-              34:          31 Load 33(g_tTex1di4a)
-              35:          13 Load 15(g_sSamp)
-              38:          37 SampledImage 34 35
-              39:    6(float) CompositeExtract 23 0
-              40:    6(float) CompositeExtract 39 0
-              41:    6(float) ImageSampleDrefExplicitLod 38 39 40 Lod 26
-                              Store 29(r12) 41
-              47:          44 Load 46(g_tTex1du4a)
-              48:          13 Load 15(g_sSamp)
-              51:          50 SampledImage 47 48
-              52:    6(float) CompositeExtract 23 0
-              53:    6(float) CompositeExtract 52 0
-              54:    6(float) ImageSampleDrefExplicitLod 51 52 53 Lod 26
-                              Store 42(r14) 54
-              59:          56 Load 58(g_tTex2df4a)
-              60:          13 Load 15(g_sSamp)
-              63:          62 SampledImage 59 60
-              67:    6(float) CompositeExtract 66 0
-              68:    6(float) CompositeExtract 67 0
-              69:    6(float) ImageSampleDrefExplicitLod 63 67 68 Lod 26
-                              Store 55(r30) 69
-              74:          71 Load 73(g_tTex2di4a)
-              75:          13 Load 15(g_sSamp)
-              78:          77 SampledImage 74 75
-              79:    6(float) CompositeExtract 66 0
-              80:    6(float) CompositeExtract 79 0
-              81:    6(float) ImageSampleDrefExplicitLod 78 79 80 Lod 26
-                              Store 70(r32) 81
-              86:          83 Load 85(g_tTex2du4a)
-              87:          13 Load 15(g_sSamp)
-              90:          89 SampledImage 86 87
-              91:    6(float) CompositeExtract 66 0
-              92:    6(float) CompositeExtract 91 0
-              93:    6(float) ImageSampleDrefExplicitLod 90 91 92 Lod 26
-                              Store 82(r34) 93
-              98:          95 Load 97(g_tTexcdf4a)
-              99:          13 Load 15(g_sSamp)
-             102:         101 SampledImage 98 99
-             106:    6(float) CompositeExtract 105 0
-             107:    6(float) ImageSampleDrefExplicitLod 102 106 24 Lod 24
-                              Store 94(r60) 107
-             112:         109 Load 111(g_tTexcdi4a)
-             113:          13 Load 15(g_sSamp)
-             116:         115 SampledImage 112 113
-             117:    6(float) CompositeExtract 105 0
-             118:    6(float) ImageSampleDrefExplicitLod 116 117 24 Lod 24
-                              Store 108(r62) 118
-             123:         120 Load 122(g_tTexcdu4a)
-             124:          13 Load 15(g_sSamp)
-             127:         126 SampledImage 123 124
-             128:    6(float) CompositeExtract 105 0
-             129:    6(float) ImageSampleDrefExplicitLod 127 128 24 Lod 24
-                              Store 119(r64) 129
-             137:    136(ptr) AccessChain 132(psout) 133
-                              Store 137 135
-             139:      7(ptr) AccessChain 132(psout) 138
-                              Store 139 134
-             142:    136(ptr) AccessChain 132(psout) 133
-             143:  103(fvec4) Load 142
-                              Store 141(Color) 143
-             146:      7(ptr) AccessChain 132(psout) 138
-             147:    6(float) Load 146
-                              Store 145(Depth) 147
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:   25(fvec3) CompositeConstruct 26 27 24
+              30:    6(float) CompositeExtract 28 2
+              31:    6(float) ImageSampleDrefExplicitLod 19 28 30 Lod 29
+                              Store 8(r10) 31
+              37:          34 Load 36(g_tTex1di4a)
+              38:          13 Load 15(g_sSamp)
+              41:          40 SampledImage 37 38
+              42:    6(float) CompositeExtract 23 0
+              43:    6(float) CompositeExtract 23 1
+              44:   25(fvec3) CompositeConstruct 42 43 24
+              45:    6(float) CompositeExtract 44 2
+              46:    6(float) ImageSampleDrefExplicitLod 41 44 45 Lod 29
+                              Store 32(r12) 46
+              52:          49 Load 51(g_tTex1du4a)
+              53:          13 Load 15(g_sSamp)
+              56:          55 SampledImage 52 53
+              57:    6(float) CompositeExtract 23 0
+              58:    6(float) CompositeExtract 23 1
+              59:   25(fvec3) CompositeConstruct 57 58 24
+              60:    6(float) CompositeExtract 59 2
+              61:    6(float) ImageSampleDrefExplicitLod 56 59 60 Lod 29
+                              Store 47(r14) 61
+              66:          63 Load 65(g_tTex2df4a)
+              67:          13 Load 15(g_sSamp)
+              70:          69 SampledImage 66 67
+              74:    6(float) CompositeExtract 72 0
+              75:    6(float) CompositeExtract 72 1
+              76:    6(float) CompositeExtract 72 2
+              77:   73(fvec4) CompositeConstruct 74 75 76 24
+              78:    6(float) CompositeExtract 77 3
+              79:    6(float) ImageSampleDrefExplicitLod 70 77 78 Lod 29
+                              Store 62(r30) 79
+              84:          81 Load 83(g_tTex2di4a)
+              85:          13 Load 15(g_sSamp)
+              88:          87 SampledImage 84 85
+              89:    6(float) CompositeExtract 72 0
+              90:    6(float) CompositeExtract 72 1
+              91:    6(float) CompositeExtract 72 2
+              92:   73(fvec4) CompositeConstruct 89 90 91 24
+              93:    6(float) CompositeExtract 92 3
+              94:    6(float) ImageSampleDrefExplicitLod 88 92 93 Lod 29
+                              Store 80(r32) 94
+              99:          96 Load 98(g_tTex2du4a)
+             100:          13 Load 15(g_sSamp)
+             103:         102 SampledImage 99 100
+             104:    6(float) CompositeExtract 72 0
+             105:    6(float) CompositeExtract 72 1
+             106:    6(float) CompositeExtract 72 2
+             107:   73(fvec4) CompositeConstruct 104 105 106 24
+             108:    6(float) CompositeExtract 107 3
+             109:    6(float) ImageSampleDrefExplicitLod 103 107 108 Lod 29
+                              Store 95(r34) 109
+             114:         111 Load 113(g_tTexcdf4a)
+             115:          13 Load 15(g_sSamp)
+             118:         117 SampledImage 114 115
+             121:    6(float) CompositeExtract 120 0
+             122:    6(float) CompositeExtract 120 1
+             123:    6(float) CompositeExtract 120 2
+             124:    6(float) CompositeExtract 120 3
+             125:   73(fvec4) CompositeConstruct 121 122 123 124
+             126:    6(float) ImageSampleDrefExplicitLod 118 125 24 Lod 24
+                              Store 110(r60) 126
+             131:         128 Load 130(g_tTexcdi4a)
+             132:          13 Load 15(g_sSamp)
+             135:         134 SampledImage 131 132
+             136:    6(float) CompositeExtract 120 0
+             137:    6(float) CompositeExtract 120 1
+             138:    6(float) CompositeExtract 120 2
+             139:    6(float) CompositeExtract 120 3
+             140:   73(fvec4) CompositeConstruct 136 137 138 139
+             141:    6(float) ImageSampleDrefExplicitLod 135 140 24 Lod 24
+                              Store 127(r62) 141
+             146:         143 Load 145(g_tTexcdu4a)
+             147:          13 Load 15(g_sSamp)
+             150:         149 SampledImage 146 147
+             151:    6(float) CompositeExtract 120 0
+             152:    6(float) CompositeExtract 120 1
+             153:    6(float) CompositeExtract 120 2
+             154:    6(float) CompositeExtract 120 3
+             155:   73(fvec4) CompositeConstruct 151 152 153 154
+             156:    6(float) ImageSampleDrefExplicitLod 150 155 24 Lod 24
+                              Store 142(r64) 156
+             164:    163(ptr) AccessChain 159(psout) 160
+                              Store 164 162
+             166:      7(ptr) AccessChain 159(psout) 165
+                              Store 166 161
+             169:    163(ptr) AccessChain 159(psout) 160
+             170:   73(fvec4) Load 169
+                              Store 168(Color) 170
+             173:      7(ptr) AccessChain 159(psout) 165
+             174:    6(float) Load 173
+                              Store 172(Depth) 174
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index b8f55b8..de82276 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -8,11 +8,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r00' (temp float)
-0:42          textureLod (global float)
+0:42          textureLod (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -22,11 +22,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r02' (temp float)
-0:43          textureLod (global float)
+0:43          textureLod (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -36,11 +36,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r04' (temp float)
-0:44          textureLod (global float)
+0:44          textureLod (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -50,11 +50,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r20' (temp float)
-0:47          textureLod (global float)
+0:47          textureLod (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -65,11 +65,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r22' (temp float)
-0:48          textureLod (global float)
+0:48          textureLod (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -80,11 +80,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r24' (temp float)
-0:49          textureLod (global float)
+0:49          textureLod (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -95,11 +95,11 @@
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r50' (temp float)
-0:53          textureLod (global float)
+0:53          textureLod (temp float)
 0:53            Construct combined texture-sampler (temp samplerCubeShadow)
 0:53              'g_tTexcdf4' (uniform textureCube)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -111,11 +111,11 @@
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r52' (temp float)
-0:54          textureLod (global float)
+0:54          textureLod (temp float)
 0:54            Construct combined texture-sampler (temp isamplerCubeShadow)
 0:54              'g_tTexcdi4' (uniform itextureCube)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -127,11 +127,11 @@
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r54' (temp float)
-0:55          textureLod (global float)
+0:55          textureLod (temp float)
 0:55            Construct combined texture-sampler (temp usamplerCubeShadow)
 0:55              'g_tTexcdu4' (uniform utextureCube)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            Construct vec4 (temp float)
+0:55            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -173,6 +173,8 @@
 0:60                1 (const int)
 0:60        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -195,8 +197,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -211,11 +211,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r00' (temp float)
-0:42          textureLod (global float)
+0:42          textureLod (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -225,11 +225,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r02' (temp float)
-0:43          textureLod (global float)
+0:43          textureLod (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -239,11 +239,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r04' (temp float)
-0:44          textureLod (global float)
+0:44          textureLod (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -253,11 +253,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r20' (temp float)
-0:47          textureLod (global float)
+0:47          textureLod (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -268,11 +268,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r22' (temp float)
-0:48          textureLod (global float)
+0:48          textureLod (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -283,11 +283,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r24' (temp float)
-0:49          textureLod (global float)
+0:49          textureLod (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -298,11 +298,11 @@
 0:53      Sequence
 0:53        move second child to first child (temp float)
 0:53          'r50' (temp float)
-0:53          textureLod (global float)
+0:53          textureLod (temp float)
 0:53            Construct combined texture-sampler (temp samplerCubeShadow)
 0:53              'g_tTexcdf4' (uniform textureCube)
 0:53              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:53            Construct vec4 (temp float)
+0:53            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -314,11 +314,11 @@
 0:54      Sequence
 0:54        move second child to first child (temp float)
 0:54          'r52' (temp float)
-0:54          textureLod (global float)
+0:54          textureLod (temp float)
 0:54            Construct combined texture-sampler (temp isamplerCubeShadow)
 0:54              'g_tTexcdi4' (uniform itextureCube)
 0:54              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:54            Construct vec4 (temp float)
+0:54            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -330,11 +330,11 @@
 0:55      Sequence
 0:55        move second child to first child (temp float)
 0:55          'r54' (temp float)
-0:55          textureLod (global float)
+0:55          textureLod (temp float)
 0:55            Construct combined texture-sampler (temp usamplerCubeShadow)
 0:55              'g_tTexcdu4' (uniform utextureCube)
 0:55              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:55            Construct vec4 (temp float)
+0:55            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -376,6 +376,8 @@
 0:60                1 (const int)
 0:60        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -398,84 +400,82 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 183
+// Id's are bound by 201
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 139 143
+                              EntryPoint Fragment 4  "main" 157 161
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r00"
                               Name 11  "g_tTex1df4"
                               Name 15  "g_sSamp"
-                              Name 25  "r02"
-                              Name 29  "g_tTex1di4"
-                              Name 37  "r04"
-                              Name 41  "g_tTex1du4"
-                              Name 49  "r20"
-                              Name 52  "g_tTex2df4"
-                              Name 64  "r22"
-                              Name 67  "g_tTex2di4"
-                              Name 76  "r24"
-                              Name 79  "g_tTex2du4"
-                              Name 88  "r50"
-                              Name 91  "g_tTexcdf4"
-                              Name 103  "r52"
-                              Name 106  "g_tTexcdi4"
-                              Name 115  "r54"
-                              Name 118  "g_tTexcdu4"
-                              Name 128  "PS_OUTPUT"
-                              MemberName 128(PS_OUTPUT) 0  "Color"
-                              MemberName 128(PS_OUTPUT) 1  "Depth"
-                              Name 130  "psout"
-                              Name 139  "Color"
-                              Name 143  "Depth"
-                              Name 149  "g_tTex3df4"
-                              Name 152  "g_tTex3di4"
-                              Name 155  "g_tTex3du4"
-                              Name 158  "g_tTex1df4a"
-                              Name 161  "g_tTex1di4a"
-                              Name 164  "g_tTex1du4a"
-                              Name 167  "g_tTex2df4a"
-                              Name 170  "g_tTex2di4a"
-                              Name 173  "g_tTex2du4a"
-                              Name 176  "g_tTexcdf4a"
-                              Name 179  "g_tTexcdi4a"
-                              Name 182  "g_tTexcdu4a"
+                              Name 27  "r02"
+                              Name 31  "g_tTex1di4"
+                              Name 40  "r04"
+                              Name 44  "g_tTex1du4"
+                              Name 53  "r20"
+                              Name 56  "g_tTex2df4"
+                              Name 70  "r22"
+                              Name 73  "g_tTex2di4"
+                              Name 84  "r24"
+                              Name 87  "g_tTex2du4"
+                              Name 98  "r50"
+                              Name 101  "g_tTexcdf4"
+                              Name 116  "r52"
+                              Name 119  "g_tTexcdi4"
+                              Name 131  "r54"
+                              Name 134  "g_tTexcdu4"
+                              Name 146  "PS_OUTPUT"
+                              MemberName 146(PS_OUTPUT) 0  "Color"
+                              MemberName 146(PS_OUTPUT) 1  "Depth"
+                              Name 148  "psout"
+                              Name 157  "Color"
+                              Name 161  "Depth"
+                              Name 167  "g_tTex3df4"
+                              Name 170  "g_tTex3di4"
+                              Name 173  "g_tTex3du4"
+                              Name 176  "g_tTex1df4a"
+                              Name 179  "g_tTex1di4a"
+                              Name 182  "g_tTex1du4a"
+                              Name 185  "g_tTex2df4a"
+                              Name 188  "g_tTex2di4a"
+                              Name 191  "g_tTex2du4a"
+                              Name 194  "g_tTexcdf4a"
+                              Name 197  "g_tTexcdi4a"
+                              Name 200  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4) DescriptorSet 0
                               Decorate 11(g_tTex1df4) Binding 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 29(g_tTex1di4) DescriptorSet 0
-                              Decorate 41(g_tTex1du4) DescriptorSet 0
-                              Decorate 52(g_tTex2df4) DescriptorSet 0
-                              Decorate 67(g_tTex2di4) DescriptorSet 0
-                              Decorate 79(g_tTex2du4) DescriptorSet 0
-                              Decorate 91(g_tTexcdf4) DescriptorSet 0
-                              Decorate 106(g_tTexcdi4) DescriptorSet 0
-                              Decorate 118(g_tTexcdu4) DescriptorSet 0
-                              Decorate 139(Color) Location 0
-                              Decorate 143(Depth) BuiltIn FragDepth
-                              Decorate 149(g_tTex3df4) DescriptorSet 0
-                              Decorate 152(g_tTex3di4) DescriptorSet 0
-                              Decorate 155(g_tTex3du4) DescriptorSet 0
-                              Decorate 158(g_tTex1df4a) DescriptorSet 0
-                              Decorate 161(g_tTex1di4a) DescriptorSet 0
-                              Decorate 164(g_tTex1du4a) DescriptorSet 0
-                              Decorate 167(g_tTex2df4a) DescriptorSet 0
-                              Decorate 170(g_tTex2di4a) DescriptorSet 0
-                              Decorate 173(g_tTex2du4a) DescriptorSet 0
-                              Decorate 176(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 179(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 182(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 31(g_tTex1di4) DescriptorSet 0
+                              Decorate 44(g_tTex1du4) DescriptorSet 0
+                              Decorate 56(g_tTex2df4) DescriptorSet 0
+                              Decorate 73(g_tTex2di4) DescriptorSet 0
+                              Decorate 87(g_tTex2du4) DescriptorSet 0
+                              Decorate 101(g_tTexcdf4) DescriptorSet 0
+                              Decorate 119(g_tTexcdi4) DescriptorSet 0
+                              Decorate 134(g_tTexcdu4) DescriptorSet 0
+                              Decorate 157(Color) Location 0
+                              Decorate 161(Depth) BuiltIn FragDepth
+                              Decorate 167(g_tTex3df4) DescriptorSet 0
+                              Decorate 170(g_tTex3di4) DescriptorSet 0
+                              Decorate 173(g_tTex3du4) DescriptorSet 0
+                              Decorate 176(g_tTex1df4a) DescriptorSet 0
+                              Decorate 179(g_tTex1di4a) DescriptorSet 0
+                              Decorate 182(g_tTex1du4a) DescriptorSet 0
+                              Decorate 185(g_tTex2df4a) DescriptorSet 0
+                              Decorate 188(g_tTex2di4a) DescriptorSet 0
+                              Decorate 191(g_tTex2du4a) DescriptorSet 0
+                              Decorate 194(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 197(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 200(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -490,184 +490,202 @@
               18:             TypeSampledImage 17
               20:    6(float) Constant 1036831949
               21:    6(float) Constant 1061158912
-              22:    6(float) Constant 0
-              26:             TypeInt 32 1
-              27:             TypeImage 26(int) 1D sampled format:Unknown
-              28:             TypePointer UniformConstant 27
-  29(g_tTex1di4):     28(ptr) Variable UniformConstant
-              32:             TypeImage 26(int) 1D depth sampled format:Unknown
-              33:             TypeSampledImage 32
-              38:             TypeInt 32 0
-              39:             TypeImage 38(int) 1D sampled format:Unknown
-              40:             TypePointer UniformConstant 39
-  41(g_tTex1du4):     40(ptr) Variable UniformConstant
-              44:             TypeImage 38(int) 1D depth sampled format:Unknown
-              45:             TypeSampledImage 44
-              50:             TypeImage 6(float) 2D sampled format:Unknown
-              51:             TypePointer UniformConstant 50
-  52(g_tTex2df4):     51(ptr) Variable UniformConstant
-              55:             TypeImage 6(float) 2D depth sampled format:Unknown
-              56:             TypeSampledImage 55
-              58:             TypeVector 6(float) 2
-              59:    6(float) Constant 1045220557
-              60:   58(fvec2) ConstantComposite 20 59
-              65:             TypeImage 26(int) 2D sampled format:Unknown
-              66:             TypePointer UniformConstant 65
-  67(g_tTex2di4):     66(ptr) Variable UniformConstant
-              70:             TypeImage 26(int) 2D depth sampled format:Unknown
-              71:             TypeSampledImage 70
-              77:             TypeImage 38(int) 2D sampled format:Unknown
-              78:             TypePointer UniformConstant 77
-  79(g_tTex2du4):     78(ptr) Variable UniformConstant
-              82:             TypeImage 38(int) 2D depth sampled format:Unknown
-              83:             TypeSampledImage 82
-              89:             TypeImage 6(float) Cube sampled format:Unknown
-              90:             TypePointer UniformConstant 89
-  91(g_tTexcdf4):     90(ptr) Variable UniformConstant
-              94:             TypeImage 6(float) Cube depth sampled format:Unknown
-              95:             TypeSampledImage 94
-              97:             TypeVector 6(float) 3
-              98:    6(float) Constant 1050253722
-              99:   97(fvec3) ConstantComposite 20 59 98
-             104:             TypeImage 26(int) Cube sampled format:Unknown
-             105:             TypePointer UniformConstant 104
- 106(g_tTexcdi4):    105(ptr) Variable UniformConstant
-             109:             TypeImage 26(int) Cube depth sampled format:Unknown
-             110:             TypeSampledImage 109
-             116:             TypeImage 38(int) Cube sampled format:Unknown
-             117:             TypePointer UniformConstant 116
- 118(g_tTexcdu4):    117(ptr) Variable UniformConstant
-             121:             TypeImage 38(int) Cube depth sampled format:Unknown
-             122:             TypeSampledImage 121
-             127:             TypeVector 6(float) 4
-  128(PS_OUTPUT):             TypeStruct 127(fvec4) 6(float)
-             129:             TypePointer Function 128(PS_OUTPUT)
-             131:     26(int) Constant 0
-             132:    6(float) Constant 1065353216
-             133:  127(fvec4) ConstantComposite 132 132 132 132
-             134:             TypePointer Function 127(fvec4)
-             136:     26(int) Constant 1
-             138:             TypePointer Output 127(fvec4)
-      139(Color):    138(ptr) Variable Output
-             142:             TypePointer Output 6(float)
-      143(Depth):    142(ptr) Variable Output
-             147:             TypeImage 6(float) 3D sampled format:Unknown
-             148:             TypePointer UniformConstant 147
- 149(g_tTex3df4):    148(ptr) Variable UniformConstant
-             150:             TypeImage 26(int) 3D sampled format:Unknown
-             151:             TypePointer UniformConstant 150
- 152(g_tTex3di4):    151(ptr) Variable UniformConstant
-             153:             TypeImage 38(int) 3D sampled format:Unknown
-             154:             TypePointer UniformConstant 153
- 155(g_tTex3du4):    154(ptr) Variable UniformConstant
-             156:             TypeImage 6(float) 1D array sampled format:Unknown
-             157:             TypePointer UniformConstant 156
-158(g_tTex1df4a):    157(ptr) Variable UniformConstant
-             159:             TypeImage 26(int) 1D array sampled format:Unknown
-             160:             TypePointer UniformConstant 159
-161(g_tTex1di4a):    160(ptr) Variable UniformConstant
-             162:             TypeImage 38(int) 1D array sampled format:Unknown
-             163:             TypePointer UniformConstant 162
-164(g_tTex1du4a):    163(ptr) Variable UniformConstant
-             165:             TypeImage 6(float) 2D array sampled format:Unknown
+              22:             TypeVector 6(float) 2
+              24:    6(float) Constant 0
+              28:             TypeInt 32 1
+              29:             TypeImage 28(int) 1D sampled format:Unknown
+              30:             TypePointer UniformConstant 29
+  31(g_tTex1di4):     30(ptr) Variable UniformConstant
+              34:             TypeImage 28(int) 1D depth sampled format:Unknown
+              35:             TypeSampledImage 34
+              41:             TypeInt 32 0
+              42:             TypeImage 41(int) 1D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(g_tTex1du4):     43(ptr) Variable UniformConstant
+              47:             TypeImage 41(int) 1D depth sampled format:Unknown
+              48:             TypeSampledImage 47
+              54:             TypeImage 6(float) 2D sampled format:Unknown
+              55:             TypePointer UniformConstant 54
+  56(g_tTex2df4):     55(ptr) Variable UniformConstant
+              59:             TypeImage 6(float) 2D depth sampled format:Unknown
+              60:             TypeSampledImage 59
+              62:    6(float) Constant 1045220557
+              63:   22(fvec2) ConstantComposite 20 62
+              64:             TypeVector 6(float) 3
+              71:             TypeImage 28(int) 2D sampled format:Unknown
+              72:             TypePointer UniformConstant 71
+  73(g_tTex2di4):     72(ptr) Variable UniformConstant
+              76:             TypeImage 28(int) 2D depth sampled format:Unknown
+              77:             TypeSampledImage 76
+              85:             TypeImage 41(int) 2D sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+  87(g_tTex2du4):     86(ptr) Variable UniformConstant
+              90:             TypeImage 41(int) 2D depth sampled format:Unknown
+              91:             TypeSampledImage 90
+              99:             TypeImage 6(float) Cube sampled format:Unknown
+             100:             TypePointer UniformConstant 99
+ 101(g_tTexcdf4):    100(ptr) Variable UniformConstant
+             104:             TypeImage 6(float) Cube depth sampled format:Unknown
+             105:             TypeSampledImage 104
+             107:    6(float) Constant 1050253722
+             108:   64(fvec3) ConstantComposite 20 62 107
+             109:             TypeVector 6(float) 4
+             117:             TypeImage 28(int) Cube sampled format:Unknown
+             118:             TypePointer UniformConstant 117
+ 119(g_tTexcdi4):    118(ptr) Variable UniformConstant
+             122:             TypeImage 28(int) Cube depth sampled format:Unknown
+             123:             TypeSampledImage 122
+             132:             TypeImage 41(int) Cube sampled format:Unknown
+             133:             TypePointer UniformConstant 132
+ 134(g_tTexcdu4):    133(ptr) Variable UniformConstant
+             137:             TypeImage 41(int) Cube depth sampled format:Unknown
+             138:             TypeSampledImage 137
+  146(PS_OUTPUT):             TypeStruct 109(fvec4) 6(float)
+             147:             TypePointer Function 146(PS_OUTPUT)
+             149:     28(int) Constant 0
+             150:    6(float) Constant 1065353216
+             151:  109(fvec4) ConstantComposite 150 150 150 150
+             152:             TypePointer Function 109(fvec4)
+             154:     28(int) Constant 1
+             156:             TypePointer Output 109(fvec4)
+      157(Color):    156(ptr) Variable Output
+             160:             TypePointer Output 6(float)
+      161(Depth):    160(ptr) Variable Output
+             165:             TypeImage 6(float) 3D sampled format:Unknown
              166:             TypePointer UniformConstant 165
-167(g_tTex2df4a):    166(ptr) Variable UniformConstant
-             168:             TypeImage 26(int) 2D array sampled format:Unknown
+ 167(g_tTex3df4):    166(ptr) Variable UniformConstant
+             168:             TypeImage 28(int) 3D sampled format:Unknown
              169:             TypePointer UniformConstant 168
-170(g_tTex2di4a):    169(ptr) Variable UniformConstant
-             171:             TypeImage 38(int) 2D array sampled format:Unknown
+ 170(g_tTex3di4):    169(ptr) Variable UniformConstant
+             171:             TypeImage 41(int) 3D sampled format:Unknown
              172:             TypePointer UniformConstant 171
-173(g_tTex2du4a):    172(ptr) Variable UniformConstant
-             174:             TypeImage 6(float) Cube array sampled format:Unknown
+ 173(g_tTex3du4):    172(ptr) Variable UniformConstant
+             174:             TypeImage 6(float) 1D array sampled format:Unknown
              175:             TypePointer UniformConstant 174
-176(g_tTexcdf4a):    175(ptr) Variable UniformConstant
-             177:             TypeImage 26(int) Cube array sampled format:Unknown
+176(g_tTex1df4a):    175(ptr) Variable UniformConstant
+             177:             TypeImage 28(int) 1D array sampled format:Unknown
              178:             TypePointer UniformConstant 177
-179(g_tTexcdi4a):    178(ptr) Variable UniformConstant
-             180:             TypeImage 38(int) Cube array sampled format:Unknown
+179(g_tTex1di4a):    178(ptr) Variable UniformConstant
+             180:             TypeImage 41(int) 1D array sampled format:Unknown
              181:             TypePointer UniformConstant 180
-182(g_tTexcdu4a):    181(ptr) Variable UniformConstant
+182(g_tTex1du4a):    181(ptr) Variable UniformConstant
+             183:             TypeImage 6(float) 2D array sampled format:Unknown
+             184:             TypePointer UniformConstant 183
+185(g_tTex2df4a):    184(ptr) Variable UniformConstant
+             186:             TypeImage 28(int) 2D array sampled format:Unknown
+             187:             TypePointer UniformConstant 186
+188(g_tTex2di4a):    187(ptr) Variable UniformConstant
+             189:             TypeImage 41(int) 2D array sampled format:Unknown
+             190:             TypePointer UniformConstant 189
+191(g_tTex2du4a):    190(ptr) Variable UniformConstant
+             192:             TypeImage 6(float) Cube array sampled format:Unknown
+             193:             TypePointer UniformConstant 192
+194(g_tTexcdf4a):    193(ptr) Variable UniformConstant
+             195:             TypeImage 28(int) Cube array sampled format:Unknown
+             196:             TypePointer UniformConstant 195
+197(g_tTexcdi4a):    196(ptr) Variable UniformConstant
+             198:             TypeImage 41(int) Cube array sampled format:Unknown
+             199:             TypePointer UniformConstant 198
+200(g_tTexcdu4a):    199(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r00):      7(ptr) Variable Function
-         25(r02):      7(ptr) Variable Function
-         37(r04):      7(ptr) Variable Function
-         49(r20):      7(ptr) Variable Function
-         64(r22):      7(ptr) Variable Function
-         76(r24):      7(ptr) Variable Function
-         88(r50):      7(ptr) Variable Function
-        103(r52):      7(ptr) Variable Function
-        115(r54):      7(ptr) Variable Function
-      130(psout):    129(ptr) Variable Function
+         27(r02):      7(ptr) Variable Function
+         40(r04):      7(ptr) Variable Function
+         53(r20):      7(ptr) Variable Function
+         70(r22):      7(ptr) Variable Function
+         84(r24):      7(ptr) Variable Function
+         98(r50):      7(ptr) Variable Function
+        116(r52):      7(ptr) Variable Function
+        131(r54):      7(ptr) Variable Function
+      148(psout):    147(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              23:    6(float) CompositeExtract 20 0
-              24:    6(float) ImageSampleDrefExplicitLod 19 20 23 Lod 22
-                              Store 8(r00) 24
-              30:          27 Load 29(g_tTex1di4)
-              31:          13 Load 15(g_sSamp)
-              34:          33 SampledImage 30 31
-              35:    6(float) CompositeExtract 20 0
-              36:    6(float) ImageSampleDrefExplicitLod 34 20 35 Lod 22
-                              Store 25(r02) 36
-              42:          39 Load 41(g_tTex1du4)
-              43:          13 Load 15(g_sSamp)
-              46:          45 SampledImage 42 43
-              47:    6(float) CompositeExtract 20 0
-              48:    6(float) ImageSampleDrefExplicitLod 46 20 47 Lod 22
-                              Store 37(r04) 48
-              53:          50 Load 52(g_tTex2df4)
-              54:          13 Load 15(g_sSamp)
-              57:          56 SampledImage 53 54
-              61:    6(float) CompositeExtract 60 0
-              62:    6(float) CompositeExtract 61 0
-              63:    6(float) ImageSampleDrefExplicitLod 57 61 62 Lod 22
-                              Store 49(r20) 63
-              68:          65 Load 67(g_tTex2di4)
-              69:          13 Load 15(g_sSamp)
-              72:          71 SampledImage 68 69
-              73:    6(float) CompositeExtract 60 0
-              74:    6(float) CompositeExtract 73 0
-              75:    6(float) ImageSampleDrefExplicitLod 72 73 74 Lod 22
-                              Store 64(r22) 75
-              80:          77 Load 79(g_tTex2du4)
-              81:          13 Load 15(g_sSamp)
-              84:          83 SampledImage 80 81
-              85:    6(float) CompositeExtract 60 0
-              86:    6(float) CompositeExtract 85 0
-              87:    6(float) ImageSampleDrefExplicitLod 84 85 86 Lod 22
-                              Store 76(r24) 87
-              92:          89 Load 91(g_tTexcdf4)
-              93:          13 Load 15(g_sSamp)
-              96:          95 SampledImage 92 93
-             100:    6(float) CompositeExtract 99 0
-             101:    6(float) CompositeExtract 100 0
-             102:    6(float) ImageSampleDrefExplicitLod 96 100 101 Lod 22
-                              Store 88(r50) 102
-             107:         104 Load 106(g_tTexcdi4)
-             108:          13 Load 15(g_sSamp)
-             111:         110 SampledImage 107 108
-             112:    6(float) CompositeExtract 99 0
-             113:    6(float) CompositeExtract 112 0
-             114:    6(float) ImageSampleDrefExplicitLod 111 112 113 Lod 22
-                              Store 103(r52) 114
-             119:         116 Load 118(g_tTexcdu4)
-             120:          13 Load 15(g_sSamp)
-             123:         122 SampledImage 119 120
-             124:    6(float) CompositeExtract 99 0
-             125:    6(float) CompositeExtract 124 0
-             126:    6(float) ImageSampleDrefExplicitLod 123 124 125 Lod 22
-                              Store 115(r54) 126
-             135:    134(ptr) AccessChain 130(psout) 131
-                              Store 135 133
-             137:      7(ptr) AccessChain 130(psout) 136
-                              Store 137 132
-             140:    134(ptr) AccessChain 130(psout) 131
-             141:  127(fvec4) Load 140
-                              Store 139(Color) 141
-             144:      7(ptr) AccessChain 130(psout) 136
-             145:    6(float) Load 144
-                              Store 143(Depth) 145
+              23:   22(fvec2) CompositeConstruct 20 21
+              25:    6(float) CompositeExtract 23 1
+              26:    6(float) ImageSampleDrefExplicitLod 19 23 25 Lod 24
+                              Store 8(r00) 26
+              32:          29 Load 31(g_tTex1di4)
+              33:          13 Load 15(g_sSamp)
+              36:          35 SampledImage 32 33
+              37:   22(fvec2) CompositeConstruct 20 21
+              38:    6(float) CompositeExtract 37 1
+              39:    6(float) ImageSampleDrefExplicitLod 36 37 38 Lod 24
+                              Store 27(r02) 39
+              45:          42 Load 44(g_tTex1du4)
+              46:          13 Load 15(g_sSamp)
+              49:          48 SampledImage 45 46
+              50:   22(fvec2) CompositeConstruct 20 21
+              51:    6(float) CompositeExtract 50 1
+              52:    6(float) ImageSampleDrefExplicitLod 49 50 51 Lod 24
+                              Store 40(r04) 52
+              57:          54 Load 56(g_tTex2df4)
+              58:          13 Load 15(g_sSamp)
+              61:          60 SampledImage 57 58
+              65:    6(float) CompositeExtract 63 0
+              66:    6(float) CompositeExtract 63 1
+              67:   64(fvec3) CompositeConstruct 65 66 21
+              68:    6(float) CompositeExtract 67 2
+              69:    6(float) ImageSampleDrefExplicitLod 61 67 68 Lod 24
+                              Store 53(r20) 69
+              74:          71 Load 73(g_tTex2di4)
+              75:          13 Load 15(g_sSamp)
+              78:          77 SampledImage 74 75
+              79:    6(float) CompositeExtract 63 0
+              80:    6(float) CompositeExtract 63 1
+              81:   64(fvec3) CompositeConstruct 79 80 21
+              82:    6(float) CompositeExtract 81 2
+              83:    6(float) ImageSampleDrefExplicitLod 78 81 82 Lod 24
+                              Store 70(r22) 83
+              88:          85 Load 87(g_tTex2du4)
+              89:          13 Load 15(g_sSamp)
+              92:          91 SampledImage 88 89
+              93:    6(float) CompositeExtract 63 0
+              94:    6(float) CompositeExtract 63 1
+              95:   64(fvec3) CompositeConstruct 93 94 21
+              96:    6(float) CompositeExtract 95 2
+              97:    6(float) ImageSampleDrefExplicitLod 92 95 96 Lod 24
+                              Store 84(r24) 97
+             102:          99 Load 101(g_tTexcdf4)
+             103:          13 Load 15(g_sSamp)
+             106:         105 SampledImage 102 103
+             110:    6(float) CompositeExtract 108 0
+             111:    6(float) CompositeExtract 108 1
+             112:    6(float) CompositeExtract 108 2
+             113:  109(fvec4) CompositeConstruct 110 111 112 21
+             114:    6(float) CompositeExtract 113 3
+             115:    6(float) ImageSampleDrefExplicitLod 106 113 114 Lod 24
+                              Store 98(r50) 115
+             120:         117 Load 119(g_tTexcdi4)
+             121:          13 Load 15(g_sSamp)
+             124:         123 SampledImage 120 121
+             125:    6(float) CompositeExtract 108 0
+             126:    6(float) CompositeExtract 108 1
+             127:    6(float) CompositeExtract 108 2
+             128:  109(fvec4) CompositeConstruct 125 126 127 21
+             129:    6(float) CompositeExtract 128 3
+             130:    6(float) ImageSampleDrefExplicitLod 124 128 129 Lod 24
+                              Store 116(r52) 130
+             135:         132 Load 134(g_tTexcdu4)
+             136:          13 Load 15(g_sSamp)
+             139:         138 SampledImage 135 136
+             140:    6(float) CompositeExtract 108 0
+             141:    6(float) CompositeExtract 108 1
+             142:    6(float) CompositeExtract 108 2
+             143:  109(fvec4) CompositeConstruct 140 141 142 21
+             144:    6(float) CompositeExtract 143 3
+             145:    6(float) ImageSampleDrefExplicitLod 139 143 144 Lod 24
+                              Store 131(r54) 145
+             153:    152(ptr) AccessChain 148(psout) 149
+                              Store 153 151
+             155:      7(ptr) AccessChain 148(psout) 154
+                              Store 155 150
+             158:    152(ptr) AccessChain 148(psout) 149
+             159:  109(fvec4) Load 158
+                              Store 157(Color) 159
+             162:      7(ptr) AccessChain 148(psout) 154
+             163:    6(float) Load 162
+                              Store 161(Depth) 163
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index b30a252..216ed41 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -8,11 +8,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r01' (temp float)
-0:42          textureLodOffset (global float)
+0:42          textureLodOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -24,11 +24,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r03' (temp float)
-0:43          textureLodOffset (global float)
+0:43          textureLodOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -40,11 +40,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r05' (temp float)
-0:44          textureLodOffset (global float)
+0:44          textureLodOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -56,11 +56,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r21' (temp float)
-0:47          textureLodOffset (global float)
+0:47          textureLodOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -74,11 +74,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r23' (temp float)
-0:48          textureLodOffset (global float)
+0:48          textureLodOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -92,11 +92,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r25' (temp float)
-0:49          textureLodOffset (global float)
+0:49          textureLodOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -140,6 +140,8 @@
 0:65                1 (const int)
 0:65        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -162,8 +164,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -178,11 +178,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r01' (temp float)
-0:42          textureLodOffset (global float)
+0:42          textureLodOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DShadow)
 0:42              'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec2 (temp float)
+0:42            Construct vec2 (temp 2-component vector of float)
 0:42              Constant:
 0:42                0.100000
 0:42              Constant:
@@ -194,11 +194,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r03' (temp float)
-0:43          textureLodOffset (global float)
+0:43          textureLodOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DShadow)
 0:43              'g_tTex1di4' (uniform itexture1D)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec2 (temp float)
+0:43            Construct vec2 (temp 2-component vector of float)
 0:43              Constant:
 0:43                0.100000
 0:43              Constant:
@@ -210,11 +210,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r05' (temp float)
-0:44          textureLodOffset (global float)
+0:44          textureLodOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DShadow)
 0:44              'g_tTex1du4' (uniform utexture1D)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec2 (temp float)
+0:44            Construct vec2 (temp 2-component vector of float)
 0:44              Constant:
 0:44                0.100000
 0:44              Constant:
@@ -226,11 +226,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r21' (temp float)
-0:47          textureLodOffset (global float)
+0:47          textureLodOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DShadow)
 0:47              'g_tTex2df4' (uniform texture2D)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec3 (temp float)
+0:47            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -244,11 +244,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r23' (temp float)
-0:48          textureLodOffset (global float)
+0:48          textureLodOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DShadow)
 0:48              'g_tTex2di4' (uniform itexture2D)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec3 (temp float)
+0:48            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -262,11 +262,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r25' (temp float)
-0:49          textureLodOffset (global float)
+0:49          textureLodOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DShadow)
 0:49              'g_tTex2du4' (uniform utexture2D)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec3 (temp float)
+0:49            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -310,6 +310,8 @@
 0:65                1 (const int)
 0:65        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -332,81 +334,79 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 157
+// Id's are bound by 167
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 104 108
+                              EntryPoint Fragment 4  "main" 114 118
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r01"
                               Name 11  "g_tTex1df4"
                               Name 15  "g_sSamp"
-                              Name 27  "r03"
-                              Name 30  "g_tTex1di4"
-                              Name 38  "r05"
-                              Name 42  "g_tTex1du4"
-                              Name 50  "r21"
-                              Name 53  "g_tTex2df4"
-                              Name 68  "r23"
-                              Name 71  "g_tTex2di4"
-                              Name 80  "r25"
-                              Name 83  "g_tTex2du4"
-                              Name 93  "PS_OUTPUT"
-                              MemberName 93(PS_OUTPUT) 0  "Color"
-                              MemberName 93(PS_OUTPUT) 1  "Depth"
-                              Name 95  "psout"
-                              Name 104  "Color"
-                              Name 108  "Depth"
-                              Name 114  "g_tTex3df4"
-                              Name 117  "g_tTex3di4"
-                              Name 120  "g_tTex3du4"
-                              Name 123  "g_tTexcdf4"
-                              Name 126  "g_tTexcdi4"
-                              Name 129  "g_tTexcdu4"
-                              Name 132  "g_tTex1df4a"
-                              Name 135  "g_tTex1di4a"
-                              Name 138  "g_tTex1du4a"
-                              Name 141  "g_tTex2df4a"
-                              Name 144  "g_tTex2di4a"
-                              Name 147  "g_tTex2du4a"
-                              Name 150  "g_tTexcdf4a"
-                              Name 153  "g_tTexcdi4a"
-                              Name 156  "g_tTexcdu4a"
+                              Name 29  "r03"
+                              Name 32  "g_tTex1di4"
+                              Name 41  "r05"
+                              Name 45  "g_tTex1du4"
+                              Name 54  "r21"
+                              Name 57  "g_tTex2df4"
+                              Name 74  "r23"
+                              Name 77  "g_tTex2di4"
+                              Name 88  "r25"
+                              Name 91  "g_tTex2du4"
+                              Name 103  "PS_OUTPUT"
+                              MemberName 103(PS_OUTPUT) 0  "Color"
+                              MemberName 103(PS_OUTPUT) 1  "Depth"
+                              Name 105  "psout"
+                              Name 114  "Color"
+                              Name 118  "Depth"
+                              Name 124  "g_tTex3df4"
+                              Name 127  "g_tTex3di4"
+                              Name 130  "g_tTex3du4"
+                              Name 133  "g_tTexcdf4"
+                              Name 136  "g_tTexcdi4"
+                              Name 139  "g_tTexcdu4"
+                              Name 142  "g_tTex1df4a"
+                              Name 145  "g_tTex1di4a"
+                              Name 148  "g_tTex1du4a"
+                              Name 151  "g_tTex2df4a"
+                              Name 154  "g_tTex2di4a"
+                              Name 157  "g_tTex2du4a"
+                              Name 160  "g_tTexcdf4a"
+                              Name 163  "g_tTexcdi4a"
+                              Name 166  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4) DescriptorSet 0
                               Decorate 11(g_tTex1df4) Binding 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 30(g_tTex1di4) DescriptorSet 0
-                              Decorate 42(g_tTex1du4) DescriptorSet 0
-                              Decorate 53(g_tTex2df4) DescriptorSet 0
-                              Decorate 71(g_tTex2di4) DescriptorSet 0
-                              Decorate 83(g_tTex2du4) DescriptorSet 0
-                              Decorate 104(Color) Location 0
-                              Decorate 108(Depth) BuiltIn FragDepth
-                              Decorate 114(g_tTex3df4) DescriptorSet 0
-                              Decorate 117(g_tTex3di4) DescriptorSet 0
-                              Decorate 120(g_tTex3du4) DescriptorSet 0
-                              Decorate 123(g_tTexcdf4) DescriptorSet 0
-                              Decorate 126(g_tTexcdi4) DescriptorSet 0
-                              Decorate 129(g_tTexcdu4) DescriptorSet 0
-                              Decorate 132(g_tTex1df4a) DescriptorSet 0
-                              Decorate 135(g_tTex1di4a) DescriptorSet 0
-                              Decorate 138(g_tTex1du4a) DescriptorSet 0
-                              Decorate 141(g_tTex2df4a) DescriptorSet 0
-                              Decorate 144(g_tTex2di4a) DescriptorSet 0
-                              Decorate 147(g_tTex2du4a) DescriptorSet 0
-                              Decorate 150(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 153(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 156(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 32(g_tTex1di4) DescriptorSet 0
+                              Decorate 45(g_tTex1du4) DescriptorSet 0
+                              Decorate 57(g_tTex2df4) DescriptorSet 0
+                              Decorate 77(g_tTex2di4) DescriptorSet 0
+                              Decorate 91(g_tTex2du4) DescriptorSet 0
+                              Decorate 114(Color) Location 0
+                              Decorate 118(Depth) BuiltIn FragDepth
+                              Decorate 124(g_tTex3df4) DescriptorSet 0
+                              Decorate 127(g_tTex3di4) DescriptorSet 0
+                              Decorate 130(g_tTex3du4) DescriptorSet 0
+                              Decorate 133(g_tTexcdf4) DescriptorSet 0
+                              Decorate 136(g_tTexcdi4) DescriptorSet 0
+                              Decorate 139(g_tTexcdu4) DescriptorSet 0
+                              Decorate 142(g_tTex1df4a) DescriptorSet 0
+                              Decorate 145(g_tTex1di4a) DescriptorSet 0
+                              Decorate 148(g_tTex1du4a) DescriptorSet 0
+                              Decorate 151(g_tTex2df4a) DescriptorSet 0
+                              Decorate 154(g_tTex2di4a) DescriptorSet 0
+                              Decorate 157(g_tTex2du4a) DescriptorSet 0
+                              Decorate 160(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 163(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 166(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -421,155 +421,165 @@
               18:             TypeSampledImage 17
               20:    6(float) Constant 1036831949
               21:    6(float) Constant 1061158912
-              22:    6(float) Constant 0
-              23:             TypeInt 32 1
-              24:     23(int) Constant 2
-              28:             TypeImage 23(int) 1D sampled format:Unknown
-              29:             TypePointer UniformConstant 28
-  30(g_tTex1di4):     29(ptr) Variable UniformConstant
-              33:             TypeImage 23(int) 1D depth sampled format:Unknown
-              34:             TypeSampledImage 33
-              39:             TypeInt 32 0
-              40:             TypeImage 39(int) 1D sampled format:Unknown
-              41:             TypePointer UniformConstant 40
-  42(g_tTex1du4):     41(ptr) Variable UniformConstant
-              45:             TypeImage 39(int) 1D depth sampled format:Unknown
-              46:             TypeSampledImage 45
-              51:             TypeImage 6(float) 2D sampled format:Unknown
-              52:             TypePointer UniformConstant 51
-  53(g_tTex2df4):     52(ptr) Variable UniformConstant
-              56:             TypeImage 6(float) 2D depth sampled format:Unknown
-              57:             TypeSampledImage 56
-              59:             TypeVector 6(float) 2
-              60:    6(float) Constant 1045220557
-              61:   59(fvec2) ConstantComposite 20 60
-              63:             TypeVector 23(int) 2
-              64:     23(int) Constant 3
-              65:   63(ivec2) ConstantComposite 24 64
-              69:             TypeImage 23(int) 2D sampled format:Unknown
-              70:             TypePointer UniformConstant 69
-  71(g_tTex2di4):     70(ptr) Variable UniformConstant
-              74:             TypeImage 23(int) 2D depth sampled format:Unknown
-              75:             TypeSampledImage 74
-              81:             TypeImage 39(int) 2D sampled format:Unknown
-              82:             TypePointer UniformConstant 81
-  83(g_tTex2du4):     82(ptr) Variable UniformConstant
-              86:             TypeImage 39(int) 2D depth sampled format:Unknown
-              87:             TypeSampledImage 86
-              92:             TypeVector 6(float) 4
-   93(PS_OUTPUT):             TypeStruct 92(fvec4) 6(float)
-              94:             TypePointer Function 93(PS_OUTPUT)
-              96:     23(int) Constant 0
-              97:    6(float) Constant 1065353216
-              98:   92(fvec4) ConstantComposite 97 97 97 97
-              99:             TypePointer Function 92(fvec4)
-             101:     23(int) Constant 1
-             103:             TypePointer Output 92(fvec4)
-      104(Color):    103(ptr) Variable Output
-             107:             TypePointer Output 6(float)
-      108(Depth):    107(ptr) Variable Output
-             112:             TypeImage 6(float) 3D sampled format:Unknown
-             113:             TypePointer UniformConstant 112
- 114(g_tTex3df4):    113(ptr) Variable UniformConstant
-             115:             TypeImage 23(int) 3D sampled format:Unknown
-             116:             TypePointer UniformConstant 115
- 117(g_tTex3di4):    116(ptr) Variable UniformConstant
-             118:             TypeImage 39(int) 3D sampled format:Unknown
-             119:             TypePointer UniformConstant 118
- 120(g_tTex3du4):    119(ptr) Variable UniformConstant
-             121:             TypeImage 6(float) Cube sampled format:Unknown
-             122:             TypePointer UniformConstant 121
- 123(g_tTexcdf4):    122(ptr) Variable UniformConstant
-             124:             TypeImage 23(int) Cube sampled format:Unknown
-             125:             TypePointer UniformConstant 124
- 126(g_tTexcdi4):    125(ptr) Variable UniformConstant
-             127:             TypeImage 39(int) Cube sampled format:Unknown
-             128:             TypePointer UniformConstant 127
- 129(g_tTexcdu4):    128(ptr) Variable UniformConstant
-             130:             TypeImage 6(float) 1D array sampled format:Unknown
-             131:             TypePointer UniformConstant 130
-132(g_tTex1df4a):    131(ptr) Variable UniformConstant
-             133:             TypeImage 23(int) 1D array sampled format:Unknown
-             134:             TypePointer UniformConstant 133
-135(g_tTex1di4a):    134(ptr) Variable UniformConstant
-             136:             TypeImage 39(int) 1D array sampled format:Unknown
-             137:             TypePointer UniformConstant 136
-138(g_tTex1du4a):    137(ptr) Variable UniformConstant
-             139:             TypeImage 6(float) 2D array sampled format:Unknown
-             140:             TypePointer UniformConstant 139
-141(g_tTex2df4a):    140(ptr) Variable UniformConstant
-             142:             TypeImage 23(int) 2D array sampled format:Unknown
-             143:             TypePointer UniformConstant 142
-144(g_tTex2di4a):    143(ptr) Variable UniformConstant
-             145:             TypeImage 39(int) 2D array sampled format:Unknown
-             146:             TypePointer UniformConstant 145
-147(g_tTex2du4a):    146(ptr) Variable UniformConstant
-             148:             TypeImage 6(float) Cube array sampled format:Unknown
-             149:             TypePointer UniformConstant 148
-150(g_tTexcdf4a):    149(ptr) Variable UniformConstant
-             151:             TypeImage 23(int) Cube array sampled format:Unknown
-             152:             TypePointer UniformConstant 151
-153(g_tTexcdi4a):    152(ptr) Variable UniformConstant
-             154:             TypeImage 39(int) Cube array sampled format:Unknown
-             155:             TypePointer UniformConstant 154
-156(g_tTexcdu4a):    155(ptr) Variable UniformConstant
+              22:             TypeVector 6(float) 2
+              24:    6(float) Constant 0
+              25:             TypeInt 32 1
+              26:     25(int) Constant 2
+              30:             TypeImage 25(int) 1D sampled format:Unknown
+              31:             TypePointer UniformConstant 30
+  32(g_tTex1di4):     31(ptr) Variable UniformConstant
+              35:             TypeImage 25(int) 1D depth sampled format:Unknown
+              36:             TypeSampledImage 35
+              42:             TypeInt 32 0
+              43:             TypeImage 42(int) 1D sampled format:Unknown
+              44:             TypePointer UniformConstant 43
+  45(g_tTex1du4):     44(ptr) Variable UniformConstant
+              48:             TypeImage 42(int) 1D depth sampled format:Unknown
+              49:             TypeSampledImage 48
+              55:             TypeImage 6(float) 2D sampled format:Unknown
+              56:             TypePointer UniformConstant 55
+  57(g_tTex2df4):     56(ptr) Variable UniformConstant
+              60:             TypeImage 6(float) 2D depth sampled format:Unknown
+              61:             TypeSampledImage 60
+              63:    6(float) Constant 1045220557
+              64:   22(fvec2) ConstantComposite 20 63
+              65:             TypeVector 6(float) 3
+              69:             TypeVector 25(int) 2
+              70:     25(int) Constant 3
+              71:   69(ivec2) ConstantComposite 26 70
+              75:             TypeImage 25(int) 2D sampled format:Unknown
+              76:             TypePointer UniformConstant 75
+  77(g_tTex2di4):     76(ptr) Variable UniformConstant
+              80:             TypeImage 25(int) 2D depth sampled format:Unknown
+              81:             TypeSampledImage 80
+              89:             TypeImage 42(int) 2D sampled format:Unknown
+              90:             TypePointer UniformConstant 89
+  91(g_tTex2du4):     90(ptr) Variable UniformConstant
+              94:             TypeImage 42(int) 2D depth sampled format:Unknown
+              95:             TypeSampledImage 94
+             102:             TypeVector 6(float) 4
+  103(PS_OUTPUT):             TypeStruct 102(fvec4) 6(float)
+             104:             TypePointer Function 103(PS_OUTPUT)
+             106:     25(int) Constant 0
+             107:    6(float) Constant 1065353216
+             108:  102(fvec4) ConstantComposite 107 107 107 107
+             109:             TypePointer Function 102(fvec4)
+             111:     25(int) Constant 1
+             113:             TypePointer Output 102(fvec4)
+      114(Color):    113(ptr) Variable Output
+             117:             TypePointer Output 6(float)
+      118(Depth):    117(ptr) Variable Output
+             122:             TypeImage 6(float) 3D sampled format:Unknown
+             123:             TypePointer UniformConstant 122
+ 124(g_tTex3df4):    123(ptr) Variable UniformConstant
+             125:             TypeImage 25(int) 3D sampled format:Unknown
+             126:             TypePointer UniformConstant 125
+ 127(g_tTex3di4):    126(ptr) Variable UniformConstant
+             128:             TypeImage 42(int) 3D sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+ 130(g_tTex3du4):    129(ptr) Variable UniformConstant
+             131:             TypeImage 6(float) Cube sampled format:Unknown
+             132:             TypePointer UniformConstant 131
+ 133(g_tTexcdf4):    132(ptr) Variable UniformConstant
+             134:             TypeImage 25(int) Cube sampled format:Unknown
+             135:             TypePointer UniformConstant 134
+ 136(g_tTexcdi4):    135(ptr) Variable UniformConstant
+             137:             TypeImage 42(int) Cube sampled format:Unknown
+             138:             TypePointer UniformConstant 137
+ 139(g_tTexcdu4):    138(ptr) Variable UniformConstant
+             140:             TypeImage 6(float) 1D array sampled format:Unknown
+             141:             TypePointer UniformConstant 140
+142(g_tTex1df4a):    141(ptr) Variable UniformConstant
+             143:             TypeImage 25(int) 1D array sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+145(g_tTex1di4a):    144(ptr) Variable UniformConstant
+             146:             TypeImage 42(int) 1D array sampled format:Unknown
+             147:             TypePointer UniformConstant 146
+148(g_tTex1du4a):    147(ptr) Variable UniformConstant
+             149:             TypeImage 6(float) 2D array sampled format:Unknown
+             150:             TypePointer UniformConstant 149
+151(g_tTex2df4a):    150(ptr) Variable UniformConstant
+             152:             TypeImage 25(int) 2D array sampled format:Unknown
+             153:             TypePointer UniformConstant 152
+154(g_tTex2di4a):    153(ptr) Variable UniformConstant
+             155:             TypeImage 42(int) 2D array sampled format:Unknown
+             156:             TypePointer UniformConstant 155
+157(g_tTex2du4a):    156(ptr) Variable UniformConstant
+             158:             TypeImage 6(float) Cube array sampled format:Unknown
+             159:             TypePointer UniformConstant 158
+160(g_tTexcdf4a):    159(ptr) Variable UniformConstant
+             161:             TypeImage 25(int) Cube array sampled format:Unknown
+             162:             TypePointer UniformConstant 161
+163(g_tTexcdi4a):    162(ptr) Variable UniformConstant
+             164:             TypeImage 42(int) Cube array sampled format:Unknown
+             165:             TypePointer UniformConstant 164
+166(g_tTexcdu4a):    165(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r01):      7(ptr) Variable Function
-         27(r03):      7(ptr) Variable Function
-         38(r05):      7(ptr) Variable Function
-         50(r21):      7(ptr) Variable Function
-         68(r23):      7(ptr) Variable Function
-         80(r25):      7(ptr) Variable Function
-       95(psout):     94(ptr) Variable Function
+         29(r03):      7(ptr) Variable Function
+         41(r05):      7(ptr) Variable Function
+         54(r21):      7(ptr) Variable Function
+         74(r23):      7(ptr) Variable Function
+         88(r25):      7(ptr) Variable Function
+      105(psout):    104(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 20 0
-              26:    6(float) ImageSampleDrefExplicitLod 19 20 25 Lod ConstOffset 22 24
-                              Store 8(r01) 26
-              31:          28 Load 30(g_tTex1di4)
-              32:          13 Load 15(g_sSamp)
-              35:          34 SampledImage 31 32
-              36:    6(float) CompositeExtract 20 0
-              37:    6(float) ImageSampleDrefExplicitLod 35 20 36 Lod ConstOffset 22 24
-                              Store 27(r03) 37
-              43:          40 Load 42(g_tTex1du4)
-              44:          13 Load 15(g_sSamp)
-              47:          46 SampledImage 43 44
-              48:    6(float) CompositeExtract 20 0
-              49:    6(float) ImageSampleDrefExplicitLod 47 20 48 Lod ConstOffset 22 24
-                              Store 38(r05) 49
-              54:          51 Load 53(g_tTex2df4)
-              55:          13 Load 15(g_sSamp)
-              58:          57 SampledImage 54 55
-              62:    6(float) CompositeExtract 61 0
-              66:    6(float) CompositeExtract 62 0
-              67:    6(float) ImageSampleDrefExplicitLod 58 62 66 Lod ConstOffset 22 65
-                              Store 50(r21) 67
-              72:          69 Load 71(g_tTex2di4)
-              73:          13 Load 15(g_sSamp)
-              76:          75 SampledImage 72 73
-              77:    6(float) CompositeExtract 61 0
-              78:    6(float) CompositeExtract 77 0
-              79:    6(float) ImageSampleDrefExplicitLod 76 77 78 Lod ConstOffset 22 65
-                              Store 68(r23) 79
-              84:          81 Load 83(g_tTex2du4)
-              85:          13 Load 15(g_sSamp)
-              88:          87 SampledImage 84 85
-              89:    6(float) CompositeExtract 61 0
-              90:    6(float) CompositeExtract 89 0
-              91:    6(float) ImageSampleDrefExplicitLod 88 89 90 Lod ConstOffset 22 65
-                              Store 80(r25) 91
-             100:     99(ptr) AccessChain 95(psout) 96
-                              Store 100 98
-             102:      7(ptr) AccessChain 95(psout) 101
-                              Store 102 97
-             105:     99(ptr) AccessChain 95(psout) 96
-             106:   92(fvec4) Load 105
-                              Store 104(Color) 106
-             109:      7(ptr) AccessChain 95(psout) 101
-             110:    6(float) Load 109
-                              Store 108(Depth) 110
+              23:   22(fvec2) CompositeConstruct 20 21
+              27:    6(float) CompositeExtract 23 1
+              28:    6(float) ImageSampleDrefExplicitLod 19 23 27 Lod ConstOffset 24 26
+                              Store 8(r01) 28
+              33:          30 Load 32(g_tTex1di4)
+              34:          13 Load 15(g_sSamp)
+              37:          36 SampledImage 33 34
+              38:   22(fvec2) CompositeConstruct 20 21
+              39:    6(float) CompositeExtract 38 1
+              40:    6(float) ImageSampleDrefExplicitLod 37 38 39 Lod ConstOffset 24 26
+                              Store 29(r03) 40
+              46:          43 Load 45(g_tTex1du4)
+              47:          13 Load 15(g_sSamp)
+              50:          49 SampledImage 46 47
+              51:   22(fvec2) CompositeConstruct 20 21
+              52:    6(float) CompositeExtract 51 1
+              53:    6(float) ImageSampleDrefExplicitLod 50 51 52 Lod ConstOffset 24 26
+                              Store 41(r05) 53
+              58:          55 Load 57(g_tTex2df4)
+              59:          13 Load 15(g_sSamp)
+              62:          61 SampledImage 58 59
+              66:    6(float) CompositeExtract 64 0
+              67:    6(float) CompositeExtract 64 1
+              68:   65(fvec3) CompositeConstruct 66 67 21
+              72:    6(float) CompositeExtract 68 2
+              73:    6(float) ImageSampleDrefExplicitLod 62 68 72 Lod ConstOffset 24 71
+                              Store 54(r21) 73
+              78:          75 Load 77(g_tTex2di4)
+              79:          13 Load 15(g_sSamp)
+              82:          81 SampledImage 78 79
+              83:    6(float) CompositeExtract 64 0
+              84:    6(float) CompositeExtract 64 1
+              85:   65(fvec3) CompositeConstruct 83 84 21
+              86:    6(float) CompositeExtract 85 2
+              87:    6(float) ImageSampleDrefExplicitLod 82 85 86 Lod ConstOffset 24 71
+                              Store 74(r23) 87
+              92:          89 Load 91(g_tTex2du4)
+              93:          13 Load 15(g_sSamp)
+              96:          95 SampledImage 92 93
+              97:    6(float) CompositeExtract 64 0
+              98:    6(float) CompositeExtract 64 1
+              99:   65(fvec3) CompositeConstruct 97 98 21
+             100:    6(float) CompositeExtract 99 2
+             101:    6(float) ImageSampleDrefExplicitLod 96 99 100 Lod ConstOffset 24 71
+                              Store 88(r25) 101
+             110:    109(ptr) AccessChain 105(psout) 106
+                              Store 110 108
+             112:      7(ptr) AccessChain 105(psout) 111
+                              Store 112 107
+             115:    109(ptr) AccessChain 105(psout) 106
+             116:  102(fvec4) Load 115
+                              Store 114(Color) 116
+             119:      7(ptr) AccessChain 105(psout) 111
+             120:    6(float) Load 119
+                              Store 118(Depth) 120
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 19d262a..2e5f3cd 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -8,11 +8,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r11' (temp float)
-0:42          textureLodOffset (global float)
+0:42          textureLodOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -25,11 +25,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r13' (temp float)
-0:43          textureLodOffset (global float)
+0:43          textureLodOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -42,11 +42,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r15' (temp float)
-0:44          textureLodOffset (global float)
+0:44          textureLodOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -59,11 +59,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r31' (temp float)
-0:47          textureLodOffset (global float)
+0:47          textureLodOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -78,11 +78,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r33' (temp float)
-0:48          textureLodOffset (global float)
+0:48          textureLodOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -97,11 +97,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r35' (temp float)
-0:49          textureLodOffset (global float)
+0:49          textureLodOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -146,6 +146,8 @@
 0:66                1 (const int)
 0:66        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -168,8 +170,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -184,11 +184,11 @@
 0:42      Sequence
 0:42        move second child to first child (temp float)
 0:42          'r11' (temp float)
-0:42          textureLodOffset (global float)
+0:42          textureLodOffset (temp float)
 0:42            Construct combined texture-sampler (temp sampler1DArrayShadow)
 0:42              'g_tTex1df4a' (uniform texture1DArray)
 0:42              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:42            Construct vec3 (temp float)
+0:42            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -201,11 +201,11 @@
 0:43      Sequence
 0:43        move second child to first child (temp float)
 0:43          'r13' (temp float)
-0:43          textureLodOffset (global float)
+0:43          textureLodOffset (temp float)
 0:43            Construct combined texture-sampler (temp isampler1DArrayShadow)
 0:43              'g_tTex1di4a' (uniform itexture1DArray)
 0:43              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:43            Construct vec3 (temp float)
+0:43            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -218,11 +218,11 @@
 0:44      Sequence
 0:44        move second child to first child (temp float)
 0:44          'r15' (temp float)
-0:44          textureLodOffset (global float)
+0:44          textureLodOffset (temp float)
 0:44            Construct combined texture-sampler (temp usampler1DArrayShadow)
 0:44              'g_tTex1du4a' (uniform utexture1DArray)
 0:44              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:44            Construct vec3 (temp float)
+0:44            Construct vec3 (temp 3-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -235,11 +235,11 @@
 0:47      Sequence
 0:47        move second child to first child (temp float)
 0:47          'r31' (temp float)
-0:47          textureLodOffset (global float)
+0:47          textureLodOffset (temp float)
 0:47            Construct combined texture-sampler (temp sampler2DArrayShadow)
 0:47              'g_tTex2df4a' (uniform texture2DArray)
 0:47              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:47            Construct vec4 (temp float)
+0:47            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -254,11 +254,11 @@
 0:48      Sequence
 0:48        move second child to first child (temp float)
 0:48          'r33' (temp float)
-0:48          textureLodOffset (global float)
+0:48          textureLodOffset (temp float)
 0:48            Construct combined texture-sampler (temp isampler2DArrayShadow)
 0:48              'g_tTex2di4a' (uniform itexture2DArray)
 0:48              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:48            Construct vec4 (temp float)
+0:48            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -273,11 +273,11 @@
 0:49      Sequence
 0:49        move second child to first child (temp float)
 0:49          'r35' (temp float)
-0:49          textureLodOffset (global float)
+0:49          textureLodOffset (temp float)
 0:49            Construct combined texture-sampler (temp usampler2DArrayShadow)
 0:49              'g_tTex2du4a' (uniform utexture2DArray)
 0:49              'g_sSamp' (layout(binding=0 ) uniform sampler)
-0:49            Construct vec4 (temp float)
+0:49            Construct vec4 (temp 4-component vector of float)
 0:?               Constant:
 0:?                 0.100000
 0:?                 0.200000
@@ -322,6 +322,8 @@
 0:66                1 (const int)
 0:66        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -344,81 +346,79 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 163
+// Id's are bound by 178
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 110 114
+                              EntryPoint Fragment 4  "main" 125 129
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "r11"
                               Name 11  "g_tTex1df4a"
                               Name 15  "g_sSamp"
-                              Name 31  "r13"
-                              Name 34  "g_tTex1di4a"
-                              Name 43  "r15"
-                              Name 47  "g_tTex1du4a"
-                              Name 56  "r31"
-                              Name 59  "g_tTex2df4a"
-                              Name 74  "r33"
-                              Name 77  "g_tTex2di4a"
-                              Name 86  "r35"
-                              Name 89  "g_tTex2du4a"
-                              Name 99  "PS_OUTPUT"
-                              MemberName 99(PS_OUTPUT) 0  "Color"
-                              MemberName 99(PS_OUTPUT) 1  "Depth"
-                              Name 101  "psout"
-                              Name 110  "Color"
-                              Name 114  "Depth"
-                              Name 120  "g_tTex1df4"
-                              Name 123  "g_tTex1di4"
-                              Name 126  "g_tTex1du4"
-                              Name 129  "g_tTex2df4"
-                              Name 132  "g_tTex2di4"
-                              Name 135  "g_tTex2du4"
-                              Name 138  "g_tTex3df4"
-                              Name 141  "g_tTex3di4"
-                              Name 144  "g_tTex3du4"
-                              Name 147  "g_tTexcdf4"
-                              Name 150  "g_tTexcdi4"
-                              Name 153  "g_tTexcdu4"
-                              Name 156  "g_tTexcdf4a"
-                              Name 159  "g_tTexcdi4a"
-                              Name 162  "g_tTexcdu4a"
+                              Name 34  "r13"
+                              Name 37  "g_tTex1di4a"
+                              Name 48  "r15"
+                              Name 52  "g_tTex1du4a"
+                              Name 63  "r31"
+                              Name 66  "g_tTex2df4a"
+                              Name 84  "r33"
+                              Name 87  "g_tTex2di4a"
+                              Name 99  "r35"
+                              Name 102  "g_tTex2du4a"
+                              Name 114  "PS_OUTPUT"
+                              MemberName 114(PS_OUTPUT) 0  "Color"
+                              MemberName 114(PS_OUTPUT) 1  "Depth"
+                              Name 116  "psout"
+                              Name 125  "Color"
+                              Name 129  "Depth"
+                              Name 135  "g_tTex1df4"
+                              Name 138  "g_tTex1di4"
+                              Name 141  "g_tTex1du4"
+                              Name 144  "g_tTex2df4"
+                              Name 147  "g_tTex2di4"
+                              Name 150  "g_tTex2du4"
+                              Name 153  "g_tTex3df4"
+                              Name 156  "g_tTex3di4"
+                              Name 159  "g_tTex3du4"
+                              Name 162  "g_tTexcdf4"
+                              Name 165  "g_tTexcdi4"
+                              Name 168  "g_tTexcdu4"
+                              Name 171  "g_tTexcdf4a"
+                              Name 174  "g_tTexcdi4a"
+                              Name 177  "g_tTexcdu4a"
                               Decorate 11(g_tTex1df4a) DescriptorSet 0
                               Decorate 15(g_sSamp) DescriptorSet 0
                               Decorate 15(g_sSamp) Binding 0
-                              Decorate 34(g_tTex1di4a) DescriptorSet 0
-                              Decorate 47(g_tTex1du4a) DescriptorSet 0
-                              Decorate 59(g_tTex2df4a) DescriptorSet 0
-                              Decorate 77(g_tTex2di4a) DescriptorSet 0
-                              Decorate 89(g_tTex2du4a) DescriptorSet 0
-                              Decorate 110(Color) Location 0
-                              Decorate 114(Depth) BuiltIn FragDepth
-                              Decorate 120(g_tTex1df4) DescriptorSet 0
-                              Decorate 120(g_tTex1df4) Binding 0
-                              Decorate 123(g_tTex1di4) DescriptorSet 0
-                              Decorate 126(g_tTex1du4) DescriptorSet 0
-                              Decorate 129(g_tTex2df4) DescriptorSet 0
-                              Decorate 132(g_tTex2di4) DescriptorSet 0
-                              Decorate 135(g_tTex2du4) DescriptorSet 0
-                              Decorate 138(g_tTex3df4) DescriptorSet 0
-                              Decorate 141(g_tTex3di4) DescriptorSet 0
-                              Decorate 144(g_tTex3du4) DescriptorSet 0
-                              Decorate 147(g_tTexcdf4) DescriptorSet 0
-                              Decorate 150(g_tTexcdi4) DescriptorSet 0
-                              Decorate 153(g_tTexcdu4) DescriptorSet 0
-                              Decorate 156(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 159(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 162(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 37(g_tTex1di4a) DescriptorSet 0
+                              Decorate 52(g_tTex1du4a) DescriptorSet 0
+                              Decorate 66(g_tTex2df4a) DescriptorSet 0
+                              Decorate 87(g_tTex2di4a) DescriptorSet 0
+                              Decorate 102(g_tTex2du4a) DescriptorSet 0
+                              Decorate 125(Color) Location 0
+                              Decorate 129(Depth) BuiltIn FragDepth
+                              Decorate 135(g_tTex1df4) DescriptorSet 0
+                              Decorate 135(g_tTex1df4) Binding 0
+                              Decorate 138(g_tTex1di4) DescriptorSet 0
+                              Decorate 141(g_tTex1du4) DescriptorSet 0
+                              Decorate 144(g_tTex2df4) DescriptorSet 0
+                              Decorate 147(g_tTex2di4) DescriptorSet 0
+                              Decorate 150(g_tTex2du4) DescriptorSet 0
+                              Decorate 153(g_tTex3df4) DescriptorSet 0
+                              Decorate 156(g_tTex3di4) DescriptorSet 0
+                              Decorate 159(g_tTex3du4) DescriptorSet 0
+                              Decorate 162(g_tTexcdf4) DescriptorSet 0
+                              Decorate 165(g_tTexcdi4) DescriptorSet 0
+                              Decorate 168(g_tTexcdu4) DescriptorSet 0
+                              Decorate 171(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 174(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 177(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -436,158 +436,173 @@
               22:    6(float) Constant 1045220557
               23:   20(fvec2) ConstantComposite 21 22
               24:    6(float) Constant 1061158912
-              26:    6(float) Constant 0
-              27:             TypeInt 32 1
-              28:     27(int) Constant 2
-              32:             TypeImage 27(int) 1D array sampled format:Unknown
-              33:             TypePointer UniformConstant 32
- 34(g_tTex1di4a):     33(ptr) Variable UniformConstant
-              37:             TypeImage 27(int) 1D depth array sampled format:Unknown
-              38:             TypeSampledImage 37
-              44:             TypeInt 32 0
-              45:             TypeImage 44(int) 1D array sampled format:Unknown
-              46:             TypePointer UniformConstant 45
- 47(g_tTex1du4a):     46(ptr) Variable UniformConstant
-              50:             TypeImage 44(int) 1D depth array sampled format:Unknown
-              51:             TypeSampledImage 50
-              57:             TypeImage 6(float) 2D array sampled format:Unknown
-              58:             TypePointer UniformConstant 57
- 59(g_tTex2df4a):     58(ptr) Variable UniformConstant
-              62:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              63:             TypeSampledImage 62
-              65:             TypeVector 6(float) 3
-              66:    6(float) Constant 1050253722
-              67:   65(fvec3) ConstantComposite 21 22 66
-              69:             TypeVector 27(int) 2
-              70:     27(int) Constant 3
-              71:   69(ivec2) ConstantComposite 28 70
-              75:             TypeImage 27(int) 2D array sampled format:Unknown
-              76:             TypePointer UniformConstant 75
- 77(g_tTex2di4a):     76(ptr) Variable UniformConstant
-              80:             TypeImage 27(int) 2D depth array sampled format:Unknown
-              81:             TypeSampledImage 80
-              87:             TypeImage 44(int) 2D array sampled format:Unknown
-              88:             TypePointer UniformConstant 87
- 89(g_tTex2du4a):     88(ptr) Variable UniformConstant
-              92:             TypeImage 44(int) 2D depth array sampled format:Unknown
-              93:             TypeSampledImage 92
-              98:             TypeVector 6(float) 4
-   99(PS_OUTPUT):             TypeStruct 98(fvec4) 6(float)
-             100:             TypePointer Function 99(PS_OUTPUT)
-             102:     27(int) Constant 0
-             103:    6(float) Constant 1065353216
-             104:   98(fvec4) ConstantComposite 103 103 103 103
-             105:             TypePointer Function 98(fvec4)
-             107:     27(int) Constant 1
-             109:             TypePointer Output 98(fvec4)
-      110(Color):    109(ptr) Variable Output
-             113:             TypePointer Output 6(float)
-      114(Depth):    113(ptr) Variable Output
-             118:             TypeImage 6(float) 1D sampled format:Unknown
-             119:             TypePointer UniformConstant 118
- 120(g_tTex1df4):    119(ptr) Variable UniformConstant
-             121:             TypeImage 27(int) 1D sampled format:Unknown
-             122:             TypePointer UniformConstant 121
- 123(g_tTex1di4):    122(ptr) Variable UniformConstant
-             124:             TypeImage 44(int) 1D sampled format:Unknown
-             125:             TypePointer UniformConstant 124
- 126(g_tTex1du4):    125(ptr) Variable UniformConstant
-             127:             TypeImage 6(float) 2D sampled format:Unknown
-             128:             TypePointer UniformConstant 127
- 129(g_tTex2df4):    128(ptr) Variable UniformConstant
-             130:             TypeImage 27(int) 2D sampled format:Unknown
-             131:             TypePointer UniformConstant 130
- 132(g_tTex2di4):    131(ptr) Variable UniformConstant
-             133:             TypeImage 44(int) 2D sampled format:Unknown
+              25:             TypeVector 6(float) 3
+              29:    6(float) Constant 0
+              30:             TypeInt 32 1
+              31:     30(int) Constant 2
+              35:             TypeImage 30(int) 1D array sampled format:Unknown
+              36:             TypePointer UniformConstant 35
+ 37(g_tTex1di4a):     36(ptr) Variable UniformConstant
+              40:             TypeImage 30(int) 1D depth array sampled format:Unknown
+              41:             TypeSampledImage 40
+              49:             TypeInt 32 0
+              50:             TypeImage 49(int) 1D array sampled format:Unknown
+              51:             TypePointer UniformConstant 50
+ 52(g_tTex1du4a):     51(ptr) Variable UniformConstant
+              55:             TypeImage 49(int) 1D depth array sampled format:Unknown
+              56:             TypeSampledImage 55
+              64:             TypeImage 6(float) 2D array sampled format:Unknown
+              65:             TypePointer UniformConstant 64
+ 66(g_tTex2df4a):     65(ptr) Variable UniformConstant
+              69:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              70:             TypeSampledImage 69
+              72:    6(float) Constant 1050253722
+              73:   25(fvec3) ConstantComposite 21 22 72
+              74:             TypeVector 6(float) 4
+              79:             TypeVector 30(int) 2
+              80:     30(int) Constant 3
+              81:   79(ivec2) ConstantComposite 31 80
+              85:             TypeImage 30(int) 2D array sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+ 87(g_tTex2di4a):     86(ptr) Variable UniformConstant
+              90:             TypeImage 30(int) 2D depth array sampled format:Unknown
+              91:             TypeSampledImage 90
+             100:             TypeImage 49(int) 2D array sampled format:Unknown
+             101:             TypePointer UniformConstant 100
+102(g_tTex2du4a):    101(ptr) Variable UniformConstant
+             105:             TypeImage 49(int) 2D depth array sampled format:Unknown
+             106:             TypeSampledImage 105
+  114(PS_OUTPUT):             TypeStruct 74(fvec4) 6(float)
+             115:             TypePointer Function 114(PS_OUTPUT)
+             117:     30(int) Constant 0
+             118:    6(float) Constant 1065353216
+             119:   74(fvec4) ConstantComposite 118 118 118 118
+             120:             TypePointer Function 74(fvec4)
+             122:     30(int) Constant 1
+             124:             TypePointer Output 74(fvec4)
+      125(Color):    124(ptr) Variable Output
+             128:             TypePointer Output 6(float)
+      129(Depth):    128(ptr) Variable Output
+             133:             TypeImage 6(float) 1D sampled format:Unknown
              134:             TypePointer UniformConstant 133
- 135(g_tTex2du4):    134(ptr) Variable UniformConstant
-             136:             TypeImage 6(float) 3D sampled format:Unknown
+ 135(g_tTex1df4):    134(ptr) Variable UniformConstant
+             136:             TypeImage 30(int) 1D sampled format:Unknown
              137:             TypePointer UniformConstant 136
- 138(g_tTex3df4):    137(ptr) Variable UniformConstant
-             139:             TypeImage 27(int) 3D sampled format:Unknown
+ 138(g_tTex1di4):    137(ptr) Variable UniformConstant
+             139:             TypeImage 49(int) 1D sampled format:Unknown
              140:             TypePointer UniformConstant 139
- 141(g_tTex3di4):    140(ptr) Variable UniformConstant
-             142:             TypeImage 44(int) 3D sampled format:Unknown
+ 141(g_tTex1du4):    140(ptr) Variable UniformConstant
+             142:             TypeImage 6(float) 2D sampled format:Unknown
              143:             TypePointer UniformConstant 142
- 144(g_tTex3du4):    143(ptr) Variable UniformConstant
-             145:             TypeImage 6(float) Cube sampled format:Unknown
+ 144(g_tTex2df4):    143(ptr) Variable UniformConstant
+             145:             TypeImage 30(int) 2D sampled format:Unknown
              146:             TypePointer UniformConstant 145
- 147(g_tTexcdf4):    146(ptr) Variable UniformConstant
-             148:             TypeImage 27(int) Cube sampled format:Unknown
+ 147(g_tTex2di4):    146(ptr) Variable UniformConstant
+             148:             TypeImage 49(int) 2D sampled format:Unknown
              149:             TypePointer UniformConstant 148
- 150(g_tTexcdi4):    149(ptr) Variable UniformConstant
-             151:             TypeImage 44(int) Cube sampled format:Unknown
+ 150(g_tTex2du4):    149(ptr) Variable UniformConstant
+             151:             TypeImage 6(float) 3D sampled format:Unknown
              152:             TypePointer UniformConstant 151
- 153(g_tTexcdu4):    152(ptr) Variable UniformConstant
-             154:             TypeImage 6(float) Cube array sampled format:Unknown
+ 153(g_tTex3df4):    152(ptr) Variable UniformConstant
+             154:             TypeImage 30(int) 3D sampled format:Unknown
              155:             TypePointer UniformConstant 154
-156(g_tTexcdf4a):    155(ptr) Variable UniformConstant
-             157:             TypeImage 27(int) Cube array sampled format:Unknown
+ 156(g_tTex3di4):    155(ptr) Variable UniformConstant
+             157:             TypeImage 49(int) 3D sampled format:Unknown
              158:             TypePointer UniformConstant 157
-159(g_tTexcdi4a):    158(ptr) Variable UniformConstant
-             160:             TypeImage 44(int) Cube array sampled format:Unknown
+ 159(g_tTex3du4):    158(ptr) Variable UniformConstant
+             160:             TypeImage 6(float) Cube sampled format:Unknown
              161:             TypePointer UniformConstant 160
-162(g_tTexcdu4a):    161(ptr) Variable UniformConstant
+ 162(g_tTexcdf4):    161(ptr) Variable UniformConstant
+             163:             TypeImage 30(int) Cube sampled format:Unknown
+             164:             TypePointer UniformConstant 163
+ 165(g_tTexcdi4):    164(ptr) Variable UniformConstant
+             166:             TypeImage 49(int) Cube sampled format:Unknown
+             167:             TypePointer UniformConstant 166
+ 168(g_tTexcdu4):    167(ptr) Variable UniformConstant
+             169:             TypeImage 6(float) Cube array sampled format:Unknown
+             170:             TypePointer UniformConstant 169
+171(g_tTexcdf4a):    170(ptr) Variable UniformConstant
+             172:             TypeImage 30(int) Cube array sampled format:Unknown
+             173:             TypePointer UniformConstant 172
+174(g_tTexcdi4a):    173(ptr) Variable UniformConstant
+             175:             TypeImage 49(int) Cube array sampled format:Unknown
+             176:             TypePointer UniformConstant 175
+177(g_tTexcdu4a):    176(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
           8(r11):      7(ptr) Variable Function
-         31(r13):      7(ptr) Variable Function
-         43(r15):      7(ptr) Variable Function
-         56(r31):      7(ptr) Variable Function
-         74(r33):      7(ptr) Variable Function
-         86(r35):      7(ptr) Variable Function
-      101(psout):    100(ptr) Variable Function
+         34(r13):      7(ptr) Variable Function
+         48(r15):      7(ptr) Variable Function
+         63(r31):      7(ptr) Variable Function
+         84(r33):      7(ptr) Variable Function
+         99(r35):      7(ptr) Variable Function
+      116(psout):    115(ptr) Variable Function
               12:           9 Load 11(g_tTex1df4a)
               16:          13 Load 15(g_sSamp)
               19:          18 SampledImage 12 16
-              25:    6(float) CompositeExtract 23 0
-              29:    6(float) CompositeExtract 25 0
-              30:    6(float) ImageSampleDrefExplicitLod 19 25 29 Lod ConstOffset 26 28
-                              Store 8(r11) 30
-              35:          32 Load 34(g_tTex1di4a)
-              36:          13 Load 15(g_sSamp)
-              39:          38 SampledImage 35 36
-              40:    6(float) CompositeExtract 23 0
-              41:    6(float) CompositeExtract 40 0
-              42:    6(float) ImageSampleDrefExplicitLod 39 40 41 Lod ConstOffset 26 28
-                              Store 31(r13) 42
-              48:          45 Load 47(g_tTex1du4a)
-              49:          13 Load 15(g_sSamp)
-              52:          51 SampledImage 48 49
-              53:    6(float) CompositeExtract 23 0
-              54:    6(float) CompositeExtract 53 0
-              55:    6(float) ImageSampleDrefExplicitLod 52 53 54 Lod ConstOffset 26 28
-                              Store 43(r15) 55
-              60:          57 Load 59(g_tTex2df4a)
-              61:          13 Load 15(g_sSamp)
-              64:          63 SampledImage 60 61
-              68:    6(float) CompositeExtract 67 0
-              72:    6(float) CompositeExtract 68 0
-              73:    6(float) ImageSampleDrefExplicitLod 64 68 72 Lod ConstOffset 26 71
-                              Store 56(r31) 73
-              78:          75 Load 77(g_tTex2di4a)
-              79:          13 Load 15(g_sSamp)
-              82:          81 SampledImage 78 79
-              83:    6(float) CompositeExtract 67 0
-              84:    6(float) CompositeExtract 83 0
-              85:    6(float) ImageSampleDrefExplicitLod 82 83 84 Lod ConstOffset 26 71
-                              Store 74(r33) 85
-              90:          87 Load 89(g_tTex2du4a)
-              91:          13 Load 15(g_sSamp)
-              94:          93 SampledImage 90 91
-              95:    6(float) CompositeExtract 67 0
-              96:    6(float) CompositeExtract 95 0
-              97:    6(float) ImageSampleDrefExplicitLod 94 95 96 Lod ConstOffset 26 71
-                              Store 86(r35) 97
-             106:    105(ptr) AccessChain 101(psout) 102
-                              Store 106 104
-             108:      7(ptr) AccessChain 101(psout) 107
-                              Store 108 103
-             111:    105(ptr) AccessChain 101(psout) 102
-             112:   98(fvec4) Load 111
-                              Store 110(Color) 112
-             115:      7(ptr) AccessChain 101(psout) 107
-             116:    6(float) Load 115
-                              Store 114(Depth) 116
+              26:    6(float) CompositeExtract 23 0
+              27:    6(float) CompositeExtract 23 1
+              28:   25(fvec3) CompositeConstruct 26 27 24
+              32:    6(float) CompositeExtract 28 2
+              33:    6(float) ImageSampleDrefExplicitLod 19 28 32 Lod ConstOffset 29 31
+                              Store 8(r11) 33
+              38:          35 Load 37(g_tTex1di4a)
+              39:          13 Load 15(g_sSamp)
+              42:          41 SampledImage 38 39
+              43:    6(float) CompositeExtract 23 0
+              44:    6(float) CompositeExtract 23 1
+              45:   25(fvec3) CompositeConstruct 43 44 24
+              46:    6(float) CompositeExtract 45 2
+              47:    6(float) ImageSampleDrefExplicitLod 42 45 46 Lod ConstOffset 29 31
+                              Store 34(r13) 47
+              53:          50 Load 52(g_tTex1du4a)
+              54:          13 Load 15(g_sSamp)
+              57:          56 SampledImage 53 54
+              58:    6(float) CompositeExtract 23 0
+              59:    6(float) CompositeExtract 23 1
+              60:   25(fvec3) CompositeConstruct 58 59 24
+              61:    6(float) CompositeExtract 60 2
+              62:    6(float) ImageSampleDrefExplicitLod 57 60 61 Lod ConstOffset 29 31
+                              Store 48(r15) 62
+              67:          64 Load 66(g_tTex2df4a)
+              68:          13 Load 15(g_sSamp)
+              71:          70 SampledImage 67 68
+              75:    6(float) CompositeExtract 73 0
+              76:    6(float) CompositeExtract 73 1
+              77:    6(float) CompositeExtract 73 2
+              78:   74(fvec4) CompositeConstruct 75 76 77 24
+              82:    6(float) CompositeExtract 78 3
+              83:    6(float) ImageSampleDrefExplicitLod 71 78 82 Lod ConstOffset 29 81
+                              Store 63(r31) 83
+              88:          85 Load 87(g_tTex2di4a)
+              89:          13 Load 15(g_sSamp)
+              92:          91 SampledImage 88 89
+              93:    6(float) CompositeExtract 73 0
+              94:    6(float) CompositeExtract 73 1
+              95:    6(float) CompositeExtract 73 2
+              96:   74(fvec4) CompositeConstruct 93 94 95 24
+              97:    6(float) CompositeExtract 96 3
+              98:    6(float) ImageSampleDrefExplicitLod 92 96 97 Lod ConstOffset 29 81
+                              Store 84(r33) 98
+             103:         100 Load 102(g_tTex2du4a)
+             104:          13 Load 15(g_sSamp)
+             107:         106 SampledImage 103 104
+             108:    6(float) CompositeExtract 73 0
+             109:    6(float) CompositeExtract 73 1
+             110:    6(float) CompositeExtract 73 2
+             111:   74(fvec4) CompositeConstruct 108 109 110 24
+             112:    6(float) CompositeExtract 111 3
+             113:    6(float) ImageSampleDrefExplicitLod 107 111 112 Lod ConstOffset 29 81
+                              Store 99(r35) 113
+             121:    120(ptr) AccessChain 116(psout) 117
+                              Store 121 119
+             123:      7(ptr) AccessChain 116(psout) 122
+                              Store 123 118
+             126:    120(ptr) AccessChain 116(psout) 117
+             127:   74(fvec4) Load 126
+                              Store 125(Color) 127
+             130:      7(ptr) AccessChain 116(psout) 122
+             131:    6(float) Load 130
+                              Store 129(Depth) 131
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 46a6bbc..2a0d77a 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -191,6 +191,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -202,8 +204,6 @@
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -401,6 +401,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -412,8 +414,6 @@
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index 395efc2..feaba77 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -239,6 +239,8 @@
 0:50                1 (const int)
 0:50        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -253,8 +255,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -500,6 +500,8 @@
 0:50                1 (const int)
 0:50        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -514,8 +516,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index 2e79be3..f6d37c3 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -225,6 +225,7 @@
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -239,7 +240,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 
 Linked vertex stage:
@@ -471,6 +471,7 @@
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -485,7 +486,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 7ef5e07..7938e52 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -209,6 +209,8 @@
 0:48                1 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -223,8 +225,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -440,6 +440,8 @@
 0:48                1 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -454,8 +456,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index 2043f38..dee78bc 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -146,6 +146,8 @@
 0:38                1 (const int)
 0:38        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -157,8 +159,6 @@
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -311,6 +311,8 @@
 0:38                1 (const int)
 0:38        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -322,8 +324,6 @@
 0:?     'g_tTexcdf4' (uniform textureCubeArray)
 0:?     'g_tTexcdi4' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index 351e2ed..afdedb7 100644
--- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -155,6 +155,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -166,8 +168,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -329,6 +329,8 @@
 0:42                1 (const int)
 0:42        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -340,8 +342,6 @@
 0:?     'g_tTexcdf4a' (uniform textureCubeArray)
 0:?     'g_tTexcdi4a' (uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' (uniform utextureCubeArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index d37090f..34a6597 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -185,6 +185,8 @@
 0:51                1 (const int)
 0:51        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -200,8 +202,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -393,6 +393,8 @@
 0:51                1 (const int)
 0:51        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_sSamp2d' (uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
@@ -408,8 +410,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index 0438299..04d0870 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -171,6 +171,7 @@
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -185,7 +186,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 
 Linked vertex stage:
@@ -363,6 +363,7 @@
 0:48                0 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Pos' (out 4-component vector of float Position)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -377,7 +378,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Pos' (out 4-component vector of float Position)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index 0f0f968..aa77961 100644
--- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -173,6 +173,8 @@
 0:48                1 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -187,8 +189,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -368,6 +368,8 @@
 0:48                1 (const int)
 0:48        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
@@ -382,8 +384,6 @@
 0:?     'g_tTexcdf4' (uniform textureCube)
 0:?     'g_tTexcdi4' (uniform itextureCube)
 0:?     'g_tTexcdu4' (uniform utextureCube)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index 8eb74cd..056a4f1 100644
--- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -128,6 +128,8 @@
 0:36                1 (const int)
 0:36        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -136,8 +138,6 @@
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 
 Linked fragment stage:
@@ -272,6 +272,8 @@
 0:36                1 (const int)
 0:36        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'Depth' (out float FragDepth)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4a' (layout(binding=1 ) uniform texture1DArray)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1DArray)
@@ -280,8 +282,6 @@
 0:?     'g_tTex2df4' (uniform texture2DArray)
 0:?     'g_tTex2di4' (uniform itexture2DArray)
 0:?     'g_tTex2du4' (uniform utexture2DArray)
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'Depth' (out float FragDepth)
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
index 9ea4f83..a15caac 100755
--- a/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -58,41 +58,43 @@
 0:13          'MyVal' (temp 3-component vector of float)
 0:13          Construct vec3 (temp 3-component vector of float)
 0:13            'V' (temp float)
-0:16      Compare Greater Than (temp bool)
+0:16      Compare Greater Than (temp 3-component vector of bool)
 0:16        'foo' (temp 3-component vector of float)
 0:16        Constant:
 0:16          4.000000
 0:16          4.000000
 0:16          4.000000
-0:17      Compare Greater Than or Equal (temp bool)
+0:17      Compare Greater Than or Equal (temp 3-component vector of bool)
 0:17        'foo' (temp 3-component vector of float)
 0:17        Constant:
 0:17          5.000000
 0:17          5.000000
 0:17          5.000000
-0:18      Compare Less Than (temp bool)
+0:18      Compare Less Than (temp 3-component vector of bool)
 0:18        Constant:
 0:18          6.000000
 0:18          6.000000
 0:18          6.000000
 0:18        'foo' (temp 3-component vector of float)
-0:19      Compare Less Than or Equal (temp bool)
+0:19      Compare Less Than or Equal (temp 3-component vector of bool)
 0:19        Constant:
 0:19          7.000000
 0:19          7.000000
 0:19          7.000000
 0:19        'foo' (temp 3-component vector of float)
-0:21      Compare Equal (temp bool)
-0:21        Construct vec4 (temp 4-component vector of float)
-0:21          direct index (temp float)
-0:21            'v' (temp 4-component vector of float)
-0:21            Constant:
-0:21              0 (const int)
-0:21        'v' (temp 4-component vector of float)
-0:22      Compare Not Equal (temp bool)
-0:22        Construct vec4 (temp 4-component vector of float)
-0:22          'f' (in float)
-0:22        'v' (temp 4-component vector of float)
+0:21      all (temp bool)
+0:21        Equal (temp 4-component vector of bool)
+0:21          Construct vec4 (temp 4-component vector of float)
+0:21            direct index (temp float)
+0:21              'v' (temp 4-component vector of float)
+0:21              Constant:
+0:21                0 (const int)
+0:21          'v' (temp 4-component vector of float)
+0:22      any (temp bool)
+0:22        NotEqual (temp 4-component vector of bool)
+0:22          Construct vec4 (temp 4-component vector of float)
+0:22            'f' (in float)
+0:22          'v' (temp 4-component vector of float)
 0:26      Compare Equal (temp bool)
 0:26        'f1' (temp 1-component vector of float)
 0:26        Construct float (temp 1-component vector of float)
@@ -113,6 +115,7 @@
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -173,41 +176,43 @@
 0:13          'MyVal' (temp 3-component vector of float)
 0:13          Construct vec3 (temp 3-component vector of float)
 0:13            'V' (temp float)
-0:16      Compare Greater Than (temp bool)
+0:16      Compare Greater Than (temp 3-component vector of bool)
 0:16        'foo' (temp 3-component vector of float)
 0:16        Constant:
 0:16          4.000000
 0:16          4.000000
 0:16          4.000000
-0:17      Compare Greater Than or Equal (temp bool)
+0:17      Compare Greater Than or Equal (temp 3-component vector of bool)
 0:17        'foo' (temp 3-component vector of float)
 0:17        Constant:
 0:17          5.000000
 0:17          5.000000
 0:17          5.000000
-0:18      Compare Less Than (temp bool)
+0:18      Compare Less Than (temp 3-component vector of bool)
 0:18        Constant:
 0:18          6.000000
 0:18          6.000000
 0:18          6.000000
 0:18        'foo' (temp 3-component vector of float)
-0:19      Compare Less Than or Equal (temp bool)
+0:19      Compare Less Than or Equal (temp 3-component vector of bool)
 0:19        Constant:
 0:19          7.000000
 0:19          7.000000
 0:19          7.000000
 0:19        'foo' (temp 3-component vector of float)
-0:21      Compare Equal (temp bool)
-0:21        Construct vec4 (temp 4-component vector of float)
-0:21          direct index (temp float)
-0:21            'v' (temp 4-component vector of float)
-0:21            Constant:
-0:21              0 (const int)
-0:21        'v' (temp 4-component vector of float)
-0:22      Compare Not Equal (temp bool)
-0:22        Construct vec4 (temp 4-component vector of float)
-0:22          'f' (in float)
-0:22        'v' (temp 4-component vector of float)
+0:21      all (temp bool)
+0:21        Equal (temp 4-component vector of bool)
+0:21          Construct vec4 (temp 4-component vector of float)
+0:21            direct index (temp float)
+0:21              'v' (temp 4-component vector of float)
+0:21              Constant:
+0:21                0 (const int)
+0:21          'v' (temp 4-component vector of float)
+0:22      any (temp bool)
+0:22        NotEqual (temp 4-component vector of bool)
+0:22          Construct vec4 (temp 4-component vector of float)
+0:22            'f' (in float)
+0:22          'v' (temp 4-component vector of float)
 0:26      Compare Equal (temp bool)
 0:26        'f1' (temp 1-component vector of float)
 0:26        Construct float (temp 1-component vector of float)
@@ -227,7 +232,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 84
+// Id's are bound by 85
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -244,7 +249,7 @@
                               Name 33  "V"
                               Name 34  "MyVal"
                               Name 37  "foo"
-                              Name 69  "f1"
+                              Name 70  "f1"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -266,17 +271,19 @@
               39:    6(float) Constant 1082130432
               40:   22(fvec3) ConstantComposite 39 39 39
               41:             TypeBool
-              44:    6(float) Constant 1084227584
-              45:   22(fvec3) ConstantComposite 44 44 44
-              47:    6(float) Constant 1086324736
-              48:   22(fvec3) ConstantComposite 47 47 47
-              51:    6(float) Constant 1088421888
-              52:   22(fvec3) ConstantComposite 51 51 51
-              55:             TypeInt 32 0
-              56:     55(int) Constant 0
-              61:             TypeVector 41(bool) 4
+              42:             TypeVector 41(bool) 3
+              45:    6(float) Constant 1084227584
+              46:   22(fvec3) ConstantComposite 45 45 45
+              48:    6(float) Constant 1086324736
+              49:   22(fvec3) ConstantComposite 48 48 48
+              52:    6(float) Constant 1088421888
+              53:   22(fvec3) ConstantComposite 52 52 52
+              56:             TypeInt 32 0
+              57:     56(int) Constant 0
+              62:             TypeVector 41(bool) 4
          4(main):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 13(PixelShaderFunction(vf4;f1;):    7(fvec4) Function None 10
        11(input):      8(ptr) FunctionParameter
@@ -288,7 +295,7 @@
            33(V):      9(ptr) Variable Function
        34(MyVal):     23(ptr) Variable Function
          37(foo):     23(ptr) Variable Function
-          69(f1):      9(ptr) Variable Function
+          70(f1):      9(ptr) Variable Function
                               Store 15(v) 17
                               Store 15(v) 19
               20:    6(float) Load 12(f)
@@ -305,35 +312,35 @@
               36:   22(fvec3) CompositeConstruct 35 35 35
                               Store 34(MyVal) 36
               38:   22(fvec3) Load 37(foo)
-              42:    41(bool) FOrdGreaterThan 38 40
-              43:   22(fvec3) Load 37(foo)
-              46:    41(bool) FOrdGreaterThanEqual 43 45
-              49:   22(fvec3) Load 37(foo)
-              50:    41(bool) FOrdLessThan 48 49
-              53:   22(fvec3) Load 37(foo)
-              54:    41(bool) FOrdLessThanEqual 52 53
-              57:      9(ptr) AccessChain 15(v) 56
-              58:    6(float) Load 57
-              59:    7(fvec4) CompositeConstruct 58 58 58 58
-              60:    7(fvec4) Load 15(v)
-              62:   61(bvec4) FOrdEqual 59 60
-              63:    41(bool) All 62
-              64:    6(float) Load 12(f)
-              65:    7(fvec4) CompositeConstruct 64 64 64 64
-              66:    7(fvec4) Load 15(v)
-              67:   61(bvec4) FOrdNotEqual 65 66
-              68:    41(bool) Any 67
-              70:    6(float) Load 69(f1)
-              71:    7(fvec4) Load 15(v)
-              72:    6(float) CompositeExtract 71 0
-              73:    41(bool) FOrdEqual 70 72
-              74:    7(fvec4) Load 15(v)
-              75:    6(float) CompositeExtract 74 0
-              76:    6(float) Load 69(f1)
-              77:    41(bool) FOrdLessThan 75 76
-              78:    6(float) Load 69(f1)
-              79:    6(float) Load 69(f1)
-              80:   22(fvec3) CompositeConstruct 79 79 79
-              81:    7(fvec4) Load 11(input)
-                              ReturnValue 81
+              43:   42(bvec3) FOrdGreaterThan 38 40
+              44:   22(fvec3) Load 37(foo)
+              47:   42(bvec3) FOrdGreaterThanEqual 44 46
+              50:   22(fvec3) Load 37(foo)
+              51:   42(bvec3) FOrdLessThan 49 50
+              54:   22(fvec3) Load 37(foo)
+              55:   42(bvec3) FOrdLessThanEqual 53 54
+              58:      9(ptr) AccessChain 15(v) 57
+              59:    6(float) Load 58
+              60:    7(fvec4) CompositeConstruct 59 59 59 59
+              61:    7(fvec4) Load 15(v)
+              63:   62(bvec4) FOrdEqual 60 61
+              64:    41(bool) All 63
+              65:    6(float) Load 12(f)
+              66:    7(fvec4) CompositeConstruct 65 65 65 65
+              67:    7(fvec4) Load 15(v)
+              68:   62(bvec4) FOrdNotEqual 66 67
+              69:    41(bool) Any 68
+              71:    6(float) Load 70(f1)
+              72:    7(fvec4) Load 15(v)
+              73:    6(float) CompositeExtract 72 0
+              74:    41(bool) FOrdEqual 71 73
+              75:    7(fvec4) Load 15(v)
+              76:    6(float) CompositeExtract 75 0
+              77:    6(float) Load 70(f1)
+              78:    41(bool) FOrdLessThan 76 77
+              79:    6(float) Load 70(f1)
+              80:    6(float) Load 70(f1)
+              81:   22(fvec3) CompositeConstruct 80 80 80
+              82:    7(fvec4) Load 11(input)
+                              ReturnValue 82
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
index 0836a61..629668a 100755
--- a/Test/baseResults/hlsl.sin.frag.out
+++ b/Test/baseResults/hlsl.sin.frag.out
@@ -9,7 +9,7 @@
 0:3      Sequence
 0:3        move second child to first child (temp 4-component vector of float)
 0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:3          sine (global 4-component vector of float)
+0:3          sine (temp 4-component vector of float)
 0:3            'input' (layout(location=0 ) in 4-component vector of float)
 0:3        Branch: Return
 0:?   Linker Objects
@@ -30,7 +30,7 @@
 0:3      Sequence
 0:3        move second child to first child (temp 4-component vector of float)
 0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:3          sine (global 4-component vector of float)
+0:3          sine (temp 4-component vector of float)
 0:3            'input' (layout(location=0 ) in 4-component vector of float)
 0:3        Branch: Return
 0:?   Linker Objects
diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out
index 8593db6..94c1b2a 100644
--- a/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/Test/baseResults/hlsl.stringtoken.frag.out
@@ -25,9 +25,9 @@
 0:19                0 (const int)
 0:19        Branch: Return
 0:?   Linker Objects
-0:?     'TestTexture' (uniform texture2D)
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-component vector of float TestUF})
+0:?     'TestTexture' (uniform texture2D)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float TestUF})
 
 
 Linked fragment stage:
@@ -59,9 +59,9 @@
 0:19                0 (const int)
 0:19        Branch: Return
 0:?   Linker Objects
-0:?     'TestTexture' (uniform texture2D)
 0:?     'Color' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform 4-component vector of float TestUF})
+0:?     'TestTexture' (uniform texture2D)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float TestUF})
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -83,6 +83,7 @@
                               Name 28  ""
                               Decorate 19(Color) Location 0
                               Decorate 25(TestTexture) DescriptorSet 0
+                              MemberDecorate 26($Global) 0 Offset 0
                               Decorate 26($Global) Block
                               Decorate 28 DescriptorSet 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index 5fef959..c14018e 100755
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -26,9 +26,7 @@
 0:42          'input' (layout(location=0 ) in 4-component vector of float)
 0:42        Branch: Return
 0:?   Linker Objects
-0:?     's2' (global structure{temp 4-component vector of float i})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'a' (layout(location=1 ) smooth in 4-component vector of float)
 0:?     'b' (layout(location=2 ) flat in bool)
@@ -38,6 +36,8 @@
 0:?     'ff2' (layout(location=5 offset=4 ) in bool)
 0:?     'ff3' (layout(location=6 binding=0 offset=4 ) in bool)
 0:?     'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
+0:?     's2' (global structure{temp 4-component vector of float i})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
 
 
 Linked fragment stage:
@@ -66,9 +66,7 @@
 0:42          'input' (layout(location=0 ) in 4-component vector of float)
 0:42        Branch: Return
 0:?   Linker Objects
-0:?     's2' (global structure{temp 4-component vector of float i})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
 0:?     'input' (layout(location=0 ) in 4-component vector of float)
 0:?     'a' (layout(location=1 ) smooth in 4-component vector of float)
 0:?     'b' (layout(location=2 ) flat in bool)
@@ -78,15 +76,17 @@
 0:?     'ff2' (layout(location=5 offset=4 ) in bool)
 0:?     'ff3' (layout(location=6 binding=0 offset=4 ) in bool)
 0:?     'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
+0:?     's2' (global structure{temp 4-component vector of float i})
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 49
+// Id's are bound by 50
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 25 30 31 38 40 42 45 46 47 48
+                              EntryPoint Fragment 4  "PixelShaderFunction" 25 30 31 34 36 38 41 42 43 44
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 8  "FS"
@@ -98,44 +98,51 @@
                               Name 25  "ff4"
                               Name 30  "@entryPointOutput"
                               Name 31  "input"
-                              Name 34  "myS"
-                              MemberName 34(myS) 0  "b"
-                              MemberName 34(myS) 1  "c"
-                              MemberName 34(myS) 2  "a"
-                              MemberName 34(myS) 3  "d"
-                              Name 35  "$Global"
-                              MemberName 35($Global) 0  "s1"
-                              MemberName 35($Global) 1  "ff5"
-                              MemberName 35($Global) 2  "ff6"
-                              Name 37  ""
-                              Name 38  "a"
-                              Name 40  "b"
-                              Name 42  "c"
-                              Name 45  "d"
-                              Name 46  "ff1"
-                              Name 47  "ff2"
-                              Name 48  "ff3"
+                              Name 34  "a"
+                              Name 36  "b"
+                              Name 38  "c"
+                              Name 41  "d"
+                              Name 42  "ff1"
+                              Name 43  "ff2"
+                              Name 44  "ff3"
+                              Name 46  "myS"
+                              MemberName 46(myS) 0  "b"
+                              MemberName 46(myS) 1  "c"
+                              MemberName 46(myS) 2  "a"
+                              MemberName 46(myS) 3  "d"
+                              Name 47  "$Global"
+                              MemberName 47($Global) 0  "s1"
+                              MemberName 47($Global) 1  "ff5"
+                              MemberName 47($Global) 2  "ff6"
+                              Name 49  ""
                               Decorate 25(ff4) Offset 4
                               Decorate 25(ff4) Location 7
                               Decorate 25(ff4) Binding 0
                               Decorate 30(@entryPointOutput) Location 0
                               Decorate 31(input) Location 0
-                              Decorate 35($Global) Block
-                              Decorate 37 DescriptorSet 0
-                              Decorate 38(a) Location 1
-                              Decorate 40(b) Flat
-                              Decorate 40(b) Location 2
-                              Decorate 42(c) NoPerspective
-                              Decorate 42(c) Centroid
-                              Decorate 42(c) Location 3
-                              Decorate 45(d) Centroid
-                              Decorate 45(d) Location 4
-                              Decorate 46(ff1) BuiltIn FrontFacing
-                              Decorate 47(ff2) Offset 4
-                              Decorate 47(ff2) Location 5
-                              Decorate 48(ff3) Offset 4
-                              Decorate 48(ff3) Location 6
-                              Decorate 48(ff3) Binding 0
+                              Decorate 34(a) Location 1
+                              Decorate 36(b) Flat
+                              Decorate 36(b) Location 2
+                              Decorate 38(c) NoPerspective
+                              Decorate 38(c) Centroid
+                              Decorate 38(c) Location 3
+                              Decorate 41(d) Centroid
+                              Decorate 41(d) Location 4
+                              Decorate 42(ff1) BuiltIn FrontFacing
+                              Decorate 43(ff2) Offset 4
+                              Decorate 43(ff2) Location 5
+                              Decorate 44(ff3) Offset 4
+                              Decorate 44(ff3) Location 6
+                              Decorate 44(ff3) Binding 0
+                              MemberDecorate 46(myS) 0 Offset 0
+                              MemberDecorate 46(myS) 1 Offset 4
+                              MemberDecorate 46(myS) 2 Offset 16
+                              MemberDecorate 46(myS) 3 Offset 32
+                              MemberDecorate 47($Global) 0 Offset 0
+                              MemberDecorate 47($Global) 1 Offset 1620
+                              MemberDecorate 47($Global) 2 Offset 1636
+                              Decorate 47($Global) Block
+                              Decorate 49 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeBool
@@ -155,21 +162,22 @@
               29:             TypePointer Output 18(fvec4)
 30(@entryPointOutput):     29(ptr) Variable Output
        31(input):     24(ptr) Variable Input
-         34(myS):             TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
-     35($Global):             TypeStruct 34(myS) 17(float) 17(float)
-              36:             TypePointer Uniform 35($Global)
-              37:     36(ptr) Variable Uniform
-           38(a):     24(ptr) Variable Input
-              39:             TypePointer Input 6(bool)
-           40(b):     39(ptr) Variable Input
-              41:             TypePointer Input 17(float)
-           42(c):     41(ptr) Variable Input
-              43:             TypeVector 17(float) 2
-              44:             TypePointer Input 43(fvec2)
-           45(d):     44(ptr) Variable Input
-         46(ff1):     39(ptr) Variable Input
-         47(ff2):     39(ptr) Variable Input
-         48(ff3):     39(ptr) Variable Input
+           34(a):     24(ptr) Variable Input
+              35:             TypePointer Input 6(bool)
+           36(b):     35(ptr) Variable Input
+              37:             TypePointer Input 17(float)
+           38(c):     37(ptr) Variable Input
+              39:             TypeVector 17(float) 2
+              40:             TypePointer Input 39(fvec2)
+           41(d):     40(ptr) Variable Input
+         42(ff1):     35(ptr) Variable Input
+         43(ff2):     35(ptr) Variable Input
+         44(ff3):     35(ptr) Variable Input
+              45:             TypeInt 32 0
+         46(myS):             TypeStruct 45(int) 45(int) 18(fvec4) 18(fvec4)
+     47($Global):             TypeStruct 46(myS) 17(float) 17(float)
+              48:             TypePointer Uniform 47($Global)
+              49:     48(ptr) Variable Uniform
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
           10(s3):      9(ptr) Variable Function
diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out
index 16951a3..54fc662 100755
--- a/Test/baseResults/hlsl.swizzle.frag.out
+++ b/Test/baseResults/hlsl.swizzle.frag.out
@@ -38,6 +38,7 @@
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -106,6 +107,7 @@
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
                               Store 14(AmbientColor) 18
+                              Return
                               FunctionEnd
 11(ShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out
index 0769cde..d000257 100644
--- a/Test/baseResults/hlsl.tx.bracket.frag.out
+++ b/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -186,6 +186,7 @@
 0:72                0 (const int)
 0:72        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -202,8 +203,7 @@
 0:?     'g_tTex2df4a' (uniform texture2DArray)
 0:?     'g_tTex2di4a' (uniform itexture2DArray)
 0:?     'g_tTex2du4a' (uniform utexture2DArray)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 
 Linked fragment stage:
@@ -396,6 +396,7 @@
 0:72                0 (const int)
 0:72        Branch: Return
 0:?   Linker Objects
+0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 0:?     'g_sSamp' (layout(binding=0 ) uniform sampler)
 0:?     'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
 0:?     'g_tTex1di4' (uniform itexture1D)
@@ -412,8 +413,7 @@
 0:?     'g_tTex2df4a' (uniform texture2DArray)
 0:?     'g_tTex2di4a' (uniform itexture2DArray)
 0:?     'g_tTex2du4a' (uniform utexture2DArray)
-0:?     'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
-0:?     'Color' (layout(location=0 ) out 4-component vector of float)
+0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out
index e8bda1a..565f45f 100755
--- a/Test/baseResults/hlsl.typedef.frag.out
+++ b/Test/baseResults/hlsl.typedef.frag.out
@@ -39,6 +39,7 @@
 
 Linked fragment stage:
 
+WARNING: Linking fragment stage: Entry point not found
 
 Shader version: 450
 gl_FragCoord origin is upper left
@@ -106,6 +107,7 @@
               20:      9(int) Constant 2
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+                              Return
                               FunctionEnd
 14(ShaderFunction(vf4;i1;):    7(fvec4) Function None 11
        12(input):      8(ptr) FunctionParameter
diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out
index 28e326d..699364f 100755
--- a/Test/baseResults/hlsl.whileLoop.frag.out
+++ b/Test/baseResults/hlsl.whileLoop.frag.out
@@ -8,9 +8,10 @@
 0:?     Sequence
 0:3      Loop with condition tested first
 0:3        Loop Condition
-0:3        Compare Not Equal (temp bool)
-0:3          'input' (layout(location=0 ) in 4-component vector of float)
-0:3          'input' (layout(location=0 ) in 4-component vector of float)
+0:3        any (temp bool)
+0:3          NotEqual (temp 4-component vector of bool)
+0:3            'input' (layout(location=0 ) in 4-component vector of float)
+0:3            'input' (layout(location=0 ) in 4-component vector of float)
 0:3        Loop Body
 0:?         Sequence
 0:3          Sequence
@@ -50,9 +51,10 @@
 0:?     Sequence
 0:3      Loop with condition tested first
 0:3        Loop Condition
-0:3        Compare Not Equal (temp bool)
-0:3          'input' (layout(location=0 ) in 4-component vector of float)
-0:3          'input' (layout(location=0 ) in 4-component vector of float)
+0:3        any (temp bool)
+0:3          NotEqual (temp 4-component vector of bool)
+0:3            'input' (layout(location=0 ) in 4-component vector of float)
+0:3            'input' (layout(location=0 ) in 4-component vector of float)
 0:3        Loop Body
 0:?         Sequence
 0:3          Sequence
diff --git a/Test/baseResults/maxClipDistances.vert.out b/Test/baseResults/maxClipDistances.vert.out
index 5d44a66..4ad4ef1 100644
--- a/Test/baseResults/maxClipDistances.vert.out
+++ b/Test/baseResults/maxClipDistances.vert.out
@@ -5,7 +5,6 @@
 0:5    Function Parameters: 
 0:?   Linker Objects
 0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
-0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 
 
@@ -18,6 +17,5 @@
 0:5    Function Parameters: 
 0:?   Linker Objects
 0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
-0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 
diff --git a/Test/baseResults/specExamples.frag.out b/Test/baseResults/specExamples.frag.out
index 848839c..711c529 100644
--- a/Test/baseResults/specExamples.frag.out
+++ b/Test/baseResults/specExamples.frag.out
@@ -318,12 +318,9 @@
 0:?     'anon@1' (in block{in 4-component vector of float LightPos, in 3-component vector of float LightColor})
 0:?     'Materiala' (in block{in 4-component vector of float Color, in 2-component vector of float TexCoord})
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'factor' (layout(location=3 index=1 ) out 4-component vector of float)
 0:?     'colors' (layout(location=2 ) out 3-element array of 4-component vector of float)
 0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'anon@2' (in block{in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
 0:?     'anon@2' (in block{in float FogFragCoord gl_FogFragCoord, in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
 
 
@@ -607,11 +604,8 @@
 0:?     'anon@1' (in block{in 4-component vector of float LightPos, in 3-component vector of float LightColor})
 0:?     'Materiala' (in block{in 4-component vector of float Color, in 2-component vector of float TexCoord})
 0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
-0:?     'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
 0:?     'factor' (layout(location=3 index=1 ) out 4-component vector of float)
 0:?     'colors' (layout(location=2 ) out 3-element array of 4-component vector of float)
 0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'gl_FragDepth' (gl_FragDepth float FragDepth)
-0:?     'anon@2' (in block{in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
 0:?     'anon@2' (in block{in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
 
diff --git a/Test/baseResults/specExamples.vert.out b/Test/baseResults/specExamples.vert.out
index ef9a122..d7de758 100644
--- a/Test/baseResults/specExamples.vert.out
+++ b/Test/baseResults/specExamples.vert.out
@@ -298,11 +298,10 @@
 0:?     'c2' (layout(binding=3 ) uniform atomic_uint)
 0:?     'd2' (layout(binding=2 ) uniform atomic_uint)
 0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, ...})
-0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, ...})
 0:?     'ColorInv' (smooth out 3-component vector of float)
 0:?     'Color4' (invariant centroid smooth out 3-component vector of float)
 0:?     'position' (noContraction smooth out 4-component vector of float)
-0:?     'Color5' (smooth out 3-component vector of float)
+0:?     'Color5' (noContraction smooth out 3-component vector of float)
 0:?     'a' (in 4-component vector of float)
 0:?     'b' (in 4-component vector of float)
 0:?     'c' (in 4-component vector of float)
@@ -582,11 +581,10 @@
 0:?     'c2' (layout(binding=3 ) uniform atomic_uint)
 0:?     'd2' (layout(binding=2 ) uniform atomic_uint)
 0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
-0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
 0:?     'ColorInv' (smooth out 3-component vector of float)
 0:?     'Color4' (invariant centroid smooth out 3-component vector of float)
 0:?     'position' (noContraction smooth out 4-component vector of float)
-0:?     'Color5' (smooth out 3-component vector of float)
+0:?     'Color5' (noContraction smooth out 3-component vector of float)
 0:?     'a' (in 4-component vector of float)
 0:?     'b' (in 4-component vector of float)
 0:?     'c' (in 4-component vector of float)
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
old mode 100755
new mode 100644
index 3eafc2b..bd1f346
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -7,121 +7,122 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 66
+// Id's are bound by 67
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 52
+                              EntryPoint GLCompute 4  "main" 53
                               ExecutionMode 4 LocalSize 16 32 4
                               Source ESSL 310
                               Name 4  "main"
-                              Name 12  "outb"
-                              MemberName 12(outb) 0  "f"
-                              MemberName 12(outb) 1  "g"
-                              MemberName 12(outb) 2  "h"
-                              MemberName 12(outb) 3  "uns"
-                              Name 14  "outbname"
-                              Name 18  "s"
-                              Name 23  "outbna"
-                              MemberName 23(outbna) 0  "k"
-                              MemberName 23(outbna) 1  "na"
-                              Name 25  "outbnamena"
-                              Name 41  "i"
-                              Name 47  "outs"
-                              MemberName 47(outs) 0  "s"
-                              MemberName 47(outs) 1  "va"
-                              Name 49  "outnames"
-                              Name 52  "gl_LocalInvocationID"
-                              Decorate 11 ArrayStride 16
-                              MemberDecorate 12(outb) 0 Offset 0
-                              MemberDecorate 12(outb) 1 Offset 4
-                              MemberDecorate 12(outb) 2 Offset 8
-                              MemberDecorate 12(outb) 3 Offset 16
-                              Decorate 12(outb) BufferBlock
-                              Decorate 14(outbname) DescriptorSet 0
-                              MemberDecorate 23(outbna) 0 Offset 0
-                              MemberDecorate 23(outbna) 1 Offset 16
-                              Decorate 23(outbna) BufferBlock
-                              Decorate 25(outbnamena) DescriptorSet 0
-                              Decorate 46 ArrayStride 16
-                              MemberDecorate 47(outs) 0 Offset 0
-                              MemberDecorate 47(outs) 1 Offset 16
-                              Decorate 47(outs) BufferBlock
-                              Decorate 49(outnames) DescriptorSet 0
-                              Decorate 52(gl_LocalInvocationID) BuiltIn LocalInvocationId
-                              Decorate 65 BuiltIn WorkgroupSize
+                              Name 13  "outb"
+                              MemberName 13(outb) 0  "f"
+                              MemberName 13(outb) 1  "g"
+                              MemberName 13(outb) 2  "h"
+                              MemberName 13(outb) 3  "uns"
+                              Name 15  "outbname"
+                              Name 19  "s"
+                              Name 24  "outbna"
+                              MemberName 24(outbna) 0  "k"
+                              MemberName 24(outbna) 1  "na"
+                              Name 26  "outbnamena"
+                              Name 42  "i"
+                              Name 48  "outs"
+                              MemberName 48(outs) 0  "s"
+                              MemberName 48(outs) 1  "va"
+                              Name 50  "outnames"
+                              Name 53  "gl_LocalInvocationID"
+                              Decorate 12 ArrayStride 16
+                              MemberDecorate 13(outb) 0 Offset 0
+                              MemberDecorate 13(outb) 1 Offset 4
+                              MemberDecorate 13(outb) 2 Offset 8
+                              MemberDecorate 13(outb) 3 Offset 16
+                              Decorate 13(outb) BufferBlock
+                              Decorate 15(outbname) DescriptorSet 0
+                              MemberDecorate 24(outbna) 0 Offset 0
+                              MemberDecorate 24(outbna) 1 Offset 16
+                              Decorate 24(outbna) BufferBlock
+                              Decorate 26(outbnamena) DescriptorSet 0
+                              Decorate 47 ArrayStride 16
+                              MemberDecorate 48(outs) 0 Offset 0
+                              MemberDecorate 48(outs) 1 Offset 16
+                              Decorate 48(outs) BufferBlock
+                              Decorate 50(outnames) DescriptorSet 0
+                              Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 66 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
-               7:      6(int) Constant 1
-               8:      6(int) Constant 0
-               9:             TypeFloat 32
-              10:             TypeVector 9(float) 3
-              11:             TypeRuntimeArray 10(fvec3)
-        12(outb):             TypeStruct 9(float) 9(float) 9(float) 11
-              13:             TypePointer Uniform 12(outb)
-    14(outbname):     13(ptr) Variable Uniform
-              15:             TypeInt 32 1
-              16:     15(int) Constant 0
-              17:             TypePointer Workgroup 9(float)
-           18(s):     17(ptr) Variable Workgroup
-              20:             TypePointer Uniform 9(float)
-              22:             TypeVector 9(float) 4
-      23(outbna):             TypeStruct 15(int) 22(fvec4)
-              24:             TypePointer Uniform 23(outbna)
-  25(outbnamena):     24(ptr) Variable Uniform
-              26:     15(int) Constant 1
-              29:             TypePointer Uniform 22(fvec4)
-              31:     15(int) Constant 3
-              32:     15(int) Constant 18
-              35:     15(int) Constant 17
-              36:    9(float) Constant 1077936128
-              37:   10(fvec3) ConstantComposite 36 36 36
-              38:             TypePointer Uniform 10(fvec3)
-              40:             TypePointer Workgroup 15(int)
-           41(i):     40(ptr) Variable Workgroup
-              46:             TypeRuntimeArray 22(fvec4)
-        47(outs):             TypeStruct 15(int) 46
-              48:             TypePointer Uniform 47(outs)
-    49(outnames):     48(ptr) Variable Uniform
-              50:             TypeVector 6(int) 3
-              51:             TypePointer Input 50(ivec3)
-52(gl_LocalInvocationID):     51(ptr) Variable Input
-              53:             TypePointer Input 6(int)
-              60:             TypePointer Uniform 15(int)
-              62:      6(int) Constant 16
-              63:      6(int) Constant 32
-              64:      6(int) Constant 4
-              65:   50(ivec3) ConstantComposite 62 63 64
+               7:      6(int) Constant 2
+               8:      6(int) Constant 1
+               9:      6(int) Constant 0
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 3
+              12:             TypeRuntimeArray 11(fvec3)
+        13(outb):             TypeStruct 10(float) 10(float) 10(float) 12
+              14:             TypePointer Uniform 13(outb)
+    15(outbname):     14(ptr) Variable Uniform
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+              18:             TypePointer Workgroup 10(float)
+           19(s):     18(ptr) Variable Workgroup
+              21:             TypePointer Uniform 10(float)
+              23:             TypeVector 10(float) 4
+      24(outbna):             TypeStruct 16(int) 23(fvec4)
+              25:             TypePointer Uniform 24(outbna)
+  26(outbnamena):     25(ptr) Variable Uniform
+              27:     16(int) Constant 1
+              30:             TypePointer Uniform 23(fvec4)
+              32:     16(int) Constant 3
+              33:     16(int) Constant 18
+              36:     16(int) Constant 17
+              37:   10(float) Constant 1077936128
+              38:   11(fvec3) ConstantComposite 37 37 37
+              39:             TypePointer Uniform 11(fvec3)
+              41:             TypePointer Workgroup 16(int)
+           42(i):     41(ptr) Variable Workgroup
+              47:             TypeRuntimeArray 23(fvec4)
+        48(outs):             TypeStruct 16(int) 47
+              49:             TypePointer Uniform 48(outs)
+    50(outnames):     49(ptr) Variable Uniform
+              51:             TypeVector 6(int) 3
+              52:             TypePointer Input 51(ivec3)
+53(gl_LocalInvocationID):     52(ptr) Variable Input
+              54:             TypePointer Input 6(int)
+              61:             TypePointer Uniform 16(int)
+              63:      6(int) Constant 16
+              64:      6(int) Constant 32
+              65:      6(int) Constant 4
+              66:   51(ivec3) ConstantComposite 63 64 65
          4(main):           2 Function None 3
                5:             Label
-                              ControlBarrier 7 7 8
-              19:    9(float) Load 18(s)
-              21:     20(ptr) AccessChain 14(outbname) 16
-                              Store 21 19
-              27:    9(float) Load 18(s)
-              28:   22(fvec4) CompositeConstruct 27 27 27 27
-              30:     29(ptr) AccessChain 25(outbnamena) 26
-                              Store 30 28
-              33:     20(ptr) AccessChain 14(outbname) 31 32 8
-              34:    9(float) Load 33
-                              Store 18(s) 34
-              39:     38(ptr) AccessChain 14(outbname) 31 35
-                              Store 39 37
-              42:     15(int) Load 41(i)
-              43:    9(float) Load 18(s)
-              44:   10(fvec3) CompositeConstruct 43 43 43
-              45:     38(ptr) AccessChain 14(outbname) 31 42
-                              Store 45 44
-              54:     53(ptr) AccessChain 52(gl_LocalInvocationID) 8
-              55:      6(int) Load 54
-              56:    9(float) Load 18(s)
-              57:   22(fvec4) CompositeConstruct 56 56 56 56
-              58:     29(ptr) AccessChain 49(outnames) 26 55
-                              Store 58 57
-              59:     15(int) ArrayLength 14(outbname) 3
-              61:     60(ptr) AccessChain 49(outnames) 16
-                              Store 61 59
+                              ControlBarrier 7 8 9
+              20:   10(float) Load 19(s)
+              22:     21(ptr) AccessChain 15(outbname) 17
+                              Store 22 20
+              28:   10(float) Load 19(s)
+              29:   23(fvec4) CompositeConstruct 28 28 28 28
+              31:     30(ptr) AccessChain 26(outbnamena) 27
+                              Store 31 29
+              34:     21(ptr) AccessChain 15(outbname) 32 33 9
+              35:   10(float) Load 34
+                              Store 19(s) 35
+              40:     39(ptr) AccessChain 15(outbname) 32 36
+                              Store 40 38
+              43:     16(int) Load 42(i)
+              44:   10(float) Load 19(s)
+              45:   11(fvec3) CompositeConstruct 44 44 44
+              46:     39(ptr) AccessChain 15(outbname) 32 43
+                              Store 46 45
+              55:     54(ptr) AccessChain 53(gl_LocalInvocationID) 9
+              56:      6(int) Load 55
+              57:   10(float) Load 19(s)
+              58:   23(fvec4) CompositeConstruct 57 57 57 57
+              59:     30(ptr) AccessChain 50(outnames) 27 56
+                              Store 59 58
+              60:     16(int) ArrayLength 15(outbname) 3
+              62:     61(ptr) AccessChain 50(outnames) 17
+                              Store 62 60
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
old mode 100755
new mode 100644
index bcfd963..ae469aa
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -14,26 +14,26 @@
                               Capability ClipDistance
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 23 40 43 46 54 68 73 79 83 84 87 88 91 92
+                              EntryPoint TessellationControl 4  "main" 24 41 44 47 54 68 73 79 83 84 87 88 91 92
                               ExecutionMode 4 OutputVertices 4
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
                               Name 4  "main"
-                              Name 11  "a"
-                              Name 16  "p"
-                              Name 19  "gl_PerVertex"
-                              MemberName 19(gl_PerVertex) 0  "gl_Position"
-                              MemberName 19(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 19(gl_PerVertex) 2  "gl_ClipDistance"
-                              Name 23  "gl_in"
-                              Name 30  "ps"
-                              Name 34  "cd"
-                              Name 38  "pvi"
-                              Name 40  "gl_PatchVerticesIn"
-                              Name 42  "pid"
-                              Name 43  "gl_PrimitiveID"
-                              Name 45  "iid"
-                              Name 46  "gl_InvocationID"
+                              Name 12  "a"
+                              Name 17  "p"
+                              Name 20  "gl_PerVertex"
+                              MemberName 20(gl_PerVertex) 0  "gl_Position"
+                              MemberName 20(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 20(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 24  "gl_in"
+                              Name 31  "ps"
+                              Name 35  "cd"
+                              Name 39  "pvi"
+                              Name 41  "gl_PatchVerticesIn"
+                              Name 43  "pid"
+                              Name 44  "gl_PrimitiveID"
+                              Name 46  "iid"
+                              Name 47  "gl_InvocationID"
                               Name 50  "gl_PerVertex"
                               MemberName 50(gl_PerVertex) 0  "gl_Position"
                               MemberName 50(gl_PerVertex) 1  "gl_PointSize"
@@ -49,13 +49,13 @@
                               Name 88  "ivlb"
                               Name 91  "ovla"
                               Name 92  "ovlb"
-                              MemberDecorate 19(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 19(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 19(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 19(gl_PerVertex) Block
-                              Decorate 40(gl_PatchVerticesIn) BuiltIn PatchVertices
-                              Decorate 43(gl_PrimitiveID) BuiltIn PrimitiveId
-                              Decorate 46(gl_InvocationID) BuiltIn InvocationId
+                              MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
+                              Decorate 20(gl_PerVertex) Block
+                              Decorate 41(gl_PatchVerticesIn) BuiltIn PatchVertices
+                              Decorate 44(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 47(gl_InvocationID) BuiltIn InvocationId
                               MemberDecorate 50(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance
@@ -72,106 +72,106 @@
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
-               7:      6(int) Constant 1
-               8:      6(int) Constant 0
-               9:             TypeInt 32 1
-              10:             TypePointer Function 9(int)
-              12:      9(int) Constant 5392
-              13:             TypeFloat 32
-              14:             TypeVector 13(float) 4
-              15:             TypePointer Function 14(fvec4)
-              17:      6(int) Constant 3
-              18:             TypeArray 13(float) 17
-19(gl_PerVertex):             TypeStruct 14(fvec4) 13(float) 18
-              20:      6(int) Constant 32
-              21:             TypeArray 19(gl_PerVertex) 20
-              22:             TypePointer Input 21
-       23(gl_in):     22(ptr) Variable Input
-              24:      9(int) Constant 1
-              25:      9(int) Constant 0
-              26:             TypePointer Input 14(fvec4)
-              29:             TypePointer Function 13(float)
-              31:             TypePointer Input 13(float)
-              35:      9(int) Constant 2
-              39:             TypePointer Input 9(int)
-40(gl_PatchVerticesIn):     39(ptr) Variable Input
-43(gl_PrimitiveID):     39(ptr) Variable Input
-46(gl_InvocationID):     39(ptr) Variable Input
-              48:      6(int) Constant 2
-              49:             TypeArray 13(float) 48
-50(gl_PerVertex):             TypeStruct 14(fvec4) 13(float) 49
+               7:      6(int) Constant 2
+               8:      6(int) Constant 1
+               9:      6(int) Constant 0
+              10:             TypeInt 32 1
+              11:             TypePointer Function 10(int)
+              13:     10(int) Constant 5392
+              14:             TypeFloat 32
+              15:             TypeVector 14(float) 4
+              16:             TypePointer Function 15(fvec4)
+              18:      6(int) Constant 3
+              19:             TypeArray 14(float) 18
+20(gl_PerVertex):             TypeStruct 15(fvec4) 14(float) 19
+              21:      6(int) Constant 32
+              22:             TypeArray 20(gl_PerVertex) 21
+              23:             TypePointer Input 22
+       24(gl_in):     23(ptr) Variable Input
+              25:     10(int) Constant 1
+              26:     10(int) Constant 0
+              27:             TypePointer Input 15(fvec4)
+              30:             TypePointer Function 14(float)
+              32:             TypePointer Input 14(float)
+              36:     10(int) Constant 2
+              40:             TypePointer Input 10(int)
+41(gl_PatchVerticesIn):     40(ptr) Variable Input
+44(gl_PrimitiveID):     40(ptr) Variable Input
+47(gl_InvocationID):     40(ptr) Variable Input
+              49:             TypeArray 14(float) 7
+50(gl_PerVertex):             TypeStruct 15(fvec4) 14(float) 49
               51:      6(int) Constant 4
               52:             TypeArray 50(gl_PerVertex) 51
               53:             TypePointer Output 52
       54(gl_out):     53(ptr) Variable Output
-              57:             TypePointer Output 14(fvec4)
-              61:             TypePointer Output 13(float)
-              66:             TypeArray 13(float) 51
+              57:             TypePointer Output 15(fvec4)
+              61:             TypePointer Output 14(float)
+              66:             TypeArray 14(float) 51
               67:             TypePointer Output 66
 68(gl_TessLevelOuter):     67(ptr) Variable Output
-              69:      9(int) Constant 3
-              70:   13(float) Constant 1078774989
+              69:     10(int) Constant 3
+              70:   14(float) Constant 1078774989
               72:             TypePointer Output 49
 73(gl_TessLevelInner):     72(ptr) Variable Output
-              74:   13(float) Constant 1067869798
-              76:             TypeArray 9(int) 51
+              74:   14(float) Constant 1067869798
+              76:             TypeArray 10(int) 51
               77:             TypePointer Private 76
         78(outa):     77(ptr) Variable Private
     79(patchOut):     57(ptr) Variable Output
-              80:             TypeVector 13(float) 2
-              81:             TypeArray 80(fvec2) 20
+              80:             TypeVector 14(float) 2
+              81:             TypeArray 80(fvec2) 21
               82:             TypePointer Input 81
          83(inb):     82(ptr) Variable Input
          84(ind):     82(ptr) Variable Input
-              85:             TypeArray 14(fvec4) 20
+              85:             TypeArray 15(fvec4) 21
               86:             TypePointer Input 85
         87(ivla):     86(ptr) Variable Input
         88(ivlb):     86(ptr) Variable Input
-              89:             TypeArray 14(fvec4) 51
+              89:             TypeArray 15(fvec4) 51
               90:             TypePointer Output 89
         91(ovla):     90(ptr) Variable Output
         92(ovlb):     90(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-           11(a):     10(ptr) Variable Function
-           16(p):     15(ptr) Variable Function
-          30(ps):     29(ptr) Variable Function
-          34(cd):     29(ptr) Variable Function
-         38(pvi):     10(ptr) Variable Function
-         42(pid):     10(ptr) Variable Function
-         45(iid):     10(ptr) Variable Function
-                              ControlBarrier 7 7 8
-                              Store 11(a) 12
-              27:     26(ptr) AccessChain 23(gl_in) 24 25
-              28:   14(fvec4) Load 27
-                              Store 16(p) 28
-              32:     31(ptr) AccessChain 23(gl_in) 24 24
-              33:   13(float) Load 32
-                              Store 30(ps) 33
-              36:     31(ptr) AccessChain 23(gl_in) 24 35 35
-              37:   13(float) Load 36
-                              Store 34(cd) 37
-              41:      9(int) Load 40(gl_PatchVerticesIn)
-                              Store 38(pvi) 41
-              44:      9(int) Load 43(gl_PrimitiveID)
-                              Store 42(pid) 44
-              47:      9(int) Load 46(gl_InvocationID)
-                              Store 45(iid) 47
-              55:      9(int) Load 46(gl_InvocationID)
-              56:   14(fvec4) Load 16(p)
-              58:     57(ptr) AccessChain 54(gl_out) 55 25
+           12(a):     11(ptr) Variable Function
+           17(p):     16(ptr) Variable Function
+          31(ps):     30(ptr) Variable Function
+          35(cd):     30(ptr) Variable Function
+         39(pvi):     11(ptr) Variable Function
+         43(pid):     11(ptr) Variable Function
+         46(iid):     11(ptr) Variable Function
+                              ControlBarrier 7 8 9
+                              Store 12(a) 13
+              28:     27(ptr) AccessChain 24(gl_in) 25 26
+              29:   15(fvec4) Load 28
+                              Store 17(p) 29
+              33:     32(ptr) AccessChain 24(gl_in) 25 25
+              34:   14(float) Load 33
+                              Store 31(ps) 34
+              37:     32(ptr) AccessChain 24(gl_in) 25 36 36
+              38:   14(float) Load 37
+                              Store 35(cd) 38
+              42:     10(int) Load 41(gl_PatchVerticesIn)
+                              Store 39(pvi) 42
+              45:     10(int) Load 44(gl_PrimitiveID)
+                              Store 43(pid) 45
+              48:     10(int) Load 47(gl_InvocationID)
+                              Store 46(iid) 48
+              55:     10(int) Load 47(gl_InvocationID)
+              56:   15(fvec4) Load 17(p)
+              58:     57(ptr) AccessChain 54(gl_out) 55 26
                               Store 58 56
-              59:      9(int) Load 46(gl_InvocationID)
-              60:   13(float) Load 30(ps)
-              62:     61(ptr) AccessChain 54(gl_out) 59 24
+              59:     10(int) Load 47(gl_InvocationID)
+              60:   14(float) Load 31(ps)
+              62:     61(ptr) AccessChain 54(gl_out) 59 25
                               Store 62 60
-              63:      9(int) Load 46(gl_InvocationID)
-              64:   13(float) Load 34(cd)
-              65:     61(ptr) AccessChain 54(gl_out) 63 35 24
+              63:     10(int) Load 47(gl_InvocationID)
+              64:   14(float) Load 35(cd)
+              65:     61(ptr) AccessChain 54(gl_out) 63 36 25
                               Store 65 64
               71:     61(ptr) AccessChain 68(gl_TessLevelOuter) 69
                               Store 71 70
-              75:     61(ptr) AccessChain 73(gl_TessLevelInner) 24
+              75:     61(ptr) AccessChain 73(gl_TessLevelInner) 25
                               Store 75 74
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
new file mode 100755
index 0000000..f12e620
--- /dev/null
+++ b/Test/baseResults/spv.noWorkgroup.comp.out
@@ -0,0 +1,34 @@
+spv.noWorkgroup.comp
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked compute stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 12
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Decorate 7 SpecId 18
+                              Decorate 8 SpecId 10
+                              Decorate 9 SpecId 19
+                              Decorate 11 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:      6(int) SpecConstant 1
+               8:      6(int) SpecConstant 1
+               9:      6(int) SpecConstant 1
+              10:             TypeVector 6(int) 3
+              11:   10(ivec3) SpecConstantComposite 7 8 9
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.register.autoassign.rangetest.frag.out b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
index a521a13..94933fb 100644
--- a/Test/baseResults/spv.register.autoassign.rangetest.frag.out
+++ b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
@@ -2,10 +2,6 @@
 
 Linked fragment stage:
 
-INTERNAL ERROR: mapped binding out of range: g_tScene
-INTERNAL ERROR: mapped binding out of range: g_tSamp
-INTERNAL ERROR: mapped binding out of range: g_tScene
-INTERNAL ERROR: mapped binding out of range: g_tSamp
 INTERNAL ERROR: mapped binding out of range: g_tSamp
 INTERNAL ERROR: mapped binding out of range: g_tScene
 
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
new file mode 100644
index 0000000..851ef46
--- /dev/null
+++ b/Test/baseResults/spv.rw.autoassign.frag.out
@@ -0,0 +1,70 @@
+spv.rw.autoassign.frag
+
+Linked fragment stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 37
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledBuffer
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 33
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "r00"
+                              Name 11  "g_tTex1df1"
+                              Name 18  "r01"
+                              Name 21  "g_tBuf1du1"
+                              Name 25  "PS_OUTPUT"
+                              MemberName 25(PS_OUTPUT) 0  "Color"
+                              Name 27  "psout"
+                              Name 33  "Color"
+                              Decorate 11(g_tTex1df1) DescriptorSet 0
+                              Decorate 11(g_tTex1df1) Binding 20
+                              Decorate 21(g_tBuf1du1) DescriptorSet 0
+                              Decorate 21(g_tBuf1du1) Binding 21
+                              Decorate 33(Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D nonsampled format:R32f
+              10:             TypePointer UniformConstant 9
+  11(g_tTex1df1):     10(ptr) Variable UniformConstant
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              16:             TypeInt 32 0
+              17:             TypePointer Function 16(int)
+              19:             TypeImage 16(int) Buffer nonsampled format:R32ui
+              20:             TypePointer UniformConstant 19
+  21(g_tBuf1du1):     20(ptr) Variable UniformConstant
+              24:             TypeVector 6(float) 4
+   25(PS_OUTPUT):             TypeStruct 24(fvec4)
+              26:             TypePointer Function 25(PS_OUTPUT)
+              28:    6(float) Constant 0
+              29:   24(fvec4) ConstantComposite 28 28 28 28
+              30:             TypePointer Function 24(fvec4)
+              32:             TypePointer Output 24(fvec4)
+       33(Color):     32(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+          8(r00):      7(ptr) Variable Function
+         18(r01):     17(ptr) Variable Function
+       27(psout):     26(ptr) Variable Function
+              12:           9 Load 11(g_tTex1df1)
+              15:    6(float) ImageRead 12 14
+                              Store 8(r00) 15
+              22:          19 Load 21(g_tBuf1du1)
+              23:     16(int) ImageRead 22 14
+                              Store 18(r01) 23
+              31:     30(ptr) AccessChain 27(psout) 14
+                              Store 31 29
+              34:     30(ptr) AccessChain 27(psout) 14
+              35:   24(fvec4) Load 34
+                              Store 33(Color) 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/varyingArray.frag.out b/Test/baseResults/varyingArray.frag.out
index c6cf6ba..1fd59b4 100644
--- a/Test/baseResults/varyingArray.frag.out
+++ b/Test/baseResults/varyingArray.frag.out
@@ -56,7 +56,6 @@
 0:?     'color' (smooth in 4-component vector of float)
 0:?     'alpha' (smooth in float)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
 0:?     'foo' (smooth in 3-element array of 4-component vector of float)
 
 
@@ -115,6 +114,5 @@
 0:?     'color' (smooth in 4-component vector of float)
 0:?     'alpha' (smooth in float)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
 0:?     'foo' (smooth in 3-element array of 4-component vector of float)
 
diff --git a/Test/baseResults/varyingArrayIndirect.frag.out b/Test/baseResults/varyingArrayIndirect.frag.out
index 02a41f3..7349812 100644
--- a/Test/baseResults/varyingArrayIndirect.frag.out
+++ b/Test/baseResults/varyingArrayIndirect.frag.out
@@ -57,7 +57,6 @@
 0:?     'color' (smooth in 4-component vector of float)
 0:?     'alpha' (smooth in float)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
 0:?     'userIn' (smooth in 2-element array of 4-component vector of float)
 0:?     'a' (uniform int)
 0:?     'b' (uniform int)
@@ -119,7 +118,6 @@
 0:?     'color' (smooth in 4-component vector of float)
 0:?     'alpha' (smooth in float)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
-0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float TexCoord)
 0:?     'userIn' (smooth in 2-element array of 4-component vector of float)
 0:?     'a' (uniform int)
 0:?     'b' (uniform int)
diff --git a/Test/hlsl.attribute.expression.comp b/Test/hlsl.attribute.expression.comp
new file mode 100644
index 0000000..535fbad
--- /dev/null
+++ b/Test/hlsl.attribute.expression.comp
@@ -0,0 +1,15 @@
+
+uniform int bound;
+
+#define FOO 3
+#define BAR 2
+
+[numthreads(2+2, 2*3, (1+FOO)*BAR)]
+float4 main() : SV_TARGET
+{
+    [unroll(5*2 + 1) ]
+        for (int x=0; x<bound; ++x)
+            ;
+    
+    return float4(0,0,0,0);
+}
diff --git a/Test/hlsl.basic.geom b/Test/hlsl.basic.geom
new file mode 100644
index 0000000..79b061e
--- /dev/null
+++ b/Test/hlsl.basic.geom
@@ -0,0 +1,25 @@
+struct PSInput
+{
+    float  myfloat    : SOME_SEMANTIC;
+    int    something  : ANOTHER_SEMANTIC;
+};
+
+struct nametest {
+    int Append;        // these are valid names even though they are also method names.
+    int RestartStrip;  // ...
+};
+
+[maxvertexcount(4)]
+void main(triangle in uint VertexID[3] : VertexID,
+          triangle uint test[3] : FOO, 
+          inout LineStream<PSInput> OutputStream)
+{
+    PSInput Vert;
+
+    Vert.myfloat    = test[0] + test[1] + test[2];
+    Vert.something  = VertexID[0];
+
+    OutputStream.Append(Vert);
+    OutputStream.Append(Vert);
+    OutputStream.RestartStrip();
+}
diff --git a/Test/hlsl.comparison.vec.frag b/Test/hlsl.comparison.vec.frag
new file mode 100644
index 0000000..b8f93c9
--- /dev/null
+++ b/Test/hlsl.comparison.vec.frag
@@ -0,0 +1,34 @@
+uniform float4 uf4;
+
+void Bug1( float4 a )
+{
+    float4 v04 = float4( 0.0, 0.0, 0.0, 0.0 );
+    float  v01 = 0.0; 
+
+    bool4 r00 = a == v04;
+    bool4 r01 = a != v04;
+    bool4 r02 = a < v04;
+    bool4 r03 = a > v04;
+    
+    bool4 r10 = a == v01;
+    bool4 r11 = a != v01;
+    bool4 r12 = a < v01;
+    bool4 r13 = a > v01;
+    
+    bool4 r20 = v01 == a;
+    bool4 r21 = v01 != a;
+    bool4 r22 = v01 < a;
+    bool4 r23 = v01 > a;
+}
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+   psout.Color = 0;
+   return psout;
+}
diff --git a/Test/hlsl.doLoop.frag b/Test/hlsl.doLoop.frag
index 546b2c2..251a8c1 100644
--- a/Test/hlsl.doLoop.frag
+++ b/Test/hlsl.doLoop.frag
@@ -2,5 +2,5 @@
 {
     [unroll] do {} while (false);
     [unroll] do {;} while (false);
-    do { return input; } while (input == input);
+    do { return input; } while (all(input == input));
 }
diff --git a/Test/hlsl.forLoop.frag b/Test/hlsl.forLoop.frag
index 2495e6e..9378996 100644
--- a/Test/hlsl.forLoop.frag
+++ b/Test/hlsl.forLoop.frag
@@ -2,9 +2,9 @@
 {
     for (;;) ;
     for (++input; ; ) ;
-    [unroll] for (; input != input; ) {}
-    for (; input != input; ) { return -input; }
-    for (--input; input != input; input += 2) { return -input; }
+    [unroll] for (; any(input != input); ) {}
+    for (; any(input != input); ) { return -input; }
+    for (--input; any(input != input); input += 2) { return -input; }
 	for (;;) if (input.x > 2.0) break;
 	for (;;) if (input.x > 2.0) continue;
 	float ii;
diff --git a/Test/hlsl.identifier.sample.frag b/Test/hlsl.identifier.sample.frag
new file mode 100644
index 0000000..3281a9a
--- /dev/null
+++ b/Test/hlsl.identifier.sample.frag
@@ -0,0 +1,18 @@
+
+struct MyStruct {
+    sample        float a;
+    noperspective float b;
+    linear        float c;
+    centroid      float d;
+};
+
+int sample(int x) { return x; } // HLSL allows this as an identifier as well.
+
+float4 main() : SV_Target0
+{
+    // HLSL allows this as an identifier as well.
+    // However, this is not true of other qualifier keywords such as "linear".
+    int sample = 3;
+
+    return float4(0,0,0,0);
+}
diff --git a/Test/hlsl.if.frag b/Test/hlsl.if.frag
index 1f6dc41..ba659e6 100644
--- a/Test/hlsl.if.frag
+++ b/Test/hlsl.if.frag
@@ -1,26 +1,26 @@
 float4 PixelShaderFunction(float4 input) : COLOR0
 {
-    if (input == input)
+    if (all(input == input))
         return input;
 
-    if (input == input)
+    if (all(input == input))
         return input;
     else
         return -input;
 
-    if (input == input)
+    if (all(input == input))
         ;
 
-    if (input == input)
+    if (all(input == input))
         ;
     else
         ;
 
-    [flatten] if (input == input) {
+    [flatten] if (all(input == input)) {
         return input;
     }
 
-    if (input == input) {
+    if (all(input == input)) {
         return input;
     } else {
         return -input;
diff --git a/Test/hlsl.logical.binary.frag b/Test/hlsl.logical.binary.frag
new file mode 100644
index 0000000..06bc9f2
--- /dev/null
+++ b/Test/hlsl.logical.binary.frag
@@ -0,0 +1,21 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int    ival;
+uniform int4   ival4;
+uniform float  fval;
+uniform float4 fval4;
+
+PS_OUTPUT main()
+{
+    if (ival && fval);
+    if (ival || fval);
+
+    PS_OUTPUT psout;
+    psout.Color = 1.0;
+    return psout;
+}
+
+
diff --git a/Test/hlsl.logical.binary.vec.frag b/Test/hlsl.logical.binary.vec.frag
new file mode 100644
index 0000000..e94c8f5
--- /dev/null
+++ b/Test/hlsl.logical.binary.vec.frag
@@ -0,0 +1,24 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform bool4 b4a, b4b;
+uniform bool  b1a, b1b;
+
+PS_OUTPUT main()
+{
+    bool4 r00 = !b4a;
+    bool4 r01 = b4a && b4b;  // vec, vec
+    bool4 r02 = b4a || b4b;  // vec, vec
+
+    bool4 r10 = b1a && b4b;  // scalar, vec
+    bool4 r11 = b1a || b4b;  // scalar, vec
+
+    bool4 r20 = b4a && b1b;  // vec, scalar
+    bool4 r21 = b4a || b1b;  // vec, scalar
+
+    PS_OUTPUT psout;
+    psout.Color = r00 || r01 || r02 || r10 || r11 || r20 || r21;
+    return psout;
+}
diff --git a/Test/hlsl.logical.unary.frag b/Test/hlsl.logical.unary.frag
new file mode 100644
index 0000000..cbcb3bf
--- /dev/null
+++ b/Test/hlsl.logical.unary.frag
@@ -0,0 +1,29 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform int    ival;
+uniform int4   ival4;
+uniform float  fval;
+uniform float4 fval4;
+
+PS_OUTPUT main()
+{
+    !ival;  // scalar int
+    !ival4; // vector int
+
+    !fval;  // scalar float
+    !fval4; // vector float
+    
+    if (ival);
+    if (fval);
+    if (!ival);
+    if (!fval);
+
+    PS_OUTPUT psout;
+    psout.Color = 1.0;
+    return psout;
+}
+
+
diff --git a/Test/hlsl.matNx1.frag b/Test/hlsl.matNx1.frag
new file mode 100644
index 0000000..515bd47
--- /dev/null
+++ b/Test/hlsl.matNx1.frag
@@ -0,0 +1,31 @@
+
+void TestMatNx1()
+{
+    float1x1 f1x1;
+    float2x1 f2x1;
+    float3x1 f3x1;
+    float4x1 f4x1;
+
+    float1x2 f1x2;
+    float1x3 f1x3;
+    float1x4 f1x4;
+
+    float1x1 r00 = transpose(f1x1);
+    float1x2 r01 = transpose(f2x1);
+    float1x3 r02 = transpose(f3x1);
+    float1x4 r03 = transpose(f4x1);
+
+    float1x1 r10 = transpose(f1x1);
+    float2x1 r11 = transpose(f1x2);
+    float3x1 r12 = transpose(f1x3);
+    float4x1 r13 = transpose(f1x4);
+}
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT ps_output;
+    ps_output.color = 1.0;
+    return ps_output;
+};
diff --git a/Test/hlsl.matType.bool.frag b/Test/hlsl.matType.bool.frag
new file mode 100644
index 0000000..e4a62e3
--- /dev/null
+++ b/Test/hlsl.matType.bool.frag
@@ -0,0 +1,53 @@
+
+void TestBoolMatTypes()
+{
+    bool1x1 b1x1;
+    bool2x1 b2x1;
+    bool3x1 b3x1;
+    bool4x1 b4x1;
+    
+    bool1x2 b1x2;
+    bool2x2 b2x2;
+    bool3x2 b3x2;
+    bool4x2 b4x2;
+    
+    bool1x3 b1x3;
+    bool2x3 b2x3;
+    bool3x3 b3x3;
+    bool4x3 b4x3;
+    
+    bool1x4 b1x4;
+    bool2x4 b2x4;
+    bool3x4 b3x4;
+    bool4x4 b4x4;
+    
+    // TODO: Currently SPIR-V disallows Nx1 or 1xN mats.
+    bool1x1 r00 = transpose(b1x1);
+    bool1x2 r01 = transpose(b2x1);
+    bool1x3 r02 = transpose(b3x1);
+    bool1x4 r03 = transpose(b4x1);
+    
+    bool2x1 r10 = transpose(b1x2);
+    bool2x2 r11 = transpose(b2x2);
+    bool2x3 r12 = transpose(b3x2);
+    bool2x4 r13 = transpose(b4x2);
+    
+    bool3x1 r20 = transpose(b1x3);
+    bool3x2 r21 = transpose(b2x3);
+    bool3x3 r22 = transpose(b3x3);
+    bool3x4 r23 = transpose(b4x3);
+    
+    bool4x1 r30 = transpose(b1x4);
+    bool4x2 r31 = transpose(b2x4);
+    bool4x3 r32 = transpose(b3x4);
+    bool4x4 r33 = transpose(b4x4);
+}
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT ps_output;
+    ps_output.color = float4(0,0,0,0);
+    return ps_output;
+};
diff --git a/Test/hlsl.matType.int.frag b/Test/hlsl.matType.int.frag
new file mode 100644
index 0000000..09e9f2a
--- /dev/null
+++ b/Test/hlsl.matType.int.frag
@@ -0,0 +1,97 @@
+
+void TestIntMatTypes()
+{
+    int1x1 i1x1;
+    int2x1 i2x1;
+    int3x1 i3x1;
+    int4x1 i4x1;
+
+    int1x2 i1x2;
+    int2x2 i2x2;
+    int3x2 i3x2;
+    int4x2 i4x2;
+
+    int1x3 i1x3;
+    int2x3 i2x3;
+    int3x3 i3x3;
+    int4x3 i4x3;
+
+    int1x4 i1x4;
+    int2x4 i2x4;
+    int3x4 i3x4;
+    int4x4 i4x4;
+
+    // TODO: Currently SPIR-V disallows Nx1 or 1xN mats.
+    int1x1 r00 = transpose(i1x1);
+    int1x2 r01 = transpose(i2x1);
+    int1x3 r02 = transpose(i3x1);
+    int1x4 r03 = transpose(i4x1);
+
+    int2x1 r10 = transpose(i1x2);
+    int2x2 r11 = transpose(i2x2);
+    int2x3 r12 = transpose(i3x2);
+    int2x4 r13 = transpose(i4x2);
+
+    int3x1 r20 = transpose(i1x3);
+    int3x2 r21 = transpose(i2x3);
+    int3x3 r22 = transpose(i3x3);
+    int3x4 r23 = transpose(i4x3);
+
+    int4x1 r30 = transpose(i1x4);
+    int4x2 r31 = transpose(i2x4);
+    int4x3 r32 = transpose(i3x4);
+    int4x4 r33 = transpose(i4x4);
+}
+
+void TestUintMatTypes()
+{
+    uint1x1 u1x1;
+    uint2x1 u2x1;
+    uint3x1 u3x1;
+    uint4x1 u4x1;
+    
+    uint1x2 u1x2;
+    uint2x2 u2x2;
+    uint3x2 u3x2;
+    uint4x2 u4x2;
+    
+    uint1x3 u1x3;
+    uint2x3 u2x3;
+    uint3x3 u3x3;
+    uint4x3 u4x3;
+    
+    uint1x4 u1x4;
+    uint2x4 u2x4;
+    uint3x4 u3x4;
+    uint4x4 u4x4;
+    
+    // TODO: Currently SPIR-V disallows Nx1 or 1xN mats.
+    uint1x1 r00 = transpose(u1x1);
+    uint1x2 r01 = transpose(u2x1);
+    uint1x3 r02 = transpose(u3x1);
+    uint1x4 r03 = transpose(u4x1);
+    
+    uint2x1 r10 = transpose(u1x2);
+    uint2x2 r11 = transpose(u2x2);
+    uint2x3 r12 = transpose(u3x2);
+    uint2x4 r13 = transpose(u4x2);
+    
+    uint3x1 r20 = transpose(u1x3);
+    uint3x2 r21 = transpose(u2x3);
+    uint3x3 r22 = transpose(u3x3);
+    uint3x4 r23 = transpose(u4x3);
+    
+    uint4x1 r30 = transpose(u1x4);
+    uint4x2 r31 = transpose(u2x4);
+    uint4x3 r32 = transpose(u3x4);
+    uint4x4 r33 = transpose(u4x4);
+}
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    PS_OUTPUT ps_output;
+    ps_output.color = float4(0,0,0,0);
+    return ps_output;
+};
diff --git a/Test/hlsl.mintypes.frag b/Test/hlsl.mintypes.frag
new file mode 100644
index 0000000..ad47e68
--- /dev/null
+++ b/Test/hlsl.mintypes.frag
@@ -0,0 +1,49 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform min16float  b1a, b1b;
+
+PS_OUTPUT main()
+{
+    min16float  mf16;
+    min16float1 mf16_1;
+    min16float2 mf16_2;
+    min16float3 mf16_3;
+    min16float4 mf16_4;
+
+    min10float  mf10;
+    min10float1 mf10_1;
+    min10float2 mf10_2;
+    min10float3 mf10_3;
+    min10float4 mf12_4;
+
+    min16int  mi16;
+    min16int1 mi16_1;
+    min16int2 mi16_2;
+    min16int3 mi16_3;
+    min16int4 mi16_4;
+
+    min12int  mi12;
+    min12int1 mi12_1;
+    min12int2 mi12_2;
+    min12int3 mi12_3;
+    min12int4 mi12_4;
+
+    min16uint  mu16;
+    min16uint1 mu16_1;
+    min16uint2 mu16_2;
+    min16uint3 mu16_3;
+    min16uint4 mu16_4;
+
+    mf16_2 + mf16;
+    mf10_2 + mf10;
+    mi16_2 + mi16;
+    mi12_2 + mi12;
+    mu16_2 + mu16;
+
+    PS_OUTPUT psout;
+    psout.Color = 0;
+    return psout;
+}
diff --git a/Test/hlsl.numthreads.comp b/Test/hlsl.numthreads.comp
new file mode 100644
index 0000000..fcc97f3
--- /dev/null
+++ b/Test/hlsl.numthreads.comp
@@ -0,0 +1,14 @@
+
+[numthreads(8,8,1)]
+void main(uint3 tid : SV_DispatchThreadID )
+{
+}
+
+[numTHreaDs(4,4,2)]  // case insensitive
+void main_aux1(uint3 tid : SV_DispatchThreadID )
+{
+}
+
+[numthreads(1,4,8)]
+void main_aux2(uint3 tid : SV_DispatchThreadID );
+
diff --git a/Test/hlsl.partialInit.frag b/Test/hlsl.partialInit.frag
new file mode 100755
index 0000000..59e8a52
--- /dev/null
+++ b/Test/hlsl.partialInit.frag
@@ -0,0 +1,29 @@
+struct outs {

+    int a;

+    float b;

+    bool c;

+    float4 v;

+};

+

+static float4 gv = {0,0,1};

+static float gfa[3] = {0,0};

+

+struct Nest {

+    float4x3 m;

+    outs os;

+    bool b;

+};

+

+outs PixelShaderFunction(float4 input) : COLOR0

+{

+    outs o2 = { 3 };

+    outs o4;

+    o4.v = gv * gfa[2];

+    outs o1 = { };

+    outs o3 = (outs)0;

+    o4 = (outs)0;

+    o4.c = o1.c;

+    Nest nest = (Nest)0;

+

+    return o4;

+}
\ No newline at end of file
diff --git a/Test/hlsl.promote.binary.frag b/Test/hlsl.promote.binary.frag
new file mode 100644
index 0000000..0203bed
--- /dev/null
+++ b/Test/hlsl.promote.binary.frag
@@ -0,0 +1,28 @@
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform bool   bval;
+uniform bool4  bval4;
+uniform int    ival;
+uniform int4   ival4;
+uniform float  fval;
+uniform float4 fval4;
+
+PS_OUTPUT main()
+{
+    ival  % fval;
+    ival4 % fval4;
+
+    bval  % fval;
+    bval4 % fval4;
+
+    int l_int = 1;
+    l_int %= fval;
+
+    PS_OUTPUT psout;
+    psout.Color = 0;
+    return psout;
+}
+
diff --git a/Test/hlsl.promote.vec1.frag b/Test/hlsl.promote.vec1.frag
new file mode 100644
index 0000000..a674ccb
--- /dev/null
+++ b/Test/hlsl.promote.vec1.frag
@@ -0,0 +1,16 @@
+
+float4 main() : SV_Target
+{
+    float f1a;
+    float1 f1b;
+
+    f1a = f1b;  // convert float1 to float
+    f1b = f1a;  // convert float to float1
+
+    float3 f3;
+    step(0.0, f3);
+
+    sin(f1b); // test 1-vectors in intrinsics
+
+    return float4(0,0,0,0);
+}
diff --git a/Test/hlsl.rw.atomics.frag b/Test/hlsl.rw.atomics.frag
new file mode 100644
index 0000000..930d650
--- /dev/null
+++ b/Test/hlsl.rw.atomics.frag
@@ -0,0 +1,244 @@
+SamplerState       g_sSamp;
+
+RWTexture1D <float> g_tTex1df1;
+RWTexture1D <int>   g_tTex1di1;
+RWTexture1D <uint>  g_tTex1du1;
+
+RWTexture2D <float> g_tTex2df1;
+RWTexture2D <int>   g_tTex2di1;
+RWTexture2D <uint>  g_tTex2du1;
+
+RWTexture3D <float> g_tTex3df1;
+RWTexture3D <int>   g_tTex3di1;
+RWTexture3D <uint>  g_tTex3du1;
+
+RWTexture1DArray <float> g_tTex1df1a;
+RWTexture1DArray <int>   g_tTex1di1a;
+RWTexture1DArray <uint>  g_tTex1du1a;
+
+RWTexture2DArray <float> g_tTex2df1a;
+RWTexture2DArray <int>   g_tTex2di1a;
+RWTexture2DArray <uint>  g_tTex2du1a;
+
+RWBuffer <float> g_tBuffF;
+RWBuffer <int>   g_tBuffI;
+RWBuffer <uint>  g_tBuffU;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+uniform uint  u1;
+uniform uint2 u2;
+uniform uint3 u3;
+uniform uint  u1b;
+uniform uint  u1c;
+
+uniform int   i1;
+uniform int2  i2;
+uniform int3  i3;
+uniform int   i1b;
+uniform int   i1c;
+
+PS_OUTPUT main()
+{
+    uint out_u1;
+    int out_i1;
+
+    // 1D int
+    InterlockedAdd(g_tTex1di1[i1], i1b);
+    InterlockedAdd(g_tTex1di1[i1], i1, out_i1);
+    InterlockedAnd(g_tTex1di1[i1], i1b);
+    InterlockedAnd(g_tTex1di1[i1], i1, out_i1);
+    InterlockedCompareExchange(g_tTex1di1[i1], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex1di1[i1], i1, out_i1);
+    InterlockedMax(g_tTex1di1[i1], i1b);
+    InterlockedMax(g_tTex1di1[i1], i1, out_i1);
+    InterlockedMin(g_tTex1di1[i1], i1b);
+    InterlockedMin(g_tTex1di1[i1], i1, out_i1);
+    InterlockedOr(g_tTex1di1[i1], i1b);
+    InterlockedOr(g_tTex1di1[i1], i1, out_i1);
+    InterlockedXor(g_tTex1di1[i1], i1b);
+    InterlockedXor(g_tTex1di1[i1], i1, out_i1);
+
+    // 1D uint
+    InterlockedAdd(g_tTex1du1[u1], u1);
+    InterlockedAdd(g_tTex1du1[u1], u1, out_u1);
+    InterlockedAnd(g_tTex1du1[u1], u1);
+    InterlockedAnd(g_tTex1du1[u1], u1, out_u1);
+    InterlockedCompareExchange(g_tTex1du1[u1], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex1du1[u1], u1, out_u1);
+    InterlockedMax(g_tTex1du1[u1], u1);
+    InterlockedMax(g_tTex1du1[u1], u1, out_u1);
+    InterlockedMin(g_tTex1du1[u1], u1);
+    InterlockedMin(g_tTex1du1[u1], u1, out_u1);
+    InterlockedOr(g_tTex1du1[u1], u1);
+    InterlockedOr(g_tTex1du1[u1], u1, out_u1);
+    InterlockedXor(g_tTex1du1[u1], u1);
+    InterlockedXor(g_tTex1du1[u1], u1, out_u1);
+
+    // 2D int
+    InterlockedAdd(g_tTex2di1[i2], i1b);
+    InterlockedAdd(g_tTex2di1[i2], i1, out_i1);
+    InterlockedAnd(g_tTex2di1[i2], i1b);
+    InterlockedAnd(g_tTex2di1[i2], i1, out_i1);
+    InterlockedCompareExchange(g_tTex2di1[i2], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex2di1[i2], i1, out_i1);
+    InterlockedMax(g_tTex2di1[i2], i1b);
+    InterlockedMax(g_tTex2di1[i2], i1, out_i1);
+    InterlockedMin(g_tTex2di1[i2], i1b);
+    InterlockedMin(g_tTex2di1[i2], i1, out_i1);
+    InterlockedOr(g_tTex2di1[i2], i1b);
+    InterlockedOr(g_tTex2di1[i2], i1, out_i1);
+    InterlockedXor(g_tTex2di1[i2], i1b);
+    InterlockedXor(g_tTex2di1[i2], i1, out_i1);
+
+    // 2D uint
+    InterlockedAdd(g_tTex2du1[u2], u1);
+    InterlockedAdd(g_tTex2du1[u2], u1, out_u1);
+    InterlockedAnd(g_tTex2du1[u2], u1);
+    InterlockedAnd(g_tTex2du1[u2], u1, out_u1);
+    InterlockedCompareExchange(g_tTex2du1[u2], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex2du1[u2], u1, out_u1);
+    InterlockedMax(g_tTex2du1[u2], u1);
+    InterlockedMax(g_tTex2du1[u2], u1, out_u1);
+    InterlockedMin(g_tTex2du1[u2], u1);
+    InterlockedMin(g_tTex2du1[u2], u1, out_u1);
+    InterlockedOr(g_tTex2du1[u2], u1);
+    InterlockedOr(g_tTex2du1[u2], u1, out_u1);
+    InterlockedXor(g_tTex2du1[u2], u1);
+    InterlockedXor(g_tTex2du1[u2], u1, out_u1);
+
+    // 3D int
+    InterlockedAdd(g_tTex3di1[i3], i1b);
+    InterlockedAdd(g_tTex3di1[i3], i1, out_i1);
+    InterlockedAnd(g_tTex3di1[i3], i1b);
+    InterlockedAnd(g_tTex3di1[i3], i1, out_i1);
+    InterlockedCompareExchange(g_tTex3di1[i3], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex3di1[i3], i1, out_i1);
+    InterlockedMax(g_tTex3di1[i3], i1b);
+    InterlockedMax(g_tTex3di1[i3], i1, out_i1);
+    InterlockedMin(g_tTex3di1[i3], i1b);
+    InterlockedMin(g_tTex3di1[i3], i1, out_i1);
+    InterlockedOr(g_tTex3di1[i3], i1b);
+    InterlockedOr(g_tTex3di1[i3], i1, out_i1);
+    InterlockedXor(g_tTex3di1[i3], i1b);
+    InterlockedXor(g_tTex3di1[i3], i1, out_i1);
+
+    // 3D uint
+    InterlockedAdd(g_tTex3du1[u3], u1);
+    InterlockedAdd(g_tTex3du1[u3], u1, out_u1);
+    InterlockedAnd(g_tTex3du1[u3], u1);
+    InterlockedAnd(g_tTex3du1[u3], u1, out_u1);
+    InterlockedCompareExchange(g_tTex3du1[u3], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex3du1[u3], u1, out_u1);
+    InterlockedMax(g_tTex3du1[u3], u1);
+    InterlockedMax(g_tTex3du1[u3], u1, out_u1);
+    InterlockedMin(g_tTex3du1[u3], u1);
+    InterlockedMin(g_tTex3du1[u3], u1, out_u1);
+    InterlockedOr(g_tTex3du1[u3], u1);
+    InterlockedOr(g_tTex3du1[u3], u1, out_u1);
+    InterlockedXor(g_tTex3du1[u3], u1);
+    InterlockedXor(g_tTex3du1[u3], u1, out_u1);
+
+    // 1D array int
+    InterlockedAdd(g_tTex1di1a[i2], i1b);
+    InterlockedAdd(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedAnd(g_tTex1di1a[i2], i1b);
+    InterlockedAnd(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedMax(g_tTex1di1a[i2], i1b);
+    InterlockedMax(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedMin(g_tTex1di1a[i2], i1b);
+    InterlockedMin(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedOr(g_tTex1di1a[i2], i1b);
+    InterlockedOr(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedXor(g_tTex1di1a[i2], i1b);
+    InterlockedXor(g_tTex1di1a[i2], i1, out_i1);
+
+    // 1D array uint
+    InterlockedAdd(g_tTex1du1a[u2], u1);
+    InterlockedAdd(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedAnd(g_tTex1du1a[u2], u1);
+    InterlockedAnd(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedMax(g_tTex1du1a[u2], u1);
+    InterlockedMax(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedMin(g_tTex1du1a[u2], u1);
+    InterlockedMin(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedOr(g_tTex1du1a[u2], u1);
+    InterlockedOr(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedXor(g_tTex1du1a[u2], u1);
+    InterlockedXor(g_tTex1du1a[u2], u1, out_u1);
+
+    // 2D array int
+    InterlockedAdd(g_tTex1di1a[i2], i1b);
+    InterlockedAdd(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedAnd(g_tTex1di1a[i2], i1b);
+    InterlockedAnd(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedCompareExchange(g_tTex1di1a[i2], i1b, i1c, out_i1);
+    InterlockedExchange(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedMax(g_tTex1di1a[i2], i1b);
+    InterlockedMax(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedMin(g_tTex1di1a[i2], i1b);
+    InterlockedMin(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedOr(g_tTex1di1a[i2], i1b);
+    InterlockedOr(g_tTex1di1a[i2], i1, out_i1);
+    InterlockedXor(g_tTex1di1a[i2], i1b);
+    InterlockedXor(g_tTex1di1a[i2], i1, out_i1);
+
+    // 2D array uint
+    InterlockedAdd(g_tTex1du1a[u2], u1);
+    InterlockedAdd(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedAnd(g_tTex1du1a[u2], u1);
+    InterlockedAnd(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedCompareExchange(g_tTex1du1a[u2], u1b, u1c, out_u1);
+    InterlockedExchange(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedMax(g_tTex1du1a[u2], u1);
+    InterlockedMax(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedMin(g_tTex1du1a[u2], u1);
+    InterlockedMin(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedOr(g_tTex1du1a[u2], u1);
+    InterlockedOr(g_tTex1du1a[u2], u1, out_u1);
+    InterlockedXor(g_tTex1du1a[u2], u1);
+    InterlockedXor(g_tTex1du1a[u2], u1, out_u1);
+
+    // buffer int
+    InterlockedAdd(g_tBuffI[i1], i1b);
+    InterlockedAdd(g_tBuffI[i1], i1, out_i1);
+    InterlockedAnd(g_tBuffI[i1], i1b);
+    InterlockedAnd(g_tBuffI[i1], i1, out_i1);
+    InterlockedCompareExchange(g_tBuffI[i1], i1b, i1c, out_i1);
+    InterlockedExchange(g_tBuffI[i1], i1, out_i1);
+    InterlockedMax(g_tBuffI[i1], i1b);
+    InterlockedMax(g_tBuffI[i1], i1, out_i1);
+    InterlockedMin(g_tBuffI[i1], i1b);
+    InterlockedMin(g_tBuffI[i1], i1, out_i1);
+    InterlockedOr(g_tBuffI[i1], i1b);
+    InterlockedOr(g_tBuffI[i1], i1, out_i1);
+    InterlockedXor(g_tBuffI[i1], i1b);
+    InterlockedXor(g_tBuffI[i1], i1, out_i1);
+
+    // buffer uint
+    InterlockedAdd(g_tBuffU[u1], u1);
+    InterlockedAdd(g_tBuffU[u1], u1, out_u1);
+    InterlockedAnd(g_tBuffU[u1], u1);
+    InterlockedAnd(g_tBuffU[u1], u1, out_u1);
+    InterlockedCompareExchange(g_tBuffU[u1], u1b, u1c, out_u1);
+    InterlockedExchange(g_tBuffU[u1], u1, out_u1);
+    InterlockedMax(g_tBuffU[u1], u1);
+    InterlockedMax(g_tBuffU[u1], u1, out_u1);
+    InterlockedMin(g_tBuffU[u1], u1);
+    InterlockedMin(g_tBuffU[u1], u1, out_u1);
+    InterlockedOr(g_tBuffU[u1], u1);
+    InterlockedOr(g_tBuffU[u1], u1, out_u1);
+    InterlockedXor(g_tBuffU[u1], u1);
+    InterlockedXor(g_tBuffU[u1], u1, out_u1);
+
+    PS_OUTPUT psout;
+    psout.Color = 1.0;
+    return psout;
+}
diff --git a/Test/hlsl.rw.register.frag b/Test/hlsl.rw.register.frag
new file mode 100644
index 0000000..e82e419
--- /dev/null
+++ b/Test/hlsl.rw.register.frag
@@ -0,0 +1,18 @@
+
+RWTexture1D <float> g_tTex1df1 : register(u2);
+RWBuffer <uint>     g_tBuf1du1 : register(U3);
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+   float r00 = g_tTex1df1[0];
+   uint  r01 = g_tBuf1du1[0];
+
+   PS_OUTPUT psout;
+   psout.Color = 1.0;
+   return psout;
+}
diff --git a/Test/hlsl.shapeConv.frag b/Test/hlsl.shapeConv.frag
index 0485b4a..adb170e 100644
--- a/Test/hlsl.shapeConv.frag
+++ b/Test/hlsl.shapeConv.frag
@@ -18,8 +18,8 @@
     6.0 < foo;
     7.0 <= foo;
 
-    v.x == v;
-    f != v;
+    all(v.x == v);
+    any(f != v);
 
     float1 f1;
 
diff --git a/Test/hlsl.whileLoop.frag b/Test/hlsl.whileLoop.frag
index f282375..e4084ae 100644
--- a/Test/hlsl.whileLoop.frag
+++ b/Test/hlsl.whileLoop.frag
@@ -1,6 +1,6 @@
 float4 PixelShaderFunction(float4 input) : COLOR0
 {
-    while (input != input) { return input; }
+    while (any(input != input)) { return input; }
     while (false) ;
     [unroll] while (false) { }
     while ((false)) { }
diff --git a/Test/spv.noWorkgroup.comp b/Test/spv.noWorkgroup.comp
new file mode 100644
index 0000000..0c77f27
--- /dev/null
+++ b/Test/spv.noWorkgroup.comp
@@ -0,0 +1,7 @@
+#version 450

+

+layout(local_size_x_id = 18, local_size_y_id=10,local_size_z_id = 19) in;

+

+void main()

+{

+}

diff --git a/Test/spv.rw.autoassign.frag b/Test/spv.rw.autoassign.frag
new file mode 100644
index 0000000..5c7d0d3
--- /dev/null
+++ b/Test/spv.rw.autoassign.frag
@@ -0,0 +1,18 @@
+
+RWTexture1D <float> g_tTex1df1;
+RWBuffer <uint>     g_tBuf1du1;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+};
+
+PS_OUTPUT main()
+{
+    float r00 = g_tTex1df1[0];
+    uint  r01 = g_tBuf1du1[0];
+
+    PS_OUTPUT psout;
+    psout.Color = 0;
+    return psout;
+}
diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h
index 8ee2c84..ec6aff1 100644
--- a/glslang/Include/ConstantUnion.h
+++ b/glslang/Include/ConstantUnion.h
@@ -538,7 +538,7 @@
 };
 
 // Encapsulate having a pointer to an array of TConstUnion,
-// which only needs to be allocated if it's size is going to be
+// which only needs to be allocated if its size is going to be
 // bigger than 0.
 //
 // One convenience is being able to use [] to go inside the array, instead
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 6c8cb82..8745c7a 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -1271,6 +1271,7 @@
     virtual       TArraySizes& getArraySizes()       { assert(arraySizes != nullptr); return *arraySizes; }
 
     virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); }
+    virtual bool isScalarOrVec1() const { return isScalar() || vector1; }
     virtual bool isVector() const { return vectorSize > 1 || vector1; }
     virtual bool isMatrix() const { return matrixCols ? true : false; }
     virtual bool isArray()  const { return arraySizes != nullptr; }
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 27c798d..8f7ffcc 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -46,12 +46,19 @@
 #ifndef __INTERMEDIATE_H
 #define __INTERMEDIATE_H
 
+#if _MSC_VER >= 1900
+    #pragma warning(disable : 4464) // relative include path contains '..'
+    #pragma warning(disable : 5026) // 'glslang::TIntermUnary': move constructor was implicitly defined as deleted
+#endif
+
 #include "../Include/Common.h"
 #include "../Include/Types.h"
 #include "../Include/ConstantUnion.h"
 
 namespace glslang {
 
+class TIntermediate;
+
 //
 // Operators used by the high-level (parse tree) representation.
 //
@@ -614,6 +621,10 @@
     EOpMethodGatherCmpGreen,             // ...
     EOpMethodGatherCmpBlue,              // ...
     EOpMethodGatherCmpAlpha,             // ...
+
+    // geometry methods
+    EOpMethodAppend,                     // Geometry shader methods
+    EOpMethodRestartStrip,               // ...
 };
 
 class TIntermTraverser;
@@ -845,7 +856,7 @@
     virtual       TIntermOperator* getAsOperator()       { return this; }
     virtual const TIntermOperator* getAsOperator() const { return this; }
     TOperator getOp() const { return op; }
-    virtual bool promote() { return true; }
+    void setOp(TOperator newOp) { op = newOp; }
     bool modifiesState() const;
     bool isConstructor() const;
     bool isTexture()  const { return op > EOpTextureGuardBegin  && op < EOpTextureGuardEnd; }
@@ -1024,7 +1035,6 @@
     virtual TIntermTyped* getRight() const { return right; }
     virtual       TIntermBinary* getAsBinaryNode()       { return this; }
     virtual const TIntermBinary* getAsBinaryNode() const { return this; }
-    virtual bool promote();
     virtual void updatePrecision();
 protected:
     TIntermTyped* left;
@@ -1044,7 +1054,6 @@
     virtual const TIntermTyped* getOperand() const { return operand; }
     virtual       TIntermUnary* getAsUnaryNode()       { return this; }
     virtual const TIntermUnary* getAsUnaryNode() const { return this; }
-    virtual bool promote();
     virtual void updatePrecision();
 protected:
     TIntermTyped* operand;
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index c8b1b10..5445009 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "Overload400-PrecQual.1603"
-#define GLSLANG_DATE "16-Oct-2016"
+#define GLSLANG_REVISION "Overload400-PrecQual.1667"
+#define GLSLANG_DATE "27-Nov-2016"
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 8e80bbd..71b4b71 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -114,7 +114,7 @@
 {
     // No operations work on blocks
     if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
-        return 0;
+        return nullptr;
 
     // Try converting the children's base types to compatible types.
     TIntermTyped* child = addConversion(op, left->getType(), right);
@@ -125,7 +125,7 @@
         if (child)
             left = child;
         else
-            return 0;
+            return nullptr;
     }
 
     // Convert the children's type shape to be compatible.
@@ -137,8 +137,8 @@
     // one and promote it to the right type.
     //
     TIntermBinary* node = addBinaryNode(op, left, right, loc);
-    if (! node->promote())
-        return 0;
+    if (! promote(node))
+        return nullptr;
 
     node->updatePrecision();
 
@@ -246,7 +246,7 @@
     // build the node
     TIntermBinary* node = addBinaryNode(op, left, right, loc);
 
-    if (! node->promote())
+    if (! promote(node))
         return nullptr;
 
     node->updatePrecision();
@@ -275,15 +275,19 @@
 TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSourceLoc loc)
 {
     if (child == 0)
-        return 0;
+        return nullptr;
 
     if (child->getType().getBasicType() == EbtBlock)
-        return 0;
+        return nullptr;
 
     switch (op) {
     case EOpLogicalNot:
+        if (source == EShSourceHlsl) {
+            break; // HLSL can promote logical not
+        }
+ 
         if (child->getType().getBasicType() != EbtBool || child->getType().isMatrix() || child->getType().isArray() || child->getType().isVector()) {
-            return 0;
+            return nullptr;
         }
         break;
 
@@ -293,7 +297,7 @@
     case EOpPreDecrement:
     case EOpNegative:
         if (child->getType().getBasicType() == EbtStruct || child->getType().isArray())
-            return 0;
+            return nullptr;
     default: break; // some compilers want this
     }
 
@@ -321,8 +325,8 @@
                                                                child->getMatrixRows(),
                                                                child->isVector()),
                               child);
-        if (child == 0)
-            return 0;
+        if (child == nullptr)
+            return nullptr;
     }
 
     //
@@ -349,8 +353,8 @@
     //
     TIntermUnary* node = addUnaryNode(op, child, loc);
 
-    if (! node->promote())
-        return 0;
+    if (! promote(node))
+        return nullptr;
 
     node->updatePrecision();
 
@@ -375,8 +379,8 @@
         // including constness (which would differ from the prototype).
         //
         TIntermTyped* child = childNode->getAsTyped();
-        if (child == 0)
-            return 0;
+        if (child == nullptr)
+            return nullptr;
 
         if (child->getAsConstantUnion()) {
             TIntermTyped* folded = child->getAsConstantUnion()->fold(op, returnType);
@@ -412,7 +416,7 @@
     //
     if (node) {
         aggNode = node->getAsAggregate();
-        if (aggNode == 0 || aggNode->getOp() != EOpNull) {
+        if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
             //
             // Make an aggregate containing this node.
             //
@@ -447,7 +451,7 @@
 // Generally, this is focused on basic type conversion, not shape conversion.
 // See addShapeConversion().
 //
-// Return 0 if a conversion can't be done.
+// Return nullptr if a conversion can't be done.
 //
 TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
 {
@@ -456,7 +460,7 @@
     //
     switch (node->getBasicType()) {
     case EbtVoid:
-        return 0;
+        return nullptr;
     case EbtAtomicUint:
     case EbtSampler:
         // opaque types can be passed to functions
@@ -474,7 +478,7 @@
             break;
 
         // otherwise, opaque types can't even be operated on, let alone converted
-        return 0;
+        return nullptr;
     default:
         break;
     }
@@ -485,11 +489,11 @@
 
     // If one's a structure, then no conversions.
     if (type.isStruct() || node->isStruct())
-        return 0;
+        return nullptr;
 
     // If one's an array, then no conversions.
     if (type.isArray() || node->getType().isArray())
-        return 0;
+        return nullptr;
 
     // Note: callers are responsible for other aspects of shape,
     // like vector and matrix sizes.
@@ -555,6 +559,10 @@
     case EOpAndAssign:
     case EOpInclusiveOrAssign:
     case EOpExclusiveOrAssign:
+    case EOpLogicalNot:
+    case EOpLogicalAnd:
+    case EOpLogicalOr:
+    case EOpLogicalXor:
 
     case EOpFunctionCall:
     case EOpReturn:
@@ -576,7 +584,7 @@
         if (canImplicitlyPromote(node->getType().getBasicType(), type.getBasicType(), op))
             promoteTo = type.getBasicType();
         else
-            return 0;
+            return nullptr;
 
         break;
 
@@ -598,7 +606,7 @@
 
             return node;
         else
-            return 0;
+            return nullptr;
 
     default:
         // default is to require a match; all exceptions should have case statements above
@@ -606,7 +614,7 @@
         if (type.getBasicType() == node->getType().getBasicType())
             return node;
         else
-            return 0;
+            return nullptr;
     }
 
     if (node->getAsConstantUnion())
@@ -615,7 +623,7 @@
     //
     // Add a new newNode for the conversion.
     //
-    TIntermUnary* newNode = 0;
+    TIntermUnary* newNode = nullptr;
 
     TOperator newOp = EOpNull;
 
@@ -634,7 +642,7 @@
         case EbtInt64: newOp = EOpConvInt64ToDouble; break;
         case EbtUint64: newOp = EOpConvUint64ToDouble; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtFloat:
@@ -649,7 +657,7 @@
         case EbtInt64:  newOp = EOpConvInt64ToFloat;  break;
         case EbtUint64: newOp = EOpConvUint64ToFloat; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
 #ifdef AMD_EXTENSIONS
@@ -663,7 +671,7 @@
         case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
         case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
 #endif
@@ -679,7 +687,7 @@
         case EbtInt64:  newOp = EOpConvInt64ToBool;  break;
         case EbtUint64: newOp = EOpConvUint64ToBool; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtInt:
@@ -694,7 +702,7 @@
         case EbtInt64:  newOp = EOpConvInt64ToInt;  break;
         case EbtUint64: newOp = EOpConvUint64ToInt; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtUint:
@@ -709,7 +717,7 @@
         case EbtInt64:  newOp = EOpConvInt64ToUint;  break;
         case EbtUint64: newOp = EOpConvUint64ToUint; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtInt64:
@@ -724,7 +732,7 @@
 #endif
         case EbtUint64: newOp = EOpConvUint64ToInt64; break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     case EbtUint64:
@@ -739,11 +747,11 @@
 #endif
         case EbtInt64:  newOp = EOpConvInt64ToUint64;  break;
         default:
-            return 0;
+            return nullptr;
         }
         break;
     default:
-        return 0;
+        return nullptr;
     }
 
     TType newType(promoteTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
@@ -789,6 +797,9 @@
     case EOpNotEqual:
     case EOpFunctionCall:
     case EOpReturn:
+    case EOpLogicalAnd:
+    case EOpLogicalOr:
+    case EOpLogicalXor:
         break;
     default:
         return node;
@@ -803,8 +814,10 @@
     TOperator constructorOp = mapTypeToConstructorOp(type);
 
     // scalar -> smeared -> vector, or
+    // vec1 -> scalar, or
     // bigger vector -> smaller vector or scalar
     if ((type.isVector() && node->getType().isScalar()) ||
+        (node->getType().isVector() && node->getVectorSize() == 1 && type.isScalar()) ||
         (node->getVectorSize() > type.getVectorSize() && type.isVector()))
         return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());
 
@@ -841,6 +854,11 @@
             case EOpModAssign:               // ... 
             case EOpReturn:                  // function returns can also perform arbitrary conversions
             case EOpFunctionCall:            // conversion of a calling parameter
+            case EOpLogicalNot:
+            case EOpLogicalAnd:
+            case EOpLogicalOr:
+            case EOpLogicalXor:
+            case EOpConstructStruct:
                 return true;
             default:
                 break;
@@ -873,6 +891,8 @@
         case EbtFloat16:
 #endif
             return true;
+        case EbtBool:
+            return (source == EShSourceHlsl);
         default:
             return false;
         }
@@ -1104,15 +1124,15 @@
 // Safe way to combine two nodes into an aggregate.  Works with null pointers,
 // a node that's not a aggregate yet, etc.
 //
-// Returns the resulting aggregate, unless 0 was passed in for
+// Returns the resulting aggregate, unless nullptr was passed in for
 // both existing nodes.
 //
 TIntermAggregate* TIntermediate::growAggregate(TIntermNode* left, TIntermNode* right)
 {
-    if (left == 0 && right == 0)
-        return 0;
+    if (left == nullptr && right == nullptr)
+        return nullptr;
 
-    TIntermAggregate* aggNode = 0;
+    TIntermAggregate* aggNode = nullptr;
     if (left)
         aggNode = left->getAsAggregate();
     if (! aggNode || aggNode->getOp() != EOpNull) {
@@ -1139,12 +1159,12 @@
 //
 // Turn an existing node into an aggregate.
 //
-// Returns an aggregate, unless 0 was passed in for the existing node.
+// Returns an aggregate, unless nullptr was passed in for the existing node.
 //
 TIntermAggregate* TIntermediate::makeAggregate(TIntermNode* node)
 {
-    if (node == 0)
-        return 0;
+    if (node == nullptr)
+        return nullptr;
 
     TIntermAggregate* aggNode = new TIntermAggregate;
     aggNode->getSequence().push_back(node);
@@ -1155,8 +1175,8 @@
 
 TIntermAggregate* TIntermediate::makeAggregate(TIntermNode* node, const TSourceLoc& loc)
 {
-    if (node == 0)
-        return 0;
+    if (node == nullptr)
+        return nullptr;
 
     TIntermAggregate* aggNode = new TIntermAggregate;
     aggNode->getSequence().push_back(node);
@@ -1166,6 +1186,17 @@
 }
 
 //
+// Make an aggregate with an empty sequence.
+//
+TIntermAggregate* TIntermediate::makeAggregate(const TSourceLoc& loc)
+{
+    TIntermAggregate* aggNode = new TIntermAggregate;
+    aggNode->setLoc(loc);
+
+    return aggNode;
+}
+
+//
 // For "if" test nodes.  There are three children; a condition,
 // a true path, and a false path.  The two paths are in the
 // nodePair.
@@ -1218,7 +1249,7 @@
 // a true path, and a false path.  The two paths are specified
 // as separate parameters.
 //
-// Returns the selection node created, or 0 if one could not be.
+// Returns the selection node created, or nullptr if one could not be.
 //
 TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc& loc)
 {
@@ -1233,12 +1264,12 @@
         if (child)
             trueBlock = child;
         else
-            return 0;
+            return nullptr;
     }
 
     // After conversion, types have to match.
     if (falseBlock->getType() != trueBlock->getType())
-        return 0;
+        return nullptr;
 
     //
     // See if all the operands are constant, then fold it otherwise not.
@@ -1412,7 +1443,7 @@
 //
 TIntermBranch* TIntermediate::addBranch(TOperator branchOp, const TSourceLoc& loc)
 {
-    return addBranch(branchOp, 0, loc);
+    return addBranch(branchOp, nullptr, loc);
 }
 
 TIntermBranch* TIntermediate::addBranch(TOperator branchOp, TIntermTyped* expression, const TSourceLoc& loc)
@@ -1429,7 +1460,7 @@
 //
 bool TIntermediate::postProcess(TIntermNode* root, EShLanguage /*language*/)
 {
-    if (root == 0)
+    if (root == nullptr)
         return true;
 
     // Finish off the top-level sequence
@@ -1711,18 +1742,46 @@
 }
 
 //
-// Make sure the type of a unary operator is appropriate for its
-// combination of operation and operand type.
+// Make sure the type of an operator is appropriate for its
+// combination of operation and operand type.  This will invoke
+// promoteUnary, promoteBinary, etc as needed.
 //
-// Returns false in nothing makes sense.
+// Returns false if nothing makes sense.
 //
-bool TIntermUnary::promote()
+bool TIntermediate::promote(TIntermOperator* node)
 {
+    if (node == nullptr)
+        return false;
+
+    if (node->getAsUnaryNode())
+        return promoteUnary(*node->getAsUnaryNode());
+
+    if (node->getAsBinaryNode())
+        return promoteBinary(*node->getAsBinaryNode());
+
+    return false;
+}
+
+//
+// See TIntermediate::promote
+//
+bool TIntermediate::promoteUnary(TIntermUnary& node)
+{
+    const TOperator op    = node.getOp();
+    TIntermTyped* operand = node.getOperand();
+
     switch (op) {
     case EOpLogicalNot:
-        if (operand->getBasicType() != EbtBool)
+        // Convert operand to a boolean type
+        if (operand->getBasicType() != EbtBool) {
+            // Add constructor to boolean type. If that fails, we can't do it, so return false.
+            TIntermTyped* converted = convertToBasicType(op, EbtBool, operand);
+            if (converted == nullptr)
+                return false;
 
-            return false;
+            // Use the result of converting the node to a bool.
+            node.setOperand(operand = converted); // also updates stack variable
+        }
         break;
     case EOpBitwiseNot:
         if (operand->getBasicType() != EbtInt &&
@@ -1756,8 +1815,8 @@
             return false;
     }
 
-    setType(operand->getType());
-    getWritableType().getQualifier().makeTemporary();
+    node.setType(operand->getType());
+    node.getWritableType().getQualifier().makeTemporary();
 
     return true;
 }
@@ -1774,14 +1833,33 @@
     }
 }
 
-//
-// Establishes the type of the resultant operation, as well as
-// makes the operator the correct one for the operands.
-//
-// Returns false if operator can't work on operands.
-//
-bool TIntermBinary::promote()
+// If it is not already, convert this node to the given basic type.
+TIntermTyped* TIntermediate::convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const
 {
+    if (node == nullptr)
+        return nullptr;
+
+    // It's already this basic type: nothing needs to be done, so use the node directly.
+    if (node->getBasicType() == basicType)
+        return node;
+
+    const TType& type = node->getType();
+    const TType newType(basicType, type.getQualifier().storage,
+                        type.getVectorSize(), type.getMatrixCols(), type.getMatrixRows(), type.isVector());
+
+    // Add constructor to the right vectorness of the right type. If that fails, we can't do it, so return nullptr.
+    return addConversion(op, newType, node);
+}
+
+//
+// See TIntermediate::promote
+//
+bool TIntermediate::promoteBinary(TIntermBinary& node)
+{
+    TOperator     op    = node.getOp();
+    TIntermTyped* left  = node.getLeft();
+    TIntermTyped* right = node.getRight();
+
     // Arrays and structures have to be exact matches.
     if ((left->isArray() || right->isArray() || left->getBasicType() == EbtStruct || right->getBasicType() == EbtStruct)
         && left->getType() != right->getType())
@@ -1789,8 +1867,8 @@
 
     // Base assumption:  just make the type the same as the left
     // operand.  Only deviations from this will be coded.
-    setType(left->getType());
-    type.getQualifier().clear();
+    node.setType(left->getType());
+    node.getWritableType().getQualifier().clear();
 
     // Composite and opaque types don't having pending operator changes, e.g.,
     // array, structure, and samplers.  Just establish final type and correctness.
@@ -1803,7 +1881,7 @@
                 return false;
             } else {
                 // Promote to conditional
-                setType(TType(EbtBool));
+                node.setType(TType(EbtBool));
             }
 
             return true;
@@ -1831,23 +1909,46 @@
         // Relational comparisons need numeric types and will promote to scalar Boolean.
         if (left->getBasicType() == EbtBool)
             return false;
-        setType(TType(EbtBool));
+
+        node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
         break;
 
     case EOpEqual:
     case EOpNotEqual:
-        // All the above comparisons result in a bool (but not the vector compares)
-        setType(TType(EbtBool));
+        if (getSource() == EShSourceHlsl) {
+            const int resultWidth = std::max(left->getVectorSize(), right->getVectorSize());
+
+            // In HLSL, == or != on vectors means component-wise comparison.
+            if (resultWidth > 1) {
+                op = (op == EOpEqual) ? EOpVectorEqual : EOpVectorNotEqual;
+                node.setOp(op);
+            }
+
+            node.setType(TType(EbtBool, EvqTemporary, resultWidth));
+        } else {
+            // All the above comparisons result in a bool (but not the vector compares)
+            node.setType(TType(EbtBool));
+        }
         break;
 
     case EOpLogicalAnd:
     case EOpLogicalOr:
     case EOpLogicalXor:
-        // logical ops operate only on scalar Booleans and will promote to scalar Boolean.
-        if (left->getBasicType() != EbtBool || left->isVector() || left->isMatrix())
-            return false;
+        if (getSource() == EShSourceHlsl) {
+            TIntermTyped* convertedL = convertToBasicType(op, EbtBool, left);
+            TIntermTyped* convertedR = convertToBasicType(op, EbtBool, right);
+            if (convertedL == nullptr || convertedR == nullptr)
+                return false;
+            node.setLeft(left = convertedL);   // also updates stack variable
+            node.setRight(right = convertedR); // also updates stack variable
+        } else {
+            // logical ops operate only on scalar Booleans and will promote to scalar Boolean.
+            if (left->getBasicType() != EbtBool || left->isVector() || left->isMatrix())
+                return false;
+        }
 
-        setType(TType(EbtBool));
+        node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
+
         break;
 
     case EOpRightShift:
@@ -1864,6 +1965,9 @@
     case EOpAndAssign:
     case EOpInclusiveOrAssign:
     case EOpExclusiveOrAssign:
+        if (getSource() == EShSourceHlsl)
+            break;
+
         // Check for integer-only operands.
         if ((left->getBasicType() != EbtInt &&  left->getBasicType() != EbtUint &&
              left->getBasicType() != EbtInt64 &&  left->getBasicType() != EbtUint64) ||
@@ -1900,6 +2004,8 @@
 
     case EOpEqual:
     case EOpNotEqual:
+    case EOpVectorEqual:
+    case EOpVectorNotEqual:
 
     case EOpLogicalAnd:
     case EOpLogicalOr:
@@ -1960,33 +2066,33 @@
             if (left->isVector()) {
                 if (left->getVectorSize() != right->getMatrixRows())
                     return false;
-                op = EOpVectorTimesMatrix;
-                setType(TType(basicType, EvqTemporary, right->getMatrixCols()));
+                node.setOp(op = EOpVectorTimesMatrix);
+                node.setType(TType(basicType, EvqTemporary, right->getMatrixCols()));
             } else {
-                op = EOpMatrixTimesScalar;
-                setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), right->getMatrixRows()));
+                node.setOp(op = EOpMatrixTimesScalar);
+                node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), right->getMatrixRows()));
             }
         } else if (left->isMatrix() && !right->isMatrix()) {
             if (right->isVector()) {
                 if (left->getMatrixCols() != right->getVectorSize())
                     return false;
-                op = EOpMatrixTimesVector;
-                setType(TType(basicType, EvqTemporary, left->getMatrixRows()));
+                node.setOp(op = EOpMatrixTimesVector);
+                node.setType(TType(basicType, EvqTemporary, left->getMatrixRows()));
             } else {
-                op = EOpMatrixTimesScalar;
+                node.setOp(op = EOpMatrixTimesScalar);
             }
         } else if (left->isMatrix() && right->isMatrix()) {
             if (left->getMatrixCols() != right->getMatrixRows())
                 return false;
-            op = EOpMatrixTimesMatrix;
-            setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), left->getMatrixRows()));
+            node.setOp(op = EOpMatrixTimesMatrix);
+            node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), left->getMatrixRows()));
         } else if (! left->isMatrix() && ! right->isMatrix()) {
             if (left->isVector() && right->isVector()) {
                 ; // leave as component product
             } else if (left->isVector() || right->isVector()) {
-                op = EOpVectorTimesScalar;
+                node.setOp(op = EOpVectorTimesScalar);
                 if (right->isVector())
-                    setType(TType(basicType, EvqTemporary, right->getVectorSize()));
+                    node.setType(TType(basicType, EvqTemporary, right->getVectorSize()));
             }
         } else {
             return false;
@@ -1997,7 +2103,7 @@
             if (left->isVector()) {
                 if (left->getVectorSize() != right->getMatrixRows() || left->getVectorSize() != right->getMatrixCols())
                     return false;
-                op = EOpVectorTimesMatrixAssign;
+                node.setOp(op = EOpVectorTimesMatrixAssign);
             } else {
                 return false;
             }
@@ -2005,19 +2111,19 @@
             if (right->isVector()) {
                 return false;
             } else {
-                op = EOpMatrixTimesScalarAssign;
+                node.setOp(op = EOpMatrixTimesScalarAssign);
             }
         } else if (left->isMatrix() && right->isMatrix()) {
             if (left->getMatrixCols() != left->getMatrixRows() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixCols() != right->getMatrixRows())
                 return false;
-            op = EOpMatrixTimesMatrixAssign;
+            node.setOp(op = EOpMatrixTimesMatrixAssign);
         } else if (!left->isMatrix() && !right->isMatrix()) {
             if (left->isVector() && right->isVector()) {
                 // leave as component product
             } else if (left->isVector() || right->isVector()) {
                 if (! left->isVector())
                     return false;
-                op = EOpVectorTimesScalarAssign;
+                node.setOp(op = EOpVectorTimesScalarAssign);
             }
         } else {
             return false;
@@ -2051,6 +2157,7 @@
     case EOpAndAssign:
     case EOpInclusiveOrAssign:
     case EOpExclusiveOrAssign:
+
         if ((left->isMatrix() && right->isVector()) ||
             (left->isVector() && right->isMatrix()) ||
             left->getBasicType() != right->getBasicType())
@@ -2060,8 +2167,8 @@
         if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize())
             return false;
         if (right->isVector() || right->isMatrix()) {
-            type.shallowCopy(right->getType());
-            type.getQualifier().makeTemporary();
+            node.getWritableType().shallowCopy(right->getType());
+            node.getWritableType().getQualifier().makeTemporary();
         }
         break;
 
@@ -2085,7 +2192,7 @@
     case EOpExclusiveOrAssign:
     case EOpLeftShiftAssign:
     case EOpRightShiftAssign:
-        if (getType() != left->getType())
+        if (node.getType() != left->getType())
             return false;
         break;
     default:
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index 5949cd8..dc8c61d 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -221,16 +221,37 @@
         error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
 }
 
+// Add a linkage symbol node for 'symbol', which
+// must have its type fully edited, as this will snapshot the type.
+// It is okay if symbol becomes invalid before finish().
+void TParseContextBase::trackLinkage(TSymbol& symbol)
+{
+    if (!parsingBuiltins)
+        intermediate.addSymbolLinkageNode(linkage, symbol);
+}
+
+// Add 'symbol' to the list of deferred linkage symbols, which
+// are later processed in finish(), at which point the symbol
+// must still be valid.
+// It is okay if the symbol's type will be subsequently edited.
+void TParseContextBase::trackLinkageDeferred(TSymbol& symbol)
+{
+    if (!parsingBuiltins)
+        linkageSymbols.push_back(&symbol);
+}
+
 // Make a shared symbol have a non-shared version that can be edited by the current 
 // compile, such that editing its type will not change the shared version and will
-// effect all nodes sharing it.
+// effect all nodes already sharing it (non-shallow type),
+// or adopting its full type after being edited (shallow type).
 void TParseContextBase::makeEditable(TSymbol*& symbol)
 {
     // copyUp() does a deep copy of the type.
     symbol = symbolTable.copyUp(symbol);
 
-    // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, *symbol);
+    // Save it (deferred, so it can be edited first) in the AST for linker use.
+    if (symbol)
+        trackLinkageDeferred(*symbol);
 }
 
 // Return a writable version of the variable 'name'.
@@ -242,7 +263,7 @@
 {
     bool builtIn;
     TSymbol* symbol = symbolTable.find(name, &builtIn);
-    
+
     assert(symbol != nullptr);
     if (symbol == nullptr)
         return nullptr;
@@ -434,7 +455,7 @@
         // This is the first request; we need a normal symbol table insert
         inserted = symbolTable.insert(*globalUniformBlock);
         if (inserted)
-            intermediate.addSymbolLinkageNode(linkage, *globalUniformBlock);
+            trackLinkageDeferred(*globalUniformBlock);
     } else if (firstNewMember <= numMembers) {
         // This is a follow-on request; we need to amend the first insert
         inserted = symbolTable.amend(*globalUniformBlock, firstNewMember);
@@ -448,4 +469,14 @@
     return inserted;
 }
 
+void TParseContextBase::finish()
+{
+    if (!parsingBuiltins) {
+        // Transfer te linkage symbols to AST nodes
+        for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i)
+            intermediate.addSymbolLinkageNode(linkage, **i);
+        intermediate.addSymbolLinkageNodes(linkage, getLanguage(), symbolTable);
+    }
+}
+
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 71ee4f3..831e3ac 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -50,15 +50,12 @@
 TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins,
                              int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
                              TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) :
-            TParseContextBase(symbolTable, interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), 
+            TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), 
             contextPragma(true, false), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), statementNestingLevel(0),
             inMain(false), postMainReturn(false), currentFunctionType(nullptr), blockName(nullptr),
-            limits(resources.limits), parsingBuiltins(parsingBuiltins),
+            limits(resources.limits),
             atomicUintOffsets(nullptr), anyIndexLimits(false)
 {
-    // ensure we always have a linkage node, even if empty, to simplify tree topology algorithms
-    linkage = new TIntermAggregate;
-
     // decide whether precision qualifiers should be ignored or respected
     if (profile == EEsProfile || spvVersion.vulkan > 0) {
         precisionManager.respectPrecisionQualifiers();
@@ -184,8 +181,8 @@
     currentScanner = &input;
     ppContext.setInput(input, versionWillBeError);
     yyparse(this);
-    if (! parsingBuiltins)
-        finalErrorCheck();
+
+    finish();
 
     return numErrors == 0;
 }
@@ -1216,7 +1213,7 @@
                                         function.getType().getQualifier().precision;
     } else if (TIntermAggregate* agg = node.getAsAggregate()) {
         TIntermSequence& sequence = agg->getSequence();
-        int numArgs = (int)sequence.size();
+        unsigned int numArgs = (unsigned int)sequence.size();
         switch (agg->getOp()) {
         case EOpBitfieldExtract:
             numArgs = 1;
@@ -1233,7 +1230,7 @@
             break;
         }
         // find the maximum precision from the arguments and parameters
-        for (unsigned int arg = 0; arg < sequence.size(); ++arg) {
+        for (unsigned int arg = 0; arg < numArgs; ++arg) {
             operationPrecision = std::max(operationPrecision, sequence[arg]->getAsTyped()->getQualifier().precision);
             operationPrecision = std::max(operationPrecision, function[arg].type->getQualifier().precision);
         }
@@ -2316,7 +2313,7 @@
 
             // At least the dimensionalities have to match.
             if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
-                error(loc, "array constructor argument not correct type to construct array element", "constructior", "");
+                error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
                 return true;
             }
 
@@ -3093,7 +3090,7 @@
 // Do all the semantic checking for declaring or redeclaring an array, with and
 // without a size, and make the right changes to the symbol table.
 //
-void TParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol, bool& newDeclaration)
+void TParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol)
 {
     if (symbol == nullptr) {
         bool currentScope;
@@ -3111,7 +3108,8 @@
             //
             symbol = new TVariable(&identifier, type);
             symbolTable.insert(*symbol);
-            newDeclaration = true;
+            if (symbolTable.atGlobalLevel())
+                trackLinkageDeferred(*symbol);
 
             if (! symbolTable.atBuiltInLevel()) {
                 if (isIoResizeArray(type)) {
@@ -3271,7 +3269,8 @@
 //
 // Returns a redeclared and type-modified variable if a redeclarated occurred.
 //
-TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier, const TQualifier& qualifier, const TShaderQualifiers& publicType, bool& newDeclaration)
+TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier,
+                                                 const TQualifier& qualifier, const TShaderQualifiers& publicType)
 {
     if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
         return nullptr;
@@ -3318,11 +3317,8 @@
         // If it wasn't at a built-in level, then it's already been redeclared;
         // that is, this is a redeclaration of a redeclaration; reuse that initial
         // redeclaration.  Otherwise, make the new one.
-        if (builtIn) {
-            // Copy the symbol up to make a writable version
+        if (builtIn)
             makeEditable(symbol);
-            newDeclaration = true;
-        }
 
         // Now, modify the type of the copy, as per the type of the current redeclaration.
 
@@ -3540,7 +3536,7 @@
         fixIoArraySize(loc, block->getWritableType());
 
     // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, *block);
+    trackLinkageDeferred(*block);
 }
 
 void TParseContext::paramCheckFix(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type)
@@ -3794,8 +3790,13 @@
 //
 // Do any additional error checking, etc., once we know the parsing is done.
 //
-void TParseContext::finalErrorCheck()
+void TParseContext::finish()
 {
+    TParseContextBase::finish();
+
+    if (parsingBuiltins)
+        return;
+
     // Check on array indexes for ES 2.0 (version 100) limitations.
     for (size_t i = 0; i < needsIndexLimitationChecking.size(); ++i)
         constantIndexExpressionCheck(needsIndexLimitationChecking[i]);
@@ -4971,8 +4972,7 @@
         error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", "");
 
     // Check for redeclaration of built-ins and/or attempting to declare a reserved name
-    bool newDeclaration = false;    // true if a new entry gets added to the symbol table
-    TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers, newDeclaration);
+    TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers);
     if (symbol == nullptr)
         reservedErrorCheck(loc, identifier);
 
@@ -4990,7 +4990,7 @@
         arrayUnsizedCheck(loc, type.getQualifier(), &type.getArraySizes(), initializer != nullptr, false);
 
         if (! arrayQualifierError(loc, type.getQualifier()) && ! arrayError(loc, type))
-            declareArray(loc, identifier, type, symbol, newDeclaration);
+            declareArray(loc, identifier, type, symbol);
 
         if (initializer) {
             profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "initializer");
@@ -4999,7 +4999,7 @@
     } else {
         // non-array case
         if (symbol == nullptr)
-            symbol = declareNonArray(loc, identifier, type, newDeclaration);
+            symbol = declareNonArray(loc, identifier, type);
         else if (type != symbol->getType())
             error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
     }
@@ -5022,10 +5022,6 @@
     layoutObjectCheck(loc, *symbol);
     fixOffset(loc, *symbol);
 
-    // see if it's a linker-level object to track
-    if (newDeclaration && symbolTable.atGlobalLevel())
-        intermediate.addSymbolLinkageNode(linkage, *symbol);
-
     return initNode;
 }
 
@@ -5061,20 +5057,22 @@
 //
 // Return the successfully declared variable.
 //
-TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type, bool& newDeclaration)
+TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type)
 {
     // make a new variable
     TVariable* variable = new TVariable(&identifier, type);
 
     ioArrayCheck(loc, type, identifier);
+
     // add variable to symbol table
-    if (! symbolTable.insert(*variable)) {
-        error(loc, "redefinition", variable->getName().c_str(), "");
-        return nullptr;
-    } else {
-        newDeclaration = true;
+    if (symbolTable.insert(*variable)) {
+        if (symbolTable.atGlobalLevel())
+            trackLinkageDeferred(*variable);
         return variable;
     }
+
+    error(loc, "redefinition", variable->getName().c_str(), "");
+    return nullptr;
 }
 
 //
@@ -5731,7 +5729,7 @@
         fixIoArraySize(loc, variable.getWritableType());
 
     // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, variable);
+    trackLinkageDeferred(variable);
 }
 
 // Do all block-declaration checking regarding the combination of in/out/uniform/buffer
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 0f60ff7..165601d 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -73,13 +73,16 @@
 //
 class TParseContextBase : public TParseVersions {
 public:
-    TParseContextBase(TSymbolTable& symbolTable, TIntermediate& interm, int version,
+    TParseContextBase(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins, int version,
                       EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
                       TInfoSink& infoSink, bool forwardCompatible, EShMessages messages)
           : TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
             symbolTable(symbolTable),
-            linkage(nullptr), scanContext(nullptr), ppContext(nullptr),
-            globalUniformBlock(nullptr) { }
+            parsingBuiltins(parsingBuiltins), scanContext(nullptr), ppContext(nullptr),
+            globalUniformBlock(nullptr)
+    {
+        linkage = new TIntermAggregate;
+    }
     virtual ~TParseContextBase() { }
 
     virtual void C_DECL   error(const TSourceLoc&, const char* szReason, const char* szToken,
@@ -94,7 +97,6 @@
     virtual void setLimits(const TBuiltInResource&) = 0;
 
     EShLanguage getLanguage() const { return language; }
-    TIntermAggregate*& getLinkage() { return linkage; }
     void setScanContext(TScanContext* c) { scanContext = c; }
     TScanContext* getScanContext() const { return scanContext; }
     void setPpContext(TPpContext* c) { ppContext = c; }
@@ -150,7 +152,8 @@
     TParseContextBase(TParseContextBase&);
     TParseContextBase& operator=(TParseContextBase&);
 
-    TIntermAggregate* linkage;   // aggregate node of objects the linker may need, if not referenced by the rest of the AST
+    const bool parsingBuiltins;       // true if parsing built-in symbols/functions
+    TVector<TSymbol*> linkageSymbols; // these need to be transferred to 'linkage', after all editing is done
     TScanContext* scanContext;
     TPpContext* ppContext;
 
@@ -177,8 +180,14 @@
     virtual void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
                                const char* szExtraInfoFormat, TPrefixType prefix,
                                va_list args);
+    virtual void trackLinkage(TSymbol& symbol);
+    virtual void trackLinkageDeferred(TSymbol& symbol);
     virtual void makeEditable(TSymbol*&);
     virtual TVariable* getEditableVariable(const char* name);
+    virtual void finish();
+
+private:
+    TIntermAggregate* linkage;
 };
 
 //
@@ -314,7 +323,7 @@
     void precisionQualifierCheck(const TSourceLoc&, TBasicType, TQualifier&);
     void parameterTypeCheck(const TSourceLoc&, TStorageQualifier qualifier, const TType& type);
     bool containsFieldWithBasicType(const TType& type ,TBasicType basicType);
-    TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&, bool& newDeclaration);
+    TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&);
     void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);
     void paramCheckFix(const TSourceLoc&, const TStorageQualifier&, TType& type);
     void paramCheckFix(const TSourceLoc&, const TQualifier&, TType& type);
@@ -368,11 +377,11 @@
     void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type);
     void inheritGlobalDefaults(TQualifier& dst) const;
     TVariable* makeInternalVariable(const char* name, const TType&) const;
-    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&, bool& newDeclaration);
-    void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool& newDeclaration);
+    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&);
+    void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&);
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
-    void finalErrorCheck();
+    void finish() override;
 
 public:
     //
@@ -401,7 +410,6 @@
     TParseContext(TParseContext&);
     TParseContext& operator=(TParseContext&);
 
-    const bool parsingBuiltins;        // true if parsing built-in symbols/functions
     static const int maxSamplerIndex = EsdNumDims * (EbtNumTypes * (2 * 2 * 2 * 2 * 2)); // see computeSamplerTypeIndex()
     TPrecisionQualifier defaultSamplerPrecision[maxSamplerIndex];
     TPrecisionManager precisionManager;
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 6d04445..cc21b2e 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -81,6 +81,28 @@
     }
 }
 
+// Create a language specific version of a parse context.
+TParseContextBase* CreateParseContext(TSymbolTable& symbolTable, TIntermediate& intermediate,
+                                      int version, EProfile profile, EShSource source,
+                                      EShLanguage language, TInfoSink& infoSink,
+                                      SpvVersion spvVersion, bool forwardCompatible, EShMessages messages,
+                                      bool parsingBuiltIns)
+{
+    switch (source) {
+    case EShSourceGlsl:
+        intermediate.setEntryPointName("main");
+        return new TParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
+                                 language, infoSink, forwardCompatible, messages);
+
+    case EShSourceHlsl:
+        return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
+                                    language, infoSink, forwardCompatible, messages);
+    default:
+        infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
+        return nullptr;
+    }
+}
+
 // Local mapping functions for making arrays of symbol tables....
 
 const int VersionCount = 15;  // index range in MapVersionToIndex
@@ -188,17 +210,22 @@
 //
 // Parse and add to the given symbol table the content of the given shader string.
 //
-bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, 
-                           TSymbolTable& symbolTable)
+bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
+                           EShSource source, TInfoSink& infoSink, TSymbolTable& symbolTable)
 {
     TIntermediate intermediate(language, version, profile);
     
-    TParseContext parseContext(symbolTable, intermediate, true, version, profile, spvVersion, language, infoSink);
+    intermediate.setSource(source);
+
+    std::unique_ptr<TParseContextBase> parseContext(CreateParseContext(symbolTable, intermediate, version, profile, source, 
+                                                                       language, infoSink, spvVersion, true, EShMsgDefault,
+                                                                       true));
+
     TShader::ForbidInclude includer;
-    TPpContext ppContext(parseContext, "", includer);
-    TScanContext scanContext(parseContext);
-    parseContext.setScanContext(&scanContext);
-    parseContext.setPpContext(&ppContext);
+    TPpContext ppContext(*parseContext, "", includer);
+    TScanContext scanContext(*parseContext);
+    parseContext->setScanContext(&scanContext);
+    parseContext->setPpContext(&ppContext);
     
     //
     // Push the symbol table to give it an initial scope.  This
@@ -217,7 +244,7 @@
         return true;
     
     TInputScanner input(1, builtInShaders, builtInLengths);
-    if (! parseContext.parseShaderStrings(ppContext, input) != 0) {
+    if (! parseContext->parseShaderStrings(ppContext, input) != 0) {
         infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins");
         printf("Unable to parse built-ins\n%s\n", infoSink.info.c_str());
         printf("%s\n", builtInShaders[0]);
@@ -237,10 +264,12 @@
 // To initialize per-stage shared tables, with the common table already complete.
 //
 void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int version, EProfile profile, const SpvVersion& spvVersion,
-                                EShLanguage language, TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables)
+                                EShLanguage language, EShSource source, TInfoSink& infoSink, TSymbolTable** commonTable,
+                                TSymbolTable** symbolTables)
 {
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
-    InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, infoSink, *symbolTables[language]);
+    InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source,
+                          infoSink, *symbolTables[language]);
     builtInParseables.identifyBuiltIns(version, profile, spvVersion, language, *symbolTables[language]);
     if (profile == EEsProfile && version >= 300)
         (*symbolTables[language]).setNoBuiltInRedeclarations();
@@ -259,32 +288,40 @@
     builtInParseables->initialize(version, profile, spvVersion);
 
     // do the common tables
-    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, infoSink, *commonTable[EPcGeneral]);
+    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, source,
+                          infoSink, *commonTable[EPcGeneral]);
     if (profile == EEsProfile)
-        InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, infoSink, *commonTable[EPcFragment]);
+        InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, source,
+                              infoSink, *commonTable[EPcFragment]);
 
     // do the per-stage tables
 
     // always have vertex and fragment
-    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, infoSink, commonTable, symbolTables);
-    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, infoSink, commonTable, symbolTables);
+    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, source,
+                               infoSink, commonTable, symbolTables);
+    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source,
+                               infoSink, commonTable, symbolTables);
 
     // check for tessellation
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, source,
+                                   infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, source,
+                                   infoSink, commonTable, symbolTables);
     }
 
     // check for geometry
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
+                                   infoSink, commonTable, symbolTables);
 
     // check for compute
     if ((profile != EEsProfile && version >= 420) ||
         (profile == EEsProfile && version >= 310))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
+                                   infoSink, commonTable, symbolTables);
 
     return true;
 }
@@ -295,7 +332,7 @@
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
     
     builtInParseables->initialize(*resources, version, profile, spvVersion, language);
-    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, infoSink, symbolTable);
+    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, source, infoSink, symbolTable);
     builtInParseables->identifyBuiltIns(version, profile, spvVersion, language, symbolTable, *resources);
 
     return true;
@@ -694,15 +731,10 @@
     // Now we can process the full shader under proper symbols and rules.
     //
 
-    TParseContextBase* parseContext;
-    if (source == EShSourceHlsl) {
-        parseContext = new HlslParseContext(symbolTable, intermediate, false, version, profile, spvVersion,
-                                            compiler->getLanguage(), compiler->infoSink, forwardCompatible, messages);
-    } else {
-        intermediate.setEntryPointName("main");
-        parseContext = new TParseContext(symbolTable, intermediate, false, version, profile, spvVersion,
-                                         compiler->getLanguage(), compiler->infoSink, forwardCompatible, messages);
-    }
+    TParseContextBase* parseContext = CreateParseContext(symbolTable, intermediate, version, profile, source,
+                                                         compiler->getLanguage(), compiler->infoSink,
+                                                         spvVersion, forwardCompatible, messages, false);
+
     TPpContext ppContext(*parseContext, names[numPre]? names[numPre]: "", includer);
 
     // only GLSL (bison triggered, really) needs an externally set scan context
@@ -940,14 +972,13 @@
 struct DoFullParse{
   bool operator()(TParseContextBase& parseContext, TPpContext& ppContext,
                   TInputScanner& fullInput, bool versionWillBeError,
-                  TSymbolTable& symbolTable, TIntermediate& intermediate,
+                  TSymbolTable&, TIntermediate& intermediate,
                   EShOptimizationLevel optLevel, EShMessages messages) 
     {
         bool success = true;
         // Parse the full shader.
         if (! parseContext.parseShaderStrings(ppContext, fullInput, versionWillBeError))
             success = false;
-        intermediate.addSymbolLinkageNodes(parseContext.getLinkage(), parseContext.getLanguage(), symbolTable);
 
         if (success && intermediate.getTreeRoot()) {
             if (optLevel == EShOptNoGeneration)
@@ -1494,6 +1525,7 @@
 
 void TShader::setShiftSamplerBinding(unsigned int base) { intermediate->setShiftSamplerBinding(base); }
 void TShader::setShiftTextureBinding(unsigned int base) { intermediate->setShiftTextureBinding(base); }
+void TShader::setShiftImageBinding(unsigned int base)   { intermediate->setShiftImageBinding(base); }
 void TShader::setShiftUboBinding(unsigned int base)     { intermediate->setShiftUboBinding(base); }
 void TShader::setAutoMapBindings(bool map)              { intermediate->setAutoMapBindings(map); }
 void TShader::setFlattenUniformArrays(bool flatten)     { intermediate->setFlattenUniformArrays(flatten); }
@@ -1708,6 +1740,7 @@
 int TProgram::getNumLiveAttributes() const                   { return reflection->getNumAttributes(); }
 const char* TProgram::getAttributeName(int index) const      { return reflection->getAttribute(index).name.c_str(); }
 int TProgram::getAttributeType(int index) const              { return reflection->getAttribute(index).glDefineType; }
+const TType* TProgram::getAttributeTType(int index) const    { return reflection->getAttribute(index).getType(); }
 const TType* TProgram::getUniformTType(int index) const      { return reflection->getUniform(index).getType(); }
 const TType* TProgram::getUniformBlockTType(int index) const { return reflection->getUniformBlock(index).getType(); }
 
@@ -1716,7 +1749,7 @@
 //
 // I/O mapping implementation.
 //
-bool TProgram::mapIO()
+bool TProgram::mapIO(TIoMapResolver* resolver)
 {
     if (! linked || ioMapper)
         return false;
@@ -1725,7 +1758,7 @@
 
     for (int s = 0; s < EShLangCount; ++s) {
         if (intermediate[s]) {
-            if (! ioMapper->addStage((EShLanguage)s, *intermediate[s], *infoSink))
+            if (! ioMapper->addStage((EShLanguage)s, *intermediate[s], *infoSink, resolver))
                 return false;
         }
     }
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index bd64f19..f8c963b 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -163,6 +163,8 @@
     case EOpGreaterThan:      out.debug << "Compare Greater Than";          break;
     case EOpLessThanEqual:    out.debug << "Compare Less Than or Equal";    break;
     case EOpGreaterThanEqual: out.debug << "Compare Greater Than or Equal"; break;
+    case EOpVectorEqual:      out.debug << "Equal";                         break;
+    case EOpVectorNotEqual:   out.debug << "NotEqual";                      break;
 
     case EOpVectorTimesScalar: out.debug << "vector-scale";          break;
     case EOpVectorTimesMatrix: out.debug << "vector-times-matrix";   break;
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 15847dd..269d654 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -61,177 +61,295 @@
 //    c. implicit dead bindings are left un-bound.
 //
 
-   
+
 namespace glslang {
 
-// Map of IDs to bindings
-typedef std::unordered_map<unsigned int, int> TBindingMap;
-typedef std::unordered_set<int> TUsedBindings;
+struct TVarEntryInfo
+{
+    int             id;
+    TIntermSymbol*  symbol;
+    bool            live;
+    int             newBinding;
+    int             newSet;
 
-
-// This traverses the AST to determine which bindings are used, and which are implicit
-// (for subsequent auto-numbering)
-class TBindingTraverser : public TLiveTraverser {
-public:
-    TBindingTraverser(const TIntermediate& i, TBindingMap& bindingMap, TUsedBindings& usedBindings,
-                      bool traverseDeadCode = false) :
-        TLiveTraverser(i, traverseDeadCode, true, true, false),
-        bindingMap(bindingMap),
-        usedBindings(usedBindings)
-    { }
-
-protected:
-    virtual void visitSymbol(TIntermSymbol* base) {
-        if (base->getQualifier().storage == EvqUniform)
-            addUniform(*base);
-    }
-
-    // Return the right binding base given the variable type.
-    int getBindingBase(const TType& type) {
-        if (type.getBasicType() == EbtSampler) {
-            const TSampler& sampler = type.getSampler();
-            if (sampler.isPureSampler())
-                return intermediate.getShiftSamplerBinding();
-            if (sampler.isTexture())
-                return intermediate.getShiftTextureBinding();
-        }
-
-        if (type.getQualifier().isUniformOrBuffer())
-            return intermediate.getShiftUboBinding();
-
-        return -1;  // not a type with a binding
-    }
-
-    // Mark a given base symbol ID as being bound to 'binding'
-    void markBinding(const TIntermSymbol& base, int binding) {
-        bindingMap[base.getId()] = binding;
-
-        if (binding >= 0) {
-            // const TType& type = base.getType();
-            const unsigned int size = 1; // type.isArray() ? type.getCumulativeArraySize() : 1;
-
-            for (unsigned int offset=0; offset<size; ++offset)
-                usedBindings.insert(binding + offset);
-        }
-    }
-
-    // Mark the bindings that are given explicitly, and set ones that need
-    // implicit bindings to -1 for a subsequent pass.  (Can't happen in this
-    // pass because explicit bindings in dead code reserve the location).
-    virtual void addUniform(TIntermSymbol& base)
+    struct TOrderById
     {
-        // Skip ones we've already seen.
-        if (bindingMap.find(base.getId()) != bindingMap.end())
-            return;
+      inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r)
+      {
+        return l.id < r.id;
+      }
+    };
 
-        const TType& type = base.getType();
-        const int bindingBase = getBindingBase(type);
+    struct TOrderByPriority
+    {
+        // ordering:
+        // 1) has both binding and set
+        // 2) has binding but no set
+        // 3) has no binding but set
+        // 4) has no binding and no set
+        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r)
+        {
+            const TQualifier& lq = l.symbol->getQualifier();
+            const TQualifier& rq = r.symbol->getQualifier();
 
-        // Return if it's not a type we bind
-        if (bindingBase == -1)
-            return;
+            // simple rules:
+            // has binding gives 2 points
+            // has set gives 1 point
+            // who has the most points is more important.
+            int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0);
+            int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0);
 
-        if (type.getQualifier().hasBinding()) {
-            // It has a binding: keep that one.
-            markBinding(base, type.getQualifier().layoutBinding + bindingBase);
-        } else if (!traverseAll) {
-            // Mark it as something we need to dynamically create a binding for,
-            // only if we're walking just the live code.  We don't auto-number
-            // in dead code.
-            markBinding(base, -1);
+            if (lPoints == rPoints)
+              return l.id < r.id;
+            return lPoints > rPoints;
         }
-    }
-
-    TBindingMap&         bindingMap;
-    TUsedBindings&       usedBindings;
+    };
 };
 
 
-// This traverses the AST and applies binding maps it's given.
-class TIoMappingTraverser : public TBindingTraverser {
+
+typedef std::vector<TVarEntryInfo> TVarLiveMap;
+
+class TVarGatherTraverser : public TLiveTraverser
+{
 public:
-    TIoMappingTraverser(TIntermediate& i, TBindingMap& bindingMap, TUsedBindings& usedBindings,
-                        TInfoSink& infoSink, bool traverseDeadCode) :
-        TBindingTraverser(i, bindingMap, usedBindings, traverseDeadCode),
-        infoSink(infoSink),
-        assignError(false)
-    { }
-
-    bool success() const { return !assignError; }
-
-protected:
-    unsigned checkBindingRange(const TIntermSymbol& base, unsigned binding)
+    TVarGatherTraverser(const TIntermediate& i, TVarLiveMap& vars, bool traverseDeadCode)
+      : TLiveTraverser(i, traverseDeadCode, true, true, false)
+      , varLiveList(vars)
     {
-        if (binding >= TQualifier::layoutBindingEnd) {
-            TString err = "mapped binding out of range: ";
-            err += base.getName();
-
-            infoSink.info.message(EPrefixInternalError, err.c_str());
-            assignError = true;
-            
-            return 0;
-        }
-
-        return binding;
     }
 
-    void addUniform(TIntermSymbol& base) override
+
+    virtual void visitSymbol(TIntermSymbol* base)
     {
-        // Skip things we don't intend to bind.
-        if (bindingMap.find(base.getId()) == bindingMap.end())
-            return;
-
-        const int existingBinding = bindingMap[base.getId()];
-
-        // Apply existing binding, if we were given one or already made one up.
-        if (existingBinding != -1) {
-            base.getWritableType().getQualifier().layoutBinding = checkBindingRange(base, existingBinding);
-            return;
+        if (base->getQualifier().storage == EvqUniform) {
+            TVarEntryInfo ent = { base->getId(), base, !traverseAll };
+            TVarLiveMap::iterator at = std::lower_bound(varLiveList.begin(), varLiveList.end(), ent, TVarEntryInfo::TOrderById());
+            if (at != varLiveList.end() && at->id == ent.id)
+              at->live = at->live || !traverseAll; // update live state
+            else
+              varLiveList.insert(at, ent);
         }
-
-        if (intermediate.getAutoMapBindings()) {
-            // Otherwise, find a free spot for it.
-            const int freeBinding = getFreeBinding(base.getType(), getBindingBase(base.getType()));
-
-            markBinding(base, freeBinding);
-            base.getWritableType().getQualifier().layoutBinding = checkBindingRange(base, freeBinding);
-        }
-    }
-
-    // Search for N free consecutive binding slots in [base, base+required).
-    // E.g, if we want to reserve consecutive bindings for flattened arrays.
-    bool hasNFreeSlots(int base, int required) {
-        for (int binding = base; binding < (base + required); ++binding)
-            if (usedBindings.find(binding) != usedBindings.end())
-                return false;
-        
-        return true;
-    }
-
-    // Find a free binding spot 
-    int getFreeBinding(const TType&, int nextBinding) {
-        while (!hasNFreeSlots(nextBinding, 1))
-            ++nextBinding;
-
-        return nextBinding;
     }
 
 private:
-    bool assignError;  // true if there was an error assigning the bindings
-    TInfoSink& infoSink;
+    TVarLiveMap&    varLiveList;
+};
+
+class TVarSetTraverser : public TLiveTraverser
+{
+public:
+    TVarSetTraverser(const TIntermediate& i, const TVarLiveMap& vars)
+      : TLiveTraverser(i, true, true, true, false)
+      , varLiveList(vars)
+    {
+    }
+
+
+    virtual void visitSymbol(TIntermSymbol* base)
+    {
+        TVarEntryInfo ent = { base->getId() };
+        TVarLiveMap::const_iterator at = std::lower_bound(varLiveList.begin(), varLiveList.end(), ent, TVarEntryInfo::TOrderById());
+        if (at == varLiveList.end())
+            return;
+        if (!(at->id == ent.id))
+            return;
+
+        if (at->newBinding != -1)
+            base->getWritableType().getQualifier().layoutBinding = at->newBinding;
+        if (at->newSet != -1)
+            base->getWritableType().getQualifier().layoutSet = at->newSet;
+    }
+
+  private:
+    const TVarLiveMap&    varLiveList;
+};
+
+struct TResolverAdaptor
+{
+    TResolverAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e)
+      : resolver(r)
+      , stage(s)
+      , infoSink(i)
+      , error(e)
+    {
+    }
+
+    inline void operator()(TVarEntryInfo& ent)
+    {
+        const bool isValid = resolver.validateBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+        if (isValid) {
+            ent.newBinding = resolver.resolveBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+            ent.newSet = resolver.resolveSet(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+
+            if (ent.newBinding != -1) {
+                if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) {
+                    TString err = "mapped binding out of range: " + ent.symbol->getName();
+
+                    infoSink.info.message(EPrefixInternalError, err.c_str());
+                    error = true;
+                }
+            }
+            if (ent.newSet != -1) {
+                if (ent.newSet >= int(TQualifier::layoutSetEnd)) {
+                    TString err = "mapped set out of range: " + ent.symbol->getName();
+
+                    infoSink.info.message(EPrefixInternalError, err.c_str());
+                    error = true;
+                }
+            }
+        } else {
+            TString errorMsg = "Invalid binding: " + ent.symbol->getName();
+            infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+            error = true;
+        }
+    }
+
+    EShLanguage     stage;
+    TIoMapResolver& resolver;
+    TInfoSink&      infoSink;
+    bool&           error;
+};
+
+/*
+ * Basic implementation of glslang::TIoMapResolver that replaces the
+ * previous offset behaviour.
+ * It does the same, uses the offsets for th corresponding uniform
+ * types. Also respects the EOptionAutoMapBindings flag and binds
+ * them if needed.
+ */
+struct TDefaultIoResolver : public glslang::TIoMapResolver
+{
+    int baseSamplerBinding;
+    int baseTextureBinding;
+    int baseImageBinding;
+    int baseUboBinding;
+    bool doAutoMapping;
+    typedef std::vector<int> TSlotSet;
+    typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
+    TSlotSetMap slots;
+
+    TSlotSet::iterator findSlot(int set, int slot)
+    {
+        return std::lower_bound(slots[set].begin(), slots[set].end(), slot);
+    }
+
+    bool checkEmpty(int set, int slot)
+    {
+        TSlotSet::iterator at = findSlot(set, slot);
+        return !(at != slots[set].end() && *at == slot);
+    }
+
+    int reserveSlot(int set, int slot)
+    {
+        TSlotSet::iterator at = findSlot(set, slot);
+        slots[set].insert(at, slot);
+        return slot;
+    }
+
+    int getFreeSlot(int set, int base)
+    {
+        TSlotSet::iterator at = findSlot(set, base);
+        if (at == slots[set].end())
+            return reserveSlot(set, base);
+
+        // look in locksteps, if they not match, then there is a free slot
+        for (; at != slots[set].end(); ++at, ++base)
+            if (*at != base)
+                break;
+        return reserveSlot(set, base);
+    }
+
+    bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
+    {
+        if (type.getQualifier().hasBinding()) {
+            int set;
+            if (type.getQualifier().hasSet())
+                set = type.getQualifier().layoutSet;
+            else
+                set = 0;
+
+            if (type.getBasicType() == glslang::EbtSampler) {
+                const glslang::TSampler& sampler = type.getSampler();
+                if (sampler.isPureSampler())
+                    return checkEmpty(set, baseSamplerBinding + type.getQualifier().layoutBinding);
+
+                if (sampler.isTexture())
+                    return checkEmpty(set, baseTextureBinding + type.getQualifier().layoutBinding);
+            }
+
+            if (type.getQualifier().isUniformOrBuffer())
+                return checkEmpty(set, baseUboBinding + type.getQualifier().layoutBinding);
+        }
+        return true;
+    }
+
+    int resolveBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool is_live) override
+    {
+        int set;
+        if (type.getQualifier().hasSet())
+            set = type.getQualifier().layoutSet;
+        else
+            set = 0;
+
+        if (type.getQualifier().hasBinding()) {
+            if (type.getBasicType() == glslang::EbtSampler) {
+                const glslang::TSampler& sampler = type.getSampler();
+                if (sampler.isImage())
+                    return reserveSlot(set, baseImageBinding + type.getQualifier().layoutBinding);
+
+                if (sampler.isPureSampler())
+                    return reserveSlot(set, baseSamplerBinding + type.getQualifier().layoutBinding);
+
+                if (sampler.isTexture())
+                    return reserveSlot(set, baseTextureBinding + type.getQualifier().layoutBinding);
+            }
+
+            if (type.getQualifier().isUniformOrBuffer())
+                return reserveSlot(set, baseUboBinding + type.getQualifier().layoutBinding);
+        } else if (is_live && doAutoMapping) {
+            // find free slot, the caller did make sure it passes all vars with binding
+            // first and now all are passed that do not have a binding and needs one
+            if (type.getBasicType() == glslang::EbtSampler) {
+                const glslang::TSampler& sampler = type.getSampler();
+                if (sampler.isImage())
+                    return getFreeSlot(set, baseImageBinding);
+
+                if (sampler.isPureSampler())
+                    return getFreeSlot(set, baseSamplerBinding);
+
+                if (sampler.isTexture())
+                    return getFreeSlot(set, baseTextureBinding);
+            }
+
+            if (type.getQualifier().isUniformOrBuffer())
+                return getFreeSlot(set, baseUboBinding);
+        }
+
+        return -1;
+    }
+
+    int resolveSet(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
+    {
+        if (type.getQualifier().hasSet())
+            return type.getQualifier().layoutSet;
+        return 0;
+    }
 };
 
 // Map I/O variables to provided offsets, and make bindings for
 // unbound but live variables.
 //
 // Returns false if the input is too malformed to do this.
-bool TIoMapper::addStage(EShLanguage, TIntermediate& intermediate, TInfoSink& infoSink)
+bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSink &infoSink, TIoMapResolver *resolver)
 {
     // Trivial return if there is nothing to do.
     if (intermediate.getShiftSamplerBinding() == 0 &&
         intermediate.getShiftTextureBinding() == 0 &&
+        intermediate.getShiftImageBinding() == 0 &&
         intermediate.getShiftUboBinding() == 0 &&
-        intermediate.getAutoMapBindings() == false)
+        intermediate.getAutoMapBindings() == false &&
+        resolver == nullptr)
         return true;
 
     if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive())
@@ -241,30 +359,46 @@
     if (root == nullptr)
         return false;
 
-    // The lifetime of this data spans several passes.
-    TBindingMap   bindingMap;
-    TUsedBindings usedBindings;
+    // if no resolver is provided, use the default resolver with the given shifts and auto map settings
+    TDefaultIoResolver defaultResolver;
+    if (resolver == nullptr) {
+        defaultResolver.baseSamplerBinding = intermediate.getShiftSamplerBinding();
+        defaultResolver.baseTextureBinding = intermediate.getShiftTextureBinding();
+        defaultResolver.baseImageBinding = intermediate.getShiftImageBinding();
+        defaultResolver.baseUboBinding = intermediate.getShiftUboBinding();
+        defaultResolver.doAutoMapping = intermediate.getAutoMapBindings();
 
-    TBindingTraverser it_binding_all(intermediate, bindingMap, usedBindings, true);
-    TBindingTraverser it_binding_live(intermediate, bindingMap, usedBindings, false);
-    TIoMappingTraverser it_iomap(intermediate, bindingMap, usedBindings, infoSink, true);
-
-    // Traverse all (live+dead) code to find explicit bindings, so we can avoid those.
-    root->traverse(&it_binding_all);
-
-    // Traverse just live code to find things that need implicit bindings.
-    it_binding_live.pushFunction(intermediate.getEntryPointMangledName().c_str());
-
-    while (! it_binding_live.functions.empty()) {
-        TIntermNode* function = it_binding_live.functions.back();
-        it_binding_live.functions.pop_back();
-        function->traverse(&it_binding_live);
+        resolver = &defaultResolver;
     }
 
-    // Bind everything that needs a binding and doesn't have one.
-    root->traverse(&it_iomap);
+    TVarLiveMap varMap;
+    TVarGatherTraverser iter_binding_all(intermediate, varMap, true);
+    TVarGatherTraverser iter_binding_live(intermediate, varMap, false);
 
-    return it_iomap.success();
+    root->traverse(&iter_binding_all);
+    iter_binding_live.pushFunction(intermediate.getEntryPointMangledName().c_str());
+
+    while (!iter_binding_live.functions.empty()) {
+        TIntermNode* function = iter_binding_live.functions.back();
+        iter_binding_live.functions.pop_back();
+        function->traverse(&iter_binding_live);
+    }
+
+    // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
+    std::sort(varMap.begin(), varMap.end(), TVarEntryInfo::TOrderByPriority());
+
+    bool hadError = false;
+    TResolverAdaptor doResolve(stage, *resolver, infoSink, hadError);
+    std::for_each(varMap.begin(), varMap.end(), doResolve);
+
+    if (!hadError) {
+        // sort by id again, so we can use lower bound to find entries
+        std::sort(varMap.begin(), varMap.end(), TVarEntryInfo::TOrderById());
+        TVarSetTraverser iter_iomap(intermediate, varMap);
+        root->traverse(&iter_iomap);
+    }
+
+    return !hadError;
 }
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 68dec77..ff47543 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -55,7 +55,7 @@
     virtual ~TIoMapper() {}
 
     // grow the reflection stage by stage
-    bool addStage(EShLanguage, TIntermediate&, TInfoSink&);
+    bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
 };
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index 2e10134..050fdae 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -60,6 +60,13 @@
     ++numErrors;
 }
 
+// Link-time warning.
+void TIntermediate::warn(TInfoSink& infoSink, const char* message)
+{
+    infoSink.info.prefix(EPrefixWarning);
+    infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+}
+
 // TODO: 4.4 offset/align:  "Two blocks linked together in the same program with the same block 
 // name must have the exact same set of members qualified with offset and their integral-constant 
 // expression values must be the same, or a link-time error results."
@@ -370,8 +377,15 @@
 //
 void TIntermediate::finalCheck(TInfoSink& infoSink)
 {
-    if (source == EShSourceGlsl && numEntryPoints < 1)
-        error(infoSink, "Missing entry point: Each stage requires one entry point");
+    if (getTreeRoot() == nullptr)
+        return;
+
+    if (numEntryPoints < 1) {
+        if (source == EShSourceGlsl)
+            error(infoSink, "Missing entry point: Each stage requires one entry point");
+        else
+            warn(infoSink, "Entry point not found");
+    }
 
     if (numPushConstants > 1)
         error(infoSink, "Only one push_constant block is allowed per stage");
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index aae22ec..9ad50c7 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -144,6 +144,7 @@
         multiStream(false), xfbMode(false),
         shiftSamplerBinding(0),
         shiftTextureBinding(0),
+        shiftImageBinding(0),
         shiftUboBinding(0),
         autoMapBindings(false),
         flattenUniformArrays(false),
@@ -174,6 +175,8 @@
     unsigned int getShiftSamplerBinding() const { return shiftSamplerBinding; }
     void setShiftTextureBinding(unsigned int shift) { shiftTextureBinding = shift; }
     unsigned int getShiftTextureBinding() const { return shiftTextureBinding; }
+    void setShiftImageBinding(unsigned int shift) { shiftImageBinding = shift; }
+    unsigned int getShiftImageBinding() const { return shiftImageBinding; }
     void setShiftUboBinding(unsigned int shift)     { shiftUboBinding = shift; }
     unsigned int getShiftUboBinding()     const { return shiftUboBinding; }
     void setAutoMapBindings(bool map)               { autoMapBindings = map; }
@@ -218,6 +221,7 @@
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&);
     TIntermAggregate* makeAggregate(TIntermNode* node);
     TIntermAggregate* makeAggregate(TIntermNode* node, const TSourceLoc&);
+    TIntermAggregate* makeAggregate(const TSourceLoc&);
     TIntermTyped* setAggregateOperator(TIntermNode*, TOperator, const TType& type, TSourceLoc);
     bool areAllChildConst(TIntermAggregate* aggrNode);
     TIntermNode*  addSelection(TIntermTyped* cond, TIntermNodePair code, const TSourceLoc&);
@@ -246,6 +250,9 @@
     TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc) const;
     TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc, const TType&) const;
 
+    // Add conversion from node's type to given basic type.
+    TIntermTyped* convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const;
+
     // Constant folding (in Constant.cpp)
     TIntermTyped* fold(TIntermAggregate* aggrNode);
     TIntermTyped* foldConstructor(TIntermAggregate* aggrNode);
@@ -257,7 +264,6 @@
 
     // Linkage related
     void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&);
-    void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&);
     void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&);
 
     bool setInvocations(int i) 
@@ -380,6 +386,7 @@
 protected:
     TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
     void error(TInfoSink& infoSink, const char*);
+    void warn(TInfoSink& infoSink, const char*);
     void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals);
     void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects);
     void mergeImplicitArraySizes(TType&, const TType&);
@@ -390,13 +397,18 @@
     bool userOutputUsed() const;
     static int getBaseAlignmentScalar(const TType&, int& size);
     bool isSpecializationOperation(const TIntermOperator&) const;
-
+    bool promote(TIntermOperator*);
+    bool promoteUnary(TIntermUnary&);
+    bool promoteBinary(TIntermBinary&);
+    void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&);
+    
     const EShLanguage language;  // stage, known at construction time
     EShSource source;            // source language, known a bit later
     std::string entryPointName;
     std::string entryPointMangledName;
     unsigned int shiftSamplerBinding;
     unsigned int shiftTextureBinding;
+    unsigned int shiftImageBinding;
     unsigned int shiftUboBinding;
     bool autoMapBindings;
     bool flattenUniformArrays;
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index e5e8b4d..6793cdd 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -306,6 +306,7 @@
     void setEntryPoint(const char* entryPoint);
     void setShiftSamplerBinding(unsigned int base);
     void setShiftTextureBinding(unsigned int base);
+    void setShiftImageBinding(unsigned int base);
     void setShiftUboBinding(unsigned int base);
     void setAutoMapBindings(bool map);
     void setFlattenUniformArrays(bool flatten);
@@ -445,7 +446,36 @@
 class TReflection;
 class TIoMapper;
 
-// Make one TProgram per set of shaders that will get linked together.  Add all 
+// Allows to customize the binding layout after linking.
+// All used uniform variables will invoke at least validateBinding.
+// If validateBinding returned true then the other resolveBinding
+// and resolveSet are invoked to resolve the binding and descriptor
+// set index respectively.
+// Invocations happen in a particular order:
+// 1) var with binding and set already defined
+// 2) var with binding but no set defined
+// 3) var with set but no binding defined
+// 4) var with no binding and no set defined
+//
+// NOTE: that still limit checks are applied to bindings and sets
+// and may result in an error.
+class TIoMapResolver
+{
+public:
+  virtual ~TIoMapResolver() {}
+
+  // Should return true if the resulting/current binding would be ok.
+  // Basic idea is to do aliasing binding checks with this.
+  virtual bool validateBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+  // Should return a value >= 0 if the current binding should be overridden.
+  // Return -1 if the current binding (including no binding) should be kept.
+  virtual int resolveBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+  // Should return a value >= 0 if the current set should be overriden.
+  // Return -1 if the current set (including no set) should be kept.
+  virtual int resolveSet(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+};
+
+// Make one TProgram per set of shaders that will get linked together.  Add all
 // the shaders that are to be linked together.  After calling shader.parse()
 // for all shaders, call link().
 //
@@ -481,11 +511,14 @@
     int getAttributeType(int index) const;                 // can be used for glGetActiveAttrib()
     const TType* getUniformTType(int index) const;         // returns a TType*
     const TType* getUniformBlockTType(int index) const;    // returns a TType*    
+    const TType* getAttributeTType(int index) const;       // returns a TType*
 
     void dumpReflection();
 
     // I/O mapping: apply base offsets and map live unbound variables
-    bool mapIO();
+    // If resolver is not provided it uses the previous approach
+    // and respects auto assignment and offsets.
+    bool mapIO(TIoMapResolver* resolver = NULL);
 
 protected:
     bool linkStage(EShLanguage, EShMessages);
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index b50816a..429f445 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -86,11 +86,14 @@
         {"hlsl.array.multidim.frag", "main"},
         {"hlsl.assoc.frag", "PixelShaderFunction"},
         {"hlsl.attribute.frag", "PixelShaderFunction"},
+        {"hlsl.attribute.expression.comp", "main"},
         {"hlsl.basic.comp", "main"},
+        {"hlsl.basic.geom", "main"},
         {"hlsl.buffer.frag", "PixelShaderFunction"},
         {"hlsl.calculatelod.dx10.frag", "main"},
         {"hlsl.calculatelodunclamped.dx10.frag", "main"},
         {"hlsl.cast.frag", "PixelShaderFunction"},
+        {"hlsl.comparison.vec.frag", "main"},
         {"hlsl.conditional.frag", "PixelShaderFunction"},
         {"hlsl.constructexpr.frag", "main"},
         {"hlsl.depthGreater.frag", "PixelShaderFunction"},
@@ -116,6 +119,7 @@
         {"hlsl.getdimensions.rw.dx10.frag", "main"},
         {"hlsl.getdimensions.dx10.vert", "main"},
         {"hlsl.getsampleposition.dx10.frag", "main"},
+        {"hlsl.identifier.sample.frag", "main"},
         {"hlsl.if.frag", "PixelShaderFunction"},
         {"hlsl.inoutquals.frag", "main"},
         {"hlsl.init.frag", "ShaderFunction"},
@@ -142,15 +146,26 @@
         {"hlsl.load.rwtexture.array.dx10.frag", "main"},
         {"hlsl.load.offset.dx10.frag", "main"},
         {"hlsl.load.offsetarray.dx10.frag", "main"},
+        {"hlsl.logical.unary.frag", "main"},
+        {"hlsl.logical.binary.frag", "main"},
+        {"hlsl.logical.binary.vec.frag", "main"},
+        {"hlsl.matNx1.frag", "main"},
+        {"hlsl.mintypes.frag", "main"},
         {"hlsl.multiEntry.vert", "RealEntrypoint"},
         {"hlsl.multiReturn.frag", "main"},
         {"hlsl.matrixindex.frag", "main"},
         {"hlsl.numericsuffixes.frag", "main"},
+        {"hlsl.numthreads.comp", "main_aux1"},
         {"hlsl.overload.frag", "PixelShaderFunction"},
+        {"hlsl.partialInit.frag", "PixelShaderFunction"},
         {"hlsl.pp.line.frag", "main"},
         {"hlsl.precise.frag", "main"},
+        {"hlsl.promote.binary.frag", "main"},
+        {"hlsl.promote.vec1.frag", "main"},
         {"hlsl.promotions.frag", "main"},
+        {"hlsl.rw.atomics.frag", "main"},
         {"hlsl.rw.bracket.frag", "main"},
+        {"hlsl.rw.register.frag", "main"},
         {"hlsl.rw.scalar.bracket.frag", "main"},
         {"hlsl.rw.vec2.bracket.frag", "main"},
         {"hlsl.sample.array.dx10.frag", "main"},
@@ -179,7 +194,7 @@
         {"hlsl.samplelevel.basic.dx10.vert", "main"},
         {"hlsl.samplelevel.offset.dx10.frag", "main"},
         {"hlsl.samplelevel.offsetarray.dx10.frag", "main"},
-        { "hlsl.sample.sub-vec4.dx10.frag", "main"},
+        {"hlsl.sample.sub-vec4.dx10.frag", "main"},
         {"hlsl.semicolons.frag", "main"},
         {"hlsl.shapeConv.frag", "main"},
         {"hlsl.shapeConvRet.frag", "main"},
@@ -188,6 +203,8 @@
         {"hlsl.structin.vert", "main"},
         {"hlsl.intrinsics.vert", "VertexShaderFunction"},
         {"hlsl.matType.frag", "PixelShaderFunction"},
+        {"hlsl.matType.bool.frag", "main"},
+        {"hlsl.matType.int.frag", "main"},
         {"hlsl.max.frag", "PixelShaderFunction"},
         {"hlsl.precedence.frag", "PixelShaderFunction"},
         {"hlsl.precedence2.frag", "PixelShaderFunction"},
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index a55af51..414fa7b 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -46,6 +46,7 @@
     const char* entryPoint;
     int baseSamplerBinding;
     int baseTextureBinding;
+    int baseImageBinding;
     int baseUboBinding;
     bool autoMapBindings;
     bool flattenUniforms;
@@ -123,6 +124,7 @@
                                  Target::Spv, GetParam().entryPoint,
                                  GetParam().baseSamplerBinding,
                                  GetParam().baseTextureBinding,
+                                 GetParam().baseImageBinding,
                                  GetParam().baseUboBinding,
                                  GetParam().autoMapBindings,
                                  GetParam().flattenUniforms);
@@ -136,6 +138,7 @@
                                  Target::Spv, GetParam().entryPoint,
                                  GetParam().baseSamplerBinding,
                                  GetParam().baseTextureBinding,
+                                 GetParam().baseImageBinding,
                                  GetParam().baseUboBinding,
                                  GetParam().autoMapBindings,
                                  GetParam().flattenUniforms);
@@ -233,6 +236,7 @@
         "spv.offsets.frag",
         "spv.Operations.frag",
         "spv.intOps.vert",
+        "spv.noWorkgroup.comp",
         "spv.precision.frag",
         "spv.prepost.frag",
         "spv.qualifiers.vert",
@@ -283,10 +287,11 @@
 INSTANTIATE_TEST_CASE_P(
     Hlsl, HlslIoMap,
     ::testing::ValuesIn(std::vector<IoMapData>{
-        { "spv.register.autoassign.frag", "main_ep", 5, 10, 20, true, false },
-        { "spv.register.noautoassign.frag", "main_ep", 5, 10, 15, false, false },
-        { "spv.register.autoassign-2.frag", "main", 5, 10, 15, true, true },
-        { "spv.buffer.autoassign.frag", "main", 5, 10, 15, true, true },
+        { "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, true, false },
+        { "spv.register.noautoassign.frag", "main_ep", 5, 10, 0, 15, false, false },
+        { "spv.register.autoassign-2.frag", "main", 5, 10, 0, 15, true, true },
+        { "spv.buffer.autoassign.frag", "main", 5, 10, 0, 15, true, true },
+        { "spv.rw.autoassign.frag", "main", 5, 10, 20, 15, true, true },
         { "spv.register.autoassign.rangetest.frag", "main", 
                 glslang::TQualifier::layoutBindingEnd-2,
                 glslang::TQualifier::layoutBindingEnd+5,
@@ -299,8 +304,8 @@
 INSTANTIATE_TEST_CASE_P(
     Hlsl, GlslIoMap,
     ::testing::ValuesIn(std::vector<IoMapData>{
-        { "spv.glsl.register.autoassign.frag", "main", 5, 10, 20, true, false },
-        { "spv.glsl.register.noautoassign.frag", "main", 5, 10, 15, false, false },
+        { "spv.glsl.register.autoassign.frag", "main", 5, 10, 0, 20, true, false },
+        { "spv.glsl.register.noautoassign.frag", "main", 5, 10, 0, 15, false, false },
     }),
     FileNameAsCustomTestSuffixIoMap
 );
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index c08c6cc..e795e8d 100644
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -239,6 +239,7 @@
             const std::string& entryPointName, EShMessages controls,
             int baseSamplerBinding,
             int baseTextureBinding,
+            int baseImageBinding,
             int baseUboBinding,
             bool autoMapBindings,
             bool flattenUniformArrays)
@@ -248,6 +249,7 @@
         glslang::TShader shader(kind);
         shader.setShiftSamplerBinding(baseSamplerBinding);
         shader.setShiftTextureBinding(baseTextureBinding);
+        shader.setShiftImageBinding(baseImageBinding);
         shader.setShiftUboBinding(baseUboBinding);
         shader.setAutoMapBindings(autoMapBindings);
         shader.setFlattenUniformArrays(flattenUniformArrays);
@@ -426,6 +428,7 @@
                                       const std::string& entryPointName,
                                       int baseSamplerBinding,
                                       int baseTextureBinding,
+                                      int baseImageBinding,
                                       int baseUboBinding,
                                       bool autoMapBindings,
                                       bool flattenUniformArrays)
@@ -440,7 +443,7 @@
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
         GlslangResult result = compileLinkIoMap(testName, input, entryPointName, controls,
-                                                baseSamplerBinding, baseTextureBinding, baseUboBinding,
+                                                baseSamplerBinding, baseTextureBinding, baseImageBinding, baseUboBinding,
                                                 autoMapBindings,
                                                 flattenUniformArrays);
 
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index c7537e2..ec5f1a5 100755
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -1,4 +1,5 @@
 set(SOURCES
+    hlslAttributes.cpp
     hlslParseHelper.cpp
     hlslScanContext.cpp
     hlslOpMap.cpp
@@ -6,7 +7,8 @@
     hlslGrammar.cpp
     hlslParseables.cpp)
 
-set(HEADERS
+  set(HEADERS
+    hlslAttributes.h
     hlslParseHelper.h
     hlslTokens.h
     hlslScanContext.h
diff --git a/hlsl/hlslAttributes.cpp b/hlsl/hlslAttributes.cpp
new file mode 100644
index 0000000..966ff35
--- /dev/null
+++ b/hlsl/hlslAttributes.cpp
@@ -0,0 +1,110 @@
+//
+//Copyright (C) 2016 LunarG, Inc.
+//
+//All rights reserved.
+//
+//Redistribution and use in source and binary forms, with or without
+//modification, are permitted provided that the following conditions
+//are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of Google, Inc., nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+//POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include "hlslAttributes.h"
+#include <cstdlib>
+#include <cctype>
+
+namespace glslang {
+    // Map the given string to an attribute enum from TAttributeType,
+    // or EatNone if invalid.
+    TAttributeType TAttributeMap::attributeFromName(const TString& name)
+    {
+        // These are case insensitive.
+        TString lowername(name);
+        std::transform(lowername.begin(), lowername.end(), lowername.begin(), ::tolower);
+
+        if (lowername == "allow_uav_condition")
+            return EatAllow_uav_condition;
+        else if (lowername == "branch")
+            return EatBranch;
+        else if (lowername == "call")
+            return EatCall;
+        else if (lowername == "domain")
+            return EatDomain;
+        else if (lowername == "earlydepthstencil")
+            return EatEarlyDepthStencil;
+        else if (lowername == "fastopt")
+            return EatFastOpt;
+        else if (lowername == "flatten")
+            return EatFlatten;
+        else if (lowername == "forcecase")
+            return EatForceCase;
+        else if (lowername == "instance")
+            return EatInstance;
+        else if (lowername == "maxtessfactor")
+            return EatMaxTessFactor;
+        else if (lowername == "maxvertexcount")
+            return EatMaxVertexCount;
+        else if (lowername == "numthreads")
+            return EatNumThreads;
+        else if (lowername == "outputcontrolpoints")
+            return EatOutputControlPoints;
+        else if (lowername == "outputtopology")
+            return EatOutputTopology;
+        else if (lowername == "partitioning")
+            return EatPartitioning;
+        else if (lowername == "patchconstantfunc")
+            return EatPatchConstantFunc;
+        else if (lowername == "unroll")
+            return EatUnroll;
+        else
+            return EatNone;
+    }
+
+    // Look up entry, inserting if it's not there, and if name is a valid attribute name
+    // as known by attributeFromName.
+    TAttributeType TAttributeMap::setAttribute(const TString* name, TIntermAggregate* value)
+    {
+        if (name == nullptr)
+            return EatNone;
+
+        const TAttributeType attr = attributeFromName(*name);
+
+        if (attr != EatNone)
+            attributes[attr] = value;
+ 
+        return attr;
+    }
+
+    // Look up entry (const version), and return aggregate node.  This cannot change the map.
+    const TIntermAggregate* TAttributeMap::operator[](TAttributeType attr) const
+    {
+        const auto entry = attributes.find(attr);
+
+        return (entry == attributes.end()) ? nullptr : entry->second;
+    }
+    
+} // end namespace glslang
diff --git a/hlsl/hlslAttributes.h b/hlsl/hlslAttributes.h
new file mode 100644
index 0000000..312a456
--- /dev/null
+++ b/hlsl/hlslAttributes.h
@@ -0,0 +1,97 @@
+//
+//Copyright (C) 2016 LunarG, Inc.
+//
+//All rights reserved.
+//
+//Redistribution and use in source and binary forms, with or without
+//modification, are permitted provided that the following conditions
+//are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of Google, Inc., nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+//POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef HLSLATTRIBUTES_H_
+#define HLSLATTRIBUTES_H_
+
+#include <unordered_map>
+#include <functional>
+#include "hlslScanContext.h"
+#include "../glslang/Include/Common.h"
+
+namespace glslang {
+    enum TAttributeType {
+        EatNone,
+        EatAllow_uav_condition,
+        EatBranch,
+        EatCall,
+        EatDomain,
+        EatEarlyDepthStencil,
+        EatFastOpt,
+        EatFlatten,
+        EatForceCase,
+        EatInstance,
+        EatMaxTessFactor,
+        EatNumThreads,
+        EatMaxVertexCount,
+        EatOutputControlPoints,
+        EatOutputTopology,
+        EatPartitioning,
+        EatPatchConstantFunc,
+        EatUnroll,
+    };
+}
+
+namespace std {
+    // Allow use of TAttributeType enum in hash_map without calling code having to cast.
+    template <> struct hash<glslang::TAttributeType> {
+        std::size_t operator()(glslang::TAttributeType attr) const {
+            return std::hash<int>()(int(attr));
+        }
+    };
+} // end namespace std
+
+namespace glslang {
+    class TIntermAggregate;
+
+    class TAttributeMap {
+    public:
+        // Search for and potentially add the attribute into the map.  Return the
+        // attribute type enum for it, if found, else EatNone.
+        TAttributeType setAttribute(const TString* name, TIntermAggregate* value);
+
+        // Const lookup: search for (but do not modify) the attribute in the map.
+        const TIntermAggregate* operator[](TAttributeType) const;
+
+    protected:
+        // Find an attribute enum given its name.
+        static TAttributeType attributeFromName(const TString&);
+
+        std::unordered_map<TAttributeType, TIntermAggregate*> attributes;
+    };
+} // end namespace glslang
+
+
+#endif // HLSLATTRIBUTES_H_
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 7766f85..10dfcc8 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -53,6 +53,7 @@
 
 #include "hlslTokens.h"
 #include "hlslGrammar.h"
+#include "hlslAttributes.h"
 
 namespace glslang {
 
@@ -84,6 +85,19 @@
         return true;
     }
 
+    // Even though "sample" is a keyword (for interpolation modifiers), it IS still accepted as
+    // an identifier.  This appears to be a solitary exception: other interp modifier keywords such
+    // as "linear" or "centroid" NOT valid identifiers.  This code special cases "sample",
+    // so e.g, "int sample;" is accepted.
+    if (peekTokenClass(EHTokSample)) {
+        idToken.string     = NewPoolTString("sample");
+        idToken.tokenClass = EHTokIdentifier;
+        idToken.symbol     = nullptr;
+        idToken.loc        = token.loc;
+        advanceToken();
+        return true;
+    }
+
     return false;
 }
 
@@ -268,6 +282,10 @@
     node = nullptr;
     bool list = false;
 
+    // attributes
+    TAttributeMap attributes;
+    acceptAttributes(attributes);
+
     // typedef
     bool typedefDecl = acceptTokenClass(EHTokTypedef);
 
@@ -302,7 +320,7 @@
                     parseContext.error(idToken.loc, "function body can't be in a declarator list", "{", "");
                 if (typedefDecl)
                     parseContext.error(idToken.loc, "function body can't be in a typedef", "{", "");
-                return acceptFunctionDefinition(function, node);
+                return acceptFunctionDefinition(function, node, attributes);
             } else {
                 if (typedefDecl)
                     parseContext.error(idToken.loc, "function typedefs not implemented", "{", "");
@@ -464,9 +482,14 @@
         // Some qualifiers are set when parsing the type.  Merge those with
         // whatever comes from acceptQualifier.
         assert(qualifier.layoutFormat == ElfNone);
-        qualifier.layoutFormat = type.getQualifier().layoutFormat;
 
-        type.getQualifier() = qualifier;
+        qualifier.layoutFormat = type.getQualifier().layoutFormat;
+        qualifier.precision    = type.getQualifier().precision;
+
+        if (type.getQualifier().storage == EvqVaryingOut)
+            qualifier.storage      = type.getQualifier().storage;
+
+        type.getQualifier()    = qualifier;
     }
 
     return true;
@@ -539,6 +562,35 @@
             if (! acceptLayoutQualifierList(qualifier))
                 return false;
             continue;
+
+        // GS geometries: these are specified on stage input variables, and are an error (not verified here)
+        // for output variables.
+        case EHTokPoint:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgPoints))
+                return false;
+            break;
+        case EHTokLine:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgLines))
+                return false;
+            break;
+        case EHTokTriangle:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgTriangles))
+                return false;
+            break;
+        case EHTokLineAdj:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgLinesAdjacency))
+                return false;
+            break; 
+        case EHTokTriangleAdj:
+            qualifier.storage = EvqIn;
+            if (!parseContext.handleInputGeometry(token.loc, ElgTrianglesAdjacency))
+                return false;
+            break; 
+            
         default:
             return true;
         }
@@ -603,7 +655,7 @@
 //      | UINT
 //      | BOOL
 //
-bool HlslGrammar::acceptTemplateType(TBasicType& basicType)
+bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType)
 {
     switch (peek()) {
     case EHTokFloat:
@@ -647,7 +699,7 @@
     }
 
     TBasicType basicType;
-    if (! acceptTemplateType(basicType)) {
+    if (! acceptTemplateVecMatBasicType(basicType)) {
         expected("scalar type");
         return false;
     }
@@ -699,7 +751,7 @@
     }
 
     TBasicType basicType;
-    if (! acceptTemplateType(basicType)) {
+    if (! acceptTemplateVecMatBasicType(basicType)) {
         expected("scalar type");
         return false;
     }
@@ -748,6 +800,56 @@
     return true;
 }
 
+// layout_geometry
+//      : LINESTREAM
+//      | POINTSTREAM
+//      | TRIANGLESTREAM
+//
+bool HlslGrammar::acceptOutputPrimitiveGeometry(TLayoutGeometry& geometry)
+{
+    // read geometry type
+    const EHlslTokenClass geometryType = peek();
+
+    switch (geometryType) {
+    case EHTokPointStream:    geometry = ElgPoints;        break;
+    case EHTokLineStream:     geometry = ElgLineStrip;     break;
+    case EHTokTriangleStream: geometry = ElgTriangleStrip; break;
+    default:
+        return false;  // not a layout geometry
+    }
+
+    advanceToken();  // consume the layout keyword
+    return true;
+}
+
+// stream_out_template_type
+//      : output_primitive_geometry_type LEFT_ANGLE type RIGHT_ANGLE
+//
+bool HlslGrammar::acceptStreamOutTemplateType(TType& type, TLayoutGeometry& geometry)
+{
+    geometry = ElgNone;
+
+    if (! acceptOutputPrimitiveGeometry(geometry))
+        return false;
+
+    if (! acceptTokenClass(EHTokLeftAngle))
+        return false;
+    
+    if (! acceptType(type)) {
+        expected("stream output type");
+        return false;
+    }
+
+    type.getQualifier().storage = EvqVaryingOut;
+
+    if (! acceptTokenClass(EHTokRightAngle)) {
+        expected("right angle bracket");
+        return false;
+    }
+
+    return true;
+}
+    
 // annotations
 //      : LEFT_ANGLE declaration SEMI_COLON ... declaration SEMICOLON RIGHT_ANGLE
 //
@@ -967,6 +1069,14 @@
 // Otherwise, return false, and don't advance
 bool HlslGrammar::acceptType(TType& type)
 {
+    // Basic types for min* types, broken out here in case of future
+    // changes, e.g, to use native halfs.
+    static const TBasicType min16float_bt = EbtFloat;
+    static const TBasicType min10float_bt = EbtFloat;
+    static const TBasicType min16int_bt   = EbtInt;
+    static const TBasicType min12int_bt   = EbtInt;
+    static const TBasicType min16uint_bt  = EbtUint;
+
     switch (peek()) {
     case EHTokVector:
         return acceptVectorTemplateType(type);
@@ -976,6 +1086,20 @@
         return acceptMatrixTemplateType(type);
         break;
 
+    case EHTokPointStream:            // fall through
+    case EHTokLineStream:             // ...
+    case EHTokTriangleStream:         // ...
+        {
+            TLayoutGeometry geometry;
+            if (! acceptStreamOutTemplateType(type, geometry))
+                return false;
+
+            if (! parseContext.handleOutputGeometry(token.loc, geometry))
+                return false;
+            
+            return true;
+        }
+
     case EHTokSampler:                // fall through
     case EHTokSampler1d:              // ...
     case EHTokSampler2d:              // ...
@@ -1118,6 +1242,91 @@
         new(&type) TType(EbtBool, EvqTemporary, 4);
         break;
 
+    case EHTokMin16float:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin16float1:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin16float2:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin16float3:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin16float4:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 4);
+        break;
+        
+    case EHTokMin10float:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin10float1:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin10float2:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin10float3:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin10float4:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 4);
+        break;
+        
+    case EHTokMin16int:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin16int1:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin16int2:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin16int3:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin16int4:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 4);
+        break;
+        
+    case EHTokMin12int:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin12int1:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin12int2:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin12int3:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin12int4:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 4);
+        break;
+        
+    case EHTokMin16uint:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium);
+        break;
+    case EHTokMin16uint1:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium);
+        type.makeVector();
+        break;
+    case EHTokMin16uint2:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 2);
+        break;
+    case EHTokMin16uint3:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 3);
+        break;
+    case EHTokMin16uint4:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 4);
+        break;
+
     case EHTokInt1x1:
         new(&type) TType(EbtInt, EvqTemporary, 0, 1, 1);
         break;
@@ -1594,13 +1803,13 @@
 
 // Do the work to create the function definition in addition to
 // parsing the body (compound_statement).
-bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& node)
+bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& node, const TAttributeMap& attributes)
 {
     TFunction& functionDeclarator = parseContext.handleFunctionDeclarator(token.loc, function, false /* not prototype */);
     TSourceLoc loc = token.loc;
 
     // This does a pushScope()
-    node = parseContext.handleFunctionDefinition(loc, functionDeclarator);
+    node = parseContext.handleFunctionDefinition(loc, functionDeclarator, attributes);
 
     // compound_statement
     TIntermNode* functionBody = nullptr;
@@ -1687,7 +1896,8 @@
 }
 
 // initializer
-//      : LEFT_BRACE initializer_list RIGHT_BRACE
+//      : LEFT_BRACE RIGHT_BRACE
+//      | LEFT_BRACE initializer_list RIGHT_BRACE
 //
 // initializer_list
 //      : assignment_expression COMMA assignment_expression COMMA ...
@@ -1698,8 +1908,15 @@
     if (! acceptTokenClass(EHTokLeftBrace))
         return false;
 
-    // initializer_list
+    // RIGHT_BRACE
     TSourceLoc loc = token.loc;
+    if (acceptTokenClass(EHTokRightBrace)) {
+        // a zero-length initializer list
+        node = intermediate.makeAggregate(loc);
+        return true;
+    }
+
+    // initializer_list
     node = nullptr;
     do {
         // assignment_expression
@@ -1935,7 +2152,10 @@
         return true;
 
     node = intermediate.addUnaryMath(unaryOp, node, loc);
-    node = parseContext.handleLvalue(loc, "unary operator", node);
+
+    // These unary ops require lvalues
+    if (unaryOp == EOpPreIncrement || unaryOp == EOpPreDecrement)
+        node = parseContext.handleLvalue(loc, "unary operator", node);
 
     return node != nullptr;
 }
@@ -2248,7 +2468,8 @@
     statement = nullptr;
 
     // attributes
-    acceptAttributes();
+    TAttributeMap attributes;
+    acceptAttributes(attributes);
 
     // attributed_statement
     switch (peek()) {
@@ -2321,42 +2542,70 @@
 //      | FLATTEN
 //      | FORCECASE
 //      | CALL
+//      | DOMAIN
+//      | EARLYDEPTHSTENCIL
+//      | INSTANCE
+//      | MAXTESSFACTOR
+//      | OUTPUTCONTROLPOINTS
+//      | OUTPUTTOPOLOGY
+//      | PARTITIONING
+//      | PATCHCONSTANTFUNC
+//      | NUMTHREADS LEFT_PAREN x_size, y_size,z z_size RIGHT_PAREN
 //
-void HlslGrammar::acceptAttributes()
+void HlslGrammar::acceptAttributes(TAttributeMap& attributes)
 {
-    // For now, accept the [ XXX(X) ] syntax, but drop.
+    // For now, accept the [ XXX(X) ] syntax, but drop all but
+    // numthreads, which is used to set the CS local size.
     // TODO: subset to correct set?  Pass on?
     do {
+        HlslToken idToken;
+
         // LEFT_BRACKET?
         if (! acceptTokenClass(EHTokLeftBracket))
             return;
 
         // attribute
-        if (peekTokenClass(EHTokIdentifier)) {
-            // 'token.string' is the attribute
-            advanceToken();
+        if (acceptIdentifier(idToken)) {
+            // 'idToken.string' is the attribute
         } else if (! peekTokenClass(EHTokRightBracket)) {
             expected("identifier");
             advanceToken();
         }
 
-        // (x)
+        TIntermAggregate* expressions = nullptr;
+
+        // (x, ...)
         if (acceptTokenClass(EHTokLeftParen)) {
+            expressions = new TIntermAggregate;
+
             TIntermTyped* node;
-            if (! acceptLiteral(node))
-                expected("literal");
-            // 'node' has the literal in it
+            bool expectingExpression = false;
+            
+            while (acceptAssignmentExpression(node)) {
+                expectingExpression = false;
+                expressions->getSequence().push_back(node);
+                if (acceptTokenClass(EHTokComma))
+                    expectingExpression = true;
+            }
+
+            // 'expressions' is an aggregate with the expressions in it
             if (! acceptTokenClass(EHTokRightParen))
                 expected(")");
+
+            // Error for partial or missing expression
+            if (expectingExpression || expressions->getSequence().empty())
+                expected("expression");
         }
 
         // RIGHT_BRACKET
-        if (acceptTokenClass(EHTokRightBracket))
-            continue;
+        if (!acceptTokenClass(EHTokRightBracket)) {
+            expected("]");
+            return;
+        }
 
-        expected("]");
-        return;
-
+        // Add any values we found into the attribute map.  This accepts
+        // (and ignores) values not mapping to a known TAttributeType;
+        attributes.setAttribute(idToken.string, expressions);
     } while (true);
 }
 
diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h
index 992eb5e..8804b21 100755
--- a/hlsl/hlslGrammar.h
+++ b/hlsl/hlslGrammar.h
@@ -43,6 +43,8 @@
 
 namespace glslang {
 
+    class TAttributeMap; // forward declare
+    
     // Should just be the grammar aspect of HLSL.
     // Described in more detail in hlslGrammar.cpp.
 
@@ -70,9 +72,11 @@
         bool acceptQualifier(TQualifier&);
         bool acceptLayoutQualifierList(TQualifier&);
         bool acceptType(TType&);
-        bool acceptTemplateType(TBasicType&);
+        bool acceptTemplateVecMatBasicType(TBasicType&);
         bool acceptVectorTemplateType(TType&);
         bool acceptMatrixTemplateType(TType&);
+        bool acceptStreamOutTemplateType(TType&, TLayoutGeometry&);
+        bool acceptOutputPrimitiveGeometry(TLayoutGeometry&);
         bool acceptAnnotations(TQualifier&);
         bool acceptSamplerType(TType&);
         bool acceptTextureType(TType&);
@@ -80,7 +84,7 @@
         bool acceptStructDeclarationList(TTypeList*&);
         bool acceptFunctionParameters(TFunction&);
         bool acceptParameterDeclaration(TFunction&);
-        bool acceptFunctionDefinition(TFunction&, TIntermNode*&);
+        bool acceptFunctionDefinition(TFunction&, TIntermNode*&, const TAttributeMap&);
         bool acceptParenExpression(TIntermTyped*&);
         bool acceptExpression(TIntermTyped*&);
         bool acceptInitializer(TIntermTyped*&);
@@ -98,7 +102,7 @@
         bool acceptScopedStatement(TIntermNode*&);
         bool acceptScopedCompoundStatement(TIntermNode*&);
         bool acceptNestedStatement(TIntermNode*&);
-        void acceptAttributes();
+        void acceptAttributes(TAttributeMap&);
         bool acceptSelectionStatement(TIntermNode*&);
         bool acceptSwitchStatement(TIntermNode*&);
         bool acceptIterationStatement(TIntermNode*&);
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index b4c417d..8685dcd 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -37,6 +37,7 @@
 #include "hlslParseHelper.h"
 #include "hlslScanContext.h"
 #include "hlslGrammar.h"
+#include "hlslAttributes.h"
 
 #include "../glslang/MachineIndependent/Scan.h"
 #include "../glslang/MachineIndependent/preprocessor/PpContext.h"
@@ -44,23 +45,21 @@
 #include "../glslang/OSDependent/osinclude.h"
 
 #include <algorithm>
+#include <cctype>
 
 namespace glslang {
 
-HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool /*parsingBuiltins*/,
+HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins,
                                    int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
                                    bool forwardCompatible, EShMessages messages) :
-    TParseContextBase(symbolTable, interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
+    TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
     contextPragma(true, false),
     loopNestingLevel(0), annotationNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0),
-    postMainReturn(false),
+    postEntryPointReturn(false),
     limits(resources.limits),
     entryPointOutput(nullptr),
     nextInLocation(0), nextOutLocation(0)
 {
-    // ensure we always have a linkage node, even if empty, to simplify tree topology algorithms
-    linkage = new TIntermAggregate;
-
     globalUniformDefaults.clear();
     globalUniformDefaults.layoutMatrix = ElmRowMajor;
     globalUniformDefaults.layoutPacking = ElpStd140;
@@ -127,6 +126,8 @@
         return false;
     }
 
+    finish();
+
     return numErrors == 0;
 }
 
@@ -154,7 +155,7 @@
 {
     const int components = txType.getVectorSize();
 
-    const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) {
+    const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) -> TLayoutFormat {
         if (intermediate.getNoStorageFormat())
             return ElfNone;
 
@@ -260,7 +261,7 @@
     };
 
     // Helper to complete sequence by adding trailing variable, so we evaluate to the right value.
-    const auto finishSequence = [&](TIntermSymbol* rhsTmp, const TType& derefType) {
+    const auto finishSequence = [&](TIntermSymbol* rhsTmp, const TType& derefType) -> TIntermAggregate* {
         // Add a trailing use of the temp, so the sequence returns the proper value.
         sequence = intermediate.growAggregate(sequence, intermediate.addSymbol(*rhsTmp));
         sequence->setOperator(EOpSequence);
@@ -279,7 +280,7 @@
     };
 
     // helper to create a temporary variable
-    const auto addTmpVar = [&](const char* name, const TType& derefType) {
+    const auto addTmpVar = [&](const char* name, const TType& derefType) -> TIntermSymbol* {
         TVariable* tmpVar = makeInternalVariable(name, derefType);
         tmpVar->getWritableType().getQualifier().makeTemporary();
         return intermediate.addSymbol(*tmpVar, loc);
@@ -757,6 +758,13 @@
                 return intermediate.addMethod(base, TType(sampler.type, EvqTemporary, vecSize), &field, loc);
             }
         }
+    } else if (field == "Append" ||
+               field == "RestartStrip") {
+        // These methods only valid on stage in variables
+        // TODO: ... which are stream out types, if there's any way to test that here.
+        if (base->getType().getQualifier().storage == EvqVaryingOut) {
+            return intermediate.addMethod(base, TType(EbtVoid), &field, loc);
+        }
     }
 
     // It's not .length() if we get to here.
@@ -949,9 +957,9 @@
             ++binding;
 
         memberVariables.push_back(memberVariable);
-        intermediate.addSymbolLinkageNode(linkage, *memberVariable);
+        trackLinkageDeferred(*memberVariable);
     }
-    
+
     flattenMap[variable.getUniqueId()] = memberVariables;
 }
 
@@ -988,7 +996,7 @@
                     nextOutLocation += intermediate.computeTypeLocationSize(variable.getType());
                 }
             }
-            intermediate.addSymbolLinkageNode(linkage, variable);
+            trackLinkage(variable);
         }
     };
 
@@ -1045,7 +1053,8 @@
 // Handle seeing the function prototype in front of a function definition in the grammar.  
 // The body is handled after this function returns.
 //
-TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function)
+TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function, 
+                                                             const TAttributeMap& attributes)
 {
     currentCaller = function.getMangledName();
     TSymbol* symbol = symbolTable.find(function.getMangledName());
@@ -1132,7 +1141,23 @@
     intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc);
     loopNestingLevel = 0;
     controlFlowNestingLevel = 0;
-    postMainReturn = false;
+    postEntryPointReturn = false;
+
+    // Handle function attributes
+    if (inEntryPoint) {
+        const TIntermAggregate* numThreads = attributes[EatNumThreads];
+        if (numThreads != nullptr) {
+            const TIntermSequence& sequence = numThreads->getSequence();
+ 
+            for (int lid = 0; lid < int(sequence.size()); ++lid)
+                intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst());
+        }
+
+        const TIntermAggregate* maxVertexCount = attributes[EatMaxVertexCount];
+        if (maxVertexCount != nullptr) {
+            intermediate.setVertices(maxVertexCount->getSequence()[0]->getAsConstantUnion()->getConstArray()[0].getIConst());
+        }
+    }
 
     return paramNodes;
 }
@@ -1397,13 +1422,13 @@
 TOperator HlslParseContext::mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage)
 {
     switch (op) {
-    case EOpInterlockedAdd:             return isImage ? EOpImageAtomicAdd : EOpAtomicAdd;
-    case EOpInterlockedAnd:             return isImage ? EOpImageAtomicAnd : EOpAtomicAnd;
+    case EOpInterlockedAdd:             return isImage ? EOpImageAtomicAdd      : EOpAtomicAdd;
+    case EOpInterlockedAnd:             return isImage ? EOpImageAtomicAnd      : EOpAtomicAnd;
     case EOpInterlockedCompareExchange: return isImage ? EOpImageAtomicCompSwap : EOpAtomicCompSwap;
-    case EOpInterlockedMax:             return isImage ? EOpImageAtomicMax : EOpAtomicMax;
-    case EOpInterlockedMin:             return isImage ? EOpImageAtomicMin : EOpAtomicMin;
-    case EOpInterlockedOr:              return isImage ? EOpImageAtomicOr : EOpAtomicOr;
-    case EOpInterlockedXor:             return isImage ? EOpImageAtomicXor : EOpAtomicXor;
+    case EOpInterlockedMax:             return isImage ? EOpImageAtomicMax      : EOpAtomicMax;
+    case EOpInterlockedMin:             return isImage ? EOpImageAtomicMin      : EOpAtomicMin;
+    case EOpInterlockedOr:              return isImage ? EOpImageAtomicOr       : EOpAtomicOr;
+    case EOpInterlockedXor:             return isImage ? EOpImageAtomicXor      : EOpAtomicXor;
     case EOpInterlockedExchange:        return isImage ? EOpImageAtomicExchange : EOpAtomicExchange;
     case EOpInterlockedCompareStore:  // TODO: ... 
     default:
@@ -1440,7 +1465,7 @@
     if (!node || !node->getAsOperator())
         return;
 
-    const auto clampReturn = [&loc, &node, this](TIntermTyped* result, const TSampler& sampler) {
+    const auto clampReturn = [&loc, &node, this](TIntermTyped* result, const TSampler& sampler) -> TIntermTyped* {
         // Sampler return must always be a vec4, but we can construct a shorter vector
         result->setType(TType(node->getType().getBasicType(), EvqTemporary, node->getVectorSize()));
 
@@ -1496,6 +1521,10 @@
             constructCoord->getSequence().push_back(arg1);
             constructCoord->setLoc(loc);
 
+            // The input vector should never be less than 2, since there's always a bias.
+            // The max is for safety, and should be a no-op.
+            constructCoord->setType(TType(arg1->getBasicType(), EvqTemporary, std::max(arg1->getVectorSize() - 1, 0)));
+
             TIntermAggregate* tex = new TIntermAggregate(EOpTexture);
             tex->getSequence().push_back(arg0);           // sampler
             tex->getSequence().push_back(constructCoord); // coordinate
@@ -1725,6 +1754,7 @@
             if (coordDimWithCmpVal != 5) // cube array shadow is special.
                 coordWithCmp->getSequence().push_back(argCmpVal);
             coordWithCmp->setLoc(loc);
+            coordWithCmp->setType(TType(argCoord->getBasicType(), EvqTemporary, std::min(coordDimWithCmpVal, 4)));
 
             TOperator textureOp = (op == EOpMethodSampleCmpLevelZero ? EOpTextureLod : EOpTexture);
             if (argOffset != nullptr)
@@ -2048,10 +2078,80 @@
 }
 
 //
+// Decompose geometry shader methods
+//
+void HlslParseContext::decomposeGeometryMethods(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
+{
+    if (!node || !node->getAsOperator())
+        return;
+
+    const TOperator op  = node->getAsOperator()->getOp();
+    const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr;
+
+    switch (op) {
+    case EOpMethodAppend:
+        if (argAggregate) {
+            TIntermAggregate* sequence = nullptr;
+            TIntermAggregate* emit = new TIntermAggregate(EOpEmitVertex);
+
+            emit->setLoc(loc);
+            emit->setType(TType(EbtVoid));
+
+            sequence = intermediate.growAggregate(sequence,
+                                                  intermediate.addAssign(EOpAssign, 
+                                                                         argAggregate->getSequence()[0]->getAsTyped(),
+                                                                         argAggregate->getSequence()[1]->getAsTyped(), loc),
+                                                  loc);
+
+            sequence = intermediate.growAggregate(sequence, emit);
+
+            sequence->setOperator(EOpSequence);
+            sequence->setLoc(loc);
+            sequence->setType(TType(EbtVoid));
+            node = sequence;
+        }
+        break;
+
+    case EOpMethodRestartStrip:
+        {
+            TIntermAggregate* cut = new TIntermAggregate(EOpEndPrimitive);
+            cut->setLoc(loc);
+            cut->setType(TType(EbtVoid));
+            node = cut;
+        }
+        break;
+
+    default:
+        break; // most pass through unchanged
+    }
+}
+
+//
 // Optionally decompose intrinsics to AST opcodes.
 //
 void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
 {
+    // Helper to find image data for image atomics:
+    // OpImageLoad(image[idx])
+    // We take the image load apart and add its params to the atomic op aggregate node
+    const auto imageAtomicParams = [this, &loc, &node](TIntermAggregate* atomic, TIntermTyped* load) {
+        TIntermAggregate* loadOp = load->getAsAggregate();
+        if (loadOp == nullptr) {
+            error(loc, "unknown image type in atomic operation", "", "");
+            node = nullptr;
+            return;
+        }
+
+        atomic->getSequence().push_back(loadOp->getSequence()[0]);
+        atomic->getSequence().push_back(loadOp->getSequence()[1]);
+    };
+
+    // Return true if this is an imageLoad, which we will change to an image atomic.
+    const auto isImageParam = [](TIntermTyped* image) -> bool {
+        TIntermAggregate* imageAggregate = image->getAsAggregate();
+        return imageAggregate != nullptr && imageAggregate->getOp() == EOpImageLoad;
+    };
+
     // HLSL intrinsics can be pass through to native AST opcodes, or decomposed here to existing AST
     // opcodes for compatibility with existing software stacks.
     static const bool decomposeHlslIntrinsics = true;
@@ -2232,27 +2332,43 @@
     case EOpInterlockedXor: // ...
     case EOpInterlockedExchange: // always has output arg
         {
-            TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();
-            TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();
+            TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();  // dest
+            TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();  // value
+            TIntermTyped* arg2 = nullptr;
 
-            const bool isImage = arg0->getType().isImage();
+            if (argAggregate->getSequence().size() > 2)
+                arg2 = argAggregate->getSequence()[2]->getAsTyped();
+
+            const bool isImage = isImageParam(arg0);
             const TOperator atomicOp = mapAtomicOp(loc, op, isImage);
-
-            if (argAggregate->getSequence().size() > 2) {
-                // optional output param is present.  return value goes to arg2.
-                TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped();
-
-                TIntermAggregate* atomic = new TIntermAggregate(atomicOp);
-                atomic->getSequence().push_back(arg0);
+            TIntermAggregate* atomic = new TIntermAggregate(atomicOp);
+            atomic->setType(arg0->getType());
+            atomic->getWritableType().getQualifier().makeTemporary();
+            atomic->setLoc(loc);
+ 
+            if (isImage) {
+                // orig_value = imageAtomicOp(image, loc, data)
+                imageAtomicParams(atomic, arg0);
                 atomic->getSequence().push_back(arg1);
-                atomic->setLoc(loc);
-                atomic->setType(arg0->getType());
-                atomic->getWritableType().getQualifier().makeTemporary();
 
-                node = intermediate.addAssign(EOpAssign, arg2, atomic, loc);
+                if (argAggregate->getSequence().size() > 2) {
+                    node = intermediate.addAssign(EOpAssign, arg2, atomic, loc);
+                } else {
+                    node = atomic; // no assignment needed, as there was no out var.
+                }
             } else {
-                // Set the matching operator.  Since output is absent, this is all we need to do.
-                node->getAsAggregate()->setOperator(atomicOp);
+                // Normal memory variable:
+                // arg0 = mem, arg1 = data, arg2(optional,out) = orig_value
+                if (argAggregate->getSequence().size() > 2) {
+                    // optional output param is present.  return value goes to arg2.
+                    atomic->getSequence().push_back(arg0);
+                    atomic->getSequence().push_back(arg1);
+
+                    node = intermediate.addAssign(EOpAssign, arg2, atomic, loc);
+                } else {
+                    // Set the matching operator.  Since output is absent, this is all we need to do.
+                    node->getAsAggregate()->setOperator(atomicOp);
+                }
             }
 
             break;
@@ -2265,15 +2381,20 @@
             TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped();  // value
             TIntermTyped* arg3 = argAggregate->getSequence()[3]->getAsTyped();  // orig
 
-            const bool isImage = arg0->getType().isImage();
+            const bool isImage = isImageParam(arg0);
             TIntermAggregate* atomic = new TIntermAggregate(mapAtomicOp(loc, op, isImage));
-            atomic->getSequence().push_back(arg0);
-            atomic->getSequence().push_back(arg1);
-            atomic->getSequence().push_back(arg2);
             atomic->setLoc(loc);
             atomic->setType(arg2->getType());
             atomic->getWritableType().getQualifier().makeTemporary();
 
+            if (isImage) {
+                imageAtomicParams(atomic, arg0);
+            } else {
+                atomic->getSequence().push_back(arg0);
+            }
+
+            atomic->getSequence().push_back(arg1);
+            atomic->getSequence().push_back(arg2);
             node = intermediate.addAssign(EOpAssign, arg3, atomic, loc);
             
             break;
@@ -2488,8 +2609,9 @@
                 result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate());
             }
 
-            decomposeIntrinsic(loc, result, arguments);      // HLSL->AST intrinsic decompositions
-            decomposeSampleMethods(loc, result, arguments);  // HLSL->AST sample method decompositions
+            decomposeIntrinsic(loc, result, arguments);       // HLSL->AST intrinsic decompositions
+            decomposeSampleMethods(loc, result, arguments);   // HLSL->AST sample method decompositions
+            decomposeGeometryMethods(loc, result, arguments); // HLSL->AST geometry method decompositions
         }
     }
 
@@ -3027,11 +3149,12 @@
     }
 
     // TODO: learn what all these really mean and how they interact with regNumber and subComponent
-    switch (desc[0]) {
+    switch (std::tolower(desc[0])) {
     case 'b':
     case 't':
     case 'c':
     case 's':
+    case 'u':
         qualifier.layoutBinding = regNumber + subComponent;
         break;
     default:
@@ -3162,7 +3285,7 @@
 //
 // Returns true if there was an error in construction.
 //
-bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* /*node*/, TFunction& function,
+bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, TFunction& function,
                                         TOperator op, TType& type)
 {
     type.shallowCopy(function.getType());
@@ -3258,7 +3381,7 @@
 
             // At least the dimensionalities have to match.
             if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
-                error(loc, "array constructor argument not correct type to construct array element", "constructior", "");
+                error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
                 return true;
             }
 
@@ -3288,6 +3411,9 @@
         return true;
     }
 
+    if (op == EOpConstructStruct && ! type.isArray() && isZeroConstructor(node))
+        return false;
+
     if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) {
         error(loc, "Number of constructor parameters does not match the number of structure fields", "constructor", "");
         return true;
@@ -3299,11 +3425,15 @@
         return true;
     }
 
-    // TIntermTyped* typed = node->getAsTyped();
-
     return false;
 }
 
+bool HlslParseContext::isZeroConstructor(const TIntermNode* node)
+{
+    return node->getAsTyped()->isScalar() && node->getAsConstantUnion() &&
+           node->getAsConstantUnion()->getConstArray()[0].getIConst() == 0;
+}
+
 // Verify all the correct semantics for constructing a combined texture/sampler.
 // Return true if the semantics are incorrect.
 bool HlslParseContext::constructorTextureSamplerError(const TSourceLoc& loc, const TFunction& function)
@@ -3530,7 +3660,7 @@
 // Do all the semantic checking for declaring or redeclaring an array, with and
 // without a size, and make the right changes to the symbol table.
 //
-void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol, bool& newDeclaration)
+void HlslParseContext::declareArray(const TSourceLoc& loc, TString& identifier, const TType& type, TSymbol*& symbol, bool track)
 {
     if (! symbol) {
         bool currentScope;
@@ -3547,7 +3677,8 @@
             //
             symbol = new TVariable(&identifier, type);
             symbolTable.insert(*symbol);
-            newDeclaration = true;
+            if (track && symbolTable.atGlobalLevel())
+                trackLinkageDeferred(*symbol);
 
             return;
         }
@@ -3570,7 +3701,6 @@
     // redeclareBuiltinVariable() should have already done the copyUp()
     TType& existingType = symbol->getWritableType();
 
-
     if (existingType.isExplicitlySizedArray()) {
         // be more lenient for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size
         return;
@@ -3637,7 +3767,7 @@
 //
 TSymbol* HlslParseContext::redeclareBuiltinVariable(const TSourceLoc& /*loc*/, const TString& identifier,
                                                     const TQualifier& /*qualifier*/,
-                                                    const TShaderQualifiers& /*publicType*/, bool& /*newDeclaration*/)
+                                                    const TShaderQualifiers& /*publicType*/)
 {
     if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
         return nullptr;
@@ -3762,7 +3892,7 @@
     symbolTable.insert(*block);
 
     // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, *block);
+    trackLinkageDeferred(*block);
 }
 
 void HlslParseContext::paramFix(TType& type)
@@ -4236,6 +4366,14 @@
     TVector<const TFunction*> candidateList;
     symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
     
+    // These builtin ops can accept any type, so we bypass the argument selection
+    if (candidateList.size() == 1 && builtIn &&
+        (candidateList[0]->getBuiltInOp() == EOpMethodAppend ||
+         candidateList[0]->getBuiltInOp() == EOpMethodRestartStrip)) {
+
+        return candidateList[0];
+    }
+
     // can 'from' convert to 'to'?
     const auto convertible = [this](const TType& from, const TType& to) -> bool {
         if (from == to)
@@ -4251,8 +4389,8 @@
             return false;
 
         // shapes have to be convertible
-        if ((from.isScalar() && to.isScalar()) ||
-            (from.isScalar() && to.isVector()) ||
+        if ((from.isScalarOrVec1() && to.isScalarOrVec1()) ||
+            (from.isScalarOrVec1() && to.isVector())    ||
             (from.isVector() && to.isVector() && from.getVectorSize() >= to.getVectorSize()))
             return true;
 
@@ -4355,8 +4493,7 @@
         return nullptr;
 
     // Check for redeclaration of built-ins and/or attempting to declare a reserved name
-    bool newDeclaration = false;    // true if a new entry gets added to the symbol table
-    TSymbol* symbol = nullptr; // = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), parseType.shaderQualifiers, newDeclaration);
+    TSymbol* symbol = nullptr;
 
     inheritGlobalDefaults(type.getQualifier());
 
@@ -4365,14 +4502,14 @@
     // Declare the variable
     if (type.isArray()) {
         // array case
-        declareArray(loc, identifier, type, symbol, newDeclaration);
         flattenVar = shouldFlatten(type);
+        declareArray(loc, identifier, type, symbol, !flattenVar);
         if (flattenVar)
             flatten(loc, *symbol->getAsVariable());
     } else {
         // non-array case
         if (! symbol)
-            symbol = declareNonArray(loc, identifier, type, newDeclaration);
+            symbol = declareNonArray(loc, identifier, type);
         else if (type != symbol->getType())
             error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
     }
@@ -4394,13 +4531,6 @@
         initNode = executeInitializer(loc, initializer, variable);
     }
 
-    // see if it's a linker-level object to track.  if it's flattened above,
-    // that process added linkage objects for the flattened symbols, we don't
-    // add the aggregate here.
-    if (!flattenVar)
-        if (newDeclaration && symbolTable.atGlobalLevel())
-            intermediate.addSymbolLinkageNode(linkage, *symbol);
-
     return initNode;
 }
 
@@ -4436,19 +4566,20 @@
 //
 // Return the successfully declared variable.
 //
-TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type, bool& newDeclaration)
+TVariable* HlslParseContext::declareNonArray(const TSourceLoc& loc, TString& identifier, TType& type)
 {
     // make a new variable
     TVariable* variable = new TVariable(&identifier, type);
 
     // add variable to symbol table
-    if (! symbolTable.insert(*variable)) {
-        error(loc, "redefinition", variable->getName().c_str(), "");
-        return nullptr;
-    } else {
-        newDeclaration = true;
+    if (symbolTable.insert(*variable)) {
+        if (symbolTable.atGlobalLevel())
+            trackLinkageDeferred(*variable);
         return variable;
     }
+
+    error(loc, "redefinition", variable->getName().c_str(), "");
+    return nullptr;
 }
 
 //
@@ -4470,7 +4601,8 @@
     // constructor-style subtree, allowing the rest of the code to operate
     // identically for both kinds of initializers.
     //
-    initializer = convertInitializerList(loc, variable->getType(), initializer);
+    if (initializer->getAsAggregate() && initializer->getAsAggregate()->getOp() == EOpNull)
+        initializer = convertInitializerList(loc, variable->getType(), initializer);
     if (! initializer) {
         // error recovery; don't leave const without constant values
         if (qualifier == EvqConst)
@@ -4547,6 +4679,11 @@
 // creating a constructor-style initializer, ensuring we get the
 // same form.
 //
+// Returns a node representing an expression for the initializer list expressed
+// as the correct type.
+//
+// Returns nullptr if there is an error.
+//
 TIntermTyped* HlslParseContext::convertInitializerList(const TSourceLoc& loc, const TType& type, TIntermTyped* initializer)
 {
     // Will operate recursively.  Once a subtree is found that is constructor style,
@@ -4555,8 +4692,15 @@
 
     // see if we have bottomed out in the tree within the initializer-list part
     TIntermAggregate* initList = initializer->getAsAggregate();
-    if (! initList || initList->getOp() != EOpNull)
-        return initializer;
+    if (! initList || initList->getOp() != EOpNull) {
+        // We don't have a list, but if it's a scalar and the 'type' is a
+        // composite, we need to lengthen below to make it useful.
+        // Otherwise, this is an already formed object to initialize with.
+        if (type.isScalar() || !initializer->getType().isScalar())
+            return initializer;
+        else
+            initList = intermediate.makeAggregate(initializer);
+    }
 
     // Of the initializer-list set of nodes, need to process bottom up,
     // so recurse deep, then process on the way up.
@@ -4570,7 +4714,8 @@
         arrayType.newArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
 
         // edit array sizes to fill in unsized dimensions
-        arrayType.changeOuterArraySize((int)initList->getSequence().size());
+        if (type.isImplicitlySizedArray())
+            arrayType.changeOuterArraySize((int)initList->getSequence().size());
         TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
         if (arrayType.isArrayOfArrays() && firstInit->getType().isArray() &&
             arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
@@ -4580,8 +4725,12 @@
             }
         }
 
+        // lengthen list to be long enough
+        lengthenList(loc, initList->getSequence(), arrayType.getOuterArraySize());
+
+        // recursively process each element
         TType elementType(arrayType, 0); // dereferenced type
-        for (size_t i = 0; i < initList->getSequence().size(); ++i) {
+        for (int i = 0; i < arrayType.getOuterArraySize(); ++i) {
             initList->getSequence()[i] = convertInitializerList(loc, elementType, initList->getSequence()[i]->getAsTyped());
             if (initList->getSequence()[i] == nullptr)
                 return nullptr;
@@ -4589,6 +4738,9 @@
 
         return addConstructor(loc, initList, arrayType);
     } else if (type.isStruct()) {
+        // lengthen list to be long enough
+        lengthenList(loc, initList->getSequence(), type.getStruct()->size());
+
         if (type.getStruct()->size() != initList->getSequence().size()) {
             error(loc, "wrong number of structure members", "initializer list", "");
             return nullptr;
@@ -4604,6 +4756,9 @@
             // a series of rows and columns.  We can just use the list directly as
             // a constructor; no further processing needed.
         } else {
+            // lengthen list to be long enough
+            lengthenList(loc, initList->getSequence(), type.getMatrixCols());
+
             if (type.getMatrixCols() != (int)initList->getSequence().size()) {
                 error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str());
                 return nullptr;
@@ -4616,6 +4771,10 @@
             }
         }
     } else if (type.isVector()) {
+        // lengthen list to be long enough
+        lengthenList(loc, initList->getSequence(), type.getVectorSize());
+
+        // error check; we're at bottom, so work is finished below
         if (type.getVectorSize() != (int)initList->getSequence().size()) {
             error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str());
             return nullptr;
@@ -4625,7 +4784,7 @@
             error(loc, "scalar expected one element:", "initializer list", type.getCompleteString().c_str());
             return nullptr;
         }
-   } else {
+    } else {
         error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str());
         return nullptr;
     }
@@ -4637,9 +4796,19 @@
         emulatedConstructorArguments = initList->getSequence()[0];
     else
         emulatedConstructorArguments = initList;
+
     return addConstructor(loc, emulatedConstructorArguments, type);
 }
 
+// Lengthen list to be long enough to cover any gap from the current list size
+// to 'size'. If the list is longer, do nothing.
+// The value to lengthen with is the default for short lists.
+void HlslParseContext::lengthenList(const TSourceLoc& loc, TIntermSequence& list, int size)
+{
+    for (int c = (int)list.size(); c < size; ++c)
+        list.push_back(intermediate.addConstantUnion(0, loc));
+}
+
 //
 // Test for the correctness of the parameters passed to various constructor functions
 // and also convert them to the right data type, if allowed and required.
@@ -4651,6 +4820,10 @@
     if (node == nullptr || node->getAsTyped() == nullptr)
         return nullptr;
 
+    // Handle the idiom "(struct type)0"
+    if (type.isStruct() && isZeroConstructor(node))
+        return convertInitializerList(loc, type, intermediate.makeAggregate(loc));
+
     TIntermAggregate* aggrNode = node->getAsAggregate();
     TOperator op = intermediate.mapTypeToConstructorOp(type);
 
@@ -4961,7 +5134,7 @@
     }
 
     // Save it in the AST for linker use.
-    intermediate.addSymbolLinkageNode(linkage, variable);
+    trackLinkageDeferred(variable);
 }
 
 void HlslParseContext::finalizeGlobalUniformBlockLayout(TVariable& block)
@@ -5151,6 +5324,53 @@
 }
 
 //
+// Update the intermediate for the given input geometry
+//
+bool HlslParseContext::handleInputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry)
+{
+    switch (geometry) {
+    case ElgPoints:             // fall through
+    case ElgLines:              // ...
+    case ElgTriangles:          // ...
+    case ElgLinesAdjacency:     // ...
+    case ElgTrianglesAdjacency: // ...
+        if (! intermediate.setInputPrimitive(geometry)) {
+            error(loc, "input primitive geometry redefinition", TQualifier::getGeometryString(geometry), "");
+            return false;
+        }
+        break;
+
+    default:
+        error(loc, "cannot apply to 'in'", TQualifier::getGeometryString(geometry), "");
+        return false;
+    }
+
+    return true;
+}
+
+//
+// Update the intermediate for the given output geometry
+//
+bool HlslParseContext::handleOutputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry)
+{
+    switch (geometry) {
+    case ElgPoints:
+    case ElgLineStrip:
+    case ElgTriangleStrip:
+        if (! intermediate.setOutputPrimitive(geometry)) {
+            error(loc, "output primitive geometry redefinition", TQualifier::getGeometryString(geometry), "");
+            return false;
+        }
+        break;
+    default:
+        error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(geometry), "");
+        return false;
+    }
+
+    return true;
+}
+
+//
 // Updating default qualifier for the case of a declaration with just a qualifier,
 // no type, block, or identifier.
 //
@@ -5179,16 +5399,7 @@
                 error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
             }
         } else if (publicType.qualifier.storage == EvqVaryingOut) {
-            switch (publicType.shaderQualifiers.geometry) {
-            case ElgPoints:
-            case ElgLineStrip:
-            case ElgTriangleStrip:
-                if (! intermediate.setOutputPrimitive(publicType.shaderQualifiers.geometry))
-                    error(loc, "cannot change previously set output primitive", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
-                break;
-            default:
-                error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
-            }
+            handleOutputGeometry(loc, publicType.shaderQualifiers.geometry);
         } else
             error(loc, "cannot apply to:", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), GetStorageQualifierString(publicType.qualifier.storage));
     }
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
index 2eeba5a..246c7c4 100755
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -41,6 +41,8 @@
 
 namespace glslang {
 
+class TAttributeMap; // forward declare
+
 class HlslParseContext : public TParseContextBase {
 public:
     HlslParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins,
@@ -69,7 +71,7 @@
     TIntermTyped* handleDotDereference(const TSourceLoc&, TIntermTyped* base, const TString& field);
     void assignLocations(TVariable& variable);
     TFunction& handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
-    TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&);
+    TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&, const TAttributeMap&);
     void handleFunctionBody(const TSourceLoc&, TFunction&, TIntermNode* functionBody, TIntermNode*& node);
     void remapEntryPointIO(TFunction& function);
     void remapNonEntryPointIO(TFunction& function);
@@ -79,6 +81,7 @@
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
     void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
+    void decomposeGeometryMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*);
     void addInputArgumentConversions(const TFunction&, TIntermNode*&) const;
     TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&);
@@ -112,7 +115,7 @@
     bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
     void mergeQualifiers(TQualifier& dst, const TQualifier& src);
     int computeSamplerTypeIndex(TSampler&);
-    TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&, bool& newDeclaration);
+    TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&);
     void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);
     void paramFix(TType& type);
     void specializationCheck(const TSourceLoc&, const TType&, const char* op);
@@ -125,6 +128,7 @@
     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, TType&, TIntermTyped* initializer = 0);
+    void lengthenList(const TSourceLoc&, TIntermSequence& list, int size);
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
     TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&);
     TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset);
@@ -158,13 +162,17 @@
 
     TLayoutFormat getLayoutFromTxType(const TSourceLoc&, const TType&);
 
+    bool handleOutputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
+    bool handleInputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
+
 protected:
     void inheritGlobalDefaults(TQualifier& dst) const;
     TVariable* makeInternalVariable(const char* name, const TType&) const;
-    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&, bool& newDeclaration);
-    void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool& newDeclaration);
+    TVariable* declareNonArray(const TSourceLoc&, TString& identifier, TType&);
+    void declareArray(const TSourceLoc&, TString& identifier, const TType&, TSymbol*&, bool track);
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
+    bool isZeroConstructor(const TIntermNode*);
     TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage);
 
     // Return true if this node requires L-value conversion (e.g, to an imageStore).
@@ -187,7 +195,7 @@
     int controlFlowNestingLevel; // 0 if outside all flow control
     TList<TIntermSequence*> switchSequenceStack;  // case, node, case, case, node, ...; ensure only one node between cases;   stack of them for nesting
     bool inEntryPoint;           // if inside a function, true if the function is the entry point
-    bool postMainReturn;         // if inside a function, true if the function is the entry point and this is after a return statement
+    bool postEntryPointReturn;         // if inside a function, true if the function is the entry point and this is after a return statement
     const TType* currentFunctionType;  // the return type of the function that's currently being parsed
     bool functionReturnsValue;   // true if a non-void function has a return
     TBuiltInResource resources;
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index d33cfb8..05dc7cf 100755
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -55,7 +55,7 @@
 
 namespace {  // anonymous namespace functions
 
-const bool UseHlslTypes = false;
+const bool UseHlslTypes = true;
 
 const char* BaseTypeName(const char argOrder, const char* scalarName, const char* vecName, const char* matName)
 {
@@ -245,26 +245,25 @@
     char order = *argOrder;
 
     if (UseHlslTypes) {
-        // TODO: handle sub-vec4 returns
         switch (type) {
-        case '-': s += "void";                                            break;
-        case 'F': s += "float";                                           break;
-        case 'D': s += "double";                                          break;
-        case 'I': s += "int";                                             break;
-        case 'U': s += "uint";                                            break;
-        case 'B': s += "bool";                                            break;
-        case 'S': s += "sampler";                                         break;
-        case 's': s += "SamplerComparisonState";                          break;
+        case '-': s += "void";                                break;
+        case 'F': s += "float";                               break;
+        case 'D': s += "double";                              break;
+        case 'I': s += "int";                                 break;
+        case 'U': s += "uint";                                break;
+        case 'B': s += "bool";                                break;
+        case 'S': s += "sampler";                             break;
+        case 's': s += "SamplerComparisonState";              break;
         case 'T': s += ((isBuffer && isImage) ? "RWBuffer" :
                         isBuffer ? "Buffer" : 
-                        isImage  ? "RWTexture" : "Texture");              break;
-        case 'i': s += ((isBuffer && isImage) ? "RWBuffer <int4>" :
-                        isBuffer ? "Buffer <int4>" : 
-                        isImage ? "RWTexture <int4>" : "Texture <int4>"); break;
-        case 'u': s += ((isBuffer && isImage) ? "RWBuffer <uint4>" :
-                        isBuffer ? "Buffer <uint4>" :
-                        isImage ? "RWTexture <uint4>" : "Texture <uint4>");break;
-        default:  s += "UNKNOWN_TYPE";                                    break;
+                        isImage  ? "RWTexture" : "Texture");  break;
+        case 'i': s += ((isBuffer && isImage) ? "RWBuffer" :
+                        isBuffer ? "Buffer" : 
+                        isImage ? "RWTexture" : "Texture");   break;
+        case 'u': s += ((isBuffer && isImage) ? "RWBuffer" :
+                        isBuffer ? "Buffer" :
+                        isImage ? "RWTexture" : "Texture");   break;
+        default:  s += "UNKNOWN_TYPE";                        break;
         }
     } else {
         switch (type) {
@@ -337,36 +336,55 @@
     if (isArrayed)
         s += "Array";
 
+    // For HLSL, append return type for texture types
+    if (UseHlslTypes) {
+        switch (type) {
+        case 'i': s += "<int4>";   break;
+        case 'u': s += "<uint4>";  break;
+        case 'T': s += "<float4>"; break;
+        default: break;
+        }
+    }
+
     return s;
 }
 
-// TODO: the GLSL parser is currently used to parse HLSL prototypes.  However, many valid HLSL prototypes
+// The GLSL parser can be used to parse a subset of HLSL prototypes.  However, many valid HLSL prototypes
 // are not valid GLSL prototypes.  This rejects the invalid ones.  Thus, there is a single switch below
 // to enable creation of the entire HLSL space.
-inline bool IsValidGlsl(const char* cname, char retOrder, char retType, char argOrder, char argType,
-                        int dim0, int dim1, int dim0Max, int dim1Max)
+inline bool IsValid(const char* cname, char retOrder, char retType, char argOrder, char argType, int dim0, int dim1)
 {
-    const bool isVec = dim0Max > 1 || argType == 'V';
-    const bool isMat = dim1Max > 1 || argType == 'M';
+    const bool isVec = (argOrder == 'V');
+    const bool isMat = (argOrder == 'M');
 
-    if (!IsTextureType(argOrder) &&
-        ((isVec && dim0 == 1)            ||  // avoid vec1
-         (isMat && dim0 == 1 && dim1 == 1)))  // avoid mat1x1
+    const std::string name(cname);
+
+    // these do not have vec1 versions
+    if (dim0 == 1 && (name == "length" || name == "normalize" || name == "reflect" || name == "refract"))
         return false;
 
-    const std::string name(cname);  // for ease of comparison. slow, but temporary, until HLSL parser is online.
-
-    if (isMat && dim1 == 1)  // TODO: avoid mat Nx1 until we find the right GLSL profile
+    if (!IsTextureType(argOrder) && (isVec && dim0 == 1)) // avoid vec1
         return false;
 
-    if ((isMat && (argType == 'I' || argType == 'U' || argType == 'B')) ||
-        (retOrder == 'M' && (retType == 'I' || retType == 'U' || retType == 'B')))
-        return false;
+    if (UseHlslTypes) {
+        // NO further restrictions for HLSL
+    } else {
+        // GLSL parser restrictions
+        if ((isMat && (argType == 'I' || argType == 'U' || argType == 'B')) ||
+            (retOrder == 'M' && (retType == 'I' || retType == 'U' || retType == 'B')))
+            return false;
 
-    if (name == "GetRenderTargetSamplePosition" ||
-        name == "tex1D" ||
-        name == "tex1Dgrad")
-        return false;
+        if (isMat && dim0 == 1 && dim1 == 1)  // avoid mat1x1
+            return false;
+
+        if (isMat && dim1 == 1)  // TODO: avoid mat Nx1 until we find the right GLSL profile
+            return false;
+
+        if (name == "GetRenderTargetSamplePosition" ||
+            name == "tex1D" ||
+            name == "tex1Dgrad")
+            return false;
+    }
 
     return true;
 }
@@ -503,6 +521,7 @@
     static const EShLanguageMask EShLangCS     = EShLangAll;
     static const EShLanguageMask EShLangPS     = EShLangAll;
     static const EShLanguageMask EShLangHS     = EShLangAll;
+    static const EShLanguageMask EShLangGS     = EShLangAll;
 
     // This structure encodes the prototype information for each HLSL intrinsic.
     // Because explicit enumeration would be cumbersome, it's procedurally generated.
@@ -535,10 +554,10 @@
         { "abort",                            nullptr, nullptr,   "-",              "-",             EShLangAll },
         { "abs",                              nullptr, nullptr,   "SVM",            "DFUI",          EShLangAll },
         { "acos",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll },
-        { "all",                              "S",    "B",        "SVM",            "BFI",           EShLangAll },
+        { "all",                              "S",    "B",        "SVM",            "BFIU",          EShLangAll },
         { "AllMemoryBarrier",                 nullptr, nullptr,   "-",              "-",             EShLangCS },
         { "AllMemoryBarrierWithGroupSync",    nullptr, nullptr,   "-",              "-",             EShLangCS },
-        { "any",                              "S",     "B",       "SVM",            "BFI",           EShLangAll },
+        { "any",                              "S",     "B",       "SVM",            "BFIU",          EShLangAll },
         { "asdouble",                         "S",     "D",       "S,",             "U,",            EShLangAll },
         { "asdouble",                         "V2",    "D",       "V2,",            "U,",            EShLangAll },
         { "asfloat",                          nullptr, "F",       "SVM",            "BFIU",          EShLangAll },
@@ -683,7 +702,7 @@
         { "texCUBEgrad",                      "V4",    "F",       "V4,V3,,",        "S,F,,",         EShLangPS },
         { "texCUBElod",                       "V4",    "F",       "V4,",            "S,F",           EShLangPS },
         { "texCUBEproj",                      "V4",    "F",       "V4,",            "S,F",           EShLangPS },
-        { "transpose",                        "^M",    nullptr,   "M",              "F",             EShLangAll },
+        { "transpose",                        "^M",    nullptr,   "M",              "FUIB",          EShLangAll },
         { "trunc",                            nullptr, nullptr,   "SVM",            "F",             EShLangAll },
 
         // Texture object methods.  Return type can be overridden by shader declaration.
@@ -832,16 +851,14 @@
         { "GatherCmpAlpha",  /* O-4 */        "V4",    nullptr,   "%@,S,V,S,V,,,",  "FIU,s,F,,I,,,",  EShLangAll },
         { "GatherCmpAlpha",  /* O-4, status */"V4",    nullptr,   "%@,S,V,S,V,,,,S","FIU,s,F,,I,,,,U",EShLangAll },
 
-        // TODO: Cmp forms
+        // geometry methods
+        { "Append",                           "-",     "-",       "-",              "-",              EShLangGS  },
+        { "RestartStrip",                     "-",     "-",       "-",              "-",              EShLangGS  },
 
         // Mark end of list, since we want to avoid a range-based for, as some compilers don't handle it yet.
         { nullptr,                            nullptr, nullptr,   nullptr,      nullptr,  0 },
     };
 
-    // Set this to true to avoid generating prototypes that will be invalid for the GLSL parser.
-    // TODO: turn it off (and remove the code) when the HLSL parser can be used to parse builtins.
-    static const bool skipInvalidGlsl = true;
-    
     // Create prototypes for the intrinsics.  TODO: Avoid ranged based for until all compilers can handle it.
     for (int icount = 0; hlslIntrinsics[icount].name; ++icount) {
         const auto& intrinsic = hlslIntrinsics[icount];
@@ -877,8 +894,7 @@
                             const char* retOrder = intrinsic.retOrder ? intrinsic.retOrder : argOrder;
                             const char* retType  = intrinsic.retType  ? intrinsic.retType  : argType;
 
-                            if (skipInvalidGlsl && !IsValidGlsl(intrinsic.name, *retOrder, *retType, *argOrder, *argType,
-                                                                dim0, dim1, dim0Max, dim1Max))
+                            if (!IsValid(intrinsic.name, *retOrder, *retType, *argOrder, *argType, dim0, dim1))
                                 continue;
 
                             // Reject some forms of sample methods that don't exist.
@@ -1143,6 +1159,10 @@
     symbolTable.relateToOperator("GatherCmpGreen",              EOpMethodGatherCmpGreen);
     symbolTable.relateToOperator("GatherCmpBlue",               EOpMethodGatherCmpBlue);
     symbolTable.relateToOperator("GatherCmpAlpha",              EOpMethodGatherCmpAlpha);
+
+    // GS methods
+    symbolTable.relateToOperator("Append",                      EOpMethodAppend);
+    symbolTable.relateToOperator("RestartStrip",                EOpMethodRestartStrip);
 }
 
 //
diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp
index f25bdd8..4e355ba 100755
--- a/hlsl/hlslScanContext.cpp
+++ b/hlsl/hlslScanContext.cpp
@@ -119,6 +119,16 @@
     (*KeywordMap)["inout"] =                   EHTokInOut;
     (*KeywordMap)["layout"] =                  EHTokLayout;
 
+    (*KeywordMap)["point"] =                   EHTokPoint;
+    (*KeywordMap)["line"] =                    EHTokLine;
+    (*KeywordMap)["triangle"] =                EHTokTriangle;
+    (*KeywordMap)["lineadj"] =                 EHTokLineAdj;
+    (*KeywordMap)["triangleadj"] =             EHTokTriangleAdj;
+
+    (*KeywordMap)["PointStream"] =             EHTokPointStream;
+    (*KeywordMap)["LineStream"] =              EHTokLineStream;
+    (*KeywordMap)["TriangleStream"] =          EHTokTriangleStream;
+
     (*KeywordMap)["Buffer"] =                  EHTokBuffer;
     (*KeywordMap)["vector"] =                  EHTokVector;
     (*KeywordMap)["matrix"] =                  EHTokMatrix;
@@ -136,7 +146,7 @@
     (*KeywordMap)["min10float"] =              EHTokMin10float;
     (*KeywordMap)["min16int"] =                EHTokMin16int;
     (*KeywordMap)["min12int"] =                EHTokMin12int;
-    (*KeywordMap)["min16uint"] =               EHTokMin16int;
+    (*KeywordMap)["min16uint"] =               EHTokMin16uint;
 
     (*KeywordMap)["bool1"] =                   EHTokBool1;
     (*KeywordMap)["bool2"] =                   EHTokBool2;
@@ -159,6 +169,43 @@
     (*KeywordMap)["uint3"] =                   EHTokUint3;
     (*KeywordMap)["uint4"] =                   EHTokUint4;
 
+    (*KeywordMap)["min16float1"] =             EHTokMin16float1;
+    (*KeywordMap)["min16float2"] =             EHTokMin16float2;
+    (*KeywordMap)["min16float3"] =             EHTokMin16float3;
+    (*KeywordMap)["min16float4"] =             EHTokMin16float4;
+    (*KeywordMap)["min10float1"] =             EHTokMin10float1;
+    (*KeywordMap)["min10float2"] =             EHTokMin10float2;
+    (*KeywordMap)["min10float3"] =             EHTokMin10float3;
+    (*KeywordMap)["min10float4"] =             EHTokMin10float4;
+    (*KeywordMap)["min16int1"] =               EHTokMin16int1;
+    (*KeywordMap)["min16int2"] =               EHTokMin16int2;
+    (*KeywordMap)["min16int3"] =               EHTokMin16int3;
+    (*KeywordMap)["min16int4"] =               EHTokMin16int4;
+    (*KeywordMap)["min12int1"] =               EHTokMin12int1;
+    (*KeywordMap)["min12int2"] =               EHTokMin12int2;
+    (*KeywordMap)["min12int3"] =               EHTokMin12int3;
+    (*KeywordMap)["min12int4"] =               EHTokMin12int4;
+    (*KeywordMap)["min16uint1"] =              EHTokMin16uint1;
+    (*KeywordMap)["min16uint2"] =              EHTokMin16uint2;
+    (*KeywordMap)["min16uint3"] =              EHTokMin16uint3;
+    (*KeywordMap)["min16uint4"] =              EHTokMin16uint4;
+
+    (*KeywordMap)["bool1x1"] =                 EHTokBool1x1;
+    (*KeywordMap)["bool1x2"] =                 EHTokBool1x2;
+    (*KeywordMap)["bool1x3"] =                 EHTokBool1x3;
+    (*KeywordMap)["bool1x4"] =                 EHTokBool1x4;
+    (*KeywordMap)["bool2x1"] =                 EHTokBool2x1;
+    (*KeywordMap)["bool2x2"] =                 EHTokBool2x2;
+    (*KeywordMap)["bool2x3"] =                 EHTokBool2x3;
+    (*KeywordMap)["bool2x4"] =                 EHTokBool2x4;
+    (*KeywordMap)["bool3x1"] =                 EHTokBool3x1;
+    (*KeywordMap)["bool3x2"] =                 EHTokBool3x2;
+    (*KeywordMap)["bool3x3"] =                 EHTokBool3x3;
+    (*KeywordMap)["bool3x4"] =                 EHTokBool3x4;
+    (*KeywordMap)["bool4x1"] =                 EHTokBool4x1;
+    (*KeywordMap)["bool4x2"] =                 EHTokBool4x2;
+    (*KeywordMap)["bool4x3"] =                 EHTokBool4x3;
+    (*KeywordMap)["bool4x4"] =                 EHTokBool4x4;
     (*KeywordMap)["int1x1"] =                  EHTokInt1x1;
     (*KeywordMap)["int1x2"] =                  EHTokInt1x2;
     (*KeywordMap)["int1x3"] =                  EHTokInt1x3;
@@ -475,7 +522,20 @@
     case EHTokLayout:
         return keyword;
 
-    // template types
+    // primitive types
+    case EHTokPoint:
+    case EHTokLine:
+    case EHTokTriangle:
+    case EHTokLineAdj:
+    case EHTokTriangleAdj:
+        return keyword;
+
+    // stream out types
+    case EHTokPointStream:
+    case EHTokLineStream:
+    case EHTokTriangleStream:
+        return keyword;
+
     case EHTokBuffer:
     case EHTokVector:
     case EHTokMatrix:
@@ -518,8 +578,44 @@
     case EHTokUint2:
     case EHTokUint3:
     case EHTokUint4:
+    case EHTokMin16float1:
+    case EHTokMin16float2:
+    case EHTokMin16float3:
+    case EHTokMin16float4:
+    case EHTokMin10float1:
+    case EHTokMin10float2:
+    case EHTokMin10float3:
+    case EHTokMin10float4:
+    case EHTokMin16int1:
+    case EHTokMin16int2:
+    case EHTokMin16int3:
+    case EHTokMin16int4:
+    case EHTokMin12int1:
+    case EHTokMin12int2:
+    case EHTokMin12int3:
+    case EHTokMin12int4:
+    case EHTokMin16uint1:
+    case EHTokMin16uint2:
+    case EHTokMin16uint3:
+    case EHTokMin16uint4:
 
     // matrix types
+    case EHTokBool1x1:
+    case EHTokBool1x2:
+    case EHTokBool1x3:
+    case EHTokBool1x4:
+    case EHTokBool2x1:
+    case EHTokBool2x2:
+    case EHTokBool2x3:
+    case EHTokBool2x4:
+    case EHTokBool3x1:
+    case EHTokBool3x2:
+    case EHTokBool3x3:
+    case EHTokBool3x4:
+    case EHTokBool4x1:
+    case EHTokBool4x2:
+    case EHTokBool4x3:
+    case EHTokBool4x4:
     case EHTokInt1x1:
     case EHTokInt1x2:
     case EHTokInt1x3:
@@ -536,6 +632,22 @@
     case EHTokInt4x2:
     case EHTokInt4x3:
     case EHTokInt4x4:
+    case EHTokUint1x1:
+    case EHTokUint1x2:
+    case EHTokUint1x3:
+    case EHTokUint1x4:
+    case EHTokUint2x1:
+    case EHTokUint2x2:
+    case EHTokUint2x3:
+    case EHTokUint2x4:
+    case EHTokUint3x1:
+    case EHTokUint3x2:
+    case EHTokUint3x3:
+    case EHTokUint3x4:
+    case EHTokUint4x1:
+    case EHTokUint4x2:
+    case EHTokUint4x3:
+    case EHTokUint4x4:
     case EHTokFloat1x1:
     case EHTokFloat1x2:
     case EHTokFloat1x3:
diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h
index 2994001..6902070 100755
--- a/hlsl/hlslTokens.h
+++ b/hlsl/hlslTokens.h
@@ -66,6 +66,18 @@
     EHTokInOut,
     EHTokLayout,
 
+    // primitive types
+    EHTokPoint,
+    EHTokLine,
+    EHTokTriangle,
+    EHTokLineAdj,
+    EHTokTriangleAdj,
+
+    // stream out types
+    EHTokPointStream,
+    EHTokLineStream,
+    EHTokTriangleStream,
+
     // template types
     EHTokBuffer,
     EHTokVector,
@@ -108,6 +120,26 @@
     EHTokUint2,
     EHTokUint3,
     EHTokUint4,
+    EHTokMin16float1,
+    EHTokMin16float2,
+    EHTokMin16float3,
+    EHTokMin16float4,
+    EHTokMin10float1,
+    EHTokMin10float2,
+    EHTokMin10float3,
+    EHTokMin10float4,
+    EHTokMin16int1,
+    EHTokMin16int2,
+    EHTokMin16int3,
+    EHTokMin16int4,
+    EHTokMin12int1,
+    EHTokMin12int2,
+    EHTokMin12int3,
+    EHTokMin12int4,
+    EHTokMin16uint1,
+    EHTokMin16uint2,
+    EHTokMin16uint3,
+    EHTokMin16uint4,
 
     // matrix types
     EHTokInt1x1,