SPIR-V: Move from Version .99 Rev 31 to Version 1.0, Rev 2.
diff --git a/SPIRV/GLSL.std.450.h b/SPIRV/GLSL.std.450.h
index 13bb8e3..d1c9b5c 100755
--- a/SPIRV/GLSL.std.450.h
+++ b/SPIRV/GLSL.std.450.h
@@ -28,7 +28,7 @@
 #define GLSLstd450_H
 
 const int GLSLstd450Version = 99;
-const int GLSLstd450Revision = 2;
+const int GLSLstd450Revision = 3;
 
 enum GLSLstd450 {
     GLSLstd450Bad = 0,              // Don't use
@@ -82,47 +82,44 @@
     GLSLstd450FClamp = 43,
     GLSLstd450UClamp = 44,
     GLSLstd450SClamp = 45,
-    GLSLstd450Mix = 46,
-    GLSLstd450Step = 47,
-    GLSLstd450SmoothStep = 48,
+    GLSLstd450FMix = 46,
+    GLSLstd450IMix = 47,
+    GLSLstd450Step = 48,
+    GLSLstd450SmoothStep = 49,
 
-    GLSLstd450Fma = 49,
-    GLSLstd450Frexp = 50,            // second operand needs an OpVariable to write to
-    GLSLstd450FrexpStruct = 51,      // no OpVariable operand
-    GLSLstd450Ldexp = 52,
+    GLSLstd450Fma = 50,
+    GLSLstd450Frexp = 51,            // second operand needs an OpVariable to write to
+    GLSLstd450FrexpStruct = 52,      // no OpVariable operand
+    GLSLstd450Ldexp = 53,
 
-    GLSLstd450PackSnorm4x8 = 53,
-    GLSLstd450PackUnorm4x8 = 54,
-    GLSLstd450PackSnorm2x16 = 55,
-    GLSLstd450PackUnorm2x16 = 56,
-    GLSLstd450PackHalf2x16 = 57,
-    GLSLstd450PackDouble2x32 = 58,
-    GLSLstd450UnpackSnorm2x16 = 59,
-    GLSLstd450UnpackUnorm2x16 = 60,
-    GLSLstd450UnpackHalf2x16 = 61,
-    GLSLstd450UnpackSnorm4x8 = 62,
-    GLSLstd450UnpackUnorm4x8 = 63,
-    GLSLstd450UnpackDouble2x32 = 64,
+    GLSLstd450PackSnorm4x8 = 54,
+    GLSLstd450PackUnorm4x8 = 55,
+    GLSLstd450PackSnorm2x16 = 56,
+    GLSLstd450PackUnorm2x16 = 57,
+    GLSLstd450PackHalf2x16 = 58,
+    GLSLstd450PackDouble2x32 = 59,
+    GLSLstd450UnpackSnorm2x16 = 60,
+    GLSLstd450UnpackUnorm2x16 = 61,
+    GLSLstd450UnpackHalf2x16 = 62,
+    GLSLstd450UnpackSnorm4x8 = 63,
+    GLSLstd450UnpackUnorm4x8 = 64,
+    GLSLstd450UnpackDouble2x32 = 65,
 
-    GLSLstd450Length = 65,
-    GLSLstd450Distance = 66,
-    GLSLstd450Cross = 67,
-    GLSLstd450Normalize = 68,
-    GLSLstd450FaceForward = 69,
-    GLSLstd450Reflect = 70,
-    GLSLstd450Refract = 71,
+    GLSLstd450Length = 66,
+    GLSLstd450Distance = 67,
+    GLSLstd450Cross = 68,
+    GLSLstd450Normalize = 69,
+    GLSLstd450FaceForward = 70,
+    GLSLstd450Reflect = 71,
+    GLSLstd450Refract = 72,
 
-    GLSLstd450FindILSB = 72,
-    GLSLstd450FindSMSB = 73,
-    GLSLstd450FindUMSB = 74,
+    GLSLstd450FindILsb = 73,
+    GLSLstd450FindSMsb = 74,
+    GLSLstd450FindUMsb = 75,
 
-    GLSLstd450InterpolateAtCentroid = 75,
-    GLSLstd450InterpolateAtSample = 76,
-    GLSLstd450InterpolateAtOffset = 77,
-
-    GLSLstd450AddCarry = 78,        // These three should move to the core instruction set
-    GLSLstd450SubBorrow = 79,
-    GLSLstd450MulExtended = 80,
+    GLSLstd450InterpolateAtCentroid = 76,
+    GLSLstd450InterpolateAtSample = 77,
+    GLSLstd450InterpolateAtOffset = 78,
 
     GLSLstd450Count
 };
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index c005197..c5342ac 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -60,7 +60,10 @@
 
 namespace {
 
-const int GlslangMagic = 0x51a;
+// For low-order part of the generator's magic number. Bump up
+// when there is a change in the style (e.g., if SSA form changes,
+// or a different instruction sequence to do something gets used).
+const int GeneratorVersion = 1;
 
 //
 // The main holder of information for translating glslang to SPIR-V.
@@ -113,13 +116,16 @@
     spv::Id createNoArgOperation(glslang::TOperator op);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
     void addDecoration(spv::Id id, spv::Decoration dec);
+    void addDecoration(spv::Id id, spv::Decoration dec, unsigned value);
     void addMemberDecoration(spv::Id id, int member, spv::Decoration dec);
-    spv::Id createSpvConstant(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst);
+    spv::Id createSpvSpecConstant(const glslang::TIntermTyped&);
+    spv::Id createSpvConstant(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant);
     bool isTrivialLeaf(const glslang::TIntermTyped* node);
     bool isTrivial(const glslang::TIntermTyped* node);
     spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right);
 
     spv::Function* shaderEntry;
+    spv::Instruction* entryPoint;
     int sequenceDepth;
 
     // There is a 1:1 mapping between a spv builder and a module; this is thread safe
@@ -169,7 +175,7 @@
     case EShLangFragment:         return spv::ExecutionModelFragment;
     case EShLangCompute:          return spv::ExecutionModelGLCompute;
     default:
-        spv::MissingFunctionality("GLSL stage");
+        assert(0);
         return spv::ExecutionModelFragment;
     }
 }
@@ -191,12 +197,12 @@
         // TODO: how are we distuingishing between default and non-default non-writable uniforms?  Do default uniforms even exist?
     } else {
         switch (type.getQualifier().storage) {
-        case glslang::EvqShared:        return spv::StorageClassWorkgroupLocal;  break;
-        case glslang::EvqGlobal:        return spv::StorageClassPrivateGlobal;
+        case glslang::EvqShared:        return spv::StorageClassWorkgroup;  break;
+        case glslang::EvqGlobal:        return spv::StorageClassPrivate;
         case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
         case glslang::EvqTemporary:     return spv::StorageClassFunction;
         default: 
-            spv::MissingFunctionality("unknown glslang storage class");
+            assert(0);
             return spv::StorageClassFunction;
         }
     }
@@ -206,14 +212,14 @@
 spv::Dim TranslateDimensionality(const glslang::TSampler& sampler)
 {
     switch (sampler.dim) {
-    case glslang::Esd1D:     return spv::Dim1D;
-    case glslang::Esd2D:     return spv::Dim2D;
-    case glslang::Esd3D:     return spv::Dim3D;
-    case glslang::EsdCube:   return spv::DimCube;
-    case glslang::EsdRect:   return spv::DimRect;
-    case glslang::EsdBuffer: return spv::DimBuffer;
+    case glslang::Esd1D:      return spv::Dim1D;
+    case glslang::Esd2D:      return spv::Dim2D;
+    case glslang::Esd3D:      return spv::Dim3D;
+    case glslang::EsdCube:    return spv::DimCube;
+    case glslang::EsdRect:    return spv::DimRect;
+    case glslang::EsdBuffer:  return spv::DimBuffer;
     default:
-        spv::MissingFunctionality("unknown sampler dimension");
+        assert(0);
         return spv::Dim2D;
     }
 }
@@ -240,7 +246,7 @@
         case glslang::EvqVaryingIn:    return spv::DecorationBlock;
         case glslang::EvqVaryingOut:   return spv::DecorationBlock;
         default:
-            spv::MissingFunctionality("kind of block");
+            assert(0);
             break;
         }
     }
@@ -275,11 +281,10 @@
                 }
             case glslang::EvqVaryingIn:
             case glslang::EvqVaryingOut:
-                if (type.getQualifier().layoutPacking != glslang::ElpNone)
-                    spv::MissingFunctionality("in/out block layout");
+                assert(type.getQualifier().layoutPacking == glslang::ElpNone);
                 return (spv::Decoration)spv::BadValue;
             default:
-                spv::MissingFunctionality("block storage qualification");
+                assert(0);
                 return (spv::Decoration)spv::BadValue;
             }
         }
@@ -287,12 +292,16 @@
 }
 
 // Translate glslang type to SPIR-V interpolation decorations.
+// Returns spv::Decoration(spv::BadValue) when no decoration
+// should be applied.
 spv::Decoration TranslateInterpolationDecoration(const glslang::TType& type)
 {
-    if (type.getQualifier().smooth)
-        return spv::DecorationSmooth;
+    if (type.getQualifier().smooth) {
+        // Smooth decoration doesn't exist in SPIR-V 1.0
+        return (spv::Decoration)spv::BadValue;
+    }
     if (type.getQualifier().nopersp)
-        return spv::DecorationNoperspective;
+        return spv::DecorationNoPerspective;
     else if (type.getQualifier().patch)
         return spv::DecorationPatch;
     else if (type.getQualifier().flat)
@@ -344,8 +353,6 @@
     case glslang::EbvSampleId:             return spv::BuiltInSampleId;
     case glslang::EbvSamplePosition:       return spv::BuiltInSamplePosition;
     case glslang::EbvSampleMask:           return spv::BuiltInSampleMask;
-    case glslang::EbvFragColor:            return spv::BuiltInFragColor;
-    case glslang::EbvFragData:             return spv::BuiltInFragColor;
     case glslang::EbvFragDepth:            return spv::BuiltInFragDepth;
     case glslang::EbvHelperInvocation:     return spv::BuiltInHelperInvocation;
     case glslang::EbvNumWorkGroups:        return spv::BuiltInNumWorkgroups;
@@ -414,7 +421,7 @@
 
 TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* glslangIntermediate)
     : TIntermTraverser(true, false, true), shaderEntry(0), sequenceDepth(0),
-      builder(GlslangMagic),
+      builder((glslang::GetKhronosToolId() << 16) | GeneratorVersion),
       inMain(false), mainTerminated(false), linkageOnly(false),
       glslangIntermediate(glslangIntermediate)
 {
@@ -425,7 +432,7 @@
     stdBuiltins = builder.import("GLSL.std.450");
     builder.setMemoryModel(spv::AddressingModelLogical, spv::MemoryModelGLSL450);
     shaderEntry = builder.makeMain();
-    builder.addEntryPoint(executionModel, shaderEntry, "main");
+    entryPoint = builder.addEntryPoint(executionModel, shaderEntry, "main");
 
     // Add the source extensions
     const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
@@ -451,9 +458,9 @@
     case EShLangTessEvaluation:
         builder.addCapability(spv::CapabilityTessellation);
         switch (glslangIntermediate->getInputPrimitive()) {
-        case glslang::ElgTriangles:           mode = spv::ExecutionModeInputTriangles;     break;
-        case glslang::ElgQuads:               mode = spv::ExecutionModeInputQuads;         break;
-        case glslang::ElgIsolines:            mode = spv::ExecutionModeInputIsolines;      break;
+        case glslang::ElgTriangles:           mode = spv::ExecutionModeTriangles;     break;
+        case glslang::ElgQuads:               mode = spv::ExecutionModeQuads;         break;
+        case glslang::ElgIsolines:            mode = spv::ExecutionModeIsolines;      break;
         default:                              mode = spv::BadValue;                        break;
         }
         if (mode != spv::BadValue)
@@ -486,7 +493,7 @@
         case glslang::ElgPoints:             mode = spv::ExecutionModeInputPoints;             break;
         case glslang::ElgLines:              mode = spv::ExecutionModeInputLines;              break;
         case glslang::ElgLinesAdjacency:     mode = spv::ExecutionModeInputLinesAdjacency;     break;
-        case glslang::ElgTriangles:          mode = spv::ExecutionModeInputTriangles;          break;
+        case glslang::ElgTriangles:          mode = spv::ExecutionModeTriangles;               break;
         case glslang::ElgTrianglesAdjacency: mode = spv::ExecutionModeInputTrianglesAdjacency; break;
         default:                             mode = spv::BadValue;         break;
         }
@@ -520,7 +527,6 @@
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests);
 
         switch(glslangIntermediate->getDepth()) {
-        case glslang::EldAny:      mode = spv::ExecutionModeDepthAny;     break;
         case glslang::EldGreater:  mode = spv::ExecutionModeDepthGreater; break;
         case glslang::EldLess:     mode = spv::ExecutionModeDepthLess;    break;
         default:                   mode = spv::BadValue;                  break;
@@ -591,6 +597,11 @@
             builder.setAccessChainRValue(id);
         else
             builder.setAccessChainLValue(id);
+    } else {
+        // finish off the entry-point SPV instruction by adding the Input/Output <id>
+        spv::StorageClass sc = builder.getStorageClass(id);
+        if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)
+            entryPoint->addIdOperand(id);
     }
 }
 
@@ -639,8 +650,7 @@
                                                node->getType().getBasicType());
 
                 // these all need their counterparts in createBinaryOperation()
-                if (rValue == 0)
-                    spv::MissingFunctionality("createBinaryOperation");
+                assert(rValue != spv::NoResult);
             }
 
             // store the result
@@ -660,20 +670,13 @@
 
             // Add the next element in the chain
 
-            int index = 0;
-            if (node->getRight()->getAsConstantUnion() == 0)
-                spv::MissingFunctionality("direct index without a constant node");
-            else 
-                index = node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
-
+            int index = node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
             if (node->getLeft()->getBasicType() == glslang::EbtBlock && node->getOp() == glslang::EOpIndexDirectStruct) {
                 // This may be, e.g., an anonymous block-member selection, which generally need
                 // index remapping due to hidden members in anonymous blocks.
                 std::vector<int>& remapper = memberRemapper[node->getLeft()->getType().getStruct()];
-                if (remapper.size() == 0)
-                    spv::MissingFunctionality("block without member remapping");
-                else
-                    index = remapper[index];
+                assert(remapper.size() > 0);
+                index = remapper[index];
             }
 
             if (! node->getLeft()->getType().isArray() &&
@@ -766,7 +769,7 @@
                                    node->getLeft()->getType().getBasicType());
 
     if (! result) {
-        spv::MissingFunctionality("glslang binary operation");
+        spv::MissingFunctionality("unknown glslang binary operation");
     } else {
         builder.clearAccessChain();
         builder.setAccessChainRValue(result);
@@ -832,7 +835,7 @@
 
     // if not, then possibly an operation
     if (! result)
-        result = createUnaryOperation(node->getOp(), precision, convertGlslangToSpvType(node->getType()), operand, node->getBasicType());
+        result = createUnaryOperation(node->getOp(), precision, convertGlslangToSpvType(node->getType()), operand, node->getOperand()->getBasicType());
 
     if (result) {
         builder.clearAccessChain();
@@ -862,8 +865,7 @@
             spv::Id result = createBinaryOperation(op, TranslatePrecisionDecoration(node->getType()), 
                                                      convertGlslangToSpvType(node->getType()), operand, one, 
                                                      node->getType().getBasicType());
-            if (result == 0)
-                spv::MissingFunctionality("createBinaryOperation for unary");
+            assert(result != spv::NoResult);
 
             // The result of operation is always stored, but conditionally the
             // consumed result.  The consumed result is always an r-value.
@@ -886,7 +888,7 @@
         return false;
 
     default:
-        spv::MissingFunctionality("glslang unary");
+        spv::MissingFunctionality("unknown glslang unary");
         break;
     }
 
@@ -990,13 +992,7 @@
     {
         if (node->isUserDefined())
             result = handleUserFunctionCall(node);
-
-        if (! result) {
-            spv::MissingFunctionality("glslang function call");
-            glslang::TConstUnionArray emptyConsts;
-            int nextConst = 0;
-            result = createSpvConstant(node->getType(), emptyConsts, nextConst);
-        }
+        assert(result);
         builder.clearAccessChain();
         builder.setAccessChainRValue(result);
 
@@ -1053,12 +1049,10 @@
             for (int c = 0; c < (int)arguments.size(); ++c)
                 constituents.push_back(arguments[c]);
             constructed = builder.createCompositeConstruct(resultTypeId, constituents);
-        } else {
-            if (isMatrix)
-                constructed = builder.createMatrixConstructor(precision, arguments, resultTypeId);
-            else
-                constructed = builder.createConstructor(precision, arguments, resultTypeId);
-        }
+        } else if (isMatrix)
+            constructed = builder.createMatrixConstructor(precision, arguments, resultTypeId);
+        else
+            constructed = builder.createConstructor(precision, arguments, resultTypeId);
 
         builder.clearAccessChain();
         builder.setAccessChainRValue(constructed);
@@ -1131,21 +1125,6 @@
         atomic = true;
         break;
 
-    case glslang::EOpAddCarry:
-    case glslang::EOpSubBorrow:
-    case glslang::EOpUMulExtended:
-    case glslang::EOpIMulExtended:
-    case glslang::EOpBitfieldExtract:
-    case glslang::EOpBitfieldInsert:
-        spv::MissingFunctionality("integer aggregate");
-        break;
-
-    case glslang::EOpFma:
-    case glslang::EOpFrexp:
-    case glslang::EOpLdexp:
-        spv::MissingFunctionality("fma/frexp/ldexp aggregate");
-        break;
-
     default:
         break;
     }
@@ -1171,9 +1150,7 @@
                                        left->getType().getBasicType(), reduceComparison);
 
         // code above should only make binOp that exists in createBinaryOperation
-        if (result == 0)
-            spv::MissingFunctionality("createBinaryOperation for aggregate");
-
+        assert(result != spv::NoResult);
         builder.clearAccessChain();
         builder.setAccessChainRValue(result);
 
@@ -1192,7 +1169,7 @@
         // special case l-value operands; there are just a few
         bool lvalue = false;
         switch (node->getOp()) {
-        //case glslang::EOpFrexp:
+        case glslang::EOpFrexp:
         case glslang::EOpModf:
             if (arg == 1)
                 lvalue = true;
@@ -1208,9 +1185,16 @@
             if (arg == 0)
                 lvalue = true;
             break;
-        //case glslang::EOpUAddCarry:
-        //case glslang::EOpUSubBorrow:
-        //case glslang::EOpUMulExtended:
+        case glslang::EOpAddCarry:
+        case glslang::EOpSubBorrow:
+            if (arg == 2)
+                lvalue = true;
+            break;
+        case glslang::EOpUMulExtended:
+        case glslang::EOpIMulExtended:
+            if (arg >= 2)
+                lvalue = true;
+            break;
         default:
             break;
         }
@@ -1230,7 +1214,7 @@
             result = createNoArgOperation(node->getOp());
             break;
         case 1:
-            result = createUnaryOperation(node->getOp(), precision, convertGlslangToSpvType(node->getType()), operands.front(), node->getType().getBasicType());
+            result = createUnaryOperation(node->getOp(), precision, convertGlslangToSpvType(node->getType()), operands.front(), glslangOperands[0]->getAsTyped()->getBasicType());
             break;
         default:
             result = createMiscOperation(node->getOp(), precision, convertGlslangToSpvType(node->getType()), operands, node->getBasicType());
@@ -1242,7 +1226,7 @@
         return false;
 
     if (! result) {
-        spv::MissingFunctionality("glslang aggregate");
+        spv::MissingFunctionality("unknown glslang aggregate");
         return true;
     } else {
         builder.clearAccessChain();
@@ -1350,7 +1334,7 @@
 void TGlslangToSpvTraverser::visitConstantUnion(glslang::TIntermConstantUnion* node)
 {
     int nextConst = 0;
-    spv::Id constant = createSpvConstant(node->getType(), node->getConstArray(), nextConst);
+    spv::Id constant = createSpvConstant(node->getType(), node->getConstArray(), nextConst, false);
 
     builder.clearAccessChain();
     builder.setAccessChainRValue(constant);
@@ -1418,7 +1402,7 @@
         break;
 
     default:
-        spv::MissingFunctionality("branch type");
+        assert(0);
         break;
     }
 
@@ -1429,9 +1413,9 @@
 {
     // First, steer off constants, which are not SPIR-V variables, but 
     // can still have a mapping to a SPIR-V Id.
+    // This includes specialization constants.
     if (node->getQualifier().storage == glslang::EvqConst) {
-        int nextConst = 0;
-        return createSpvConstant(node->getType(), node->getConstArray(), nextConst);
+        return createSpvSpecConstant(*node);
     }
 
     // Now, handle actual variables
@@ -1453,7 +1437,7 @@
         case glslang::EbtInt:      return builder.makeIntType(32);
         case glslang::EbtUint:     return builder.makeUintType(32);
         default:
-            spv::MissingFunctionality("sampled type");
+            assert(0);
             return builder.makeFloatType(32);
     }
 }
@@ -1474,8 +1458,7 @@
     switch (type.getBasicType()) {
     case glslang::EbtVoid:
         spvType = builder.makeVoidType();
-        if (type.isArray())
-            spv::MissingFunctionality("array of void");
+        assert (! type.isArray());
         break;
     case glslang::EbtFloat:
         spvType = builder.makeFloatType(32);
@@ -1499,12 +1482,13 @@
     case glslang::EbtSampler:
         {
             const glslang::TSampler& sampler = type.getSampler();
-            spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler), sampler.shadow, sampler.arrayed, sampler.ms,
-                                            sampler.image ? 2 : 1, TranslateImageFormat(type));
-            // OpenGL "textures" need to be combined with a sampler
-            if (! sampler.image)
-                spvType = builder.makeSampledImageType(spvType);
-        }
+                // an image is present, make its type
+                spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler), sampler.shadow, sampler.arrayed, sampler.ms,
+                                                sampler.image ? 2 : 1, TranslateImageFormat(type));
+            if (! sampler.image) {
+                    spvType = builder.makeSampledImageType(spvType);
+                }
+            }
         break;
     case glslang::EbtStruct:
     case glslang::EbtBlock:
@@ -1593,7 +1577,7 @@
         }
         break;
     default:
-        spv::MissingFunctionality("basic type");
+        assert(0);
         break;
     }
 
@@ -1620,10 +1604,14 @@
             spvType = builder.makeArrayType(spvType, type.getOuterArraySize());
         }
 
-        // TODO: layout still needs to be done hierarchically for arrays of arrays, which 
+        // TODO: explicit layout still needs to be done hierarchically for arrays of arrays, which 
         // may still require additional "link time" support from the front-end 
         // for arrays of arrays
-        if (explicitLayout)
+
+        // We need to decorate array strides for types needing explicit layout,
+        // except for the very top if it is an array of blocks; that array is
+        // not laid out in memory in a way needing a stride.
+        if (explicitLayout && type.getBasicType() != glslang::EbtBlock)
             builder.addDecoration(spvType, spv::DecorationArrayStride, getArrayStride(type));
     }
 
@@ -1883,8 +1871,11 @@
         operands.push_back(*(opIt++));
         if (node->getOp() == glslang::EOpImageStore)
             operands.push_back(*(opIt++));
-        // TODO: add 'sample' operand
         if (node->getOp() == glslang::EOpImageLoad) {
+            if (sampler.ms) {
+                operands.push_back(spv::ImageOperandsSampleMask);
+                operands.push_back(*(opIt++));
+            }
             return builder.createOp(spv::OpImageRead, convertGlslangToSpvType(node->getType()), operands);
         } else if (node->getOp() == glslang::EOpImageStore) {
             builder.createNoResultOp(spv::OpImageWrite, operands);
@@ -1909,8 +1900,6 @@
     }
 
     // Check for texture functions other than queries
-    if (cracked.gather)
-        spv::MissingFunctionality("texture gather");
 
     // check for bias argument
     bool bias = false;
@@ -1925,14 +1914,18 @@
             bias = true;
     }
 
-    bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
-
     // set the rest of the arguments
+
     params.coords = arguments[1];
     int extraArgs = 0;
-    if (cubeCompare)
+
+    // sort out where Dref is coming from
+    if (sampler.shadow && sampler.dim == glslang::EsdCube && sampler.arrayed)
         params.Dref = arguments[2];
-    else if (sampler.shadow) {
+    else if (sampler.shadow && cracked.gather) {
+        params.Dref = arguments[2];
+        ++extraArgs;
+    } else if (sampler.shadow) {
         std::vector<spv::Id> indexes;
         int comp;
         if (cracked.proj)
@@ -1954,20 +1947,28 @@
         params.gradY = arguments[3 + extraArgs];
         extraArgs += 2;
     }
-    //if (gather && compare) {
-    //    params.compare = arguments[2 + extraArgs];
-    //    ++extraArgs;
-    //}
-    if (cracked.offset || cracked.offsets) {
+    if (cracked.offset) {
         params.offset = arguments[2 + extraArgs];
         ++extraArgs;
+    } else if (cracked.offsets) {
+        params.offsets = arguments[2 + extraArgs];
+        ++extraArgs;
     }
     if (bias) {
         params.bias = arguments[2 + extraArgs];
         ++extraArgs;
     }
+    if (cracked.gather && ! sampler.shadow) {
+        // default component is 0, if missing, otherwise an argument
+        if (2 + extraArgs < (int)arguments.size()) {
+            params.comp = arguments[2 + extraArgs];
+            ++extraArgs;
+        } else {
+            params.comp = builder.makeIntConstant(0);
+        }
+    }
 
-    return builder.createTextureCall(precision, convertGlslangToSpvType(node->getType()), cracked.fetch, cracked.proj, params);
+    return builder.createTextureCall(precision, convertGlslangToSpvType(node->getType()), cracked.fetch, cracked.proj, cracked.gather, params);
 }
 
 spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAggregate* node)
@@ -2308,6 +2309,7 @@
 {
     spv::Op unaryOp = spv::OpNop;
     int libCall = -1;
+    bool isUnsigned = typeProxy == glslang::EbtUint;
     bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
 
     switch (op) {
@@ -2538,11 +2540,13 @@
         unaryOp = spv::OpBitCount;
         break;
     case glslang::EOpFindLSB:
-        libCall = spv::GLSLstd450FindILSB;
+        libCall = spv::GLSLstd450FindILsb;
         break;
     case glslang::EOpFindMSB:
-        spv::MissingFunctionality("signed vs. unsigned FindMSB");
-        libCall = spv::GLSLstd450FindSMSB;
+        if (isUnsigned)
+            libCall = spv::GLSLstd450FindUMsb;
+        else
+            libCall = spv::GLSLstd450FindSMsb;
         break;
 
     default:
@@ -2717,7 +2721,7 @@
         opCode = spv::OpAtomicLoad;
         break;
     default:
-        spv::MissingFunctionality("missing nested atomic");
+        assert(0);
         break;
     }
 
@@ -2754,6 +2758,11 @@
 
     spv::Op opCode = spv::OpNop;
     int libCall = -1;
+    int consumedOperands = operands.size();
+    spv::Id typeId0 = 0;
+    if (consumedOperands > 0)
+        typeId0 = builder.getTypeId(operands[0]);
+    spv::Id frexpIntType = 0;
 
     switch (op) {
     case glslang::EOpMin:
@@ -2794,7 +2803,10 @@
             libCall = spv::GLSLstd450SClamp;
         break;
     case glslang::EOpMix:
-        libCall = spv::GLSLstd450Mix;
+        if (isFloat)
+            libCall = spv::GLSLstd450FMix;
+        else
+            libCall = spv::GLSLstd450IMix;
         break;
     case glslang::EOpStep:
         libCall = spv::GLSLstd450Step;
@@ -2819,6 +2831,52 @@
         libCall = spv::GLSLstd450Refract;
         break;
 
+    case glslang::EOpAddCarry:
+        opCode = spv::OpIAddCarry;
+        typeId = builder.makeStructResultType(typeId0, typeId0);
+        consumedOperands = 2;
+        break;
+    case glslang::EOpSubBorrow:
+        opCode = spv::OpISubBorrow;
+        typeId = builder.makeStructResultType(typeId0, typeId0);
+        consumedOperands = 2;
+        break;
+    case glslang::EOpUMulExtended:
+        opCode = spv::OpUMulExtended;
+        typeId = builder.makeStructResultType(typeId0, typeId0);
+        consumedOperands = 2;
+        break;
+    case glslang::EOpIMulExtended:
+        opCode = spv::OpSMulExtended;
+        typeId = builder.makeStructResultType(typeId0, typeId0);
+        consumedOperands = 2;
+        break;
+    case glslang::EOpBitfieldExtract:
+        if (isUnsigned)
+            opCode = spv::OpBitFieldUExtract;
+        else
+            opCode = spv::OpBitFieldSExtract;
+        break;
+    case glslang::EOpBitfieldInsert:
+        opCode = spv::OpBitFieldInsert;
+        break;
+
+    case glslang::EOpFma:
+        libCall = spv::GLSLstd450Fma;
+        break;
+    case glslang::EOpFrexp:
+        libCall = spv::GLSLstd450FrexpStruct;
+        if (builder.getNumComponents(operands[0]) == 1)
+            frexpIntType = builder.makeIntegerType(32, true);
+        else
+            frexpIntType = builder.makeVectorType(builder.makeIntegerType(32, true), builder.getNumComponents(operands[0]));
+        typeId = builder.makeStructResultType(typeId0, frexpIntType);
+        consumedOperands = 1;
+        break;
+    case glslang::EOpLdexp:
+        libCall = spv::GLSLstd450Ldexp;
+        break;
+
     default:
         return 0;
     }
@@ -2827,7 +2885,7 @@
     if (libCall >= 0)
         id = builder.createBuiltinCall(precision, typeId, stdBuiltins, libCall, operands);
     else {
-        switch (operands.size()) {
+        switch (consumedOperands) {
         case 0:
             // should all be handled by visitAggregate and createNoArgOperation
             assert(0);
@@ -2839,16 +2897,34 @@
         case 2:
             id = builder.createBinOp(opCode, typeId, operands[0], operands[1]);
             break;
-        case 3:
-            id = builder.createTriOp(opCode, typeId, operands[0], operands[1], operands[2]);
-            break;
         default:
-            // These do not exist yet
-            assert(0 && "operation with more than 3 operands");
+            // anything 3 or over doesn't have l-value operands, so all should be consumed
+            assert(consumedOperands == operands.size());
+            id = builder.createOp(opCode, typeId, operands);
             break;
         }
     }
 
+    // Decode the return types that were structures
+    switch (op) {
+    case glslang::EOpAddCarry:
+    case glslang::EOpSubBorrow:
+        builder.createStore(builder.createCompositeExtract(id, typeId0, 1), operands[2]);
+        id = builder.createCompositeExtract(id, typeId0, 0);
+        break;
+    case glslang::EOpUMulExtended:
+    case glslang::EOpIMulExtended:
+        builder.createStore(builder.createCompositeExtract(id, typeId0, 0), operands[3]);
+        builder.createStore(builder.createCompositeExtract(id, typeId0, 1), operands[2]);
+        break;
+    case glslang::EOpFrexp:
+        builder.createStore(builder.createCompositeExtract(id, frexpIntType, 1), operands[1]);
+        id = builder.createCompositeExtract(id, typeId0, 0);
+        break;
+    default:
+        break;
+    }
+
     builder.setPrecision(id, precision);
 
     return id;
@@ -2883,13 +2959,13 @@
         builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsImageMemoryMask);
         return 0;
     case glslang::EOpMemoryBarrierShared:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupLocalMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupMemoryMask);
         return 0;
     case glslang::EOpGroupMemoryBarrier:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupGlobalMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask);
         return 0;
     default:
-        spv::MissingFunctionality("operation with no arguments");
+        spv::MissingFunctionality("unknown operation with no arguments");
         return 0;
     }
 }
@@ -2945,31 +3021,57 @@
     if (builtIn != spv::BadValue)
         builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
 
-    if (linkageOnly)
-        builder.addDecoration(id, spv::DecorationNoStaticUse);
-
     return id;
 }
 
+// If 'dec' is valid, add no-operand decoration to an object
 void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec)
 {
     if (dec != spv::BadValue)
         builder.addDecoration(id, dec);
 }
 
+// If 'dec' is valid, add a one-operand decoration to an object
+void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec, unsigned value)
+{
+    if (dec != spv::BadValue)
+        builder.addDecoration(id, dec, value);
+}
+
+// If 'dec' is valid, add a no-operand decoration to a struct member
 void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec)
 {
     if (dec != spv::BadValue)
         builder.addMemberDecoration(id, (unsigned)member, dec);
 }
 
+// Make a full tree of instructions to build a SPIR-V specialization constant,
+// or regularly constant if possible.
+//
+// TBD: this is not yet done, nor verified to be the best design, it does do the leaf symbols though
+//
+// Recursively walk the nodes.  The nodes form a tree whose leaves are
+// regular constants, which themselves are trees that createSpvConstant()
+// recursively walks.  So, this function walks the "top" of the tree:
+//  - emit specialization constant-building instructions for specConstant
+//  - when running into a non-spec-constant, switch to createSpvConstant()
+spv::Id TGlslangToSpvTraverser::createSpvSpecConstant(const glslang::TIntermTyped& node)
+{
+    assert(node.getQualifier().storage == glslang::EvqConst);
+
+    // hand off to the non-spec-constant path
+    assert(node.getAsConstantUnion() != nullptr || node.getAsSymbolNode() != nullptr);
+    int nextConst = 0;
+    return createSpvConstant(node.getType(), node.getAsConstantUnion() ? node.getAsConstantUnion()->getConstArray() : node.getAsSymbolNode()->getConstArray(), nextConst, false);
+}
+
 // Use 'consts' as the flattened glslang source of scalar constants to recursively
 // build the aggregate SPIR-V constant.
 //
 // If there are not enough elements present in 'consts', 0 will be substituted;
 // an empty 'consts' can be used to create a fully zeroed SPIR-V constant.
 //
-spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TType& glslangType, const glslang::TConstUnionArray& consts, int& nextConst)
+spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TType& glslangType, const glslang::TConstUnionArray& consts, int& nextConst, bool specConstant)
 {
     // vector of constants for SPIR-V
     std::vector<spv::Id> spvConsts;
@@ -2980,15 +3082,15 @@
     if (glslangType.isArray()) {
         glslang::TType elementType(glslangType, 0);
         for (int i = 0; i < glslangType.getOuterArraySize(); ++i)
-            spvConsts.push_back(createSpvConstant(elementType, consts, nextConst));
+            spvConsts.push_back(createSpvConstant(elementType, consts, nextConst, false));
     } else if (glslangType.isMatrix()) {
         glslang::TType vectorType(glslangType, 0);
         for (int col = 0; col < glslangType.getMatrixCols(); ++col)
-            spvConsts.push_back(createSpvConstant(vectorType, consts, nextConst));
+            spvConsts.push_back(createSpvConstant(vectorType, consts, nextConst, false));
     } else if (glslangType.getStruct()) {
         glslang::TVector<glslang::TTypeLoc>::const_iterator iter;
         for (iter = glslangType.getStruct()->begin(); iter != glslangType.getStruct()->end(); ++iter)
-            spvConsts.push_back(createSpvConstant(*iter->type, consts, nextConst));
+            spvConsts.push_back(createSpvConstant(*iter->type, consts, nextConst, false));
     } else if (glslangType.isVector()) {
         for (unsigned int i = 0; i < (unsigned int)glslangType.getVectorSize(); ++i) {
             bool zero = nextConst >= consts.size();
@@ -3009,7 +3111,7 @@
                 spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
                 break;
             default:
-                spv::MissingFunctionality("constant vector type");
+                assert(0);
                 break;
             }
             ++nextConst;
@@ -3020,22 +3122,22 @@
         spv::Id scalar = 0;
         switch (glslangType.getBasicType()) {
         case glslang::EbtInt:
-            scalar = builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst());
+            scalar = builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst(), specConstant);
             break;
         case glslang::EbtUint:
-            scalar = builder.makeUintConstant(zero ? 0 : consts[nextConst].getUConst());
+            scalar = builder.makeUintConstant(zero ? 0 : consts[nextConst].getUConst(), specConstant);
             break;
         case glslang::EbtFloat:
-            scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst());
+            scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
             break;
         case glslang::EbtDouble:
-            scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst());
+            scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant);
             break;
         case glslang::EbtBool:
-            scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst());
+            scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
             break;
         default:
-            spv::MissingFunctionality("constant scalar type");
+            assert(0);
             break;
         }
         ++nextConst;
@@ -3180,7 +3282,7 @@
 {
     const int bufSize = 100;
     char buf[bufSize];
-    snprintf(buf, bufSize, "%d, Revision %d", spv::Version, spv::Revision);
+    snprintf(buf, bufSize, "0x%08x, Revision %d", spv::Version, spv::Revision);
     version = buf;
 }
 
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index 0f303e3..9beba21 100755
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -446,7 +446,6 @@
                 idFn(asId(word++));
                 break;
 
-            case spv::OperandOptionalId:
             case spv::OperandVariableIds:
                 for (unsigned i = 0; i < numOperands; ++i)
                     idFn(asId(word++));
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index dba9c4c..a46c924 100755
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -55,14 +55,12 @@
 
 namespace spv {
 
-const int SpvBuilderMagic = 0xBB;
-
-Builder::Builder(unsigned int userNumber) :
+Builder::Builder(unsigned int magicNumber) :
     source(SourceLanguageUnknown),
     sourceVersion(0),
     addressModel(AddressingModelLogical),
     memoryModel(MemoryModelGLSL450),
-    builderNumber(userNumber << 16 | SpvBuilderMagic),
+    builderNumber(magicNumber),
     buildPoint(0),
     uniqueId(0),
     mainFunction(0)
@@ -112,6 +110,20 @@
     return type->getResultId();
 }
 
+Id Builder::makeSamplerType()
+{
+    Instruction* type;
+    if (groupedTypes[OpTypeSampler].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeSampler);
+        groupedTypes[OpTypeSampler].push_back(type);
+        constantsTypesGlobals.push_back(type);
+        module.mapInstruction(type);
+    } else
+        type = groupedTypes[OpTypeSampler].back();
+
+    return type->getResultId();
+}
+
 Id Builder::makePointer(StorageClass storageClass, Id pointee)
 {
     // try to find it
@@ -176,8 +188,15 @@
     return type->getResultId();
 }
 
+// Make a struct without checking for duplication.
+// See makeStructResultType() for non-decorated structs
+// needed as the result of some instructions, which does
+// check for duplicates.
 Id Builder::makeStructType(std::vector<Id>& members, const char* name)
 {
+    // Don't look for previous one, because in the general case,
+    // structs can be duplicated except for decorations.
+
     // not found, make it
     Instruction* type = new Instruction(getUniqueId(), NoType, OpTypeStruct);
     for (int op = 0; op < (int)members.size(); ++op)
@@ -190,6 +209,30 @@
     return type->getResultId();
 }
 
+// Make a struct for the simple results of several instructions,
+// checking for duplication.
+Id Builder::makeStructResultType(Id type0, Id type1)
+{
+    // try to find it
+    Instruction* type;
+    for (int t = 0; t < (int)groupedTypes[OpTypeStruct].size(); ++t) {
+        type = groupedTypes[OpTypeStruct][t];
+        if (type->getNumOperands() != 2)
+            continue;
+        if (type->getIdOperand(0) != type0 || 
+            type->getIdOperand(1) != type1)
+            continue;
+        return type->getResultId();
+    }
+
+    // not found, make it
+    std::vector<spv::Id> members;
+    members.push_back(type0);
+    members.push_back(type1);
+
+    return makeStructType(members, "ResType");
+}
+
 Id Builder::makeVectorType(Id component, int size)
 {
     // try to find it
@@ -387,7 +430,7 @@
     case OpTypePointer:
         return getMostBasicTypeClass(instr->getIdOperand(1));
     default:
-        MissingFunctionality("getMostBasicTypeClass");
+        assert(0);
         return OpTypeFloat;
     }
 }
@@ -406,7 +449,7 @@
     case OpTypeMatrix:
         return instr->getImmediateOperand(1);
     default:
-        MissingFunctionality("getNumTypeComponents on non bool/int/float/vector/matrix");
+        assert(0);
         return 1;
     }
 }
@@ -434,7 +477,7 @@
     case OpTypePointer:
         return getScalarTypeId(getContainedTypeId(typeId));
     default:
-        MissingFunctionality("getScalarTypeId");
+        assert(0);
         return NoResult;
     }
 }
@@ -457,7 +500,7 @@
     case OpTypeStruct:
         return instr->getIdOperand(member);
     default:
-        MissingFunctionality("getContainedTypeId");
+        assert(0);
         return NoResult;
     }
 }
@@ -470,12 +513,12 @@
 
 // See if a scalar constant of this type has already been created, so it
 // can be reused rather than duplicated.  (Required by the specification).
-Id Builder::findScalarConstant(Op typeClass, Id typeId, unsigned value) const
+Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) const
 {
     Instruction* constant;
     for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) {
         constant = groupedConstants[typeClass][i];
-        if (constant->getNumOperands() == 1 &&
+        if (constant->getOpCode() == opcode &&
             constant->getTypeId() == typeId &&
             constant->getImmediateOperand(0) == value)
             return constant->getResultId();
@@ -485,12 +528,12 @@
 }
 
 // Version of findScalarConstant (see above) for scalars that take two operands (e.g. a 'double').
-Id Builder::findScalarConstant(Op typeClass, Id typeId, unsigned v1, unsigned v2) const
+Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const
 {
     Instruction* constant;
     for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) {
         constant = groupedConstants[typeClass][i];
-        if (constant->getNumOperands() == 2 &&
+        if (constant->getOpCode() == opcode &&
             constant->getTypeId() == typeId &&
             constant->getImmediateOperand(0) == v1 &&
             constant->getImmediateOperand(1) == v2)
@@ -524,18 +567,17 @@
     }
 }
 
-Id Builder::makeBoolConstant(bool b)
+Id Builder::makeBoolConstant(bool b, bool specConstant)
 {
     Id typeId = makeBoolType();
     Instruction* constant;
+    Op opcode = specConstant ? (b ? OpSpecConstantTrue : OpSpecConstantFalse) : (b ? OpConstantTrue : OpConstantFalse);
 
     // See if we already made it
     Id existing = 0;
     for (int i = 0; i < (int)groupedConstants[OpTypeBool].size(); ++i) {
         constant = groupedConstants[OpTypeBool][i];
-        if (constant->getTypeId() == typeId &&
-            (b ? (constant->getOpCode() == OpConstantTrue) : 
-                 (constant->getOpCode() == OpConstantFalse)))
+        if (constant->getTypeId() == typeId && constant->getOpCode() == opcode)
             existing = constant->getResultId();
     }
 
@@ -543,7 +585,7 @@
         return existing;
 
     // Make it
-    Instruction* c = new Instruction(getUniqueId(), typeId, b ? OpConstantTrue : OpConstantFalse);
+    Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
     constantsTypesGlobals.push_back(c);
     groupedConstants[OpTypeBool].push_back(c);
     module.mapInstruction(c);
@@ -551,13 +593,14 @@
     return c->getResultId();
 }
 
-Id Builder::makeIntConstant(Id typeId, unsigned value)
+Id Builder::makeIntConstant(Id typeId, unsigned value, bool specConstant)
 {
-    Id existing = findScalarConstant(OpTypeInt, typeId, value);
+    Op opcode = specConstant ? OpSpecConstant : OpConstant;
+    Id existing = findScalarConstant(OpTypeInt, opcode, typeId, value);
     if (existing)
         return existing;
 
-    Instruction* c = new Instruction(getUniqueId(), typeId, OpConstant);
+    Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
     c->addImmediateOperand(value);
     constantsTypesGlobals.push_back(c);
     groupedConstants[OpTypeInt].push_back(c);
@@ -566,15 +609,16 @@
     return c->getResultId();
 }
 
-Id Builder::makeFloatConstant(float f)
+Id Builder::makeFloatConstant(float f, bool specConstant)
 {
+    Op opcode = specConstant ? OpSpecConstant : OpConstant;
     Id typeId = makeFloatType(32);
     unsigned value = *(unsigned int*)&f;
-    Id existing = findScalarConstant(OpTypeFloat, typeId, value);
+    Id existing = findScalarConstant(OpTypeFloat, opcode, typeId, value);
     if (existing)
         return existing;
 
-    Instruction* c = new Instruction(getUniqueId(), typeId, OpConstant);
+    Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
     c->addImmediateOperand(value);
     constantsTypesGlobals.push_back(c);
     groupedConstants[OpTypeFloat].push_back(c);
@@ -583,17 +627,18 @@
     return c->getResultId();
 }
 
-Id Builder::makeDoubleConstant(double d)
+Id Builder::makeDoubleConstant(double d, bool specConstant)
 {
+    Op opcode = specConstant ? OpSpecConstant : OpConstant;
     Id typeId = makeFloatType(64);
     unsigned long long value = *(unsigned long long*)&d;
     unsigned op1 = value & 0xFFFFFFFF;
     unsigned op2 = value >> 32;
-    Id existing = findScalarConstant(OpTypeFloat, typeId, op1, op2);
+    Id existing = findScalarConstant(OpTypeFloat, opcode, typeId, op1, op2);
     if (existing)
         return existing;
 
-    Instruction* c = new Instruction(getUniqueId(), typeId, OpConstant);
+    Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
     c->addImmediateOperand(op1);
     c->addImmediateOperand(op2);
     constantsTypesGlobals.push_back(c);
@@ -644,7 +689,7 @@
     case OpTypeMatrix:
         break;
     default:
-        MissingFunctionality("Constant composite type in Builder");
+        assert(0);
         return makeFloatConstant(0.0);
     }
 
@@ -662,7 +707,7 @@
     return c->getResultId();
 }
 
-void Builder::addEntryPoint(ExecutionModel model, Function* function, const char* name)
+Instruction* Builder::addEntryPoint(ExecutionModel model, Function* function, const char* name)
 {
     Instruction* entryPoint = new Instruction(OpEntryPoint);
     entryPoint->addImmediateOperand(model);
@@ -670,6 +715,8 @@
     entryPoint->addStringOperand(name);
 
     entryPoints.push_back(entryPoint);
+
+    return entryPoint;
 }
 
 // Currently relying on the fact that all 'value' of interest are small non-negative values.
@@ -720,6 +767,8 @@
 
 void Builder::addDecoration(Id id, Decoration decoration, int num)
 {
+    if (decoration == (spv::Decoration)spv::BadValue)
+        return;
     Instruction* dec = new Instruction(OpDecorate);
     dec->addIdOperand(id);
     dec->addImmediateOperand(decoration);
@@ -833,25 +882,14 @@
     inst->addImmediateOperand(storageClass);
 
     switch (storageClass) {
-    case StorageClassUniformConstant:
-    case StorageClassUniform:
-    case StorageClassInput:
-    case StorageClassOutput:
-    case StorageClassWorkgroupLocal:
-    case StorageClassPrivateGlobal:
-    case StorageClassWorkgroupGlobal:
-    case StorageClassAtomicCounter:
-        constantsTypesGlobals.push_back(inst);
-        module.mapInstruction(inst);
-        break;
-
     case StorageClassFunction:
         // Validation rules require the declaration in the entry block
         buildPoint->getParent().addLocalVariable(inst);
         break;
 
     default:
-        MissingFunctionality("storage class in createVariable");
+        constantsTypesGlobals.push_back(inst);
+        module.mapInstruction(inst);
         break;
     }
 
@@ -1175,7 +1213,7 @@
 
 // Accept all parameters needed to create a texture instruction.
 // Create the correct instruction based on the inputs, and make the call.
-Id Builder::createTextureCall(Decoration precision, Id resultType, bool fetch, bool proj, const TextureParameters& parameters)
+Id Builder::createTextureCall(Decoration precision, Id resultType, bool fetch, bool proj, bool gather, const TextureParameters& parameters)
 {
     static const int maxTextureArgs = 10;
     Id texArgs[maxTextureArgs] = {};
@@ -1189,6 +1227,8 @@
     texArgs[numArgs++] = parameters.coords;
     if (parameters.Dref)
         texArgs[numArgs++] = parameters.Dref;
+    if (parameters.comp)
+        texArgs[numArgs++] = parameters.comp;
 
     //
     // Set up the optional arguments
@@ -1238,6 +1278,11 @@
     opCode = OpImageSampleImplicitLod;
     if (fetch) {
         opCode = OpImageFetch;
+    } else if (gather) {
+        if (parameters.Dref)
+            opCode = OpImageDrefGather;
+        else
+            opCode = OpImageGather;
     } else if (xplicit) {
         if (parameters.Dref) {
             if (proj)
@@ -1281,6 +1326,7 @@
         }
     }
 
+    // Build the SPIR-V instruction
     Instruction* textureInst = new Instruction(getUniqueId(), resultType, opCode);
     for (int op = 0; op < optArgNum; ++op)
         textureInst->addIdOperand(texArgs[op]);
@@ -1324,8 +1370,12 @@
         case Dim3D:
             numComponents = 3;
             break;
+        case DimSubpassData:
+            MissingFunctionality("input-attachment dim");
+            break;
+
         default:
-            MissingFunctionality("texture query dimensionality");
+            assert(0);
             break;
         }
         if (isArrayedImageType(getImageType(parameters.sampler)))
@@ -1345,7 +1395,8 @@
         resultType = makeIntType(32);
         break;
     default:
-        MissingFunctionality("Texture query op code");
+        assert(0);
+        break;
     }
 
     Instruction* query = new Instruction(getUniqueId(), resultType, opCode);
@@ -1360,57 +1411,6 @@
 }
 
 // Comments in header
-//Id Builder::createSamplePositionCall(Decoration precision, Id returnType, Id sampleIdx)
-//{
-//    // Return type is only flexible type
-//    Function* opCode = (fSamplePosition, returnType);
-//
-//    Instruction* instr = (opCode, sampleIdx);
-//    setPrecision(instr, precision);
-//
-//    return instr;
-//}
-
-// Comments in header
-//Id Builder::createBitFieldExtractCall(Decoration precision, Id id, Id offset, Id bits, bool isSigned)
-//{
-//    Op opCode = isSigned ? sBitFieldExtract
-//                                               : uBitFieldExtract;
-//
-//    if (isScalar(offset) == false || isScalar(bits) == false)
-//        MissingFunctionality("bitFieldExtract operand types");
-//
-//    // Dest and value are matching flexible types
-//    Function* opCode = (opCode, id->getType(), id->getType());
-//
-//    assert(opCode);
-//
-//    Instruction* instr = (opCode, id, offset, bits);
-//    setPrecision(instr, precision);
-//
-//    return instr;
-//}
-
-// Comments in header
-//Id Builder::createBitFieldInsertCall(Decoration precision, Id base, Id insert, Id offset, Id bits)
-//{
-//    Op opCode = bitFieldInsert;
-//
-//    if (isScalar(offset) == false || isScalar(bits) == false)
-//        MissingFunctionality("bitFieldInsert operand types");
-//
-//    // Dest, base, and insert are matching flexible types
-//    Function* opCode = (opCode, base->getType(), base->getType(), base->getType());
-//
-//    assert(opCode);
-//
-//    Instruction* instr = (opCode, base, insert, offset, bits);
-//    setPrecision(instr, precision);
-//
-//    return instr;
-//}
-
-// Comments in header
 Id Builder::createCompare(Decoration precision, Id value1, Id value2, bool equal)
 {
     Id boolType = makeBoolType();
@@ -1488,115 +1488,6 @@
     //return result;
 }
 
-// Comments in header
-//Id Builder::createOperation(Decoration precision, Op opCode, Id operand)
-//{
-//    Op* opCode = 0;
-//
-//    // Handle special return types here.  Things that don't have same result type as parameter
-//    switch (opCode) {
-//    case fIsNan:
-//    case fIsInf:
-//        break;
-//    case fFloatBitsToInt:
-//        break;
-//    case fIntBitsTofloat:
-//        break;
-//    case fPackSnorm2x16:
-//    case fPackUnorm2x16:
-//    case fPackHalf2x16:
-//        break;
-//    case fUnpackUnorm2x16:
-//    case fUnpackSnorm2x16:
-//    case fUnpackHalf2x16:
-//        break;
-//
-//    case fFrexp:
-//    case fLdexp:
-//    case fPackUnorm4x8:
-//    case fPackSnorm4x8:
-//    case fUnpackUnorm4x8:
-//    case fUnpackSnorm4x8:
-//    case fPackDouble2x32:
-//    case fUnpackDouble2x32:
-//        break;
-//    case fLength:
-//       // scalar result type
-//       break;
-//    case any:
-//    case all:
-//        // fixed result type
-//        break;
-//    case fModF:
-//        // modf() will return a struct that the caller must decode
-//        break;
-//    default:
-//        // Unary operations that have operand and dest with same flexible type
-//        break;
-//    }
-//
-//    assert(opCode);
-//
-//    Instruction* instr = (opCode, operand);
-//    setPrecision(instr, precision);
-//
-//    return instr;
-//}
-//
-//// Comments in header
-//Id Builder::createOperation(Decoration precision, Op opCode, Id operand0, Id operand1)
-//{
-//    Function* opCode = 0;
-//
-//    // Handle special return types here.  Things that don't have same result type as parameter
-//    switch (opCode) {
-//    case fDistance:
-//    case fDot2:
-//    case fDot3:
-//    case fDot4:
-//        // scalar result type
-//        break;
-//    case fStep:
-//        // first argument can be scalar, return and second argument match
-//        break;
-//    case fSmoothStep:
-//        // first argument can be scalar, return and second argument match
-//        break;
-//    default:
-//        // Binary operations that have operand and dest with same flexible type
-//        break;
-//    }
-//
-//    assert(opCode);
-//
-//    Instruction* instr = (opCode, operand0, operand1);
-//    setPrecision(instr, precision);
-//
-//    return instr;
-//}
-//
-//Id Builder::createOperation(Decoration precision, Op opCode, Id operand0, Id operand1, Id operand2)
-//{
-//    Function* opCode;
-//
-//    // Handle special return types here.  Things that don't have same result type as parameter
-//    switch (opCode) {
-//    case fSmoothStep:
-//        // first argument can be scalar, return and second argument match
-//        break;
-//    default:
-//        // Use operand0 type as result type
-//        break;
-//    }
-//
-//    assert(opCode);
-//
-//    Instruction* instr = (opCode, operand0, operand1, operand2);
-//    setPrecision(instr, precision);
-//
-//    return instr;
-//}
-
 // OpCompositeConstruct
 Id Builder::createCompositeConstruct(Id typeId, std::vector<Id>& constituents)
 {
@@ -1625,11 +1516,8 @@
     Id scalarTypeId = getScalarTypeId(resultTypeId);
     std::vector<Id> constituents;  // accumulate the arguments for OpCompositeConstruct
     for (unsigned int i = 0; i < sources.size(); ++i) {
-        if (isAggregate(sources[i]))
-            MissingFunctionality("aggregate in vector constructor");
-
+        assert(! isAggregate(sources[i]));
         unsigned int sourceSize = getNumComponents(sources[i]);
-
         unsigned int sourcesToUse = sourceSize;
         if (sourcesToUse + targetComponent > numTargetComponents)
             sourcesToUse = numTargetComponents - targetComponent;
@@ -1790,7 +1678,7 @@
 
     // Go back to the headerBlock and make the flow control split
     builder.setBuildPoint(headerBlock);
-    builder.createMerge(OpSelectionMerge, mergeBlock, SelectionControlMaskNone);
+    builder.createSelectionMerge(mergeBlock, SelectionControlMaskNone);
     if (elseBlock)
         builder.createConditionalBranch(condition, thenBlock, elseBlock);
     else
@@ -1814,7 +1702,7 @@
     Block* mergeBlock = new Block(getUniqueId(), function);
 
     // make and insert the switch's selection-merge instruction
-    createMerge(OpSelectionMerge, mergeBlock, SelectionControlMaskNone);
+    createSelectionMerge(mergeBlock, SelectionControlMaskNone);
 
     // make the switch instruction
     Instruction* switchInst = new Instruction(NoResult, NoType, OpSwitch);
@@ -1898,7 +1786,7 @@
         getBuildPoint()->addInstruction(loop.isFirstIteration);
 
         // Mark the end of the structured loop. This must exist in the loop header block.
-        createMerge(OpLoopMerge, loop.merge, LoopControlMaskNone);
+        createLoopMerge(loop.merge, loop.header, LoopControlMaskNone);
 
         // Generate code to see if this is the first iteration of the loop.
         // It needs to be in its own block, since the loop merge and
@@ -1912,7 +1800,7 @@
         // Control flow after this "if" normally reconverges at the loop body.
         // However, the loop test has a "break branch" out of this selection
         // construct because it can transfer control to the loop merge block.
-        createMerge(OpSelectionMerge, loop.body, SelectionControlMaskNone);
+        createSelectionMerge(loop.body, SelectionControlMaskNone);
 
         Block* loopTest = new Block(getUniqueId(), *loop.function);
         createConditionalBranch(loop.isFirstIteration->getResultId(), loop.body, loopTest);
@@ -1930,7 +1818,7 @@
     // the body, then this is a loop merge.  Otherwise the loop merge
     // has already been generated and this is a conditional merge.
     if (loop.testFirst) {
-        createMerge(OpLoopMerge, loop.merge, LoopControlMaskNone);
+        createLoopMerge(loop.merge, loop.header, LoopControlMaskNone);
         // Branching to the "body" block will keep control inside
         // the loop.
         createConditionalBranch(condition, loop.body, loop.merge);
@@ -1943,7 +1831,7 @@
         // of a merge instruction, and a block can't be the target of more
         // than one merge instruction, we need to make an intermediate block.
         Block* stayInLoopBlock = new Block(getUniqueId(), *loop.function);
-        createMerge(OpSelectionMerge, stayInLoopBlock, SelectionControlMaskNone);
+        createSelectionMerge(stayInLoopBlock, SelectionControlMaskNone);
 
         // This is the loop test.
         createConditionalBranch(condition, stayInLoopBlock, loop.merge);
@@ -2047,12 +1935,13 @@
 {
     assert(accessChain.isRValue == false);
 
+    transferAccessChainSwizzle(true);
     Id base = collapseAccessChain();
 
     if (accessChain.swizzle.size() && accessChain.component != NoResult)
         MissingFunctionality("simultaneous l-value swizzle and dynamic component selection");
 
-    // If swizzle exists, it is out-of-order or not full, we must load the target vector,
+    // If swizzle still exists, it is out-of-order or not full, we must load the target vector,
     // extract and insert elements to perform writeMask and/or swizzle.
     Id source = NoResult;
     if (accessChain.swizzle.size()) {
@@ -2078,8 +1967,9 @@
     Id id;
 
     if (accessChain.isRValue) {
+        // transfer access chain, but keep it static, so we can stay in registers
+        transferAccessChainSwizzle(false);
         if (accessChain.indexChain.size() > 0) {
-            mergeAccessChainSwizzle();  // TODO: optimization: look at applying this optimization more widely
             Id swizzleBase = accessChain.preSwizzleBaseType != NoType ? accessChain.preSwizzleBaseType : resultType;
         
             // if all the accesses are constants, we can use OpCompositeExtract
@@ -2113,6 +2003,7 @@
         } else
             id = accessChain.base;
     } else {
+        transferAccessChainSwizzle(true);
         // load through the access chain
         id = createLoad(collapseAccessChain());
     }
@@ -2142,6 +2033,7 @@
 {
     assert(accessChain.isRValue == false);
 
+    transferAccessChainSwizzle(true);
     Id lvalue = collapseAccessChain();
 
     // If swizzle exists, it is out-of-order or not full, we must load the target vector,
@@ -2162,7 +2054,26 @@
     out.push_back(uniqueId + 1);
     out.push_back(0);
 
-    // First instructions, some created on the spot here:
+    // Capabilities
+    for (auto cap : capabilities) {
+        Instruction capInst(0, 0, OpCapability);
+        capInst.addImmediateOperand(cap);
+        capInst.dump(out);
+    }
+
+    // TBD: OpExtension ...
+
+    dumpInstructions(out, imports);
+    Instruction memInst(0, 0, OpMemoryModel);
+    memInst.addImmediateOperand(addressModel);
+    memInst.addImmediateOperand(memoryModel);
+    memInst.dump(out);
+
+    // Instructions saved up while building:
+    dumpInstructions(out, entryPoints);
+    dumpInstructions(out, executionModes);
+
+    // Debug instructions
     if (source != SourceLanguageUnknown) {
         Instruction sourceInst(0, 0, OpSource);
         sourceInst.addImmediateOperand(source);
@@ -2174,28 +2085,12 @@
         extInst.addStringOperand(extensions[e]);
         extInst.dump(out);
     }
-
-    // TBD: OpExtension ...
-
-    // Capabilities
-    for (auto cap : capabilities) {
-        Instruction capInst(0, 0, OpCapability);
-        capInst.addImmediateOperand(cap);
-        capInst.dump(out);
-    }
-
-    dumpInstructions(out, imports);
-    Instruction memInst(0, 0, OpMemoryModel);
-    memInst.addImmediateOperand(addressModel);
-    memInst.addImmediateOperand(memoryModel);
-    memInst.dump(out);
-
-    // Instructions saved up while building:
-    dumpInstructions(out, entryPoints);
-    dumpInstructions(out, executionModes);
     dumpInstructions(out, names);
     dumpInstructions(out, lines);
+
+    // Annotation instructions
     dumpInstructions(out, decorations);
+
     dumpInstructions(out, constantsTypesGlobals);
     dumpInstructions(out, externals);
 
@@ -2207,10 +2102,13 @@
 // Protected methods.
 //
 
+// Turn the described access chain in 'accessChain' into an instruction
+// computing its address.  This *cannot* include complex swizzles, which must
+// be handled after this is called, but it does include swizzles that select
+// an individual element, as a single address of a scalar type can be
+// computed by an OpAccessChain instruction.
 Id Builder::collapseAccessChain()
 {
-    // TODO: bring in an individual component swizzle here, so that a pointer 
-    // all the way to the component level can be created.
     assert(accessChain.isRValue == false);
 
     if (accessChain.indexChain.size() > 0) {
@@ -2222,9 +2120,12 @@
         return accessChain.instr;
     } else
         return accessChain.base;
+
+    // note that non-trivial swizzling is left pending...
 }
 
-// clear out swizzle if it is redundant
+// clear out swizzle if it is redundant, that is reselecting the same components
+// that would be present without the swizzle.
 void Builder::simplifyAccessChainSwizzle()
 {
     // If the swizzle has fewer components than the vector, it is subsetting, and must stay
@@ -2244,29 +2145,45 @@
         accessChain.preSwizzleBaseType = NoType;
 }
 
-// clear out swizzle if it can become part of the indexes
-void Builder::mergeAccessChainSwizzle()
+// To the extent any swizzling can become part of the chain
+// of accesses instead of a post operation, make it so.
+// If 'dynamic' is true, include transfering a non-static component index,
+// otherwise, only transfer static indexes.
+//
+// Also, Boolean vectors are likely to be special.  While
+// for external storage, they should only be integer types,
+// function-local bool vectors could use sub-word indexing,
+// so keep that as a separate Insert/Extract on a loaded vector.
+void Builder::transferAccessChainSwizzle(bool dynamic)
 {
-    // is there even a chance of doing something?  Need a single-component swizzle
-    if ((accessChain.swizzle.size() > 1) ||
-        (accessChain.swizzle.size() == 0 && accessChain.component == NoResult))
+    // too complex?
+    if (accessChain.swizzle.size() > 1)
         return;
 
-    // TODO: optimization: remove this, but for now confine this to non-dynamic accesses
-    // (the above test is correct when this is removed.)
-    if (accessChain.component != NoResult)
+    // non existent?
+    if (accessChain.swizzle.size() == 0 && accessChain.component == NoResult)
         return;
 
-    // move the swizzle over to the indexes
-    if (accessChain.swizzle.size() == 1)
+    // single component...
+
+    // skip doing it for Boolean vectors
+    if (isBoolType(getContainedTypeId(accessChain.preSwizzleBaseType)))
+        return;
+
+    if (accessChain.swizzle.size() == 1) {
+        // handle static component
         accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle.front()));
-    else
+        accessChain.swizzle.clear();
+        // note, the only valid remaining dynamic access would be to this one
+        // component, so don't bother even looking at accessChain.component
+        accessChain.preSwizzleBaseType = NoType;
+        accessChain.component = NoResult;
+    } else if (dynamic && accessChain.component != NoResult) {
+        // handle dynamic component
         accessChain.indexChain.push_back(accessChain.component);
-
-    // now there is no need to track this swizzle
-    accessChain.component = NoResult;
-    accessChain.preSwizzleBaseType = NoType;
-    accessChain.swizzle.clear();
+        accessChain.preSwizzleBaseType = NoType;
+        accessChain.component = NoResult;
+    }
 }
 
 // Utility method for creating a new block and setting the insert point to
@@ -2292,14 +2209,23 @@
     block->addPredecessor(buildPoint);
 }
 
-void Builder::createMerge(Op mergeCode, Block* mergeBlock, unsigned int control)
+void Builder::createSelectionMerge(Block* mergeBlock, unsigned int control)
 {
-    Instruction* merge = new Instruction(mergeCode);
+    Instruction* merge = new Instruction(OpSelectionMerge);
     merge->addIdOperand(mergeBlock->getId());
     merge->addImmediateOperand(control);
     buildPoint->addInstruction(merge);
 }
 
+void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control)
+{
+    Instruction* merge = new Instruction(OpLoopMerge);
+    merge->addIdOperand(mergeBlock->getId());
+    merge->addIdOperand(continueBlock->getId());
+    merge->addImmediateOperand(control);
+    buildPoint->addInstruction(merge);
+}
+
 void Builder::createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock)
 {
     Instruction* branch = new Instruction(OpBranchConditional);
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 3bc8db2..5750b00 100755
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -99,12 +99,14 @@
     Id makeUintType(int width) { return makeIntegerType(width, false); }
     Id makeFloatType(int width);
     Id makeStructType(std::vector<Id>& members, const char*);
+    Id makeStructResultType(Id type0, Id type1);
     Id makeVectorType(Id component, int size);
     Id makeMatrixType(Id component, int cols, int rows);
     Id makeArrayType(Id element, unsigned size);
     Id makeRuntimeArray(Id element);
     Id makeFunctionType(Id returnType, std::vector<Id>& paramTypes);
     Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format);
+    Id makeSamplerType();
     Id makeSampledImageType(Id imageType);
 
     // For querying about types.
@@ -118,12 +120,14 @@
     Id getScalarTypeId(Id typeId) const;
     Id getContainedTypeId(Id typeId) const;
     Id getContainedTypeId(Id typeId, int) const;
+    StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); }
 
     bool isPointer(Id resultId)     const { return isPointerType(getTypeId(resultId)); }
     bool isScalar(Id resultId)      const { return isScalarType(getTypeId(resultId)); }
     bool isVector(Id resultId)      const { return isVectorType(getTypeId(resultId)); }
     bool isMatrix(Id resultId)      const { return isMatrixType(getTypeId(resultId)); }
     bool isAggregate(Id resultId)   const { return isAggregateType(getTypeId(resultId)); }
+    bool isBoolType(Id typeId)      const { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
 
     bool isPointerType(Id typeId)   const { return getTypeClass(typeId) == OpTypePointer; }
     bool isScalarType(Id typeId)    const { return getTypeClass(typeId) == OpTypeFloat  || getTypeClass(typeId) == OpTypeInt || getTypeClass(typeId) == OpTypeBool; }
@@ -140,6 +144,7 @@
     bool isConstant(Id resultId) const { return isConstantOpCode(getOpCode(resultId)); }
     bool isConstantScalar(Id resultId) const { return getOpCode(resultId) == OpConstant; }
     unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); }
+    StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); }
 
     int getTypeNumColumns(Id typeId) const
     {
@@ -172,18 +177,17 @@
     }
 
     // For making new constants (will return old constant if the requested one was already made).
-    Id makeBoolConstant(bool b);
-    Id makeIntConstant(Id typeId, unsigned value);
-    Id makeIntConstant(int i)         { return makeIntConstant(makeIntType(32),  (unsigned)i); }
-    Id makeUintConstant(unsigned u)   { return makeIntConstant(makeUintType(32),           u); }
-    Id makeFloatConstant(float f);
-    Id makeDoubleConstant(double d);
+    Id makeBoolConstant(bool b, bool specConstant = false);
+    Id makeIntConstant(int i, bool specConstant = false)         { return makeIntConstant(makeIntType(32),  (unsigned)i, specConstant); }
+    Id makeUintConstant(unsigned u, bool specConstant = false)   { return makeIntConstant(makeUintType(32),           u, specConstant); }
+    Id makeFloatConstant(float f, bool specConstant = false);
+    Id makeDoubleConstant(double d, bool specConstant = false);
 
     // Turn the array of constants into a proper spv constant of the requested type.
     Id makeCompositeConstant(Id type, std::vector<Id>& comps);
 
     // Methods for adding information outside the CFG.
-    void addEntryPoint(ExecutionModel, Function*, const char* name);
+    Instruction* addEntryPoint(ExecutionModel, Function*, const char* name);
     void addExecutionMode(Function*, ExecutionMode mode, int value1 = -1, int value2 = -1, int value3 = -1);
     void addName(Id, const char* name);
     void addMemberName(Id, int member, const char* name);
@@ -296,10 +300,11 @@
         Id gradX;
         Id gradY;
         Id sample;
+        Id comp;
     };
 
     // Select the correct texture operation based on all inputs, and emit the correct instruction
-    Id createTextureCall(Decoration precision, Id resultType, bool fetch, bool proj, const TextureParameters&);
+    Id createTextureCall(Decoration precision, Id resultType, bool fetch, bool proj, bool gather, const TextureParameters&);
 
     // Emit the OpTextureQuery* instruction that was passed in.
     // Figure out the right return value and type, and return it.
@@ -426,13 +431,13 @@
     //
 
     struct AccessChain {
-        Id base;                     // for l-values, pointer to the base object, for r-values, the base object
+        Id base;                       // for l-values, pointer to the base object, for r-values, the base object
         std::vector<Id> indexChain;
-        Id instr;                    // the instruction that generates this access chain
-        std::vector<unsigned> swizzle;
-        Id component;                // a dynamic component index, can coexist with a swizzle, done after the swizzle
-        Id preSwizzleBaseType;       // dereferenced type, before swizzle or component is applied; NoType unless a swizzle or component is present
-        bool isRValue;
+        Id instr;                      // cache the instruction that generates this access chain
+        std::vector<unsigned> swizzle; // each std::vector element selects the next GLSL component number
+        Id component;                  // a dynamic component index, can coexist with a swizzle, done after the swizzle, NoResult if not present
+        Id preSwizzleBaseType;         // dereferenced type, before swizzle or component is applied; NoType unless a swizzle or component is present
+        bool isRValue;                 // true if 'base' is an r-value, otherwise, base is an l-value
     };
 
     //
@@ -490,15 +495,17 @@
     void dump(std::vector<unsigned int>&) const;
 
 protected:
-    Id findScalarConstant(Op typeClass, Id typeId, unsigned value) const;
-    Id findScalarConstant(Op typeClass, Id typeId, unsigned v1, unsigned v2) const;
+    Id makeIntConstant(Id typeId, unsigned value, bool specConstant);
+    Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) const;
+    Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const;
     Id findCompositeConstant(Op typeClass, std::vector<Id>& comps) const;
     Id collapseAccessChain();
+    void transferAccessChainSwizzle(bool dynamic);
     void simplifyAccessChainSwizzle();
-    void mergeAccessChainSwizzle();
     void createAndSetNoPredecessorBlock(const char*);
     void createBranch(Block* block);
-    void createMerge(Op, Block*, unsigned int control);
+    void createSelectionMerge(Block* mergeBlock, unsigned int control);
+    void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control);
     void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock);
     void dumpInstructions(std::vector<unsigned int>&, const std::vector<Instruction*>&) const;
 
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index 9df69e9..8662f03 100755
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -48,15 +48,17 @@
 #include <sstream>
 #include <cstring>
 
+namespace spv {
+    // Include C-based headers that don't have a namespace
+    #include "SPIRV/GLSL.std.450.h"
+}
+const char* GlslStd450DebugNames[spv::GLSLstd450Count];
+
 #include "disassemble.h"
 #include "doc.h"
 
 namespace spv {
 
-#include "GLSL.std.450.h"
-
-const char* GlslStd450DebugNames[spv::GLSLstd450Count];
-
 void Kill(std::ostream& out, const char* message)
 {
     out << std::endl << "Disassembly failed: " << message << std::endl;
@@ -92,7 +94,7 @@
     void outputMask(OperandClass operandClass, unsigned mask);
     void disassembleImmediates(int numOperands);
     void disassembleIds(int numOperands);
-    void disassembleString();
+    int disassembleString();
     void disassembleInstruction(Id resultId, Id typeId, Op opCode, int numOperands);
 
     // Data
@@ -128,10 +130,10 @@
     }
 
     // Version
-    out << "// Module Version " << stream[word++] << std::endl;
+    out << "// Module Version " << std::hex << stream[word++] << std::endl;
 
     // Generator's magic number
-    out << "// Generated by (magic number): " << std::setbase(16) << stream[word++] << std::setbase(10) << std::endl;
+    out << "// Generated by (magic number): " << std::hex << stream[word++] << std::dec << std::endl;
 
     // Result <id> bound
     bound = stream[word++];
@@ -280,15 +282,18 @@
     }
 }
 
-void SpirvStream::disassembleString()
+// return the number of operands consumed by the string
+int SpirvStream::disassembleString()
 {
+    int startWord = word;
+
     out << " \"";
 
-    char* wordString;
+    const char* wordString;
     bool done = false;
     do {
         unsigned int content = stream[word];
-        wordString = (char*)&content;
+        wordString = (const char*)&content;
         for (int charCount = 0; charCount < 4; ++charCount) {
             if (*wordString == 0) {
                 done = true;
@@ -300,6 +305,8 @@
     } while (! done);
 
     out << "\"";
+
+    return word - startWord;
 }
 
 void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands)
@@ -389,15 +396,15 @@
         case OperandScope:
         case OperandMemorySemantics:
             disassembleIds(1);
+            --numOperands;
             // Get names for printing "(XXX)" for readability, *after* this id
             if (opCode == OpName)
                 idDescriptor[stream[word - 1]] = (const char*)(&stream[word]);
             break;
-        case OperandOptionalId:
         case OperandVariableIds:
             disassembleIds(numOperands);
             return;
-        case OperandOptionalImage:
+        case OperandImageOperands:
             outputMask(OperandImageOperands, stream[word++]);
             --numOperands;
             disassembleIds(numOperands);
@@ -440,6 +447,7 @@
             return;
         case OperandLiteralNumber:
             disassembleImmediates(1);
+            --numOperands;
             if (opCode == OpExtInst) {
                 ExtInstSet extInstSet = GLSL450Inst;
                 if (0 == memcmp("OpenCL", (const char*)(idDescriptor[stream[word-2]].c_str()), 6)) {
@@ -447,15 +455,16 @@
                 }
                 unsigned entrypoint = stream[word - 1];
                 if (extInstSet == GLSL450Inst) {
-                    if (entrypoint < spv::GLSLstd450Count) {
+                    if (entrypoint < GLSLstd450Count) {
                         out << "(" << GlslStd450DebugNames[entrypoint] << ")";
                     }
                 }
             }
             break;
+        case OperandOptionalLiteralString:
         case OperandLiteralString:
-            disassembleString();
-            return;
+            numOperands -= disassembleString();
+            break;
         default:
             assert(operandClass >= OperandSource && operandClass < OperandOpcode);
 
@@ -463,10 +472,9 @@
                 outputMask(operandClass, stream[word++]);
             else
                 out << OperandClassParams[operandClass].getName(stream[word++]);
-
+            --numOperands;
             break;
         }
-        --numOperands;
     }
 
     return;
@@ -508,9 +516,9 @@
     names[GLSLstd450Exp2]                    = "Exp2";
     names[GLSLstd450Log2]                    = "Log2";
     names[GLSLstd450Sqrt]                    = "Sqrt";
-    names[GLSLstd450InverseSqrt]             = "Inversesqrt";
+    names[GLSLstd450InverseSqrt]             = "InverseSqrt";
     names[GLSLstd450Determinant]             = "Determinant";
-    names[GLSLstd450MatrixInverse]           = "Inverse";
+    names[GLSLstd450MatrixInverse]           = "MatrixInverse";
     names[GLSLstd450Modf]                    = "Modf";
     names[GLSLstd450ModfStruct]              = "ModfStruct";
     names[GLSLstd450FMin]                    = "FMin";
@@ -522,9 +530,10 @@
     names[GLSLstd450FClamp]                  = "FClamp";
     names[GLSLstd450SClamp]                  = "SClamp";
     names[GLSLstd450UClamp]                  = "UClamp";
-    names[GLSLstd450Mix]                     = "Mix";
+    names[GLSLstd450FMix]                    = "FMix";
+    names[GLSLstd450IMix]                    = "IMix";
     names[GLSLstd450Step]                    = "Step";
-    names[GLSLstd450SmoothStep]              = "Smoothstep";
+    names[GLSLstd450SmoothStep]              = "SmoothStep";
     names[GLSLstd450Fma]                     = "Fma";
     names[GLSLstd450Frexp]                   = "Frexp";
     names[GLSLstd450FrexpStruct]             = "FrexpStruct";
@@ -545,15 +554,12 @@
     names[GLSLstd450Distance]                = "Distance";
     names[GLSLstd450Cross]                   = "Cross";
     names[GLSLstd450Normalize]               = "Normalize";
-    names[GLSLstd450FaceForward]             = "Faceforward";
+    names[GLSLstd450FaceForward]             = "FaceForward";
     names[GLSLstd450Reflect]                 = "Reflect";
     names[GLSLstd450Refract]                 = "Refract";
-    names[GLSLstd450AddCarry]                = "UaddCarry";
-    names[GLSLstd450SubBorrow]               = "UsubBorrow";
-    names[GLSLstd450MulExtended]             = "UmulExtended";
-    names[GLSLstd450FindILSB]                = "FindILsb";
-    names[GLSLstd450FindSMSB]                = "FindSMsb";
-    names[GLSLstd450FindUMSB]                = "FindUMsb";
+    names[GLSLstd450FindILsb]                = "FindILsb";
+    names[GLSLstd450FindSMsb]                = "FindSMsb";
+    names[GLSLstd450FindUMsb]                = "FindUMsb";
     names[GLSLstd450InterpolateAtCentroid]   = "InterpolateAtCentroid";
     names[GLSLstd450InterpolateAtSample]     = "InterpolateAtSample";
     names[GLSLstd450InterpolateAtOffset]     = "InterpolateAtOffset";
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index ff0d780..64a55f9 100755
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -64,7 +64,7 @@
 //    (for non-sparse mask enums, this is the number of enumurants)
 //
 
-const int SourceLanguageCeiling = 4;
+const int SourceLanguageCeiling = 5;
 
 const char* SourceString(int source)
 {
@@ -72,7 +72,8 @@
     case 0:  return "Unknown";
     case 1:  return "ESSL";
     case 2:  return "GLSL";
-    case 3:  return "OpenCL";
+    case 3:  return "OpenCL_C";
+    case 4:  return "OpenCL_CPP";
 
     case SourceLanguageCeiling:
     default: return "Bad";
@@ -125,7 +126,7 @@
     }
 }
 
-const int ExecutionModeCeiling = 32;
+const int ExecutionModeCeiling = 33;
 
 const char* ExecutionModeString(int mode)
 {
@@ -143,7 +144,7 @@
     case 10: return "PointMode";
     case 11: return "Xfb";
     case 12: return "DepthReplacing";
-    case 13: return "DepthAny";
+    case 13: return "Bad";
     case 14: return "DepthGreater";
     case 15: return "DepthLess";
     case 16: return "DepthUnchanged";
@@ -152,16 +153,17 @@
     case 19: return "InputPoints";
     case 20: return "InputLines";
     case 21: return "InputLinesAdjacency";
-    case 22: return "InputTriangles";
+    case 22: return "Triangles";
     case 23: return "InputTrianglesAdjacency";
-    case 24: return "InputQuads";
-    case 25: return "InputIsolines";
+    case 24: return "Quads";
+    case 25: return "Isolines";
     case 26: return "OutputVertices";
     case 27: return "OutputPoints";
     case 28: return "OutputLineStrip";
     case 29: return "OutputTriangleStrip";
     case 30: return "VecTypeHint";
     case 31: return "ContractionOff";
+    case 32: return "Bad";
 
     case ExecutionModeCeiling:
     default: return "Bad";
@@ -177,12 +179,12 @@
     case 1:  return "Input";
     case 2:  return "Uniform";
     case 3:  return "Output";
-    case 4:  return "WorkgroupLocal";
-    case 5:  return "WorkgroupGlobal";
-    case 6:  return "PrivateGlobal";
+    case 4:  return "Workgroup";
+    case 5:  return "CrossWorkgroup";
+    case 6:  return "Private";
     case 7:  return "Function";
     case 8:  return "Generic";
-    case 9:  return "Bad";
+    case 9:  return "PushConstant";
     case 10: return "AtomicCounter";
     case 11: return "Image";
 
@@ -191,7 +193,7 @@
     }
 }
 
-const int DecorationCeiling = 42;
+const int DecorationCeiling = 45;
 
 const char* DecorationString(int decoration)
 {
@@ -208,8 +210,8 @@
     case 9:  return "GLSLPacked";
     case 10: return "CPacked";
     case 11: return "BuiltIn";
-    case 12: return "Smooth";
-    case 13: return "Noperspective";
+    case 12: return "Bad";
+    case 13: return "NoPerspective";
     case 14: return "Flat";
     case 15: return "Patch";
     case 16: return "Centroid";
@@ -220,10 +222,10 @@
     case 21: return "Volatile";
     case 22: return "Constant";
     case 23: return "Coherent";
-    case 24: return "Nonwritable";
-    case 25: return "Nonreadable";
+    case 24: return "NonWritable";
+    case 25: return "NonReadable";
     case 26: return "Uniform";
-    case 27: return "NoStaticUse";
+    case 27: return "Bad";
     case 28: return "SaturatedConversion";
     case 29: return "Stream";
     case 30: return "Location";
@@ -238,13 +240,16 @@
     case 39: return "FP Rounding Mode";
     case 40: return "FP Fast Math Mode";
     case 41: return "Linkage Attributes";
+    case 42: return "NoContraction";
+    case 43: return "InputAttachmentIndex";
+    case 44: return "Alignment";
 
     case DecorationCeiling:
     default:  return "Bad";
     }
 }
 
-const int BuiltInCeiling = 42;
+const int BuiltInCeiling = 44;
 
 const char* BuiltInString(int builtIn)
 {
@@ -270,7 +275,7 @@
     case 18: return "SampleId";
     case 19: return "SamplePosition";
     case 20: return "SampleMask";
-    case 21: return "FragColor";
+    case 21: return "Bad";
     case 22: return "FragDepth";
     case 23: return "HelperInvocation";
     case 24: return "NumWorkgroups";
@@ -284,20 +289,22 @@
     case 32: return "EnqueuedWorkgroupSize";
     case 33: return "GlobalOffset";
     case 34: return "GlobalLinearId";
-    case 35: return "WorkgroupLinearId";
+    case 35: return "Bad";
     case 36: return "SubgroupSize";
     case 37: return "SubgroupMaxSize";
     case 38: return "NumSubgroups";
     case 39: return "NumEnqueuedSubgroups";
     case 40: return "SubgroupId";
     case 41: return "SubgroupLocalInvocationId";
+    case 42: return "VertexIndex";                 // TBD: put next to VertexId?
+    case 43: return "InstanceIndex";               // TBD: put next to InstanceId?
 
     case BuiltInCeiling:
     default: return "Bad";
     }
 }
 
-const int DimensionCeiling = 6;
+const int DimensionCeiling = 7;
 
 const char* DimensionString(int dim)
 {
@@ -308,6 +315,7 @@
     case 3:  return "Cube";
     case 4:  return "Rect";
     case 5:  return "Buffer";
+    case 6:  return "SubpassData";
 
     case DimensionCeiling:
     default: return "Bad";
@@ -438,7 +446,7 @@
     }
 }
 
-const int ImageChannelDataTypeCeiling = 16;
+const int ImageChannelDataTypeCeiling = 17;
 
 const char* ImageChannelDataTypeString(int type)
 {
@@ -460,6 +468,7 @@
     case 13: return "HalfFloat";
     case 14: return "Float";
     case 15: return "UnormInt24";
+    case 16: return "UnormInt101010_2";
 
     case ImageChannelDataTypeCeiling:
     default:
@@ -467,7 +476,7 @@
     }
 }
 
-const int ImageOperandsCeiling = 7;
+const int ImageOperandsCeiling = 8;
 
 const char* ImageOperandsString(int format)
 {
@@ -479,6 +488,7 @@
     case 4: return "Offset";
     case 5: return "ConstOffsets";
     case 6: return "Sample";
+    case 7: return "MinLod";
 
     case ImageOperandsCeiling:
     default:
@@ -604,35 +614,38 @@
     }
 }
 
-const int MemorySemanticsCeiling = 10;
+const int MemorySemanticsCeiling = 12;
 
 const char* MemorySemanticsString(int mem)
 {
+    // Note: No bits set (None) means "Relaxed"
     switch (mem) {
-    case 0: return "Relaxed";
-    case 1: return "SequentiallyConsistent";
-    case 2: return "Acquire";
-    case 3: return "Release";
-
-    case 4: return "UniformMemory";
-    case 5: return "SubgroupMemory";
-    case 6: return "WorkgroupLocalMemory";
-    case 7: return "WorkgroupGlobalMemory";
-    case 8: return "AtomicCounterMemory";
-    case 9: return "ImageMemory";
+    case 0: return "Bad"; // Note: this is a placeholder for 'Consume'
+    case 1: return "Acquire";
+    case 2: return "Release";
+    case 3: return "AcquireRelease";
+    case 4: return "SequentiallyConsistent";
+    case 5: return "Bad"; // Note: reserved for future expansion
+    case 6: return "UniformMemory";
+    case 7: return "SubgroupMemory";
+    case 8: return "WorkgroupMemory";
+    case 9: return "CrossWorkgroupMemory";
+    case 10: return "AtomicCounterMemory";
+    case 11: return "ImageMemory";
 
     case MemorySemanticsCeiling:
     default:     return "Bad";
     }
 }
 
-const int MemoryAccessCeiling = 2;
+const int MemoryAccessCeiling = 3;
 
 const char* MemoryAccessString(int mem)
 {
     switch (mem) {
     case 0:  return "Volatile";
     case 1:  return "Aligned";
+    case 2:  return "Nontemporal";
 
     case MemoryAccessCeiling:
     default: return "Bad";
@@ -699,7 +712,7 @@
     }
 }
 
-const int CapabilityCeiling = 36;
+const int CapabilityCeiling = 57;
 
 const char* CapabilityString(int info)
 {
@@ -721,7 +734,7 @@
     case 13: return "ImageBasic";
     case 14: return "ImageReadWrite";
     case 15: return "ImageMipmap";
-    case 16: return "ImageSRGBWrite";
+    case 16: return "Bad";
     case 17: return "Pipes";
     case 18: return "Groups";
     case 19: return "DeviceEnqueue";
@@ -731,7 +744,7 @@
     case 23: return "TessellationPointSize";
     case 24: return "GeometryPointSize";
     case 25: return "ImageGatherExtended"; 
-    case 26: return "StorageImageExtendedFormats";
+    case 26: return "Bad";
     case 27: return "StorageImageMultisample";
     case 28: return "UniformBufferArrayDynamicIndexing";
     case 29: return "SampledImageArrayDynamicIndexing";
@@ -741,6 +754,27 @@
     case 33: return "CullDistance";
     case 34: return "ImageCubeArray";
     case 35: return "SampleRateShading";
+    case 36: return "ImageRect";
+    case 37: return "SampledRect";
+    case 38: return "GenericPointer";
+    case 39: return "Int8";
+    case 40: return "InputAttachment";
+    case 41: return "SparseResidency";
+    case 42: return "MinLod";
+    case 43: return "Sampled1D";
+    case 44: return "Image1D";
+    case 45: return "SampledCubeArray";
+    case 46: return "SampledBuffer";
+    case 47: return "ImageBuffer";
+    case 48: return "ImageMSArray";
+    case 49: return "StorageImageExtendedFormats";
+    case 50: return "ImageQuery";
+    case 51: return "DerivativeControl";
+    case 52: return "InterpolationFunction";
+    case 53: return "TransformFeedback";
+    case 54: return "GeometryStreams";
+    case 55: return "StorageImageReadWithoutFormat";
+    case 56: return "StorageImageWriteWithoutFormat";
 
     case CapabilityCeiling:
     default: return "Bad";
@@ -752,7 +786,7 @@
     switch (op) {
     case 0:   return "OpNop";
     case 1:   return "OpUndef";
-    case 2:   return "Bad";
+    case 2:   return "OpSourceContinued";
     case 3:   return "OpSource";
     case 4:   return "OpSourceExtension";
     case 5:   return "OpName";
@@ -789,7 +823,7 @@
     case 36:  return "OpTypeReserveId";
     case 37:  return "OpTypeQueue";
     case 38:  return "OpTypePipe";
-    case 39:  return "Bad";
+    case 39:  return "OpTypeForwardPointer";
     case 40:  return "Bad";
     case 41:  return "OpConstantTrue";
     case 42:  return "OpConstantFalse";
@@ -820,7 +854,7 @@
     case 67:  return "OpPtrAccessChain";
     case 68:  return "OpArrayLength";
     case 69:  return "OpGenericPtrMemSemantics";
-    case 70:  return "Bad";
+    case 70:  return "OpInBoundsPtrAccessChain";
     case 71:  return "OpDecorate";
     case 72:  return "OpMemberDecorate";
     case 73:  return "OpDecorationGroup";
@@ -850,7 +884,7 @@
     case 97:  return "OpImageDrefGather";
     case 98:  return "OpImageRead";
     case 99:  return "OpImageWrite";
-    case 100: return "OpImageQueryDim";
+    case 100: return "OpImage";
     case 101: return "OpImageQueryFormat";
     case 102: return "OpImageQueryOrder";
     case 103: return "OpImageQuerySizeLod";
@@ -901,8 +935,8 @@
     case 148: return "OpDot";
     case 149: return "OpIAddCarry";
     case 150: return "OpISubBorrow";
-    case 151: return "OpIMulExtended";
-    case 152: return "Bad";
+    case 151: return "OpUMulExtended";
+    case 152: return "OpSMulExtended";
     case 153: return "Bad";
     case 154: return "OpAny";
     case 155: return "OpAll";
@@ -1009,8 +1043,8 @@
     case 256: return "OpLifetimeStart";
     case 257: return "OpLifetimeStop";
     case 258: return "Bad";
-    case 259: return "OpAsyncGroupCopy";
-    case 260: return "OpWaitGroupEvents";
+    case 259: return "OpGroupAsyncCopy";
+    case 260: return "OpGroupWaitEvents";
     case 261: return "OpGroupAll";
     case 262: return "OpGroupAny";
     case 263: return "OpGroupBroadcast";
@@ -1055,6 +1089,21 @@
     case 302: return "OpCaptureEventProfilingInfo";
     case 303: return "OpGetDefaultQueue";
     case 304: return "OpBuildNDRange";
+    case 305: return "OpImageSparseSampleImplicitLod";
+    case 306: return "OpImageSparseSampleExplicitLod";
+    case 307: return "OpImageSparseSampleDrefImplicitLod";
+    case 308: return "OpImageSparseSampleDrefExplicitLod";
+    case 309: return "OpImageSparseSampleProjImplicitLod";
+    case 310: return "OpImageSparseSampleProjExplicitLod";
+    case 311: return "OpImageSparseSampleProjDrefImplicitLod";
+    case 312: return "OpImageSparseSampleProjDrefExplicitLod";
+    case 313: return "OpImageSparseFetch";
+    case 314: return "OpImageSparseGather";
+    case 315: return "OpImageSparseDrefGather";
+    case 316: return "OpImageSparseTexelsResident";
+    case 317: return "OpNoLine";
+    case 318: return "OpAtomicFlagTestAndSet";
+    case 319: return "OpAtomicFlagClear";
 
     case OpcodeCeiling:
     default:
@@ -1113,6 +1162,7 @@
 
     InstructionDesc[OpNop].setResultAndType(false, false);
     InstructionDesc[OpSource].setResultAndType(false, false);
+    InstructionDesc[OpSourceContinued].setResultAndType(false, false);
     InstructionDesc[OpSourceExtension].setResultAndType(false, false);
     InstructionDesc[OpExtension].setResultAndType(false, false);
     InstructionDesc[OpExtInstImport].setResultAndType(true, false);
@@ -1134,6 +1184,7 @@
     InstructionDesc[OpTypeStruct].setResultAndType(true, false);
     InstructionDesc[OpTypeOpaque].setResultAndType(true, false);
     InstructionDesc[OpTypePointer].setResultAndType(true, false);
+    InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false);
     InstructionDesc[OpTypeFunction].setResultAndType(true, false);
     InstructionDesc[OpTypeEvent].setResultAndType(true, false);
     InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false);
@@ -1152,6 +1203,7 @@
     InstructionDesc[OpMemberName].setResultAndType(false, false);
     InstructionDesc[OpString].setResultAndType(true, false);
     InstructionDesc[OpLine].setResultAndType(false, false);
+    InstructionDesc[OpNoLine].setResultAndType(false, false);
     InstructionDesc[OpCopyMemory].setResultAndType(false, false);
     InstructionDesc[OpCopyMemorySized].setResultAndType(false, false);
     InstructionDesc[OpEmitVertex].setResultAndType(false, false);
@@ -1181,11 +1233,12 @@
     InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false);
     InstructionDesc[OpRetainEvent].setResultAndType(false, false);
     InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
-    InstructionDesc[OpWaitGroupEvents].setResultAndType(false, false);
+    InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
+    InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
 
     // Specific additional context-dependent operands
 
-    ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "Number of <<Invocation,invocations>>");
+    ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
 
     ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'");
     ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'");
@@ -1198,24 +1251,26 @@
     ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'");
     ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'");
 
-    DecorationOperands[DecorationStream].push(OperandLiteralNumber, "Stream number");
-    DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "Location");
-    DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "Component within a vector");
-    DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "Index");
-    DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "Binding point");
-    DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "Descriptor set");
-    DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "Byte offset");
-    DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "XFB buffer number");
-    DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "XFB stride");
-    DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "Array stride");
-    DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "Matrix stride");
+    DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'");
+    DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'");
+    DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'");
+    DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'");
+    DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'");
+    DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'");
+    DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'");
+    DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'");
+    DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'");
+    DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'");
+    DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'");
     DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>");
-    DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "floating-point rounding mode");
-    DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "fast-math mode");
-    DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "name");
-    DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "linkage type");
-    DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "function parameter attribute");
-    DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "Specialization Constant ID");
+    DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'");
+    DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'");
+    DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'");
+    DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'");
+    DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'");
+    DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'");
+    DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
+    DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
 
     OperandClassParams[OperandSource].set(SourceLanguageCeiling, SourceString, 0);
     OperandClassParams[OperandExecutionModel].set(ExecutionModelCeiling, ExecutionModelString, ExecutionModelParams);
@@ -1251,6 +1306,54 @@
     OperandClassParams[OperandCapability].set(CapabilityCeiling, CapabilityString, CapabilityParams);
     OperandClassParams[OperandOpcode].set(OpcodeCeiling, OpcodeString, 0);
 
+    CapabilityParams[CapabilityShader].caps.push_back(CapabilityMatrix);
+    CapabilityParams[CapabilityGeometry].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityTessellation].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityVector16].caps.push_back(CapabilityKernel);
+    CapabilityParams[CapabilityFloat16Buffer].caps.push_back(CapabilityKernel);
+    CapabilityParams[CapabilityFloat16].caps.push_back(CapabilityFloat16Buffer);
+    CapabilityParams[CapabilityInt64Atomics].caps.push_back(CapabilityInt64);
+    CapabilityParams[CapabilityImageBasic].caps.push_back(CapabilityKernel);
+    CapabilityParams[CapabilityImageReadWrite].caps.push_back(CapabilityImageBasic);
+    CapabilityParams[CapabilityImageMipmap].caps.push_back(CapabilityImageBasic);
+    CapabilityParams[CapabilityPipes].caps.push_back(CapabilityKernel);
+    CapabilityParams[CapabilityDeviceEnqueue].caps.push_back(CapabilityKernel);
+    CapabilityParams[CapabilityLiteralSampler].caps.push_back(CapabilityKernel);
+    CapabilityParams[CapabilityAtomicStorage].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilitySampleRateShading].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityTessellationPointSize].caps.push_back(CapabilityTessellation);
+    CapabilityParams[CapabilityGeometryPointSize].caps.push_back(CapabilityGeometry);
+    CapabilityParams[CapabilityImageGatherExtended].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityStorageImageExtendedFormats].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityStorageImageMultisample].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityUniformBufferArrayDynamicIndexing].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilitySampledImageArrayDynamicIndexing].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityStorageBufferArrayDynamicIndexing].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityStorageImageArrayDynamicIndexing].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityClipDistance].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityCullDistance].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityGenericPointer].caps.push_back(CapabilityAddresses);
+    CapabilityParams[CapabilityInt8].caps.push_back(CapabilityKernel);
+    CapabilityParams[CapabilityInputAttachment].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityMinLod].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilitySparseResidency].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilitySampled1D].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilitySampledRect].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilitySampledBuffer].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilitySampledCubeArray].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityImageMSArray].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityImage1D].caps.push_back(CapabilitySampled1D);
+    CapabilityParams[CapabilityImageRect].caps.push_back(CapabilitySampledRect);
+    CapabilityParams[CapabilityImageBuffer].caps.push_back(CapabilitySampledBuffer);
+    CapabilityParams[CapabilityImageCubeArray].caps.push_back(CapabilitySampledCubeArray);
+    CapabilityParams[CapabilityImageQuery].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityDerivativeControl].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityInterpolationFunction].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityTransformFeedback].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityGeometryStreams].caps.push_back(CapabilityGeometry);
+    CapabilityParams[CapabilityStorageImageReadWithoutFormat].caps.push_back(CapabilityShader);
+    CapabilityParams[CapabilityStorageImageWriteWithoutFormat].caps.push_back(CapabilityShader);
+
     AddressingParams[AddressingModelPhysical32].caps.push_back(CapabilityAddresses);
     AddressingParams[AddressingModelPhysical64].caps.push_back(CapabilityAddresses);
 
@@ -1258,6 +1361,9 @@
     MemoryParams[MemoryModelGLSL450].caps.push_back(CapabilityShader);
     MemoryParams[MemoryModelOpenCL].caps.push_back(CapabilityKernel);
 
+    MemorySemanticsParams[MemorySemanticsUniformMemoryShift].caps.push_back(CapabilityShader);
+    MemorySemanticsParams[MemorySemanticsAtomicCounterMemoryShift].caps.push_back(CapabilityShader);
+
     ExecutionModelParams[ExecutionModelVertex].caps.push_back(CapabilityShader);
     ExecutionModelParams[ExecutionModelTessellationControl].caps.push_back(CapabilityTessellation);
     ExecutionModelParams[ExecutionModelTessellationEvaluation].caps.push_back(CapabilityTessellation);
@@ -1270,10 +1376,10 @@
     StorageParams[StorageClassInput].caps.push_back(CapabilityShader);
     StorageParams[StorageClassUniform].caps.push_back(CapabilityShader);
     StorageParams[StorageClassOutput].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassPrivateGlobal].caps.push_back(CapabilityShader);
+    StorageParams[StorageClassPrivate].caps.push_back(CapabilityShader);
     StorageParams[StorageClassGeneric].caps.push_back(CapabilityKernel);
     StorageParams[StorageClassAtomicCounter].caps.push_back(CapabilityAtomicStorage);
-
+    StorageParams[StorageClassPushConstant].caps.push_back(CapabilityShader);
 
     // Sampler Filter & Addressing mode capabilities
     SamplerAddressingModeParams[SamplerAddressingModeNone].caps.push_back(CapabilityKernel);
@@ -1286,9 +1392,57 @@
     SamplerFilterModeParams[SamplerFilterModeLinear].caps.push_back(CapabilityKernel);
 
     // image format capabilities
-    for (int i = 0; i < ImageFormatCeiling; ++i) {
-        ImageFormatParams[i].caps.push_back(CapabilityShader);
-    }
+
+    // ES/Desktop float
+    ImageFormatParams[ImageFormatRgba32f].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatRgba16f].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatR32f].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatRgba8].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatRgba8Snorm].caps.push_back(CapabilityShader);
+
+    // Desktop float
+    ImageFormatParams[ImageFormatRg32f].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg16f].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR11fG11fB10f].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR16f].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRgba16].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRgb10A2].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg16].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg8].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR16].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR8].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRgba16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
+
+    // ES/Desktop int
+    ImageFormatParams[ImageFormatRgba32i].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatRgba16i].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatRgba8i].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatR32i].caps.push_back(CapabilityShader);
+
+    // Desktop int
+    ImageFormatParams[ImageFormatRg32i].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg16i].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg8i].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR16i].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR8i].caps.push_back(CapabilityStorageImageExtendedFormats);
+
+    // ES/Desktop uint
+    ImageFormatParams[ImageFormatRgba32ui].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatRgba16ui].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatRgba8ui].caps.push_back(CapabilityShader);
+    ImageFormatParams[ImageFormatR32ui].caps.push_back(CapabilityShader);
+
+    // Desktop uint
+    ImageFormatParams[ImageFormatRgb10a2ui].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg32ui].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg16ui].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatRg8ui].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR16ui].caps.push_back(CapabilityStorageImageExtendedFormats);
+    ImageFormatParams[ImageFormatR8ui].caps.push_back(CapabilityStorageImageExtendedFormats);
 
     // image channel order capabilities
     for (int i = 0; i < ImageChannelOrderCeiling; ++i) {
@@ -1303,6 +1457,7 @@
     // image lookup operands
     ImageOperandsParams[ImageOperandsBiasShift].caps.push_back(CapabilityShader);
     ImageOperandsParams[ImageOperandsOffsetShift].caps.push_back(CapabilityImageGatherExtended);
+    ImageOperandsParams[ImageOperandsMinLodShift].caps.push_back(CapabilityMinLod);
 
     // fast math flags capabilities
     for (int i = 0; i < FPFastMathCeiling; ++i) {
@@ -1340,9 +1495,8 @@
     ExecutionModeParams[ExecutionModeOriginLowerLeft].caps.push_back(CapabilityShader);
     ExecutionModeParams[ExecutionModeEarlyFragmentTests].caps.push_back(CapabilityShader);
     ExecutionModeParams[ExecutionModePointMode].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeXfb].caps.push_back(CapabilityShader);
+    ExecutionModeParams[ExecutionModeXfb].caps.push_back(CapabilityTransformFeedback);
     ExecutionModeParams[ExecutionModeDepthReplacing].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeDepthAny].caps.push_back(CapabilityShader);
     ExecutionModeParams[ExecutionModeDepthGreater].caps.push_back(CapabilityShader);
     ExecutionModeParams[ExecutionModeDepthLess].caps.push_back(CapabilityShader);
     ExecutionModeParams[ExecutionModeDepthUnchanged].caps.push_back(CapabilityShader);
@@ -1350,11 +1504,11 @@
     ExecutionModeParams[ExecutionModeInputPoints].caps.push_back(CapabilityGeometry);
     ExecutionModeParams[ExecutionModeInputLines].caps.push_back(CapabilityGeometry);
     ExecutionModeParams[ExecutionModeInputLinesAdjacency].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeInputTriangles].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeInputTriangles].caps.push_back(CapabilityTessellation);
+    ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityGeometry);
+    ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityTessellation);
     ExecutionModeParams[ExecutionModeInputTrianglesAdjacency].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeInputQuads].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeInputIsolines].caps.push_back(CapabilityTessellation);
+    ExecutionModeParams[ExecutionModeQuads].caps.push_back(CapabilityTessellation);
+    ExecutionModeParams[ExecutionModeIsolines].caps.push_back(CapabilityTessellation);
     ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityGeometry);
     ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityTessellation);
     ExecutionModeParams[ExecutionModeOutputPoints].caps.push_back(CapabilityGeometry);
@@ -1370,8 +1524,7 @@
     DecorationParams[DecorationColMajor].caps.push_back(CapabilityMatrix);
     DecorationParams[DecorationGLSLShared].caps.push_back(CapabilityShader);
     DecorationParams[DecorationGLSLPacked].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationSmooth].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationNoperspective].caps.push_back(CapabilityShader);
+    DecorationParams[DecorationNoPerspective].caps.push_back(CapabilityShader);
     DecorationParams[DecorationFlat].caps.push_back(CapabilityShader);
     DecorationParams[DecorationPatch].caps.push_back(CapabilityTessellation);
     DecorationParams[DecorationCentroid].caps.push_back(CapabilityShader);
@@ -1381,14 +1534,14 @@
     DecorationParams[DecorationUniform].caps.push_back(CapabilityShader);
     DecorationParams[DecorationCPacked].caps.push_back(CapabilityKernel);
     DecorationParams[DecorationSaturatedConversion].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationStream].caps.push_back(CapabilityGeometry);
+    DecorationParams[DecorationStream].caps.push_back(CapabilityGeometryStreams);
     DecorationParams[DecorationLocation].caps.push_back(CapabilityShader);
     DecorationParams[DecorationComponent].caps.push_back(CapabilityShader);
     DecorationParams[DecorationIndex].caps.push_back(CapabilityShader);
     DecorationParams[DecorationBinding].caps.push_back(CapabilityShader);
     DecorationParams[DecorationDescriptorSet].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationXfbBuffer].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationXfbStride].caps.push_back(CapabilityShader);
+    DecorationParams[DecorationXfbBuffer].caps.push_back(CapabilityTransformFeedback);
+    DecorationParams[DecorationXfbStride].caps.push_back(CapabilityTransformFeedback);
     DecorationParams[DecorationArrayStride].caps.push_back(CapabilityShader);
     DecorationParams[DecorationMatrixStride].caps.push_back(CapabilityShader);
     DecorationParams[DecorationBuiltIn].caps.push_back(CapabilityShader);
@@ -1397,13 +1550,27 @@
     DecorationParams[DecorationFPFastMathMode].caps.push_back(CapabilityKernel);
     DecorationParams[DecorationLinkageAttributes].caps.push_back(CapabilityLinkage);
     DecorationParams[DecorationSpecId].caps.push_back(CapabilityShader);
+    DecorationParams[DecorationNoContraction].caps.push_back(CapabilityShader);
+    DecorationParams[DecorationInputAttachmentIndex].caps.push_back(CapabilityInputAttachment);
+    DecorationParams[DecorationAlignment].caps.push_back(CapabilityKernel);
 
     BuiltInParams[BuiltInPosition].caps.push_back(CapabilityShader);
     BuiltInParams[BuiltInPointSize].caps.push_back(CapabilityShader);
     BuiltInParams[BuiltInClipDistance].caps.push_back(CapabilityShader);
     BuiltInParams[BuiltInCullDistance].caps.push_back(CapabilityShader);
+
     BuiltInParams[BuiltInVertexId].caps.push_back(CapabilityShader);
+    BuiltInParams[BuiltInVertexId].desc = "Vertex ID, which takes on values 0, 1, 2, . . . .";
+
     BuiltInParams[BuiltInInstanceId].caps.push_back(CapabilityShader);
+    BuiltInParams[BuiltInInstanceId].desc = "Instance ID, which takes on values 0, 1, 2, . . . .";
+
+    BuiltInParams[BuiltInVertexIndex].caps.push_back(CapabilityShader);
+    BuiltInParams[BuiltInVertexIndex].desc = "Vertex index, which takes on values base, base+1, base+2, . . . .";
+
+    BuiltInParams[BuiltInInstanceIndex].caps.push_back(CapabilityShader);
+    BuiltInParams[BuiltInInstanceIndex].desc = "Instance index, which takes on values base, base+1, base+2, . . . .";
+
     BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityGeometry);
     BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityTessellation);
     BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityGeometry);
@@ -1420,16 +1587,13 @@
     BuiltInParams[BuiltInSampleId].caps.push_back(CapabilityShader);
     BuiltInParams[BuiltInSamplePosition].caps.push_back(CapabilityShader);
     BuiltInParams[BuiltInSampleMask].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInFragColor].caps.push_back(CapabilityShader);
     BuiltInParams[BuiltInFragDepth].caps.push_back(CapabilityShader);
     BuiltInParams[BuiltInHelperInvocation].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInLocalInvocationIndex].caps.push_back(CapabilityShader);
     BuiltInParams[BuiltInWorkDim].caps.push_back(CapabilityKernel);
     BuiltInParams[BuiltInGlobalSize].caps.push_back(CapabilityKernel);
     BuiltInParams[BuiltInEnqueuedWorkgroupSize].caps.push_back(CapabilityKernel);
     BuiltInParams[BuiltInGlobalOffset].caps.push_back(CapabilityKernel);
     BuiltInParams[BuiltInGlobalLinearId].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInWorkgroupLinearId].caps.push_back(CapabilityKernel);
 
     BuiltInParams[BuiltInSubgroupSize].caps.push_back(CapabilityKernel);
     BuiltInParams[BuiltInSubgroupMaxSize].caps.push_back(CapabilityKernel);
@@ -1438,8 +1602,11 @@
     BuiltInParams[BuiltInSubgroupId].caps.push_back(CapabilityKernel);
     BuiltInParams[BuiltInSubgroupLocalInvocationId].caps.push_back(CapabilityKernel);
 
+    DimensionalityParams[Dim1D].caps.push_back(CapabilitySampled1D);
     DimensionalityParams[DimCube].caps.push_back(CapabilityShader);
-    DimensionalityParams[DimRect].caps.push_back(CapabilityShader);
+    DimensionalityParams[DimRect].caps.push_back(CapabilitySampledRect);
+    DimensionalityParams[DimBuffer].caps.push_back(CapabilitySampledBuffer);
+    DimensionalityParams[DimSubpassData].caps.push_back(CapabilityInputAttachment);
 
     // Group Operations
     for (int i = 0; i < GroupOperationCeiling; ++i) {
@@ -1458,6 +1625,10 @@
 
     InstructionDesc[OpSource].operands.push(OperandSource, "");
     InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'");
+    InstructionDesc[OpSource].operands.push(OperandId, "'File'", true);
+    InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true);
+
+    InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'");
 
     InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'");
 
@@ -1470,7 +1641,6 @@
 
     InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'");
 
-    InstructionDesc[OpLine].operands.push(OperandId, "'Target'");
     InstructionDesc[OpLine].operands.push(OperandId, "'File'");
     InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'");
     InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'");
@@ -1487,10 +1657,11 @@
     InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, "");
     InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'");
     InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'");
+    InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'");
 
     InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'");
     InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'");
-    InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution Mode,Execution Mode>>");
+    InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>");
 
     InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'");
     InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'");
@@ -1511,7 +1682,7 @@
     InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'");
     InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'");
     InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, "");
-    InstructionDesc[OpTypeImage].operands.push(OperandOptionalLiteral, "'Access Qualifier'");
+    InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true);
 
     InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'");
 
@@ -1529,15 +1700,18 @@
     InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
     InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
 
+    InstructionDesc[OpTypeForwardPointer].capabilities.push_back(CapabilityAddresses);
+    InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
+    InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
+
     InstructionDesc[OpTypeEvent].capabilities.push_back(CapabilityKernel);
 
-    InstructionDesc[OpTypeDeviceEvent].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpTypeDeviceEvent].capabilities.push_back(CapabilityDeviceEnqueue);
 
     InstructionDesc[OpTypeReserveId].capabilities.push_back(CapabilityPipes);
 
-    InstructionDesc[OpTypeQueue].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpTypeQueue].capabilities.push_back(CapabilityDeviceEnqueue);
 
-    InstructionDesc[OpTypePipe].operands.push(OperandId, "'Type'");
     InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
     InstructionDesc[OpTypePipe].capabilities.push_back(CapabilityPipes);
 
@@ -1561,7 +1735,7 @@
     InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'");
 
     InstructionDesc[OpVariable].operands.push(OperandStorage, "");
-    InstructionDesc[OpVariable].operands.push(OperandOptionalId, "'Initializer'");
+    InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true);
 
     InstructionDesc[OpFunction].operands.push(OperandFunction, "");
     InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'");
@@ -1574,11 +1748,11 @@
     InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
 
     InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpLoad].operands.push(OperandOptionalLiteral, "'Memory Access'");
+    InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
 
     InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpStore].operands.push(OperandId, "'Object'");
-    InstructionDesc[OpStore].operands.push(OperandOptionalLiteral, "'Memory Access'");
+    InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true);
 
     InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
 
@@ -1621,101 +1795,196 @@
 
     InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'");
     InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'");
-    InstructionDesc[OpCopyMemory].operands.push(OperandOptionalLiteral, "'Memory Access'");
+    InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true);
 
     InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'");
     InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'");
     InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
-    InstructionDesc[OpCopyMemorySized].operands.push(OperandOptionalLiteral, "'Memory Access'");
+    InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
 
     InstructionDesc[OpCopyMemorySized].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
     InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
 
+    InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'");
+
     InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true);
 
     InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
+    InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true);
 
     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageSampleImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true);
 
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageSampleDrefImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageSampleDrefExplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageSampleProjImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageSampleProjExplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageSampleProjDrefImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageSampleProjDrefExplicitLod].capabilities.push_back(CapabilityShader);
 
-    InstructionDesc[OpImageFetch].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageFetch].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true);
 
     InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
-    InstructionDesc[OpImageGather].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageGather].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageDrefGather].operands.push(OperandOptionalImage, "");
+    InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
     InstructionDesc[OpImageDrefGather].capabilities.push_back(CapabilityShader);
 
+    InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseSampleImplicitLod].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseSampleExplicitLod].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseSampleDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseSampleDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseSampleProjImplicitLod].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseSampleProjExplicitLod].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
+    InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseFetch].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
+    InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseGather].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
+    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
+    InstructionDesc[OpImageSparseDrefGather].capabilities.push_back(CapabilitySparseResidency);
+
+    InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
+    InstructionDesc[OpImageSparseTexelsResident].capabilities.push_back(CapabilitySparseResidency);
+
     InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
+    InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
+    InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageQueryLod].capabilities.push_back(CapabilityShader);
+    InstructionDesc[OpImageQueryLod].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityShader);
+    InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityShader);
-
-    InstructionDesc[OpImageQueryDim].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryDim].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageQueryFormat].capabilities.push_back(CapabilityKernel);
@@ -1734,6 +2003,11 @@
     InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
     InstructionDesc[OpPtrAccessChain].capabilities.push_back(CapabilityAddresses);
 
+    InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
+    InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
+    InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+    InstructionDesc[OpInBoundsPtrAccessChain].capabilities.push_back(CapabilityAddresses);
+
     InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
 
     InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'");
@@ -1887,6 +2161,18 @@
     InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'");
     InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'");
 
+    InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'");
+    InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'");
+
+    InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'");
+    InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'");
+
+    InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'");
+    InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'");
+
+    InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'");
+    InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'");
+
     InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'");
     InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'");
 
@@ -2019,22 +2305,22 @@
     InstructionDesc[OpFwidth].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdxFine].capabilities.push_back(CapabilityShader);
+    InstructionDesc[OpDPdxFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdyFine].capabilities.push_back(CapabilityShader);
+    InstructionDesc[OpDPdyFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpFwidthFine].capabilities.push_back(CapabilityShader);
+    InstructionDesc[OpFwidthFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdxCoarse].capabilities.push_back(CapabilityShader);
+    InstructionDesc[OpDPdxCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdyCoarse].capabilities.push_back(CapabilityShader);
+    InstructionDesc[OpDPdyCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpFwidthCoarse].capabilities.push_back(CapabilityShader);
+    InstructionDesc[OpFwidthCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
 
     InstructionDesc[OpEmitVertex].capabilities.push_back(CapabilityGeometry);
@@ -2042,10 +2328,10 @@
     InstructionDesc[OpEndPrimitive].capabilities.push_back(CapabilityGeometry);
 
     InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
-    InstructionDesc[OpEmitStreamVertex].capabilities.push_back(CapabilityGeometry);
+    InstructionDesc[OpEmitStreamVertex].capabilities.push_back(CapabilityGeometryStreams);
 
     InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
-    InstructionDesc[OpEndStreamPrimitive].capabilities.push_back(CapabilityGeometry);
+    InstructionDesc[OpEndStreamPrimitive].capabilities.push_back(CapabilityGeometryStreams);
 
     InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
@@ -2140,7 +2426,18 @@
     InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'");
     InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'");
 
+    InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
+    InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
+    InstructionDesc[OpAtomicFlagTestAndSet].capabilities.push_back(CapabilityKernel);
+
+    InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
+    InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
+    InstructionDesc[OpAtomicFlagClear].capabilities.push_back(CapabilityKernel);
+
     InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
+    InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
     InstructionDesc[OpLoopMerge].operands.push(OperandLoop, "");
 
     InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'");
@@ -2163,22 +2460,24 @@
 
     InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
+    InstructionDesc[OpLifetimeStart].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
+    InstructionDesc[OpLifetimeStop].capabilities.push_back(CapabilityKernel);
 
-    InstructionDesc[OpAsyncGroupCopy].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpAsyncGroupCopy].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Destination'");
-    InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Source'");
-    InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Num Elements'");
-    InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Stride'");
-    InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Event'");
+    InstructionDesc[OpGroupAsyncCopy].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
+    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
+    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'");
+    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
+    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpWaitGroupEvents].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpWaitGroupEvents].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpWaitGroupEvents].operands.push(OperandId, "'Num Events'");
-    InstructionDesc[OpWaitGroupEvents].operands.push(OperandId, "'Events List'");
+    InstructionDesc[OpGroupWaitEvents].capabilities.push_back(CapabilityKernel);
+    InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
+    InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
 
     InstructionDesc[OpGroupAll].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
@@ -2236,67 +2535,95 @@
     InstructionDesc[OpReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpReservedReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpReservedWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpReserveReadPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
+    InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpReserveWritePipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
+    InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpCommitReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
+    InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpCommitWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
+    InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpIsValidReserveId].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
 
     InstructionDesc[OpGetNumPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
+    InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpGetMaxPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
+    InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpGroupReserveReadPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
+    InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpGroupReserveWritePipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
+    InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpGroupCommitReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
+    InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpGroupCommitWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
+    InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
+    InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
     InstructionDesc[OpBuildNDRange].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
diff --git a/SPIRV/doc.h b/SPIRV/doc.h
index c97ca85..accdd65 100755
--- a/SPIRV/doc.h
+++ b/SPIRV/doc.h
@@ -116,10 +116,9 @@
 enum OperandClass {
     OperandNone,
     OperandId,
-    OperandOptionalId,
-    OperandOptionalImage,
     OperandVariableIds,
     OperandOptionalLiteral,
+    OperandOptionalLiteralString,
     OperandVariableLiterals,
     OperandVariableIdLiteral,
     OperandVariableLiteralId,
@@ -168,18 +167,22 @@
 class OperandParameters {
 public:
     OperandParameters() { }
-    void push(OperandClass oc, const char* d)
+    void push(OperandClass oc, const char* d, bool opt = false)
     {
         opClass.push_back(oc);
         desc.push_back(d);
+        optional.push_back(opt);
     }
+    void setOptional();
     OperandClass getClass(int op) const { return opClass[op]; }
     const char* getDesc(int op) const { return desc[op]; }
+    bool isOptional(int op) const { return optional[op]; }
     int getNum() const { return (int)opClass.size(); }
 
 protected:
     std::vector<OperandClass> opClass;
     std::vector<const char*> desc;
+    std::vector<bool> optional;
 };
 
 // Parameterize an enumerant
@@ -240,7 +243,7 @@
     int resultPresent : 1;
 };
 
-const int OpcodeCeiling = 305;
+const int OpcodeCeiling = 320;
 
 // The set of objects that hold all the instruction/operand
 // parameterization information.
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index 829722e..f3d42a9 100755
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -25,7 +25,6 @@
 // This header is automatically generated by the same tool that creates

 // the Binary Section of the SPIR-V specification.

 

-// Specification revision 31.

 // Enumeration tokens for SPIR-V, in various styles:

 //   C, C++, C++11, JSON, Lua, Python

 // 

@@ -47,9 +46,12 @@
 

 typedef unsigned int Id;

 

+#define SPV_VERSION 10000

+#define SPV_REVISION 2

+

 static const unsigned int MagicNumber = 0x07230203;

-static const unsigned int Version = 99;

-static const unsigned int Revision = 31;

+static const unsigned int Version = 0x00010000;

+static const unsigned int Revision = 2;

 static const unsigned int OpCodeMask = 0xffff;

 static const unsigned int WordCountShift = 16;

 

@@ -57,7 +59,8 @@
     SourceLanguageUnknown = 0,

     SourceLanguageESSL = 1,

     SourceLanguageGLSL = 2,

-    SourceLanguageOpenCL = 3,

+    SourceLanguageOpenCL_C = 3,

+    SourceLanguageOpenCL_CPP = 4,

 };

 

 enum ExecutionModel {

@@ -96,7 +99,6 @@
     ExecutionModePointMode = 10,

     ExecutionModeXfb = 11,

     ExecutionModeDepthReplacing = 12,

-    ExecutionModeDepthAny = 13,

     ExecutionModeDepthGreater = 14,

     ExecutionModeDepthLess = 15,

     ExecutionModeDepthUnchanged = 16,

@@ -105,10 +107,10 @@
     ExecutionModeInputPoints = 19,

     ExecutionModeInputLines = 20,

     ExecutionModeInputLinesAdjacency = 21,

-    ExecutionModeInputTriangles = 22,

+    ExecutionModeTriangles = 22,

     ExecutionModeInputTrianglesAdjacency = 23,

-    ExecutionModeInputQuads = 24,

-    ExecutionModeInputIsolines = 25,

+    ExecutionModeQuads = 24,

+    ExecutionModeIsolines = 25,

     ExecutionModeOutputVertices = 26,

     ExecutionModeOutputPoints = 27,

     ExecutionModeOutputLineStrip = 28,

@@ -122,11 +124,12 @@
     StorageClassInput = 1,

     StorageClassUniform = 2,

     StorageClassOutput = 3,

-    StorageClassWorkgroupLocal = 4,

-    StorageClassWorkgroupGlobal = 5,

-    StorageClassPrivateGlobal = 6,

+    StorageClassWorkgroup = 4,

+    StorageClassCrossWorkgroup = 5,

+    StorageClassPrivate = 6,

     StorageClassFunction = 7,

     StorageClassGeneric = 8,

+    StorageClassPushConstant = 9,

     StorageClassAtomicCounter = 10,

     StorageClassImage = 11,

 };

@@ -138,6 +141,7 @@
     DimCube = 3,

     DimRect = 4,

     DimBuffer = 5,

+    DimSubpassData = 6,

 };

 

 enum SamplerAddressingMode {

@@ -235,6 +239,7 @@
     ImageChannelDataTypeHalfFloat = 13,

     ImageChannelDataTypeFloat = 14,

     ImageChannelDataTypeUnormInt24 = 15,

+    ImageChannelDataTypeUnormInt101010_2 = 16,

 };

 

 enum ImageOperandsShift {

@@ -245,6 +250,7 @@
     ImageOperandsOffsetShift = 4,

     ImageOperandsConstOffsetsShift = 5,

     ImageOperandsSampleShift = 6,

+    ImageOperandsMinLodShift = 7,

 };

 

 enum ImageOperandsMask {

@@ -256,6 +262,7 @@
     ImageOperandsOffsetMask = 0x00000010,

     ImageOperandsConstOffsetsMask = 0x00000020,

     ImageOperandsSampleMask = 0x00000040,

+    ImageOperandsMinLodMask = 0x00000080,

 };

 

 enum FPFastMathModeShift {

@@ -317,8 +324,7 @@
     DecorationGLSLPacked = 9,

     DecorationCPacked = 10,

     DecorationBuiltIn = 11,

-    DecorationSmooth = 12,

-    DecorationNoperspective = 13,

+    DecorationNoPerspective = 13,

     DecorationFlat = 14,

     DecorationPatch = 15,

     DecorationCentroid = 16,

@@ -329,10 +335,9 @@
     DecorationVolatile = 21,

     DecorationConstant = 22,

     DecorationCoherent = 23,

-    DecorationNonwritable = 24,

-    DecorationNonreadable = 25,

+    DecorationNonWritable = 24,

+    DecorationNonReadable = 25,

     DecorationUniform = 26,

-    DecorationNoStaticUse = 27,

     DecorationSaturatedConversion = 28,

     DecorationStream = 29,

     DecorationLocation = 30,

@@ -347,6 +352,9 @@
     DecorationFPRoundingMode = 39,

     DecorationFPFastMathMode = 40,

     DecorationLinkageAttributes = 41,

+    DecorationNoContraction = 42,

+    DecorationInputAttachmentIndex = 43,

+    DecorationAlignment = 44,

 };

 

 enum BuiltIn {

@@ -370,7 +378,6 @@
     BuiltInSampleId = 18,

     BuiltInSamplePosition = 19,

     BuiltInSampleMask = 20,

-    BuiltInFragColor = 21,

     BuiltInFragDepth = 22,

     BuiltInHelperInvocation = 23,

     BuiltInNumWorkgroups = 24,

@@ -384,13 +391,14 @@
     BuiltInEnqueuedWorkgroupSize = 32,

     BuiltInGlobalOffset = 33,

     BuiltInGlobalLinearId = 34,

-    BuiltInWorkgroupLinearId = 35,

     BuiltInSubgroupSize = 36,

     BuiltInSubgroupMaxSize = 37,

     BuiltInNumSubgroups = 38,

     BuiltInNumEnqueuedSubgroups = 39,

     BuiltInSubgroupId = 40,

     BuiltInSubgroupLocalInvocationId = 41,

+    BuiltInVertexIndex = 42,

+    BuiltInInstanceIndex = 43,

 };

 

 enum SelectionControlShift {

@@ -431,41 +439,43 @@
 };

 

 enum MemorySemanticsShift {

-    MemorySemanticsRelaxedShift = 0,

-    MemorySemanticsSequentiallyConsistentShift = 1,

-    MemorySemanticsAcquireShift = 2,

-    MemorySemanticsReleaseShift = 3,

-    MemorySemanticsUniformMemoryShift = 4,

-    MemorySemanticsSubgroupMemoryShift = 5,

-    MemorySemanticsWorkgroupLocalMemoryShift = 6,

-    MemorySemanticsWorkgroupGlobalMemoryShift = 7,

-    MemorySemanticsAtomicCounterMemoryShift = 8,

-    MemorySemanticsImageMemoryShift = 9,

+    MemorySemanticsAcquireShift = 1,

+    MemorySemanticsReleaseShift = 2,

+    MemorySemanticsAcquireReleaseShift = 3,

+    MemorySemanticsSequentiallyConsistentShift = 4,

+    MemorySemanticsUniformMemoryShift = 6,

+    MemorySemanticsSubgroupMemoryShift = 7,

+    MemorySemanticsWorkgroupMemoryShift = 8,

+    MemorySemanticsCrossWorkgroupMemoryShift = 9,

+    MemorySemanticsAtomicCounterMemoryShift = 10,

+    MemorySemanticsImageMemoryShift = 11,

 };

 

 enum MemorySemanticsMask {

     MemorySemanticsMaskNone = 0,

-    MemorySemanticsRelaxedMask = 0x00000001,

-    MemorySemanticsSequentiallyConsistentMask = 0x00000002,

-    MemorySemanticsAcquireMask = 0x00000004,

-    MemorySemanticsReleaseMask = 0x00000008,

-    MemorySemanticsUniformMemoryMask = 0x00000010,

-    MemorySemanticsSubgroupMemoryMask = 0x00000020,

-    MemorySemanticsWorkgroupLocalMemoryMask = 0x00000040,

-    MemorySemanticsWorkgroupGlobalMemoryMask = 0x00000080,

-    MemorySemanticsAtomicCounterMemoryMask = 0x00000100,

-    MemorySemanticsImageMemoryMask = 0x00000200,

+    MemorySemanticsAcquireMask = 0x00000002,

+    MemorySemanticsReleaseMask = 0x00000004,

+    MemorySemanticsAcquireReleaseMask = 0x00000008,

+    MemorySemanticsSequentiallyConsistentMask = 0x00000010,

+    MemorySemanticsUniformMemoryMask = 0x00000040,

+    MemorySemanticsSubgroupMemoryMask = 0x00000080,

+    MemorySemanticsWorkgroupMemoryMask = 0x00000100,

+    MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,

+    MemorySemanticsAtomicCounterMemoryMask = 0x00000400,

+    MemorySemanticsImageMemoryMask = 0x00000800,

 };

 

 enum MemoryAccessShift {

     MemoryAccessVolatileShift = 0,

     MemoryAccessAlignedShift = 1,

+    MemoryAccessNontemporalShift = 2,

 };

 

 enum MemoryAccessMask {

     MemoryAccessMaskNone = 0,

     MemoryAccessVolatileMask = 0x00000001,

     MemoryAccessAlignedMask = 0x00000002,

+    MemoryAccessNontemporalMask = 0x00000004,

 };

 

 enum Scope {

@@ -514,7 +524,6 @@
     CapabilityImageBasic = 13,

     CapabilityImageReadWrite = 14,

     CapabilityImageMipmap = 15,

-    CapabilityImageSRGBWrite = 16,

     CapabilityPipes = 17,

     CapabilityGroups = 18,

     CapabilityDeviceEnqueue = 19,

@@ -524,7 +533,6 @@
     CapabilityTessellationPointSize = 23,

     CapabilityGeometryPointSize = 24,

     CapabilityImageGatherExtended = 25,

-    CapabilityStorageImageExtendedFormats = 26,

     CapabilityStorageImageMultisample = 27,

     CapabilityUniformBufferArrayDynamicIndexing = 28,

     CapabilitySampledImageArrayDynamicIndexing = 29,

@@ -534,11 +542,33 @@
     CapabilityCullDistance = 33,

     CapabilityImageCubeArray = 34,

     CapabilitySampleRateShading = 35,

+    CapabilityImageRect = 36,

+    CapabilitySampledRect = 37,

+    CapabilityGenericPointer = 38,

+    CapabilityInt8 = 39,

+    CapabilityInputAttachment = 40,

+    CapabilitySparseResidency = 41,

+    CapabilityMinLod = 42,

+    CapabilitySampled1D = 43,

+    CapabilityImage1D = 44,

+    CapabilitySampledCubeArray = 45,

+    CapabilitySampledBuffer = 46,

+    CapabilityImageBuffer = 47,

+    CapabilityImageMSArray = 48,

+    CapabilityStorageImageExtendedFormats = 49,

+    CapabilityImageQuery = 50,

+    CapabilityDerivativeControl = 51,

+    CapabilityInterpolationFunction = 52,

+    CapabilityTransformFeedback = 53,

+    CapabilityGeometryStreams = 54,

+    CapabilityStorageImageReadWithoutFormat = 55,

+    CapabilityStorageImageWriteWithoutFormat = 56,

 };

 

 enum Op {

     OpNop = 0,

     OpUndef = 1,

+    OpSourceContinued = 2,

     OpSource = 3,

     OpSourceExtension = 4,

     OpName = 5,

@@ -572,6 +602,7 @@
     OpTypeReserveId = 36,

     OpTypeQueue = 37,

     OpTypePipe = 38,

+    OpTypeForwardPointer = 39,

     OpConstantTrue = 41,

     OpConstantFalse = 42,

     OpConstant = 43,

@@ -598,6 +629,7 @@
     OpPtrAccessChain = 67,

     OpArrayLength = 68,

     OpGenericPtrMemSemantics = 69,

+    OpInBoundsPtrAccessChain = 70,

     OpDecorate = 71,

     OpMemberDecorate = 72,

     OpDecorationGroup = 73,

@@ -625,7 +657,7 @@
     OpImageDrefGather = 97,

     OpImageRead = 98,

     OpImageWrite = 99,

-    OpImageQueryDim = 100,

+    OpImage = 100,

     OpImageQueryFormat = 101,

     OpImageQueryOrder = 102,

     OpImageQuerySizeLod = 103,

@@ -674,7 +706,8 @@
     OpDot = 148,

     OpIAddCarry = 149,

     OpISubBorrow = 150,

-    OpIMulExtended = 151,

+    OpUMulExtended = 151,

+    OpSMulExtended = 152,

     OpAny = 154,

     OpAll = 155,

     OpIsNan = 156,

@@ -769,8 +802,8 @@
     OpUnreachable = 255,

     OpLifetimeStart = 256,

     OpLifetimeStop = 257,

-    OpAsyncGroupCopy = 259,

-    OpWaitGroupEvents = 260,

+    OpGroupAsyncCopy = 259,

+    OpGroupWaitEvents = 260,

     OpGroupAll = 261,

     OpGroupAny = 262,

     OpGroupBroadcast = 263,

@@ -811,6 +844,21 @@
     OpCaptureEventProfilingInfo = 302,

     OpGetDefaultQueue = 303,

     OpBuildNDRange = 304,

+    OpImageSparseSampleImplicitLod = 305,

+    OpImageSparseSampleExplicitLod = 306,

+    OpImageSparseSampleDrefImplicitLod = 307,

+    OpImageSparseSampleDrefExplicitLod = 308,

+    OpImageSparseSampleProjImplicitLod = 309,

+    OpImageSparseSampleProjExplicitLod = 310,

+    OpImageSparseSampleProjDrefImplicitLod = 311,

+    OpImageSparseSampleProjDrefExplicitLod = 312,

+    OpImageSparseFetch = 313,

+    OpImageSparseGather = 314,

+    OpImageSparseDrefGather = 315,

+    OpImageSparseTexelsResident = 316,

+    OpNoLine = 317,

+    OpAtomicFlagTestAndSet = 318,

+    OpAtomicFlagClear = 319,

 };

 

 // Overload operator| for mask bit combining

diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 8bf369c..6736a13 100755
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -74,18 +74,14 @@
 
 class Instruction {
 public:
-    Instruction(Id resultId, Id typeId, Op opCode) : resultId(resultId), typeId(typeId), opCode(opCode), string(0) { }
-    explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode), string(0) { }
-    virtual ~Instruction()
-    {
-        delete string;
-    }
+    Instruction(Id resultId, Id typeId, Op opCode) : resultId(resultId), typeId(typeId), opCode(opCode) { }
+    explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode) { }
+    virtual ~Instruction() {}
     void addIdOperand(Id id) { operands.push_back(id); }
     void addImmediateOperand(unsigned int immediate) { operands.push_back(immediate); }
     void addStringOperand(const char* str)
     {
         originalString = str;
-        string = new std::vector<unsigned int>;
         unsigned int word;
         char* wordString = (char*)&word;
         char* wordPtr = wordString;
@@ -96,7 +92,7 @@
             *(wordPtr++) = c;
             ++charCount;
             if (charCount == 4) {
-                string->push_back(word);
+                addImmediateOperand(word);
                 wordPtr = wordString;
                 charCount = 0;
             }
@@ -107,7 +103,7 @@
             // pad with 0s
             for (; charCount < 4; ++charCount)
                 *(wordPtr++) = 0;
-            string->push_back(word);
+            addImmediateOperand(word);
         }
     }
     Op getOpCode() const { return opCode; }
@@ -128,8 +124,6 @@
         if (resultId)
             ++wordCount;
         wordCount += (unsigned int)operands.size();
-        if (string)
-            wordCount += (unsigned int)string->size();
 
         // Write out the beginning of the instruction
         out.push_back(((wordCount) << WordCountShift) | opCode);
@@ -141,9 +135,6 @@
         // Write out the operands
         for (int op = 0; op < (int)operands.size(); ++op)
             out.push_back(operands[op]);
-        if (string)
-            for (int op = 0; op < (int)string->size(); ++op)
-                out.push_back((*string)[op]);
     }
 
 protected:
@@ -152,7 +143,6 @@
     Id typeId;
     Op opCode;
     std::vector<Id> operands;
-    std::vector<unsigned int>* string; // usually non-existent
     std::string originalString;        // could be optimized away; convenience for getting string operand
 };
 
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index f5646c0..59bcb23 100755
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -788,6 +788,7 @@
         glslang::GetSpirvVersion(spirvVersion);
         printf("SPIR-V Version %s\n", spirvVersion.c_str());
         printf("GLSL.std.450 Version %d, Revision %d\n", GLSLstd450Version, GLSLstd450Revision);
+        printf("Khronos Tool ID %d\n", glslang::GetKhronosToolId());
         if (Worklist.empty())
             return ESuccess;
     }
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index 241c6ce..3534299 100755
--- a/Test/baseResults/spv.100ops.frag.out
+++ b/Test/baseResults/spv.100ops.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 47

 

-                              Source ESSL 100

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint Fragment 4  "main"

                               ExecutionMode 4 OriginLowerLeft

+                              Source ESSL 100

                               Name 4  "main"

                               Name 8  "foo("

                               Name 11  "face1"

@@ -27,15 +27,14 @@
                               Decorate 21(low) RelaxedPrecision

                               Decorate 26(high) RelaxedPrecision

                               Decorate 36(gl_FragColor) RelaxedPrecision

-                              Decorate 36(gl_FragColor) BuiltIn FragColor

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

                7:             TypeFunction 6(float)

-              10:             TypePointer PrivateGlobal 6(float)

-       11(face1):     10(ptr) Variable PrivateGlobal

+              10:             TypePointer Private 6(float)

+       11(face1):     10(ptr) Variable Private

               12:    6(float) Constant 1093664768

-       13(face2):     10(ptr) Variable PrivateGlobal

+       13(face2):     10(ptr) Variable Private

               14:    6(float) Constant 3221225472

               15:             TypeInt 32 1

               16:             TypePointer Function 15(int)

diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index 99ca6f1..2238751 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -5,4 +5,301 @@
 Linked fragment stage:

 

 

-Missing functionality: texture gather

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 212

+

+                              Capability Shader

+               1:             ExtInstImport  "GLSL.std.450"

+                              MemoryModel Logical GLSL450

+                              EntryPoint Fragment 4  "main" 78 17 68 98 182 183 184 185 185 171

+                              ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

+                              SourceExtension  "GL_ARB_gpu_shader5"

+                              SourceExtension  "GL_ARB_shader_texture_lod"

+                              SourceExtension  "GL_ARB_shading_language_420pack"

+                              SourceExtension  "GL_ARB_texture_cube_map_array"

+                              SourceExtension  "GL_ARB_texture_gather"

+                              SourceExtension  "GL_ARB_texture_rectangle"

+                              Name 4  "main"

+                              Name 6  "bar3("

+                              Name 8  "bar4("

+                              Name 10  "bar5("

+                              Name 12  "bar6("

+                              Name 17  "o"

+                              Name 21  "samp2D"

+                              Name 37  "samp2DA"

+                              Name 47  "samp2DR"

+                              Name 55  "samp2DS"

+                              Name 68  "io"

+                              Name 72  "Sca"

+                              Name 78  "i"

+                              Name 86  "Isca"

+                              Name 98  "uo"

+                              Name 102  "Usca"

+                              Name 113  "a"

+                              Name 117  "Scas"

+                              Name 122  "f"

+                              Name 131  "c"

+                              Name 152  "a1"

+                              Name 155  "m43"

+                              Name 158  "b"

+                              Name 165  "sampC"

+                              Name 171  "gl_ClipDistance"

+                              Name 181  "b"

+                              Name 182  "fflat"

+                              Name 183  "fsmooth"

+                              Name 184  "fnop"

+                              Name 185  "gl_Color"

+                              Name 192  "bounds"

+                              Name 193  "s2D"

+                              Name 194  "s2DR"

+                              Name 198  "s2DRS"

+                              Name 202  "s1D"

+                              Name 203  "s2DS"

+                              Name 205  "f"

+                              Name 207  "v2"

+                              Name 209  "v3"

+                              Name 211  "v4"

+                              Decorate 171(gl_ClipDistance) BuiltIn ClipDistance

+                              Decorate 182(fflat) Flat

+                              Decorate 184(fnop) NoPerspective

+                              Decorate 192(bounds) Binding 0

+               2:             TypeVoid

+               3:             TypeFunction 2

+              14:             TypeFloat 32

+              15:             TypeVector 14(float) 4

+              16:             TypePointer Output 15(fvec4)

+           17(o):     16(ptr) Variable Output

+              18:             TypeImage 14(float) 2D sampled format:Unknown

+              19:             TypeSampledImage 18

+              20:             TypePointer UniformConstant 19

+      21(samp2D):     20(ptr) Variable UniformConstant

+              23:             TypeVector 14(float) 2

+              24:   14(float) Constant 1050253722

+              25:   23(fvec2) ConstantComposite 24 24

+              26:             TypeInt 32 1

+              27:             TypeVector 26(int) 2

+              28:     26(int) Constant 1

+              29:   27(ivec2) ConstantComposite 28 28

+              30:     26(int) Constant 0

+              34:             TypeImage 14(float) 2D array sampled format:Unknown

+              35:             TypeSampledImage 34

+              36:             TypePointer UniformConstant 35

+     37(samp2DA):     36(ptr) Variable UniformConstant

+              39:             TypeVector 14(float) 3

+              40:   39(fvec3) ConstantComposite 24 24 24

+              44:             TypeImage 14(float) Rect sampled format:Unknown

+              45:             TypeSampledImage 44

+              46:             TypePointer UniformConstant 45

+     47(samp2DR):     46(ptr) Variable UniformConstant

+              52:             TypeImage 14(float) 2D depth sampled format:Unknown

+              53:             TypeSampledImage 52

+              54:             TypePointer UniformConstant 53

+     55(samp2DS):     54(ptr) Variable UniformConstant

+              57:   14(float) Constant 1067869798

+              62:     26(int) Constant 2

+              66:             TypeVector 26(int) 3

+              67:             TypePointer Output 66(ivec3)

+          68(io):     67(ptr) Variable Output

+              69:             TypeImage 14(float) Cube array sampled format:Unknown

+              70:             TypeSampledImage 69

+              71:             TypePointer UniformConstant 70

+         72(Sca):     71(ptr) Variable UniformConstant

+              74:     26(int) Constant 3

+              77:             TypePointer Input 15(fvec4)

+           78(i):     77(ptr) Variable Input

+              83:             TypeImage 26(int) Cube array sampled format:Unknown

+              84:             TypeSampledImage 83

+              85:             TypePointer UniformConstant 84

+        86(Isca):     85(ptr) Variable UniformConstant

+              89:   14(float) Constant 1060320051

+              90:             TypeVector 26(int) 4

+              95:             TypeInt 32 0

+              96:             TypeVector 95(int) 4

+              97:             TypePointer Output 96(ivec4)

+          98(uo):     97(ptr) Variable Output

+              99:             TypeImage 95(int) Cube array sampled format:Unknown

+             100:             TypeSampledImage 99

+             101:             TypePointer UniformConstant 100

+       102(Usca):    101(ptr) Variable UniformConstant

+             108:   14(float) Constant 1071225242

+             112:             TypePointer Private 39(fvec3)

+          113(a):    112(ptr) Variable Private

+             114:             TypeImage 14(float) Cube depth array sampled format:Unknown

+             115:             TypeSampledImage 114

+             116:             TypePointer UniformConstant 115

+       117(Scas):    116(ptr) Variable UniformConstant

+             121:             TypePointer Function 14(float)

+             125:     95(int) Constant 1

+             126:             TypePointer Input 14(float)

+             130:             TypePointer Function 90(ivec4)

+             134:   14(float) Constant 1036831949

+             135:   39(fvec3) ConstantComposite 134 134 134

+             136:   14(float) Constant 1045220557

+             137:   39(fvec3) ConstantComposite 136 136 136

+             153:             TypeMatrix 39(fvec3) 4

+             154:             TypePointer Function 153

+             159:   14(float) Constant 1073741824

+             162:             TypeImage 14(float) Cube sampled format:Unknown

+             163:             TypeSampledImage 162

+             164:             TypePointer UniformConstant 163

+      165(sampC):    164(ptr) Variable UniformConstant

+             168:     95(int) Constant 4

+             169:             TypeArray 14(float) 168

+             170:             TypePointer Input 169

+171(gl_ClipDistance):    170(ptr) Variable Input

+             174:             TypePointer Output 14(float)

+             180:             TypePointer Private 14(float)

+          181(b):    180(ptr) Variable Private

+      182(fflat):    126(ptr) Variable Input

+    183(fsmooth):    126(ptr) Variable Input

+       184(fnop):    126(ptr) Variable Input

+   185(gl_Color):     77(ptr) Variable Input

+             186:     95(int) Constant 3

+             187:             TypeArray 26(int) 186

+             188:     26(int) Constant 10

+             189:     26(int) Constant 23

+             190:     26(int) Constant 32

+             191:         187 ConstantComposite 188 189 190

+     192(bounds):     20(ptr) Variable UniformConstant

+        193(s2D):     20(ptr) Variable UniformConstant

+       194(s2DR):     46(ptr) Variable UniformConstant

+             195:             TypeImage 14(float) Rect depth sampled format:Unknown

+             196:             TypeSampledImage 195

+             197:             TypePointer UniformConstant 196

+      198(s2DRS):    197(ptr) Variable UniformConstant

+             199:             TypeImage 14(float) 1D sampled format:Unknown

+             200:             TypeSampledImage 199

+             201:             TypePointer UniformConstant 200

+        202(s1D):    201(ptr) Variable UniformConstant

+       203(s2DS):     54(ptr) Variable UniformConstant

+             204:             TypePointer UniformConstant 14(float)

+          205(f):    204(ptr) Variable UniformConstant

+             206:             TypePointer UniformConstant 23(fvec2)

+         207(v2):    206(ptr) Variable UniformConstant

+             208:             TypePointer UniformConstant 39(fvec3)

+         209(v3):    208(ptr) Variable UniformConstant

+             210:             TypePointer UniformConstant 15(fvec4)

+         211(v4):    210(ptr) Variable UniformConstant

+         4(main):           2 Function None 3

+               5:             Label

+             166:         163 Load 165(sampC)

+             167:   15(fvec4) ImageGather 166 137 30

+                              Store 17(o) 167

+             172:    126(ptr) AccessChain 171(gl_ClipDistance) 74

+             173:   14(float) Load 172

+             175:    174(ptr) AccessChain 17(o) 125

+                              Store 175 173

+             176:           2 FunctionCall 6(bar3()

+             177:           2 FunctionCall 8(bar4()

+             178:           2 FunctionCall 10(bar5()

+             179:           2 FunctionCall 12(bar6()

+                              Return

+                              FunctionEnd

+        6(bar3():           2 Function None 3

+               7:             Label

+              22:          19 Load 21(samp2D)

+              31:   15(fvec4) ImageGather 22 25 30 ConstOffset 29

+              32:   15(fvec4) Load 17(o)

+              33:   15(fvec4) FAdd 32 31

+                              Store 17(o) 33

+              38:          35 Load 37(samp2DA)

+              41:   15(fvec4) ImageGather 38 40 30 ConstOffset 29

+              42:   15(fvec4) Load 17(o)

+              43:   15(fvec4) FAdd 42 41

+                              Store 17(o) 43

+                              Return

+                              FunctionEnd

+        8(bar4():           2 Function None 3

+               9:             Label

+              48:          45 Load 47(samp2DR)

+              49:   15(fvec4) ImageGather 48 25 30 ConstOffset 29

+              50:   15(fvec4) Load 17(o)

+              51:   15(fvec4) FAdd 50 49

+                              Store 17(o) 51

+              56:          53 Load 55(samp2DS)

+              58:   15(fvec4) ImageDrefGather 56 25 57 ConstOffset 29

+              59:   15(fvec4) Load 17(o)

+              60:   15(fvec4) FAdd 59 58

+                              Store 17(o) 60

+              61:          19 Load 21(samp2D)

+              63:   15(fvec4) ImageGather 61 25 62 ConstOffset 29

+              64:   15(fvec4) Load 17(o)

+              65:   15(fvec4) FAdd 64 63

+                              Store 17(o) 65

+                              Return

+                              FunctionEnd

+       10(bar5():           2 Function None 3

+              11:             Label

+          122(f):    121(ptr) Variable Function

+          131(c):    130(ptr) Variable Function

+              73:          70 Load 72(Sca)

+              75:   66(ivec3) ImageQuerySizeLod 73 74

+                              Store 68(io) 75

+              76:          70 Load 72(Sca)

+              79:   15(fvec4) Load 78(i)

+              80:   15(fvec4) ImageSampleImplicitLod 76 79

+              81:   15(fvec4) Load 17(o)

+              82:   15(fvec4) FAdd 81 80

+                              Store 17(o) 82

+              87:          84 Load 86(Isca)

+              88:   15(fvec4) Load 78(i)

+              91:   90(ivec4) ImageSampleImplicitLod 87 88 Bias 89

+              92:   66(ivec3) VectorShuffle 91 91 0 1 2

+              93:   66(ivec3) Load 68(io)

+              94:   66(ivec3) IAdd 93 92

+                              Store 68(io) 94

+             103:         100 Load 102(Usca)

+             104:   15(fvec4) Load 78(i)

+             105:   96(ivec4) ImageSampleImplicitLod 103 104

+                              Store 98(uo) 105

+             106:          70 Load 72(Sca)

+             107:   15(fvec4) Load 78(i)

+             109:   15(fvec4) ImageSampleExplicitLod 106 107 Lod 108

+             110:   15(fvec4) Load 17(o)

+             111:   15(fvec4) FAdd 110 109

+                              Store 17(o) 111

+             118:         115 Load 117(Scas)

+             119:   66(ivec3) ImageQuerySizeLod 118 74

+             120:   39(fvec3) ConvertSToF 119

+                              Store 113(a) 120

+             123:         115 Load 117(Scas)

+             124:   15(fvec4) Load 78(i)

+             127:    126(ptr) AccessChain 78(i) 125

+             128:   14(float) Load 127

+             129:   14(float) ImageSampleDrefImplicitLod 123 124 128 Bias 128

+                              Store 122(f) 129

+             132:          84 Load 86(Isca)

+             133:   15(fvec4) Load 78(i)

+             138:   90(ivec4) ImageSampleExplicitLod 132 133 Grad 135 137

+                              Store 131(c) 138

+             139:   39(fvec3) Load 113(a)

+             140:   14(float) Load 122(f)

+             141:   90(ivec4) Load 131(c)

+             142:   15(fvec4) ConvertSToF 141

+             143:   15(fvec4) CompositeConstruct 140 140 140 140

+             144:   15(fvec4) FAdd 143 142

+             145:   14(float) CompositeExtract 139 0

+             146:   14(float) CompositeExtract 139 1

+             147:   14(float) CompositeExtract 139 2

+             148:   14(float) CompositeExtract 144 0

+             149:   15(fvec4) CompositeConstruct 145 146 147 148

+             150:   15(fvec4) Load 17(o)

+             151:   15(fvec4) FAdd 150 149

+                              Store 17(o) 151

+                              Return

+                              FunctionEnd

+       12(bar6():           2 Function None 3

+              13:             Label

+         152(a1):    121(ptr) Variable Function

+        155(m43):    154(ptr) Variable Function

+          158(b):    121(ptr) Variable Function

+             156:    121(ptr) AccessChain 155(m43) 74 125

+             157:   14(float) Load 156

+                              Store 152(a1) 157

+             160:   14(float) Load 152(a1)

+             161:   14(float) FMul 159 160

+                              Store 158(b) 161

+                              Return

+                              FunctionEnd

diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index 8b67908..0477bc2 100755
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 92

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 97

 

-                              Source GLSL 140

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 43 28 33 33

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 140

                               Name 4  "main"

                               Name 8  "foo("

                               Name 11  "i1"

@@ -20,54 +20,56 @@
                               Name 24  "i2"

                               Name 28  "o"

                               Name 33  "gl_ClipDistance"

-                              Name 42  "k"

-                              Name 54  "sampR"

-                              Name 61  "sampB"

-                              Name 85  "samp2Da"

-                              Name 89  "bn"

-                              MemberName 89(bn) 0  "matra"

-                              MemberName 89(bn) 1  "matca"

-                              MemberName 89(bn) 2  "matr"

-                              MemberName 89(bn) 3  "matc"

-                              MemberName 89(bn) 4  "matrdef"

-                              Name 91  ""

+                              Name 43  "k"

+                              Name 55  "sampR"

+                              Name 62  "sampB"

+                              Name 84  "samp2Da"

+                              Name 88  "bn"

+                              MemberName 88(bn) 0  "matra"

+                              MemberName 88(bn) 1  "matca"

+                              MemberName 88(bn) 2  "matr"

+                              MemberName 88(bn) 3  "matc"

+                              MemberName 88(bn) 4  "matrdef"

+                              Name 90  ""

+                              Name 93  "bi"

+                              MemberName 93(bi) 0  "v"

+                              Name 96  "bname"

                               Decorate 16(gl_FrontFacing) BuiltIn FrontFacing

-                              Decorate 33(gl_ClipDistance) Smooth

                               Decorate 33(gl_ClipDistance) BuiltIn ClipDistance

-                              Decorate 42(k) Smooth

-                              Decorate 85(samp2Da) NoStaticUse

-                              Decorate 88 ArrayStride 64

-                              Decorate 88 ArrayStride 64

-                              MemberDecorate 89(bn) 0 RowMajor

-                              MemberDecorate 89(bn) 0 Offset 0

-                              MemberDecorate 89(bn) 0 MatrixStride 16

-                              MemberDecorate 89(bn) 1 ColMajor

-                              MemberDecorate 89(bn) 1 Offset 256

-                              MemberDecorate 89(bn) 1 MatrixStride 16

-                              MemberDecorate 89(bn) 2 RowMajor

-                              MemberDecorate 89(bn) 2 Offset 512

-                              MemberDecorate 89(bn) 2 MatrixStride 16

-                              MemberDecorate 89(bn) 3 ColMajor

-                              MemberDecorate 89(bn) 3 Offset 576

-                              MemberDecorate 89(bn) 3 MatrixStride 16

-                              MemberDecorate 89(bn) 4 RowMajor

-                              MemberDecorate 89(bn) 4 Offset 640

-                              MemberDecorate 89(bn) 4 MatrixStride 16

-                              Decorate 89(bn) Block

-                              Decorate 91 NoStaticUse

+                              Decorate 87 ArrayStride 64

+                              Decorate 87 ArrayStride 64

+                              MemberDecorate 88(bn) 0 RowMajor

+                              MemberDecorate 88(bn) 0 Offset 0

+                              MemberDecorate 88(bn) 0 MatrixStride 16

+                              MemberDecorate 88(bn) 1 ColMajor

+                              MemberDecorate 88(bn) 1 Offset 256

+                              MemberDecorate 88(bn) 1 MatrixStride 16

+                              MemberDecorate 88(bn) 2 RowMajor

+                              MemberDecorate 88(bn) 2 Offset 512

+                              MemberDecorate 88(bn) 2 MatrixStride 16

+                              MemberDecorate 88(bn) 3 ColMajor

+                              MemberDecorate 88(bn) 3 Offset 576

+                              MemberDecorate 88(bn) 3 MatrixStride 16

+                              MemberDecorate 88(bn) 4 RowMajor

+                              MemberDecorate 88(bn) 4 Offset 640

+                              MemberDecorate 88(bn) 4 MatrixStride 16

+                              Decorate 88(bn) Block

+                              Decorate 92 ArrayStride 12

+                              MemberDecorate 93(bi) 0 Offset 0

+                              Decorate 93(bi) Block

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

                7:             TypeFunction 6(float)

-              10:             TypePointer PrivateGlobal 6(float)

-          11(i1):     10(ptr) Variable PrivateGlobal

+              10:             TypePointer Private 6(float)

+          11(i1):     10(ptr) Variable Private

               12:             TypePointer Function 6(float)

               14:             TypeBool

               15:             TypePointer Input 14(bool)

 16(gl_FrontFacing):     15(ptr) Variable Input

               20:    6(float) Constant 3221225472

               22:    6(float) Constant 1073741824

-          24(i2):     10(ptr) Variable PrivateGlobal

+          24(i2):     10(ptr) Variable Private

               25:    6(float) Constant 1120665600

               26:             TypeVector 6(float) 4

               27:             TypePointer Output 26(fvec4)

@@ -80,32 +82,41 @@
               34:             TypeInt 32 1

               35:     34(int) Constant 2

               36:             TypePointer Input 6(float)

-              41:             TypePointer Input 26(fvec4)

-           42(k):     41(ptr) Variable Input

-              44:             TypeVector 34(int) 4

-              51:             TypeImage 6(float) Rect sampled format:Unknown

-              52:             TypeSampledImage 51

-              53:             TypePointer UniformConstant 52

-       54(sampR):     53(ptr) Variable UniformConstant

-              56:             TypeVector 34(int) 2

-              58:             TypeImage 34(int) Buffer sampled format:Unknown

-              59:             TypeSampledImage 58

-              60:             TypePointer UniformConstant 59

-       61(sampB):     60(ptr) Variable UniformConstant

-              66:             TypeVector 6(float) 2

-              69:    6(float) Constant 1120403456

+              39:     29(int) Constant 1

+              40:             TypePointer Output 6(float)

+              42:             TypePointer Input 26(fvec4)

+           43(k):     42(ptr) Variable Input

+              45:             TypeVector 34(int) 4

+              50:     29(int) Constant 2

+              52:             TypeImage 6(float) Rect sampled format:Unknown

+              53:             TypeSampledImage 52

+              54:             TypePointer UniformConstant 53

+       55(sampR):     54(ptr) Variable UniformConstant

+              57:             TypeVector 34(int) 2

+              59:             TypeImage 34(int) Buffer sampled format:Unknown

+              60:             TypeSampledImage 59

+              61:             TypePointer UniformConstant 60

+       62(sampB):     61(ptr) Variable UniformConstant

+              67:             TypeVector 6(float) 2

+              70:    6(float) Constant 1120403456

+              72:     29(int) Constant 3

               80:             TypeImage 6(float) 2D sampled format:Unknown

               81:             TypeSampledImage 80

-              82:     29(int) Constant 3

-              83:             TypeArray 81 82

-              84:             TypePointer UniformConstant 83

-     85(samp2Da):     84(ptr) Variable UniformConstant

-              86:             TypeMatrix 26(fvec4) 4

-              87:     29(int) Constant 4

-              88:             TypeArray 86 87

-          89(bn):             TypeStruct 88 88 86 86 86

-              90:             TypePointer Uniform 89(bn)

-              91:     90(ptr) Variable Uniform

+              82:             TypeArray 81 72

+              83:             TypePointer UniformConstant 82

+     84(samp2Da):     83(ptr) Variable UniformConstant

+              85:             TypeMatrix 26(fvec4) 4

+              86:     29(int) Constant 4

+              87:             TypeArray 85 86

+          88(bn):             TypeStruct 87 87 85 85 85

+              89:             TypePointer Uniform 88(bn)

+              90:     89(ptr) Variable Uniform

+              91:             TypeVector 6(float) 3

+              92:             TypeArray 91(fvec3) 50

+          93(bi):             TypeStruct 92

+              94:             TypeArray 93(bi) 86

+              95:             TypePointer Uniform 94

+       96(bname):     95(ptr) Variable Uniform

          4(main):           2 Function None 3

                5:             Label

               13:     12(ptr) Variable Function

@@ -124,33 +135,29 @@
                               Store 24(i2) 25

               37:     36(ptr) AccessChain 33(gl_ClipDistance) 35

               38:    6(float) Load 37

-              39:   26(fvec4) Load 28(o)

-              40:   26(fvec4) CompositeInsert 38 39 1

-                              Store 28(o) 40

-              43:   26(fvec4) Load 42(k)

-              45:   44(ivec4) ConvertFToS 43

-              46:     34(int) CompositeExtract 45 0

-              47:     36(ptr) AccessChain 33(gl_ClipDistance) 46

-              48:    6(float) Load 47

-              49:   26(fvec4) Load 28(o)

-              50:   26(fvec4) CompositeInsert 48 49 2

-                              Store 28(o) 50

-              55:          52 Load 54(sampR)

-              57:   56(ivec2) ImageQuerySize 55

-              62:          59 Load 61(sampB)

-              63:     34(int) ImageQuerySize 62

-              64:   56(ivec2) CompositeConstruct 63 63

-              65:   56(ivec2) IAdd 57 64

-              67:   66(fvec2) ConvertSToF 65

-              68:    6(float) CompositeExtract 67 0

-              70:    6(float) FDiv 68 69

-              71:   26(fvec4) Load 28(o)

-              72:   26(fvec4) CompositeInsert 70 71 3

-                              Store 28(o) 72

-              73:    6(float) FunctionCall 8(foo()

-              74:   26(fvec4) Load 28(o)

-              75:   26(fvec4) CompositeInsert 73 74 2

-                              Store 28(o) 75

+              41:     40(ptr) AccessChain 28(o) 39

+                              Store 41 38

+              44:   26(fvec4) Load 43(k)

+              46:   45(ivec4) ConvertFToS 44

+              47:     34(int) CompositeExtract 46 0

+              48:     36(ptr) AccessChain 33(gl_ClipDistance) 47

+              49:    6(float) Load 48

+              51:     40(ptr) AccessChain 28(o) 50

+                              Store 51 49

+              56:          53 Load 55(sampR)

+              58:   57(ivec2) ImageQuerySize 56

+              63:          60 Load 62(sampB)

+              64:     34(int) ImageQuerySize 63

+              65:   57(ivec2) CompositeConstruct 64 64

+              66:   57(ivec2) IAdd 58 65

+              68:   67(fvec2) ConvertSToF 66

+              69:    6(float) CompositeExtract 68 0

+              71:    6(float) FDiv 69 70

+              73:     40(ptr) AccessChain 28(o) 72

+                              Store 73 71

+              74:    6(float) FunctionCall 8(foo()

+              75:     40(ptr) AccessChain 28(o) 50

+                              Store 75 74

                               Return

                               FunctionEnd

          8(foo():    6(float) Function None 7

diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index 7133df9..ea2b0cf 100755
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -3,19 +3,19 @@
 Linked geometry stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 71

 

-                              Source GLSL 150

                               Capability Geometry

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Geometry 4  "main"

+                              EntryPoint Geometry 4  "main" 18 70 10 29 33

                               ExecutionMode 4 InputTrianglesAdjacency

                               ExecutionMode 4 Invocations 0

                               ExecutionMode 4 OutputTriangleStrip

                               ExecutionMode 4 OutputVertices 30

+                              Source GLSL 150

                               Name 4  "main"

                               Name 8  "fromVertex"

                               MemberName 8(fromVertex) 0  "color"

@@ -61,7 +61,6 @@
                               Decorate 68(toFragment) Block

                               Decorate 68(toFragment) Stream 3

                               Decorate 70(toF) Stream 3

-                              Decorate 70(toF) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index f0291a8..b960466 100755
--- a/Test/baseResults/spv.150.vert.out
+++ b/Test/baseResults/spv.150.vert.out
@@ -3,30 +3,23 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 52

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 50

 

-                              Source GLSL 150

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 17 39 48 49

+                              Source GLSL 150

                               Name 4  "main"

-                              Name 13  "gl_PerVertex"

-                              MemberName 13(gl_PerVertex) 0  "gl_Position"

-                              MemberName 13(gl_PerVertex) 1  "gl_PointSize"

-                              MemberName 13(gl_PerVertex) 2  "gl_ClipDistance"

-                              MemberName 13(gl_PerVertex) 3  "gl_ClipVertex"

-                              MemberName 13(gl_PerVertex) 4  "gl_FrontColor"

-                              MemberName 13(gl_PerVertex) 5  "gl_BackColor"

-                              MemberName 13(gl_PerVertex) 6  "gl_FrontSecondaryColor"

-                              MemberName 13(gl_PerVertex) 7  "gl_BackSecondaryColor"

-                              MemberName 13(gl_PerVertex) 8  "gl_TexCoord"

-                              MemberName 13(gl_PerVertex) 9  "gl_FogFragCoord"

-                              Name 15  ""

-                              Name 19  "iv4"

-                              Name 25  "ps"

+                              Name 11  "gl_PerVertex"

+                              MemberName 11(gl_PerVertex) 0  "gl_Position"

+                              MemberName 11(gl_PerVertex) 1  "gl_PointSize"

+                              MemberName 11(gl_PerVertex) 2  "gl_ClipDistance"

+                              Name 13  ""

+                              Name 17  "iv4"

+                              Name 23  "ps"

                               Name 35  "s1"

                               MemberName 35(s1) 0  "a"

                               MemberName 35(s1) 1  "a2"

@@ -36,19 +29,16 @@
                               MemberName 37(s2) 1  "d"

                               Name 39  "s2out"

                               Name 41  "i"

-                              Name 48  "ui"

-                              Name 50  "gl_VertexID"

-                              Name 51  "gl_InstanceID"

-                              MemberDecorate 13(gl_PerVertex) 0 Invariant

-                              MemberDecorate 13(gl_PerVertex) 0 BuiltIn Position

-                              MemberDecorate 13(gl_PerVertex) 1 BuiltIn PointSize

-                              MemberDecorate 13(gl_PerVertex) 2 BuiltIn ClipDistance

-                              Decorate 13(gl_PerVertex) Block

-                              Decorate 48(ui) NoStaticUse

-                              Decorate 50(gl_VertexID) BuiltIn VertexId

-                              Decorate 50(gl_VertexID) NoStaticUse

-                              Decorate 51(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 51(gl_InstanceID) NoStaticUse

+                              Name 46  "ui"

+                              Name 48  "gl_VertexID"

+                              Name 49  "gl_InstanceID"

+                              MemberDecorate 11(gl_PerVertex) 0 Invariant

+                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position

+                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize

+                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance

+                              Decorate 11(gl_PerVertex) Block

+                              Decorate 48(gl_VertexID) BuiltIn VertexId

+                              Decorate 49(gl_InstanceID) BuiltIn InstanceId

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -56,52 +46,50 @@
                8:             TypeInt 32 0

                9:      8(int) Constant 4

               10:             TypeArray 6(float) 9

-              11:      8(int) Constant 1

-              12:             TypeArray 7(fvec4) 11

-13(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 10 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 12 6(float)

-              14:             TypePointer Output 13(gl_PerVertex)

-              15:     14(ptr) Variable Output

-              16:             TypeInt 32 1

-              17:     16(int) Constant 0

-              18:             TypePointer Input 7(fvec4)

-         19(iv4):     18(ptr) Variable Input

-              21:             TypePointer Output 7(fvec4)

-              23:     16(int) Constant 1

-              24:             TypePointer UniformConstant 6(float)

-          25(ps):     24(ptr) Variable UniformConstant

-              27:             TypePointer Output 6(float)

-              29:     16(int) Constant 2

+11(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 10

+              12:             TypePointer Output 11(gl_PerVertex)

+              13:     12(ptr) Variable Output

+              14:             TypeInt 32 1

+              15:     14(int) Constant 0

+              16:             TypePointer Input 7(fvec4)

+         17(iv4):     16(ptr) Variable Input

+              19:             TypePointer Output 7(fvec4)

+              21:     14(int) Constant 1

+              22:             TypePointer UniformConstant 6(float)

+          23(ps):     22(ptr) Variable UniformConstant

+              25:             TypePointer Output 6(float)

+              27:     14(int) Constant 2

+              28:      8(int) Constant 0

+              29:             TypePointer Input 6(float)

               33:      8(int) Constant 3

               34:             TypeArray 7(fvec4) 33

-          35(s1):             TypeStruct 16(int) 16(int) 34

+          35(s1):             TypeStruct 14(int) 14(int) 34

               36:             TypeArray 35(s1) 9

-          37(s2):             TypeStruct 16(int) 36

+          37(s2):             TypeStruct 14(int) 36

               38:             TypePointer Output 37(s2)

        39(s2out):     38(ptr) Variable Output

-              40:             TypePointer Function 16(int)

-              47:             TypePointer UniformConstant 16(int)

-          48(ui):     47(ptr) Variable UniformConstant

-              49:             TypePointer Input 16(int)

- 50(gl_VertexID):     49(ptr) Variable Input

-51(gl_InstanceID):     49(ptr) Variable Input

+              40:             TypePointer Function 14(int)

+              45:             TypePointer UniformConstant 14(int)

+          46(ui):     45(ptr) Variable UniformConstant

+              47:             TypePointer Input 14(int)

+ 48(gl_VertexID):     47(ptr) Variable Input

+49(gl_InstanceID):     47(ptr) Variable Input

          4(main):           2 Function None 3

                5:             Label

            41(i):     40(ptr) Variable Function

-              20:    7(fvec4) Load 19(iv4)

-              22:     21(ptr) AccessChain 15 17

-                              Store 22 20

-              26:    6(float) Load 25(ps)

-              28:     27(ptr) AccessChain 15 23

-                              Store 28 26

-              30:    7(fvec4) Load 19(iv4)

-              31:    6(float) CompositeExtract 30 0

-              32:     27(ptr) AccessChain 15 29 29

+              18:    7(fvec4) Load 17(iv4)

+              20:     19(ptr) AccessChain 13 15

+                              Store 20 18

+              24:    6(float) Load 23(ps)

+              26:     25(ptr) AccessChain 13 21

+                              Store 26 24

+              30:     29(ptr) AccessChain 17(iv4) 28

+              31:    6(float) Load 30

+              32:     25(ptr) AccessChain 13 27 27

                               Store 32 31

-              42:     16(int) Load 41(i)

-              43:    6(float) Load 25(ps)

-              44:     21(ptr) AccessChain 39(s2out) 23 42 29 29

-              45:    7(fvec4) Load 44

-              46:    7(fvec4) CompositeInsert 43 45 3

-                              Store 44 46

+              42:     14(int) Load 41(i)

+              43:    6(float) Load 23(ps)

+              44:     25(ptr) AccessChain 39(s2out) 21 42 27 27 33

+                              Store 44 43

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
index c867e1c..40cccb5 100755
--- a/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 40

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 25 11 39

+                              Source ESSL 300

                               Name 4  "main"

                               Name 8  "i"

                               Name 11  "gl_VertexID"

@@ -28,7 +28,6 @@
                               Decorate 25(ps) RelaxedPrecision

                               Decorate 33(gl_PointSize) BuiltIn PointSize

                               Decorate 39(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 39(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
index 3700efe..b263e5a 100755
--- a/Test/baseResults/spv.300layout.frag.out
+++ b/Test/baseResults/spv.300layout.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 37

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 29 11 9 26 15

                               ExecutionMode 4 OriginLowerLeft

+                              Source ESSL 300

                               Name 4  "main"

                               Name 9  "c"

                               Name 11  "color"

@@ -25,13 +25,11 @@
                               Decorate 9(c) RelaxedPrecision

                               Decorate 9(c) Location 7

                               Decorate 11(color) RelaxedPrecision

-                              Decorate 11(color) Smooth

                               MemberDecorate 13(S) 0 RelaxedPrecision

                               MemberDecorate 13(S) 1 RelaxedPrecision

                               Decorate 26(p) RelaxedPrecision

                               Decorate 26(p) Location 3

                               Decorate 29(pos) RelaxedPrecision

-                              Decorate 29(pos) Smooth

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index 50d37a6..26714cb 100755
--- a/Test/baseResults/spv.300layoutp.vert.out
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 114

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 117

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 53 11 73 9 51 61 81 115 116

+                              Source ESSL 300

                               Name 4  "main"

                               Name 9  "pos"

                               Name 11  "p"

@@ -36,13 +36,12 @@
                               Name 61  "iout"

                               Name 67  "uiuin"

                               Name 73  "aiv2"

-                              Name 77  "S"

-                              MemberName 77(S) 0  "c"

-                              MemberName 77(S) 1  "f"

-                              Name 79  "s"

-                              Name 112  "gl_VertexID"

-                              Name 113  "gl_InstanceID"

-                              Decorate 9(pos) Smooth

+                              Name 79  "S"

+                              MemberName 79(S) 0  "c"

+                              MemberName 79(S) 1  "f"

+                              Name 81  "s"

+                              Name 115  "gl_VertexID"

+                              Name 116  "gl_InstanceID"

                               Decorate 11(p) Location 3

                               MemberDecorate 17(Transform) 0 RowMajor

                               MemberDecorate 17(Transform) 0 Offset 0

@@ -63,14 +62,11 @@
                               MemberDecorate 43(T2) 1 RowMajor

                               Decorate 43(T2) GLSLShared

                               Decorate 43(T2) Block

-                              Decorate 51(color) Smooth

                               Decorate 53(c) Location 7

                               Decorate 61(iout) Flat

                               Decorate 73(aiv2) Location 9

-                              Decorate 112(gl_VertexID) BuiltIn VertexId

-                              Decorate 112(gl_VertexID) NoStaticUse

-                              Decorate 113(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 113(gl_InstanceID) NoStaticUse

+                              Decorate 115(gl_VertexID) BuiltIn VertexId

+                              Decorate 116(gl_InstanceID) BuiltIn InstanceId

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -116,20 +112,23 @@
               71:             TypeVector 16(int) 2

               72:             TypePointer Input 71(ivec2)

         73(aiv2):     72(ptr) Variable Input

-           77(S):             TypeStruct 14(fvec3) 6(float)

-              78:             TypePointer Output 77(S)

-           79(s):     78(ptr) Variable Output

-              84:             TypePointer Output 6(float)

-              86:             TypePointer Uniform 14(fvec3)

-              89:    6(float) Constant 1065353216

-              90:   14(fvec3) ConstantComposite 89 89 89

-              91:             TypeVector 42(bool) 3

-              97:             TypePointer Uniform 30(ivec3)

-             100:     29(int) Constant 5

-             101:   30(ivec3) ConstantComposite 100 100 100

-             111:             TypePointer Input 16(int)

-112(gl_VertexID):    111(ptr) Variable Input

-113(gl_InstanceID):    111(ptr) Variable Input

+              74:     29(int) Constant 1

+              75:             TypePointer Input 16(int)

+           79(S):             TypeStruct 14(fvec3) 6(float)

+              80:             TypePointer Output 79(S)

+           81(s):     80(ptr) Variable Output

+              84:     29(int) Constant 0

+              85:             TypePointer Input 6(float)

+              88:             TypePointer Output 6(float)

+              90:             TypePointer Uniform 14(fvec3)

+              93:    6(float) Constant 1065353216

+              94:   14(fvec3) ConstantComposite 93 93 93

+              95:             TypeVector 42(bool) 3

+             101:             TypePointer Uniform 30(ivec3)

+             104:     29(int) Constant 5

+             105:   30(ivec3) ConstantComposite 104 104 104

+115(gl_VertexID):     75(ptr) Variable Input

+116(gl_InstanceID):     75(ptr) Variable Input

          4(main):           2 Function None 3

                5:             Label

               12:    7(fvec4) Load 11(p)

@@ -159,41 +158,41 @@
               68:     29(int) Load 67(uiuin)

               69:     16(int) Bitcast 68

               70:     16(int) IAdd 65 69

-              74:   71(ivec2) Load 73(aiv2)

-              75:     16(int) CompositeExtract 74 1

-              76:     16(int) IAdd 70 75

-                              Store 61(iout) 76

-              80:   14(fvec3) Load 53(c)

-              81:     50(ptr) AccessChain 79(s) 20

-                              Store 81 80

-              82:    7(fvec4) Load 11(p)

-              83:    6(float) CompositeExtract 82 0

-              85:     84(ptr) AccessChain 79(s) 24

-                              Store 85 83

-              87:     86(ptr) AccessChain 35 55 24

-              88:   14(fvec3) Load 87

-              92:   91(bvec3) FOrdNotEqual 88 90

-              93:    42(bool) Any 92

-              94:    42(bool) LogicalNot 93

-                              SelectionMerge 96 None

-                              BranchConditional 94 95 96

-              95:               Label

-              98:     97(ptr)   AccessChain 35 62 55

-              99:   30(ivec3)   Load 98

-             102:   91(bvec3)   INotEqual 99 101

-             103:    42(bool)   Any 102

-                                Branch 96

-              96:             Label

-             104:    42(bool) Phi 93 5 103 95

-                              SelectionMerge 106 None

-                              BranchConditional 104 105 106

-             105:               Label

-             107:     50(ptr)   AccessChain 79(s) 20

-             108:   14(fvec3)   Load 107

-             109:   14(fvec3)   CompositeConstruct 89 89 89

-             110:   14(fvec3)   FAdd 108 109

-                                Store 107 110

-                                Branch 106

-             106:             Label

+              76:     75(ptr) AccessChain 73(aiv2) 74

+              77:     16(int) Load 76

+              78:     16(int) IAdd 70 77

+                              Store 61(iout) 78

+              82:   14(fvec3) Load 53(c)

+              83:     50(ptr) AccessChain 81(s) 20

+                              Store 83 82

+              86:     85(ptr) AccessChain 11(p) 84

+              87:    6(float) Load 86

+              89:     88(ptr) AccessChain 81(s) 24

+                              Store 89 87

+              91:     90(ptr) AccessChain 35 55 24

+              92:   14(fvec3) Load 91

+              96:   95(bvec3) FOrdNotEqual 92 94

+              97:    42(bool) Any 96

+              98:    42(bool) LogicalNot 97

+                              SelectionMerge 100 None

+                              BranchConditional 98 99 100

+              99:               Label

+             102:    101(ptr)   AccessChain 35 62 55

+             103:   30(ivec3)   Load 102

+             106:   95(bvec3)   INotEqual 103 105

+             107:    42(bool)   Any 106

+                                Branch 100

+             100:             Label

+             108:    42(bool) Phi 97 5 107 99

+                              SelectionMerge 110 None

+                              BranchConditional 108 109 110

+             109:               Label

+             111:     50(ptr)   AccessChain 81(s) 20

+             112:   14(fvec3)   Load 111

+             113:   14(fvec3)   CompositeConstruct 93 93 93

+             114:   14(fvec3)   FAdd 112 113

+                                Store 111 114

+                                Branch 110

+             110:             Label

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
old mode 100644
new mode 100755
index 93dba97..d95940b
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -5,16 +5,16 @@
 Linked compute stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 67

 

-                              Source ESSL 310

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint GLCompute 4  "main"

                               ExecutionMode 4 LocalSize 16 32 4

+                              Source ESSL 310

                               Name 4  "main"

                               Name 13  "outb"

                               MemberName 13(outb) 0  "f"

@@ -27,21 +27,20 @@
                               MemberName 24(outbna) 0  "k"

                               MemberName 24(outbna) 1  "na"

                               Name 26  "outbnamena"

-                              Name 43  "i"

-                              Name 49  "outs"

-                              MemberName 49(outs) 0  "s"

-                              MemberName 49(outs) 1  "va"

-                              Name 51  "outnames"

-                              Name 54  "gl_LocalInvocationID"

+                              Name 42  "i"

+                              Name 48  "outs"

+                              MemberName 48(outs) 0  "s"

+                              MemberName 48(outs) 1  "va"

+                              Name 50  "outnames"

+                              Name 53  "gl_LocalInvocationID"

                               Decorate 13(outb) GLSLShared

                               Decorate 13(outb) BufferBlock

                               Decorate 24(outbna) GLSLShared

                               Decorate 24(outbna) BufferBlock

-                              Decorate 49(outs) GLSLShared

-                              Decorate 49(outs) BufferBlock

-                              Decorate 54(gl_LocalInvocationID) BuiltIn LocalInvocationId

+                              Decorate 48(outs) GLSLShared

+                              Decorate 48(outs) BufferBlock

+                              Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId

                               Decorate 66 BuiltIn WorkgroupSize

-                              Decorate 66 NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 0

@@ -56,8 +55,8 @@
     15(outbname):     14(ptr) Variable Uniform

               16:             TypeInt 32 1

               17:     16(int) Constant 0

-              18:             TypePointer WorkgroupLocal 10(float)

-           19(s):     18(ptr) Variable WorkgroupLocal

+              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)

@@ -67,24 +66,25 @@
               30:             TypePointer Uniform 23(fvec4)

               32:     16(int) Constant 3

               33:     16(int) Constant 18

-              34:             TypePointer Uniform 11(fvec3)

-              38:     16(int) Constant 17

-              39:   10(float) Constant 1077936128

-              40:   11(fvec3) ConstantComposite 39 39 39

-              42:             TypePointer WorkgroupLocal 16(int)

-           43(i):     42(ptr) Variable WorkgroupLocal

-              48:             TypeRuntimeArray 23(fvec4)

-        49(outs):             TypeStruct 16(int) 48

-              50:             TypePointer Uniform 49(outs)

-    51(outnames):     50(ptr) Variable Uniform

-              52:             TypeVector 6(int) 3

-              53:             TypePointer Input 52(ivec3)

-54(gl_LocalInvocationID):     53(ptr) Variable Input

+              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:   52(ivec3) ConstantComposite 63 64 65

+              66:   51(ivec3) ConstantComposite 63 64 65

          4(main):           2 Function None 3

                5:             Label

                               MemoryBarrier 7 8

@@ -96,25 +96,24 @@
               29:   23(fvec4) CompositeConstruct 28 28 28 28

               31:     30(ptr) AccessChain 26(outbnamena) 27

                               Store 31 29

-              35:     34(ptr) AccessChain 15(outbname) 32 33

-              36:   11(fvec3) Load 35

-              37:   10(float) CompositeExtract 36 0

-                              Store 19(s) 37

-              41:     34(ptr) AccessChain 15(outbname) 32 38

-                              Store 41 40

-              44:     16(int) Load 43(i)

-              45:   10(float) Load 19(s)

-              46:   11(fvec3) CompositeConstruct 45 45 45

-              47:     34(ptr) AccessChain 15(outbname) 32 44

-                              Store 47 46

-              55:   52(ivec3) Load 54(gl_LocalInvocationID)

-              56:      6(int) CompositeExtract 55 0

+              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 51(outnames) 27 56

+              59:     30(ptr) AccessChain 50(outnames) 27 56

                               Store 59 58

               60:     16(int) ArrayLength 15(outbname) 3

-              62:     61(ptr) AccessChain 51(outnames) 17

+              62:     61(ptr) AccessChain 50(outnames) 17

                               Store 62 60

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index 1a77987..5625cb3 100755
--- a/Test/baseResults/spv.330.geom.out
+++ b/Test/baseResults/spv.330.geom.out
@@ -3,20 +3,20 @@
 Linked geometry stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 32

 

-                              Source GLSL 330

-                              SourceExtension  "GL_ARB_separate_shader_objects"

                               Capability Geometry

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Geometry 4  "main"

-                              ExecutionMode 4 InputTriangles

+                              EntryPoint Geometry 4  "main" 20 13

+                              ExecutionMode 4 Triangles

                               ExecutionMode 4 Invocations 0

                               ExecutionMode 4 OutputTriangleStrip

                               ExecutionMode 4 OutputVertices 3

+                              Source GLSL 330

+                              SourceExtension  "GL_ARB_separate_shader_objects"

                               Name 4  "main"

                               Name 11  "gl_PerVertex"

                               MemberName 11(gl_PerVertex) 0  "gl_Position"

diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index 2024d53..86f8ba3 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -5,4 +5,170 @@
 Linked fragment stage:

 

 

-Missing functionality: texture gather

+// 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" 50 44 11 96 69 119 56

+                              ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 400

+                              SourceExtension  "GL_ARB_separate_shader_objects"

+                              Name 4  "main"

+                              Name 6  "foo23("

+                              Name 11  "outp"

+                              Name 15  "u2drs"

+                              Name 36  "v"

+                              Name 42  "arrayedSampler"

+                              Name 44  "i"

+                              Name 50  "c2D"

+                              Name 56  "gl_ClipDistance"

+                              Name 69  "uoutp"

+                              Name 73  "samp2dr"

+                              Name 96  "ioutp"

+                              Name 100  "isamp2DA"

+                              Name 117  "gl_FragCoord"

+                              Name 119  "vl2"

+                              Decorate 44(i) Flat

+                              Decorate 56(gl_ClipDistance) BuiltIn ClipDistance

+                              Decorate 117(gl_FragCoord) BuiltIn FragCoord

+                              Decorate 119(vl2) Location 6

+               2:             TypeVoid

+               3:             TypeFunction 2

+               8:             TypeFloat 32

+               9:             TypeVector 8(float) 4

+              10:             TypePointer Output 9(fvec4)

+        11(outp):     10(ptr) Variable Output

+              12:             TypeImage 8(float) Rect depth sampled format:Unknown

+              13:             TypeSampledImage 12

+              14:             TypePointer UniformConstant 13

+       15(u2drs):     14(ptr) Variable UniformConstant

+              18:             TypeVector 8(float) 2

+              19:    8(float) Constant 0

+              20:   18(fvec2) ConstantComposite 19 19

+              21:             TypeInt 32 1

+              22:             TypeVector 21(int) 2

+              23:     21(int) Constant 3

+              24:     21(int) Constant 4

+              25:   22(ivec2) ConstantComposite 23 24

+              28:             TypeInt 32 0

+              29:     28(int) Constant 0

+              30:             TypePointer Output 8(float)

+              35:             TypePointer Function 9(fvec4)

+              37:             TypeImage 8(float) 2D sampled format:Unknown

+              38:             TypeSampledImage 37

+              39:     28(int) Constant 5

+              40:             TypeArray 38 39

+              41:             TypePointer UniformConstant 40

+42(arrayedSampler):     41(ptr) Variable UniformConstant

+              43:             TypePointer Input 21(int)

+           44(i):     43(ptr) Variable Input

+              46:             TypePointer UniformConstant 38

+              49:             TypePointer Input 18(fvec2)

+         50(c2D):     49(ptr) Variable Input

+              53:     28(int) Constant 2

+              54:             TypeArray 8(float) 53

+              55:             TypePointer Input 54

+56(gl_ClipDistance):     55(ptr) Variable Input

+              57:     21(int) Constant 1

+              58:             TypePointer Input 8(float)

+              62:             TypeVector 8(float) 3

+              67:             TypeVector 28(int) 4

+              68:             TypePointer Output 67(ivec4)

+       69(uoutp):     68(ptr) Variable Output

+              70:             TypeImage 28(int) Rect sampled format:Unknown

+              71:             TypeSampledImage 70

+              72:             TypePointer UniformConstant 71

+     73(samp2dr):     72(ptr) Variable UniformConstant

+              76:     28(int) Constant 4

+              77:             TypeArray 22(ivec2) 76

+              78:     21(int) Constant 2

+              79:   22(ivec2) ConstantComposite 57 78

+              80:     21(int) Constant 15

+              81:     21(int) Constant 16

+              82:   22(ivec2) ConstantComposite 80 81

+              83:     21(int) Constant 4294967294

+              84:     21(int) Constant 0

+              85:   22(ivec2) ConstantComposite 83 84

+              86:          77 ConstantComposite 79 25 82 85

+              94:             TypeVector 21(int) 4

+              95:             TypePointer Output 94(ivec4)

+       96(ioutp):     95(ptr) Variable Output

+              97:             TypeImage 21(int) 2D array sampled format:Unknown

+              98:             TypeSampledImage 97

+              99:             TypePointer UniformConstant 98

+   100(isamp2DA):     99(ptr) Variable UniformConstant

+             102:    8(float) Constant 1036831949

+             103:   62(fvec3) ConstantComposite 102 102 102

+             104:   22(ivec2) ConstantComposite 57 57

+             116:             TypePointer Input 9(fvec4)

+117(gl_FragCoord):    116(ptr) Variable Input

+        119(vl2):    116(ptr) Variable Input

+         4(main):           2 Function None 3

+               5:             Label

+           36(v):     35(ptr) Variable Function

+              45:     21(int) Load 44(i)

+              47:     46(ptr) AccessChain 42(arrayedSampler) 45

+              48:          38 Load 47

+              51:   18(fvec2) Load 50(c2D)

+              52:    9(fvec4) ImageSampleImplicitLod 48 51

+                              Store 36(v) 52

+              59:     58(ptr) AccessChain 56(gl_ClipDistance) 57

+              60:    8(float) Load 59

+              61:     30(ptr) AccessChain 11(outp) 29

+                              Store 61 60

+              63:    9(fvec4) Load 36(v)

+              64:   62(fvec3) VectorShuffle 63 63 1 2 3

+              65:    9(fvec4) Load 11(outp)

+              66:    9(fvec4) VectorShuffle 65 64 0 4 5 6

+                              Store 11(outp) 66

+              74:          71 Load 73(samp2dr)

+              75:   18(fvec2) Load 50(c2D)

+              87:   67(ivec4) ImageGather 74 75 78 ConstOffsets 86

+                              Store 69(uoutp) 87

+              88:     46(ptr) AccessChain 42(arrayedSampler) 84

+              89:          38 Load 88

+              90:   18(fvec2) Load 50(c2D)

+              91:    9(fvec4) ImageGather 89 90 84

+              92:    9(fvec4) Load 11(outp)

+              93:    9(fvec4) FAdd 92 91

+                              Store 11(outp) 93

+             101:          98 Load 100(isamp2DA)

+             105:   94(ivec4) ImageGather 101 103 23 ConstOffset 104

+                              Store 96(ioutp) 105

+             106:          98 Load 100(isamp2DA)

+             107:   94(ivec4) ImageGather 106 103 23 ConstOffset 104

+             108:   94(ivec4) Load 96(ioutp)

+             109:   94(ivec4) IAdd 108 107

+                              Store 96(ioutp) 109

+             110:          98 Load 100(isamp2DA)

+             111:     21(int) Load 44(i)

+             112:   22(ivec2) CompositeConstruct 111 111

+             113:   94(ivec4) ImageGather 110 103 84 Offset 112

+             114:   94(ivec4) Load 96(ioutp)

+             115:   94(ivec4) IAdd 114 113

+                              Store 96(ioutp) 115

+             118:    9(fvec4) Load 117(gl_FragCoord)

+             120:    9(fvec4) Load 119(vl2)

+             121:    9(fvec4) FAdd 118 120

+             122:    9(fvec4) Load 11(outp)

+             123:    9(fvec4) FAdd 122 121

+                              Store 11(outp) 123

+             124:           2 FunctionCall 6(foo23()

+                              Return

+                              FunctionEnd

+       6(foo23():           2 Function None 3

+               7:             Label

+              16:          13 Load 15(u2drs)

+              17:    9(fvec4) Load 11(outp)

+              26:    8(float) CompositeExtract 17 3

+              27:    8(float) ImageSampleProjDrefExplicitLod 16 17 26 Grad ConstOffset 20 20 25

+              31:     30(ptr) AccessChain 11(outp) 29

+              32:    8(float) Load 31

+              33:    8(float) FAdd 32 27

+              34:     30(ptr) AccessChain 11(outp) 29

+                              Store 34 33

+                              Return

+                              FunctionEnd

diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index 96ca098..c1bee83 100755
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -5,17 +5,17 @@
 Linked tessellation control stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 90

 

-                              Source GLSL 400

-                              SourceExtension  "GL_ARB_separate_shader_objects"

                               Capability Tessellation

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint TessellationControl 4  "main"

+                              EntryPoint TessellationControl 4  "main" 52 76 80 81 84 85 88 89

                               ExecutionMode 4 OutputVertices 4

+                              Source GLSL 400

+                              SourceExtension  "GL_ARB_separate_shader_objects"

                               Name 4  "main"

                               Name 12  "a"

                               Name 17  "p"

@@ -62,19 +62,11 @@
                               Decorate 63(gl_TessLevelOuter) BuiltIn TessLevelOuter

                               Decorate 70(gl_TessLevelInner) Patch

                               Decorate 70(gl_TessLevelInner) BuiltIn TessLevelInner

-                              Decorate 75(outa) NoStaticUse

                               Decorate 76(patchOut) Patch

-                              Decorate 76(patchOut) NoStaticUse

-                              Decorate 80(inb) NoStaticUse

-                              Decorate 81(ind) NoStaticUse

                               Decorate 84(ivla) Location 3

-                              Decorate 84(ivla) NoStaticUse

                               Decorate 85(ivlb) Location 4

-                              Decorate 85(ivlb) NoStaticUse

                               Decorate 88(ovla) Location 3

-                              Decorate 88(ovla) NoStaticUse

                               Decorate 89(ovlb) Location 4

-                              Decorate 89(ovlb) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 0

@@ -121,8 +113,8 @@
 70(gl_TessLevelInner):     69(ptr) Variable Output

               71:   14(float) Constant 1067869798

               73:             TypeArray 10(int) 49

-              74:             TypePointer PrivateGlobal 73

-        75(outa):     74(ptr) Variable PrivateGlobal

+              74:             TypePointer Private 73

+        75(outa):     74(ptr) Variable Private

     76(patchOut):     54(ptr) Variable Output

               77:             TypeVector 14(float) 2

               78:             TypeArray 77(fvec2) 20

diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index ea24998..00c5aba 100755
--- a/Test/baseResults/spv.400.tese.out
+++ b/Test/baseResults/spv.400.tese.out
@@ -5,20 +5,20 @@
 Linked tessellation evaluation stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 98

 

-                              Source GLSL 400

-                              SourceExtension  "GL_ARB_separate_shader_objects"

                               Capability Tessellation

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint TessellationEvaluation 4  "main"

-                              ExecutionMode 4 InputTriangles

+                              EntryPoint TessellationEvaluation 4  "main" 77 68 81 82 86 90 93 94 97

+                              ExecutionMode 4 Triangles

                               ExecutionMode 4 SpacingFractionalOdd

                               ExecutionMode 4 VertexOrderCcw

                               ExecutionMode 4 PointMode

+                              Source GLSL 400

+                              SourceExtension  "GL_ARB_separate_shader_objects"

                               Name 4  "main"

                               Name 8  "a"

                               Name 13  "p"

@@ -72,19 +72,11 @@
                               MemberDecorate 66(gl_PerVertex) 2 BuiltIn ClipDistance

                               Decorate 66(gl_PerVertex) Block

                               Decorate 77(patchIn) Patch

-                              Decorate 77(patchIn) NoStaticUse

-                              Decorate 81(inb) NoStaticUse

-                              Decorate 82(ind) NoStaticUse

                               Decorate 83(testblb) Block

-                              Decorate 86(blb) NoStaticUse

                               Decorate 87(testbld) Block

-                              Decorate 90(bld) NoStaticUse

                               Decorate 93(ivla) Location 23

-                              Decorate 93(ivla) NoStaticUse

                               Decorate 94(ivlb) Location 24

-                              Decorate 94(ivlb) NoStaticUse

                               Decorate 97(ovla) Location 23

-                              Decorate 97(ovla) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index 8a0ecf3..a9922b7 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -5,4 +5,126 @@
 Linked geometry stage:

 

 

-Missing functionality: texture gather

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 74

+

+                              Capability Geometry

+               1:             ExtInstImport  "GLSL.std.450"

+                              MemoryModel Logical GLSL450

+                              EntryPoint Geometry 4  "main" 14 23 46

+                              ExecutionMode 4 Triangles

+                              ExecutionMode 4 Invocations 4

+                              ExecutionMode 4 OutputLineStrip

+                              ExecutionMode 4 OutputVertices 127

+                              Source GLSL 420

+                              Name 4  "main"

+                              Name 8  "p"

+                              Name 9  "gl_PerVertex"

+                              MemberName 9(gl_PerVertex) 0  "gl_PointSize"

+                              Name 14  "gl_in"

+                              Name 21  "gl_PerVertex"

+                              MemberName 21(gl_PerVertex) 0  "gl_PointSize"

+                              Name 23  ""

+                              Name 28  "gl_ViewportIndex"

+                              Name 31  "id"

+                              Name 33  "gl_InvocationID"

+                              Name 37  "v"

+                              Name 41  "s2D"

+                              Name 46  "coord"

+                              Name 64  "i"

+                              Name 67  "indexable"

+                              Name 73  "v4"

+                              MemberDecorate 9(gl_PerVertex) 0 BuiltIn PointSize

+                              Decorate 9(gl_PerVertex) Block

+                              MemberDecorate 21(gl_PerVertex) 0 BuiltIn PointSize

+                              Decorate 21(gl_PerVertex) Block

+                              Decorate 21(gl_PerVertex) Stream 0

+                              Decorate 23 Stream 0

+                              Decorate 28(gl_ViewportIndex) Stream 0

+                              Decorate 28(gl_ViewportIndex) BuiltIn ViewportIndex

+                              Decorate 33(gl_InvocationID) BuiltIn InvocationId

+               2:             TypeVoid

+               3:             TypeFunction 2

+               6:             TypeFloat 32

+               7:             TypePointer Function 6(float)

+ 9(gl_PerVertex):             TypeStruct 6(float)

+              10:             TypeInt 32 0

+              11:     10(int) Constant 3

+              12:             TypeArray 9(gl_PerVertex) 11

+              13:             TypePointer Input 12

+       14(gl_in):     13(ptr) Variable Input

+              15:             TypeInt 32 1

+              16:     15(int) Constant 1

+              17:     15(int) Constant 0

+              18:             TypePointer Input 6(float)

+21(gl_PerVertex):             TypeStruct 6(float)

+              22:             TypePointer Output 21(gl_PerVertex)

+              23:     22(ptr) Variable Output

+              25:             TypePointer Output 6(float)

+              27:             TypePointer Output 15(int)

+28(gl_ViewportIndex):     27(ptr) Variable Output

+              29:     15(int) Constant 7

+              30:             TypePointer Function 15(int)

+              32:             TypePointer Input 15(int)

+33(gl_InvocationID):     32(ptr) Variable Input

+              35:             TypeVector 6(float) 4

+              36:             TypePointer Function 35(fvec4)

+              38:             TypeImage 6(float) 2D sampled format:Unknown

+              39:             TypeSampledImage 38

+              40:             TypePointer UniformConstant 39

+         41(s2D):     40(ptr) Variable UniformConstant

+              43:             TypeVector 6(float) 2

+              44:             TypeArray 43(fvec2) 11

+              45:             TypePointer Input 44

+       46(coord):     45(ptr) Variable Input

+              47:             TypePointer Input 43(fvec2)

+              50:             TypeVector 15(int) 2

+              51:     10(int) Constant 5

+              52:             TypeArray 50(ivec2) 51

+              53:   50(ivec2) ConstantComposite 17 16

+              54:     15(int) Constant 4294967294

+              55:   50(ivec2) ConstantComposite 16 54

+              56:     15(int) Constant 3

+              57:   50(ivec2) ConstantComposite 17 56

+              58:     15(int) Constant 4294967293

+              59:   50(ivec2) ConstantComposite 58 17

+              60:     15(int) Constant 2

+              61:   50(ivec2) ConstantComposite 60 16

+              62:          52 ConstantComposite 53 55 57 59 61

+              63:             TypePointer UniformConstant 15(int)

+           64(i):     63(ptr) Variable UniformConstant

+              66:             TypePointer Function 52

+              68:             TypePointer Function 50(ivec2)

+              72:             TypePointer UniformConstant 35(fvec4)

+          73(v4):     72(ptr) Variable UniformConstant

+         4(main):           2 Function None 3

+               5:             Label

+            8(p):      7(ptr) Variable Function

+          31(id):     30(ptr) Variable Function

+           37(v):     36(ptr) Variable Function

+   67(indexable):     66(ptr) Variable Function

+              19:     18(ptr) AccessChain 14(gl_in) 16 17

+              20:    6(float) Load 19

+                              Store 8(p) 20

+              24:    6(float) Load 8(p)

+              26:     25(ptr) AccessChain 23 17

+                              Store 26 24

+                              Store 28(gl_ViewportIndex) 29

+                              EmitStreamVertex 16

+                              EndStreamPrimitive 17

+                              EmitVertex

+                              EndPrimitive

+              34:     15(int) Load 33(gl_InvocationID)

+                              Store 31(id) 34

+              42:          39 Load 41(s2D)

+              48:     47(ptr) AccessChain 46(coord) 17

+              49:   43(fvec2) Load 48

+              65:     15(int) Load 64(i)

+                              Store 67(indexable) 62

+              69:     68(ptr) AccessChain 67(indexable) 65

+              70:   50(ivec2) Load 69

+              71:   35(fvec4) ImageGather 42 49 17 Offset 70

+                              Store 37(v) 71

+                              Return

+                              FunctionEnd

diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index 15485c2..5ea903e 100755
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -5,65 +5,52 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 62

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 63

 

-                              Source GLSL 430

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 12 23 44 45 34 61 62

+                              Source GLSL 430

                               Name 4  "main"

                               Name 10  "gl_PerVertex"

                               MemberName 10(gl_PerVertex) 0  "gl_ClipDistance"

                               Name 12  ""

                               Name 23  "bad"

                               Name 34  "badorder3"

-                              Name 38  "f"

-                              Name 42  "uv4"

-                              Name 43  "badorder"

-                              Name 44  "badorder2"

-                              Name 45  "boundblock"

-                              MemberName 45(boundblock) 0  "aoeu"

-                              Name 47  "boundInst"

-                              Name 48  "anonblock"

-                              MemberName 48(anonblock) 0  "aoeu"

-                              Name 50  ""

-                              Name 54  "sampb1"

-                              Name 57  "sampb2"

-                              Name 58  "sampb4"

-                              Name 60  "gl_VertexID"

-                              Name 61  "gl_InstanceID"

+                              Name 39  "f"

+                              Name 43  "uv4"

+                              Name 44  "badorder"

+                              Name 45  "badorder2"

+                              Name 46  "boundblock"

+                              MemberName 46(boundblock) 0  "aoeu"

+                              Name 48  "boundInst"

+                              Name 49  "anonblock"

+                              MemberName 49(anonblock) 0  "aoeu"

+                              Name 51  ""

+                              Name 55  "sampb1"

+                              Name 58  "sampb2"

+                              Name 59  "sampb4"

+                              Name 61  "gl_VertexID"

+                              Name 62  "gl_InstanceID"

                               MemberDecorate 10(gl_PerVertex) 0 BuiltIn ClipDistance

                               Decorate 10(gl_PerVertex) Block

                               Decorate 34(badorder3) Flat

-                              Decorate 42(uv4) Location 4

-                              Decorate 42(uv4) NoStaticUse

-                              Decorate 28 NoStaticUse

-                              Decorate 28 NoStaticUse

-                              Decorate 43(badorder) NoStaticUse

-                              Decorate 44(badorder2) Smooth

-                              Decorate 44(badorder2) Invariant

-                              Decorate 44(badorder2) NoStaticUse

-                              Decorate 45(boundblock) GLSLShared

-                              Decorate 45(boundblock) Block

-                              Decorate 47(boundInst) Binding 3

-                              Decorate 47(boundInst) NoStaticUse

-                              Decorate 48(anonblock) GLSLShared

-                              Decorate 48(anonblock) Block

-                              Decorate 50 Binding 7

-                              Decorate 50 NoStaticUse

-                              Decorate 54(sampb1) Binding 4

-                              Decorate 54(sampb1) NoStaticUse

-                              Decorate 57(sampb2) Binding 5

-                              Decorate 57(sampb2) NoStaticUse

-                              Decorate 58(sampb4) Binding 31

-                              Decorate 58(sampb4) NoStaticUse

-                              Decorate 60(gl_VertexID) BuiltIn VertexId

-                              Decorate 60(gl_VertexID) NoStaticUse

-                              Decorate 61(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 61(gl_InstanceID) NoStaticUse

+                              Decorate 43(uv4) Location 4

+                              Decorate 45(badorder2) Invariant

+                              Decorate 46(boundblock) GLSLShared

+                              Decorate 46(boundblock) Block

+                              Decorate 48(boundInst) Binding 3

+                              Decorate 49(anonblock) GLSLShared

+                              Decorate 49(anonblock) Block

+                              Decorate 51 Binding 7

+                              Decorate 55(sampb1) Binding 4

+                              Decorate 58(sampb2) Binding 5

+                              Decorate 59(sampb4) Binding 31

+                              Decorate 61(gl_VertexID) BuiltIn VertexId

+                              Decorate 62(gl_InstanceID) BuiltIn InstanceId

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -83,52 +70,53 @@
               21:             TypeArray 19(fvec4) 20

               22:             TypePointer Input 21

          23(bad):     22(ptr) Variable Input

-              24:             TypePointer Input 19(fvec4)

+              24:      7(int) Constant 0

+              25:             TypePointer Input 6(float)

               28:    6(float) Constant 1082549862

               29:             TypeBool

               33:             TypePointer Output 19(fvec4)

    34(badorder3):     33(ptr) Variable Output

-              37:             TypePointer UniformConstant 6(float)

-           38(f):     37(ptr) Variable UniformConstant

-              41:             TypePointer UniformConstant 19(fvec4)

-         42(uv4):     41(ptr) Variable UniformConstant

-    43(badorder):     24(ptr) Variable Input

-   44(badorder2):     33(ptr) Variable Output

-  45(boundblock):             TypeStruct 13(int)

-              46:             TypePointer Uniform 45(boundblock)

-   47(boundInst):     46(ptr) Variable Uniform

-   48(anonblock):             TypeStruct 13(int)

-              49:             TypePointer Uniform 48(anonblock)

-              50:     49(ptr) Variable Uniform

-              51:             TypeImage 6(float) 2D sampled format:Unknown

-              52:             TypeSampledImage 51

-              53:             TypePointer UniformConstant 52

-      54(sampb1):     53(ptr) Variable UniformConstant

-              55:             TypeArray 52 20

-              56:             TypePointer UniformConstant 55

-      57(sampb2):     56(ptr) Variable UniformConstant

-      58(sampb4):     53(ptr) Variable UniformConstant

-              59:             TypePointer Input 13(int)

- 60(gl_VertexID):     59(ptr) Variable Input

-61(gl_InstanceID):     59(ptr) Variable Input

+              35:             TypePointer Input 19(fvec4)

+              38:             TypePointer UniformConstant 6(float)

+           39(f):     38(ptr) Variable UniformConstant

+              42:             TypePointer UniformConstant 19(fvec4)

+         43(uv4):     42(ptr) Variable UniformConstant

+    44(badorder):     35(ptr) Variable Input

+   45(badorder2):     33(ptr) Variable Output

+  46(boundblock):             TypeStruct 13(int)

+              47:             TypePointer Uniform 46(boundblock)

+   48(boundInst):     47(ptr) Variable Uniform

+   49(anonblock):             TypeStruct 13(int)

+              50:             TypePointer Uniform 49(anonblock)

+              51:     50(ptr) Variable Uniform

+              52:             TypeImage 6(float) 2D sampled format:Unknown

+              53:             TypeSampledImage 52

+              54:             TypePointer UniformConstant 53

+      55(sampb1):     54(ptr) Variable UniformConstant

+              56:             TypeArray 53 20

+              57:             TypePointer UniformConstant 56

+      58(sampb2):     57(ptr) Variable UniformConstant

+      59(sampb4):     54(ptr) Variable UniformConstant

+              60:             TypePointer Input 13(int)

+ 61(gl_VertexID):     60(ptr) Variable Input

+62(gl_InstanceID):     60(ptr) Variable Input

          4(main):           2 Function None 3

                5:             Label

               18:     17(ptr) AccessChain 12 14 15

                               Store 18 16

-              25:     24(ptr) AccessChain 23(bad) 14

-              26:   19(fvec4) Load 25

-              27:    6(float) CompositeExtract 26 0

+              26:     25(ptr) AccessChain 23(bad) 14 24

+              27:    6(float) Load 26

               30:    29(bool) FOrdEqual 27 28

                               SelectionMerge 32 None

                               BranchConditional 30 31 32

               31:               Label

-              35:     24(ptr)   AccessChain 23(bad) 14

-              36:   19(fvec4)   Load 35

-                                Store 34(badorder3) 36

+              36:     35(ptr)   AccessChain 23(bad) 14

+              37:   19(fvec4)   Load 36

+                                Store 34(badorder3) 37

                                 Branch 32

               32:             Label

-              39:    6(float) Load 38(f)

-              40:     17(ptr) AccessChain 12 14 14

-                              Store 40 39

+              40:    6(float) Load 39(f)

+              41:     17(ptr) AccessChain 12 14 14

+                              Store 41 40

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index d24355f..daa9f49 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 103

 

-                              Source GLSL 430

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 77 38 43

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 430

                               Name 4  "main"

                               Name 17  "foo(f1[5][7];"

                               Name 16  "a"

@@ -33,8 +33,6 @@
                               Name 93  "uAofA"

                               MemberName 93(uAofA) 0  "f"

                               Name 97  "nameAofA"

-                              Decorate 43(g5) Smooth

-                              Decorate 77(infloat) Smooth

                               Decorate 93(uAofA) GLSLShared

                               Decorate 93(uAofA) Block

                2:             TypeVoid

@@ -58,8 +56,8 @@
               37:             TypePointer Output 6(float)

     38(outfloat):     37(ptr) Variable Output

               39:    6(float) Constant 0

-              40:             TypePointer PrivateGlobal 14

-          41(g4):     40(ptr) Variable PrivateGlobal

+              40:             TypePointer Private 14

+          41(g4):     40(ptr) Variable Private

               42:             TypePointer Input 11

           43(g5):     42(ptr) Variable Input

               48:    6(float) Constant 1077936128

@@ -74,15 +72,15 @@
               61:             TypeArray 59 60

               62:      7(int) Constant 1

               63:             TypeArray 61 62

-              64:             TypePointer PrivateGlobal 63

-        65(many):     64(ptr) Variable PrivateGlobal

+              64:             TypePointer Private 63

+        65(many):     64(ptr) Variable Private

               66:             TypePointer UniformConstant 21(int)

            67(i):     66(ptr) Variable UniformConstant

            69(j):     66(ptr) Variable UniformConstant

            71(k):     66(ptr) Variable UniformConstant

               76:             TypePointer Input 6(float)

      77(infloat):     76(ptr) Variable Input

-              79:             TypePointer PrivateGlobal 6(float)

+              79:             TypePointer Private 6(float)

               91:             TypeArray 6(float) 13

               92:             TypeArray 91 60

        93(uAofA):             TypeStruct 92

diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index e9ea4cf..e18564c 100755
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -3,32 +3,29 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 416

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 418

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint Fragment 4  "main"

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 9  "v"

                               Name 11  "uv4"

                               Name 20  "i"

                               Name 22  "ui"

-                              Name 169  "uf"

-                              Name 216  "b"

-                              Name 250  "ub41"

-                              Name 252  "ub42"

-                              Name 316  "f"

-                              Name 395  "gl_FragColor"

-                              Name 413  "uiv4"

-                              Name 415  "ub"

-                              Decorate 395(gl_FragColor) BuiltIn FragColor

-                              Decorate 413(uiv4) NoStaticUse

-                              Decorate 415(ub) NoStaticUse

+                              Name 172  "uf"

+                              Name 219  "b"

+                              Name 253  "ub41"

+                              Name 255  "ub42"

+                              Name 318  "f"

+                              Name 397  "gl_FragColor"

+                              Name 415  "uiv4"

+                              Name 417  "ub"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -40,36 +37,38 @@
               19:             TypePointer Function 18(int)

               21:             TypePointer UniformConstant 18(int)

           22(ui):     21(ptr) Variable UniformConstant

-             168:             TypePointer UniformConstant 6(float)

-         169(uf):    168(ptr) Variable UniformConstant

-             214:             TypeBool

-             215:             TypePointer Function 214(bool)

-             219:             TypeVector 214(bool) 4

-             249:             TypePointer UniformConstant 219(bvec4)

-       250(ub41):    249(ptr) Variable UniformConstant

-       252(ub42):    249(ptr) Variable UniformConstant

-             306:     18(int) Constant 2

-             313:     18(int) Constant 1

-             315:             TypePointer Function 6(float)

-             345:             TypeVector 6(float) 3

-             364:    6(float) Constant 1073741824

-             371:    6(float) Constant 1065353216

-             376:     18(int) Constant 66

-             382:     18(int) Constant 17

-             394:             TypePointer Output 7(fvec4)

-395(gl_FragColor):    394(ptr) Variable Output

-             411:             TypeVector 18(int) 4

-             412:             TypePointer UniformConstant 411(ivec4)

-       413(uiv4):    412(ptr) Variable UniformConstant

-             414:             TypePointer UniformConstant 214(bool)

-         415(ub):    414(ptr) Variable UniformConstant

+             129:             TypeInt 32 0

+             130:    129(int) Constant 0

+             131:             TypePointer Function 6(float)

+             171:             TypePointer UniformConstant 6(float)

+         172(uf):    171(ptr) Variable UniformConstant

+             217:             TypeBool

+             218:             TypePointer Function 217(bool)

+             222:             TypeVector 217(bool) 4

+             252:             TypePointer UniformConstant 222(bvec4)

+       253(ub41):    252(ptr) Variable UniformConstant

+       255(ub42):    252(ptr) Variable UniformConstant

+             309:     18(int) Constant 2

+             316:     18(int) Constant 1

+             347:             TypeVector 6(float) 3

+             366:    6(float) Constant 1073741824

+             373:    6(float) Constant 1065353216

+             378:     18(int) Constant 66

+             384:     18(int) Constant 17

+             396:             TypePointer Output 7(fvec4)

+397(gl_FragColor):    396(ptr) Variable Output

+             413:             TypeVector 18(int) 4

+             414:             TypePointer UniformConstant 413(ivec4)

+       415(uiv4):    414(ptr) Variable UniformConstant

+             416:             TypePointer UniformConstant 217(bool)

+         417(ub):    416(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

             9(v):      8(ptr) Variable Function

            20(i):     19(ptr) Variable Function

-          216(b):    215(ptr) Variable Function

-          316(f):    315(ptr) Variable Function

-             396:      8(ptr) Variable Function

+          219(b):    218(ptr) Variable Function

+          318(f):    131(ptr) Variable Function

+             398:      8(ptr) Variable Function

               12:    7(fvec4) Load 11(uv4)

               13:    7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12

                               Store 9(v) 13

@@ -174,7 +173,7 @@
               98:    7(fvec4) FAdd 97 96

                               Store 9(v) 98

               99:    7(fvec4) Load 9(v)

-             100:    7(fvec4) ExtInst 1(GLSL.std.450) 32(Inversesqrt) 99

+             100:    7(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 99

              101:    7(fvec4) Load 9(v)

              102:    7(fvec4) FAdd 101 100

                               Store 9(v) 102

@@ -210,346 +209,346 @@
              127:    7(fvec4) FAdd 126 125

                               Store 9(v) 127

              128:    7(fvec4) Load 9(v)

-             129:    7(fvec4) Load 9(v)

-             130:    6(float) CompositeExtract 129 0

-             131:    7(fvec4) CompositeConstruct 130 130 130 130

-             132:    7(fvec4) FMod 128 131

-             133:    7(fvec4) Load 9(v)

-             134:    7(fvec4) FAdd 133 132

-                              Store 9(v) 134

-             135:    7(fvec4) Load 9(v)

-             136:    7(fvec4) Load 11(uv4)

-             137:    7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 135 136

+             132:    131(ptr) AccessChain 9(v) 130

+             133:    6(float) Load 132

+             134:    7(fvec4) CompositeConstruct 133 133 133 133

+             135:    7(fvec4) FMod 128 134

+             136:    7(fvec4) Load 9(v)

+             137:    7(fvec4) FAdd 136 135

+                              Store 9(v) 137

              138:    7(fvec4) Load 9(v)

-             139:    7(fvec4) FAdd 138 137

-                              Store 9(v) 139

-             140:    7(fvec4) Load 9(v)

-             141:    7(fvec4) Load 11(uv4)

-             142:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 140 141

+             139:    7(fvec4) Load 11(uv4)

+             140:    7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 138 139

+             141:    7(fvec4) Load 9(v)

+             142:    7(fvec4) FAdd 141 140

+                              Store 9(v) 142

              143:    7(fvec4) Load 9(v)

-             144:    7(fvec4) FAdd 143 142

-                              Store 9(v) 144

-             145:    7(fvec4) Load 9(v)

-             146:    7(fvec4) Load 11(uv4)

-             147:    7(fvec4) Load 11(uv4)

-             148:    7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 145 146 147

-             149:    7(fvec4) Load 9(v)

-             150:    7(fvec4) FAdd 149 148

-                              Store 9(v) 150

-             151:    7(fvec4) Load 9(v)

+             144:    7(fvec4) Load 11(uv4)

+             145:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 143 144

+             146:    7(fvec4) Load 9(v)

+             147:    7(fvec4) FAdd 146 145

+                              Store 9(v) 147

+             148:    7(fvec4) Load 9(v)

+             149:    7(fvec4) Load 11(uv4)

+             150:    7(fvec4) Load 11(uv4)

+             151:    7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 148 149 150

              152:    7(fvec4) Load 9(v)

-             153:    7(fvec4) Load 9(v)

-             154:    7(fvec4) ExtInst 1(GLSL.std.450) 46(Mix) 151 152 153

+             153:    7(fvec4) FAdd 152 151

+                              Store 9(v) 153

+             154:    7(fvec4) Load 9(v)

              155:    7(fvec4) Load 9(v)

-             156:    7(fvec4) FAdd 155 154

-                              Store 9(v) 156

-             157:    7(fvec4) Load 9(v)

+             156:    7(fvec4) Load 9(v)

+             157:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 154 155 156

              158:    7(fvec4) Load 9(v)

-             159:    7(fvec4) ExtInst 1(GLSL.std.450) 47(Step) 157 158

+             159:    7(fvec4) FAdd 158 157

+                              Store 9(v) 159

              160:    7(fvec4) Load 9(v)

-             161:    7(fvec4) FAdd 160 159

-                              Store 9(v) 161

-             162:    7(fvec4) Load 9(v)

+             161:    7(fvec4) Load 9(v)

+             162:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 160 161

              163:    7(fvec4) Load 9(v)

-             164:    7(fvec4) Load 9(v)

-             165:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Smoothstep) 162 163 164

+             164:    7(fvec4) FAdd 163 162

+                              Store 9(v) 164

+             165:    7(fvec4) Load 9(v)

              166:    7(fvec4) Load 9(v)

-             167:    7(fvec4) FAdd 166 165

-                              Store 9(v) 167

-             170:    6(float) Load 169(uf)

-             171:    7(fvec4) Load 9(v)

-             172:    7(fvec4) ExtInst 1(GLSL.std.450) 47(Step) 170 171

-             173:    7(fvec4) Load 9(v)

-             174:    7(fvec4) FAdd 173 172

-                              Store 9(v) 174

-             175:    6(float) Load 169(uf)

-             176:    6(float) Load 169(uf)

-             177:    7(fvec4) Load 9(v)

-             178:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Smoothstep) 175 176 177

-             179:    7(fvec4) Load 9(v)

-             180:    7(fvec4) FAdd 179 178

-                              Store 9(v) 180

-             181:    7(fvec4) Load 9(v)

-             182:    7(fvec4) ExtInst 1(GLSL.std.450) 68(Normalize) 181

-             183:    7(fvec4) Load 9(v)

-             184:    7(fvec4) FAdd 183 182

-                              Store 9(v) 184

-             185:    7(fvec4) Load 9(v)

+             167:    7(fvec4) Load 9(v)

+             168:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 165 166 167

+             169:    7(fvec4) Load 9(v)

+             170:    7(fvec4) FAdd 169 168

+                              Store 9(v) 170

+             173:    6(float) Load 172(uf)

+             174:    7(fvec4) Load 9(v)

+             175:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 173 174

+             176:    7(fvec4) Load 9(v)

+             177:    7(fvec4) FAdd 176 175

+                              Store 9(v) 177

+             178:    6(float) Load 172(uf)

+             179:    6(float) Load 172(uf)

+             180:    7(fvec4) Load 9(v)

+             181:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 178 179 180

+             182:    7(fvec4) Load 9(v)

+             183:    7(fvec4) FAdd 182 181

+                              Store 9(v) 183

+             184:    7(fvec4) Load 9(v)

+             185:    7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 184

              186:    7(fvec4) Load 9(v)

-             187:    7(fvec4) Load 9(v)

-             188:    7(fvec4) ExtInst 1(GLSL.std.450) 69(Faceforward) 185 186 187

+             187:    7(fvec4) FAdd 186 185

+                              Store 9(v) 187

+             188:    7(fvec4) Load 9(v)

              189:    7(fvec4) Load 9(v)

-             190:    7(fvec4) FAdd 189 188

-                              Store 9(v) 190

-             191:    7(fvec4) Load 9(v)

+             190:    7(fvec4) Load 9(v)

+             191:    7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 188 189 190

              192:    7(fvec4) Load 9(v)

-             193:    7(fvec4) ExtInst 1(GLSL.std.450) 70(Reflect) 191 192

+             193:    7(fvec4) FAdd 192 191

+                              Store 9(v) 193

              194:    7(fvec4) Load 9(v)

-             195:    7(fvec4) FAdd 194 193

-                              Store 9(v) 195

-             196:    7(fvec4) Load 9(v)

+             195:    7(fvec4) Load 9(v)

+             196:    7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 194 195

              197:    7(fvec4) Load 9(v)

-             198:    6(float) Load 169(uf)

-             199:    7(fvec4) ExtInst 1(GLSL.std.450) 71(Refract) 196 197 198

+             198:    7(fvec4) FAdd 197 196

+                              Store 9(v) 198

+             199:    7(fvec4) Load 9(v)

              200:    7(fvec4) Load 9(v)

-             201:    7(fvec4) FAdd 200 199

-                              Store 9(v) 201

-             202:    7(fvec4) Load 9(v)

-             203:    7(fvec4) DPdx 202

-             204:    7(fvec4) Load 9(v)

-             205:    7(fvec4) FAdd 204 203

-                              Store 9(v) 205

-             206:    7(fvec4) Load 9(v)

-             207:    7(fvec4) DPdy 206

-             208:    7(fvec4) Load 9(v)

-             209:    7(fvec4) FAdd 208 207

-                              Store 9(v) 209

-             210:    7(fvec4) Load 9(v)

-             211:    7(fvec4) Fwidth 210

-             212:    7(fvec4) Load 9(v)

-             213:    7(fvec4) FAdd 212 211

-                              Store 9(v) 213

-             217:    7(fvec4) Load 9(v)

-             218:    7(fvec4) Load 11(uv4)

-             220:  219(bvec4) FOrdLessThan 217 218

-             221:   214(bool) Any 220

-                              Store 216(b) 221

-             222:   214(bool) Load 216(b)

-                              SelectionMerge 224 None

-                              BranchConditional 222 223 224

-             223:               Label

-             225:    7(fvec4)   Load 9(v)

-             226:    7(fvec4)   Load 11(uv4)

-             227:  219(bvec4)   FOrdLessThanEqual 225 226

-             228:   214(bool)   Any 227

-                                Branch 224

-             224:             Label

-             229:   214(bool) Phi 222 5 228 223

-                              Store 216(b) 229

-             230:   214(bool) Load 216(b)

-                              SelectionMerge 232 None

-                              BranchConditional 230 231 232

-             231:               Label

-             233:    7(fvec4)   Load 9(v)

-             234:    7(fvec4)   Load 11(uv4)

-             235:  219(bvec4)   FOrdGreaterThan 233 234

-             236:   214(bool)   Any 235

-                                Branch 232

-             232:             Label

-             237:   214(bool) Phi 230 224 236 231

-                              Store 216(b) 237

-             238:   214(bool) Load 216(b)

-                              SelectionMerge 240 None

-                              BranchConditional 238 239 240

-             239:               Label

-             241:    7(fvec4)   Load 9(v)

-             242:    7(fvec4)   Load 11(uv4)

-             243:  219(bvec4)   FOrdGreaterThanEqual 241 242

-             244:   214(bool)   Any 243

-                                Branch 240

-             240:             Label

-             245:   214(bool) Phi 238 232 244 239

-                              Store 216(b) 245

-             246:   214(bool) Load 216(b)

-                              SelectionMerge 248 None

-                              BranchConditional 246 247 248

-             247:               Label

-             251:  219(bvec4)   Load 250(ub41)

-             253:  219(bvec4)   Load 252(ub42)

-             254:  219(bvec4)   IEqual 251 253

-             255:   214(bool)   Any 254

-                                Branch 248

-             248:             Label

-             256:   214(bool) Phi 246 240 255 247

-                              Store 216(b) 256

-             257:   214(bool) Load 216(b)

-                              SelectionMerge 259 None

-                              BranchConditional 257 258 259

-             258:               Label

-             260:  219(bvec4)   Load 250(ub41)

-             261:  219(bvec4)   Load 252(ub42)

-             262:  219(bvec4)   INotEqual 260 261

-             263:   214(bool)   Any 262

-                                Branch 259

-             259:             Label

-             264:   214(bool) Phi 257 248 263 258

-                              Store 216(b) 264

-             265:   214(bool) Load 216(b)

-             266:  219(bvec4) Load 250(ub41)

-             267:   214(bool) Any 266

-             268:   214(bool) LogicalAnd 265 267

-                              Store 216(b) 268

-             269:   214(bool) Load 216(b)

-             270:  219(bvec4) Load 250(ub41)

-             271:   214(bool) All 270

-             272:   214(bool) LogicalAnd 269 271

-                              Store 216(b) 272

-             273:   214(bool) Load 216(b)

-                              SelectionMerge 275 None

-                              BranchConditional 273 274 275

-             274:               Label

-             276:  219(bvec4)   Load 250(ub41)

-             277:  219(bvec4)   LogicalNot 276

-             278:   214(bool)   Any 277

-                                Branch 275

-             275:             Label

-             279:   214(bool) Phi 273 259 278 274

-                              Store 216(b) 279

-             280:     18(int) Load 20(i)

-             281:     18(int) Load 22(ui)

-             282:     18(int) IAdd 280 281

+             201:    6(float) Load 172(uf)

+             202:    7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 199 200 201

+             203:    7(fvec4) Load 9(v)

+             204:    7(fvec4) FAdd 203 202

+                              Store 9(v) 204

+             205:    7(fvec4) Load 9(v)

+             206:    7(fvec4) DPdx 205

+             207:    7(fvec4) Load 9(v)

+             208:    7(fvec4) FAdd 207 206

+                              Store 9(v) 208

+             209:    7(fvec4) Load 9(v)

+             210:    7(fvec4) DPdy 209

+             211:    7(fvec4) Load 9(v)

+             212:    7(fvec4) FAdd 211 210

+                              Store 9(v) 212

+             213:    7(fvec4) Load 9(v)

+             214:    7(fvec4) Fwidth 213

+             215:    7(fvec4) Load 9(v)

+             216:    7(fvec4) FAdd 215 214

+                              Store 9(v) 216

+             220:    7(fvec4) Load 9(v)

+             221:    7(fvec4) Load 11(uv4)

+             223:  222(bvec4) FOrdLessThan 220 221

+             224:   217(bool) Any 223

+                              Store 219(b) 224

+             225:   217(bool) Load 219(b)

+                              SelectionMerge 227 None

+                              BranchConditional 225 226 227

+             226:               Label

+             228:    7(fvec4)   Load 9(v)

+             229:    7(fvec4)   Load 11(uv4)

+             230:  222(bvec4)   FOrdLessThanEqual 228 229

+             231:   217(bool)   Any 230

+                                Branch 227

+             227:             Label

+             232:   217(bool) Phi 225 5 231 226

+                              Store 219(b) 232

+             233:   217(bool) Load 219(b)

+                              SelectionMerge 235 None

+                              BranchConditional 233 234 235

+             234:               Label

+             236:    7(fvec4)   Load 9(v)

+             237:    7(fvec4)   Load 11(uv4)

+             238:  222(bvec4)   FOrdGreaterThan 236 237

+             239:   217(bool)   Any 238

+                                Branch 235

+             235:             Label

+             240:   217(bool) Phi 233 227 239 234

+                              Store 219(b) 240

+             241:   217(bool) Load 219(b)

+                              SelectionMerge 243 None

+                              BranchConditional 241 242 243

+             242:               Label

+             244:    7(fvec4)   Load 9(v)

+             245:    7(fvec4)   Load 11(uv4)

+             246:  222(bvec4)   FOrdGreaterThanEqual 244 245

+             247:   217(bool)   Any 246

+                                Branch 243

+             243:             Label

+             248:   217(bool) Phi 241 235 247 242

+                              Store 219(b) 248

+             249:   217(bool) Load 219(b)

+                              SelectionMerge 251 None

+                              BranchConditional 249 250 251

+             250:               Label

+             254:  222(bvec4)   Load 253(ub41)

+             256:  222(bvec4)   Load 255(ub42)

+             257:  222(bvec4)   IEqual 254 256

+             258:   217(bool)   Any 257

+                                Branch 251

+             251:             Label

+             259:   217(bool) Phi 249 243 258 250

+                              Store 219(b) 259

+             260:   217(bool) Load 219(b)

+                              SelectionMerge 262 None

+                              BranchConditional 260 261 262

+             261:               Label

+             263:  222(bvec4)   Load 253(ub41)

+             264:  222(bvec4)   Load 255(ub42)

+             265:  222(bvec4)   INotEqual 263 264

+             266:   217(bool)   Any 265

+                                Branch 262

+             262:             Label

+             267:   217(bool) Phi 260 251 266 261

+                              Store 219(b) 267

+             268:   217(bool) Load 219(b)

+             269:  222(bvec4) Load 253(ub41)

+             270:   217(bool) Any 269

+             271:   217(bool) LogicalAnd 268 270

+                              Store 219(b) 271

+             272:   217(bool) Load 219(b)

+             273:  222(bvec4) Load 253(ub41)

+             274:   217(bool) All 273

+             275:   217(bool) LogicalAnd 272 274

+                              Store 219(b) 275

+             276:   217(bool) Load 219(b)

+                              SelectionMerge 278 None

+                              BranchConditional 276 277 278

+             277:               Label

+             279:  222(bvec4)   Load 253(ub41)

+             280:  222(bvec4)   LogicalNot 279

+             281:   217(bool)   Any 280

+                                Branch 278

+             278:             Label

+             282:   217(bool) Phi 276 262 281 277

+                              Store 219(b) 282

              283:     18(int) Load 20(i)

-             284:     18(int) IMul 282 283

-             285:     18(int) Load 22(ui)

-             286:     18(int) ISub 284 285

-             287:     18(int) Load 20(i)

-             288:     18(int) SDiv 286 287

-                              Store 20(i) 288

-             289:     18(int) Load 20(i)

-             290:     18(int) Load 22(ui)

-             291:     18(int) SMod 289 290

+             284:     18(int) Load 22(ui)

+             285:     18(int) IAdd 283 284

+             286:     18(int) Load 20(i)

+             287:     18(int) IMul 285 286

+             288:     18(int) Load 22(ui)

+             289:     18(int) ISub 287 288

+             290:     18(int) Load 20(i)

+             291:     18(int) SDiv 289 290

                               Store 20(i) 291

              292:     18(int) Load 20(i)

              293:     18(int) Load 22(ui)

-             294:   214(bool) IEqual 292 293

-             295:   214(bool) LogicalNot 294

-                              SelectionMerge 297 None

-                              BranchConditional 295 296 297

-             296:               Label

-             298:     18(int)   Load 20(i)

-             299:     18(int)   Load 22(ui)

-             300:   214(bool)   INotEqual 298 299

+             294:     18(int) SMod 292 293

+                              Store 20(i) 294

+             295:     18(int) Load 20(i)

+             296:     18(int) Load 22(ui)

+             297:   217(bool) IEqual 295 296

+             298:   217(bool) LogicalNot 297

+                              SelectionMerge 300 None

+                              BranchConditional 298 299 300

+             299:               Label

              301:     18(int)   Load 20(i)

              302:     18(int)   Load 22(ui)

-             303:   214(bool)   IEqual 301 302

-             304:   214(bool)   LogicalAnd 300 303

-             305:     18(int)   Load 20(i)

-             307:   214(bool)   INotEqual 305 306

-             308:   214(bool)   LogicalNotEqual 304 307

-                                Branch 297

-             297:             Label

-             309:   214(bool) Phi 294 275 308 296

-                              SelectionMerge 311 None

-                              BranchConditional 309 310 311

-             310:               Label

-             312:     18(int)   Load 20(i)

-             314:     18(int)   IAdd 312 313

-                                Store 20(i) 314

-                                Branch 311

-             311:             Label

-             317:    6(float) Load 169(uf)

-             318:    6(float) Load 169(uf)

-             319:    6(float) FAdd 317 318

-             320:    6(float) Load 169(uf)

-             321:    6(float) FMul 319 320

-             322:    6(float) Load 169(uf)

-             323:    6(float) FSub 321 322

-             324:    6(float) Load 169(uf)

-             325:    6(float) FDiv 323 324

-                              Store 316(f) 325

-             326:    7(fvec4) Load 9(v)

-             327:    6(float) ExtInst 1(GLSL.std.450) 65(Length) 326

-             328:    6(float) Load 316(f)

-             329:    6(float) FAdd 328 327

-                              Store 316(f) 329

-             330:    7(fvec4) Load 9(v)

-             331:    7(fvec4) Load 9(v)

-             332:    6(float) ExtInst 1(GLSL.std.450) 66(Distance) 330 331

-             333:    6(float) Load 316(f)

-             334:    6(float) FAdd 333 332

-                              Store 316(f) 334

-             335:    7(fvec4) Load 9(v)

-             336:    7(fvec4) Load 9(v)

-             337:    6(float) Dot 335 336

-             338:    6(float) Load 316(f)

-             339:    6(float) FAdd 338 337

-                              Store 316(f) 339

-             340:    6(float) Load 316(f)

-             341:    6(float) Load 169(uf)

-             342:    6(float) FMul 340 341

-             343:    6(float) Load 316(f)

-             344:    6(float) FAdd 343 342

-                              Store 316(f) 344

-             346:    7(fvec4) Load 9(v)

-             347:  345(fvec3) VectorShuffle 346 346 0 1 2

+             303:   217(bool)   INotEqual 301 302

+             304:     18(int)   Load 20(i)

+             305:     18(int)   Load 22(ui)

+             306:   217(bool)   IEqual 304 305

+             307:   217(bool)   LogicalAnd 303 306

+             308:     18(int)   Load 20(i)

+             310:   217(bool)   INotEqual 308 309

+             311:   217(bool)   LogicalNotEqual 307 310

+                                Branch 300

+             300:             Label

+             312:   217(bool) Phi 297 278 311 299

+                              SelectionMerge 314 None

+                              BranchConditional 312 313 314

+             313:               Label

+             315:     18(int)   Load 20(i)

+             317:     18(int)   IAdd 315 316

+                                Store 20(i) 317

+                                Branch 314

+             314:             Label

+             319:    6(float) Load 172(uf)

+             320:    6(float) Load 172(uf)

+             321:    6(float) FAdd 319 320

+             322:    6(float) Load 172(uf)

+             323:    6(float) FMul 321 322

+             324:    6(float) Load 172(uf)

+             325:    6(float) FSub 323 324

+             326:    6(float) Load 172(uf)

+             327:    6(float) FDiv 325 326

+                              Store 318(f) 327

+             328:    7(fvec4) Load 9(v)

+             329:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 328

+             330:    6(float) Load 318(f)

+             331:    6(float) FAdd 330 329

+                              Store 318(f) 331

+             332:    7(fvec4) Load 9(v)

+             333:    7(fvec4) Load 9(v)

+             334:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 332 333

+             335:    6(float) Load 318(f)

+             336:    6(float) FAdd 335 334

+                              Store 318(f) 336

+             337:    7(fvec4) Load 9(v)

+             338:    7(fvec4) Load 9(v)

+             339:    6(float) Dot 337 338

+             340:    6(float) Load 318(f)

+             341:    6(float) FAdd 340 339

+                              Store 318(f) 341

+             342:    6(float) Load 318(f)

+             343:    6(float) Load 172(uf)

+             344:    6(float) FMul 342 343

+             345:    6(float) Load 318(f)

+             346:    6(float) FAdd 345 344

+                              Store 318(f) 346

              348:    7(fvec4) Load 9(v)

-             349:  345(fvec3) VectorShuffle 348 348 0 1 2

-             350:  345(fvec3) ExtInst 1(GLSL.std.450) 67(Cross) 347 349

-             351:    6(float) CompositeExtract 350 0

-             352:    6(float) Load 316(f)

-             353:    6(float) FAdd 352 351

-                              Store 316(f) 353

-             354:    6(float) Load 316(f)

-             355:    6(float) Load 169(uf)

-             356:   214(bool) FOrdEqual 354 355

-             357:   214(bool) LogicalNot 356

-                              SelectionMerge 359 None

-                              BranchConditional 357 358 359

-             358:               Label

-             360:    6(float)   Load 316(f)

-             361:    6(float)   Load 169(uf)

-             362:   214(bool)   FOrdNotEqual 360 361

-             363:    6(float)   Load 316(f)

-             365:   214(bool)   FOrdNotEqual 363 364

-             366:   214(bool)   LogicalAnd 362 365

-                                Branch 359

-             359:             Label

-             367:   214(bool) Phi 356 311 366 358

-                              SelectionMerge 369 None

-                              BranchConditional 367 368 369

-             368:               Label

-             370:    6(float)   Load 316(f)

-             372:    6(float)   FAdd 370 371

-                                Store 316(f) 372

-                                Branch 369

-             369:             Label

-             373:     18(int) Load 22(ui)

-             374:     18(int) Load 20(i)

-             375:     18(int) BitwiseAnd 374 373

-                              Store 20(i) 375

-             377:     18(int) Load 20(i)

-             378:     18(int) BitwiseOr 377 376

-                              Store 20(i) 378

-             379:     18(int) Load 22(ui)

-             380:     18(int) Load 20(i)

-             381:     18(int) BitwiseXor 380 379

-                              Store 20(i) 381

-             383:     18(int) Load 20(i)

-             384:     18(int) SMod 383 382

-                              Store 20(i) 384

+             349:  347(fvec3) VectorShuffle 348 348 0 1 2

+             350:    7(fvec4) Load 9(v)

+             351:  347(fvec3) VectorShuffle 350 350 0 1 2

+             352:  347(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 349 351

+             353:    6(float) CompositeExtract 352 0

+             354:    6(float) Load 318(f)

+             355:    6(float) FAdd 354 353

+                              Store 318(f) 355

+             356:    6(float) Load 318(f)

+             357:    6(float) Load 172(uf)

+             358:   217(bool) FOrdEqual 356 357

+             359:   217(bool) LogicalNot 358

+                              SelectionMerge 361 None

+                              BranchConditional 359 360 361

+             360:               Label

+             362:    6(float)   Load 318(f)

+             363:    6(float)   Load 172(uf)

+             364:   217(bool)   FOrdNotEqual 362 363

+             365:    6(float)   Load 318(f)

+             367:   217(bool)   FOrdNotEqual 365 366

+             368:   217(bool)   LogicalAnd 364 367

+                                Branch 361

+             361:             Label

+             369:   217(bool) Phi 358 314 368 360

+                              SelectionMerge 371 None

+                              BranchConditional 369 370 371

+             370:               Label

+             372:    6(float)   Load 318(f)

+             374:    6(float)   FAdd 372 373

+                                Store 318(f) 374

+                                Branch 371

+             371:             Label

+             375:     18(int) Load 22(ui)

+             376:     18(int) Load 20(i)

+             377:     18(int) BitwiseAnd 376 375

+                              Store 20(i) 377

+             379:     18(int) Load 20(i)

+             380:     18(int) BitwiseOr 379 378

+                              Store 20(i) 380

+             381:     18(int) Load 22(ui)

+             382:     18(int) Load 20(i)

+             383:     18(int) BitwiseXor 382 381

+                              Store 20(i) 383

              385:     18(int) Load 20(i)

-             386:     18(int) ShiftRightArithmetic 385 306

+             386:     18(int) SMod 385 384

                               Store 20(i) 386

-             387:     18(int) Load 22(ui)

-             388:     18(int) Load 20(i)

-             389:     18(int) ShiftLeftLogical 388 387

-                              Store 20(i) 389

+             387:     18(int) Load 20(i)

+             388:     18(int) ShiftRightArithmetic 387 309

+                              Store 20(i) 388

+             389:     18(int) Load 22(ui)

              390:     18(int) Load 20(i)

-             391:     18(int) Not 390

+             391:     18(int) ShiftLeftLogical 390 389

                               Store 20(i) 391

-             392:   214(bool) Load 216(b)

-             393:   214(bool) LogicalNot 392

-                              Store 216(b) 393

-             397:   214(bool) Load 216(b)

-                              SelectionMerge 399 None

-                              BranchConditional 397 398 408

-             398:               Label

-             400:     18(int)   Load 20(i)

-             401:    6(float)   ConvertSToF 400

-             402:    7(fvec4)   CompositeConstruct 401 401 401 401

-             403:    6(float)   Load 316(f)

+             392:     18(int) Load 20(i)

+             393:     18(int) Not 392

+                              Store 20(i) 393

+             394:   217(bool) Load 219(b)

+             395:   217(bool) LogicalNot 394

+                              Store 219(b) 395

+             399:   217(bool) Load 219(b)

+                              SelectionMerge 401 None

+                              BranchConditional 399 400 410

+             400:               Label

+             402:     18(int)   Load 20(i)

+             403:    6(float)   ConvertSToF 402

              404:    7(fvec4)   CompositeConstruct 403 403 403 403

-             405:    7(fvec4)   FAdd 402 404

-             406:    7(fvec4)   Load 9(v)

-             407:    7(fvec4)   FAdd 405 406

-                                Store 396 407

-                                Branch 399

-             408:               Label

-             409:    7(fvec4)   Load 9(v)

-                                Store 396 409

-                                Branch 399

-             399:             Label

-             410:    7(fvec4) Load 396

-                              Store 395(gl_FragColor) 410

+             405:    6(float)   Load 318(f)

+             406:    7(fvec4)   CompositeConstruct 405 405 405 405

+             407:    7(fvec4)   FAdd 404 406

+             408:    7(fvec4)   Load 9(v)

+             409:    7(fvec4)   FAdd 407 408

+                                Store 398 409

+                                Branch 401

+             410:               Label

+             411:    7(fvec4)   Load 9(v)

+                                Store 398 411

+                                Branch 401

+             401:             Label

+             412:    7(fvec4) Load 398

+                              Store 397(gl_FragColor) 412

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index e3392f2..811f967 100755
--- a/Test/baseResults/spv.accessChain.frag.out
+++ b/Test/baseResults/spv.accessChain.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 197

 

-                              Source GLSL 420

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 65

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 420

                               Name 4  "main"

                               Name 8  "S"

                               MemberName 8(S) 0  "color"

@@ -88,6 +88,7 @@
               68:     67(int) Constant 0

               95:             TypeVector 6(float) 2

              109:     67(int) Constant 2

+             136:             TypePointer Output 6(float)

              141:    6(float) Constant 0

              142:    7(fvec3) ConstantComposite 141 141 141

              143:             TypePointer Function 8(S)

@@ -306,12 +307,11 @@
               59:             Label

              134:     13(int) Load 57(comp)

              135:    6(float) CompositeExtract 56(i) 0 0

-             136:    7(fvec3) Load 65(OutColor)

-             137:    6(float) VectorExtractDynamic 136 134

-             138:    6(float) FAdd 137 135

-             139:    7(fvec3) Load 65(OutColor)

-             140:    7(fvec3) VectorInsertDynamic 139 138 134

-                              Store 65(OutColor) 140

+             137:    136(ptr) AccessChain 65(OutColor) 134

+             138:    6(float) Load 137

+             139:    6(float) FAdd 138 135

+             140:    136(ptr) AccessChain 65(OutColor) 134

+                              Store 140 139

                               Return

                               FunctionEnd

 62(GetColor13(struct-S-vf31;i1;):           2 Function None 15

diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
index 24b6ec5..5a71c69 100755
--- a/Test/baseResults/spv.always-discard.frag.out
+++ b/Test/baseResults/spv.always-discard.frag.out
@@ -3,27 +3,25 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 80

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 84

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 21

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 110

                               Name 4  "main"

                               Name 9  "white"

                               Name 12  "black"

                               Name 15  "color"

                               Name 18  "x"

                               Name 21  "tex_coord"

-                              Name 27  "y"

-                              Name 32  "radius"

-                              Name 55  "gl_FragColor"

-                              Decorate 21(tex_coord) Smooth

-                              Decorate 55(gl_FragColor) BuiltIn FragColor

+                              Name 30  "y"

+                              Name 36  "radius"

+                              Name 59  "gl_FragColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -37,94 +35,98 @@
               19:             TypeVector 6(float) 2

               20:             TypePointer Input 19(fvec2)

    21(tex_coord):     20(ptr) Variable Input

-              24:    6(float) Constant 1073741824

-              42:             TypeBool

-              47:    6(float) Constant 1066192077

-              54:             TypePointer Output 7(fvec4)

-55(gl_FragColor):     54(ptr) Variable Output

-              58:    6(float) Constant 1067030938

-              67:    6(float) Constant 1061158912

-              72:    6(float) Constant 1098907648

+              22:             TypeInt 32 0

+              23:     22(int) Constant 0

+              24:             TypePointer Input 6(float)

+              27:    6(float) Constant 1073741824

+              31:     22(int) Constant 1

+              46:             TypeBool

+              51:    6(float) Constant 1066192077

+              58:             TypePointer Output 7(fvec4)

+59(gl_FragColor):     58(ptr) Variable Output

+              62:    6(float) Constant 1067030938

+              71:    6(float) Constant 1061158912

+              76:    6(float) Constant 1098907648

          4(main):           2 Function None 3

                5:             Label

         9(white):      8(ptr) Variable Function

        12(black):      8(ptr) Variable Function

        15(color):      8(ptr) Variable Function

            18(x):     17(ptr) Variable Function

-           27(y):     17(ptr) Variable Function

-      32(radius):     17(ptr) Variable Function

+           30(y):     17(ptr) Variable Function

+      36(radius):     17(ptr) Variable Function

                               Store 9(white) 11

                               Store 12(black) 14

               16:    7(fvec4) Load 9(white)

                               Store 15(color) 16

-              22:   19(fvec2) Load 21(tex_coord)

-              23:    6(float) CompositeExtract 22 0

-              25:    6(float) FMul 23 24

-              26:    6(float) FSub 25 10

-                              Store 18(x) 26

-              28:   19(fvec2) Load 21(tex_coord)

-              29:    6(float) CompositeExtract 28 1

-              30:    6(float) FMul 29 24

-              31:    6(float) FSub 30 10

-                              Store 27(y) 31

-              33:    6(float) Load 18(x)

-              34:    6(float) Load 18(x)

-              35:    6(float) FMul 33 34

-              36:    6(float) Load 27(y)

-              37:    6(float) Load 27(y)

-              38:    6(float) FMul 36 37

-              39:    6(float) FAdd 35 38

-              40:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 39

-                              Store 32(radius) 40

-              41:    6(float) Load 32(radius)

-              43:    42(bool) FOrdGreaterThan 41 10

-                              SelectionMerge 45 None

-                              BranchConditional 43 44 45

-              44:               Label

-              46:    6(float)   Load 32(radius)

-              48:    42(bool)   FOrdGreaterThan 46 47

-                                SelectionMerge 50 None

-                                BranchConditional 48 49 50

-              49:                 Label

-              51:    7(fvec4)     Load 15(color)

-              52:    7(fvec4)     CompositeConstruct 10 10 10 10

-              53:    7(fvec4)     FAdd 51 52

-                                  Store 15(color) 53

-                                  Branch 50

-              50:               Label

-              56:    7(fvec4)   Load 15(color)

-                                Store 55(gl_FragColor) 56

-              57:    6(float)   Load 32(radius)

-              59:    42(bool)   FOrdGreaterThan 57 58

-                                SelectionMerge 61 None

-                                BranchConditional 59 60 61

-              60:                 Label

-              62:    7(fvec4)     Load 15(color)

-              63:    7(fvec4)     CompositeConstruct 10 10 10 10

-              64:    7(fvec4)     FAdd 62 63

-                                  Store 15(color) 64

-                                  Branch 61

-              61:               Label

-                                Branch 45

-              45:             Label

+              25:     24(ptr) AccessChain 21(tex_coord) 23

+              26:    6(float) Load 25

+              28:    6(float) FMul 26 27

+              29:    6(float) FSub 28 10

+                              Store 18(x) 29

+              32:     24(ptr) AccessChain 21(tex_coord) 31

+              33:    6(float) Load 32

+              34:    6(float) FMul 33 27

+              35:    6(float) FSub 34 10

+                              Store 30(y) 35

+              37:    6(float) Load 18(x)

+              38:    6(float) Load 18(x)

+              39:    6(float) FMul 37 38

+              40:    6(float) Load 30(y)

+              41:    6(float) Load 30(y)

+              42:    6(float) FMul 40 41

+              43:    6(float) FAdd 39 42

+              44:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 43

+                              Store 36(radius) 44

+              45:    6(float) Load 36(radius)

+              47:    46(bool) FOrdGreaterThan 45 10

+                              SelectionMerge 49 None

+                              BranchConditional 47 48 49

+              48:               Label

+              50:    6(float)   Load 36(radius)

+              52:    46(bool)   FOrdGreaterThan 50 51

+                                SelectionMerge 54 None

+                                BranchConditional 52 53 54

+              53:                 Label

+              55:    7(fvec4)     Load 15(color)

+              56:    7(fvec4)     CompositeConstruct 10 10 10 10

+              57:    7(fvec4)     FAdd 55 56

+                                  Store 15(color) 57

+                                  Branch 54

+              54:               Label

+              60:    7(fvec4)   Load 15(color)

+                                Store 59(gl_FragColor) 60

+              61:    6(float)   Load 36(radius)

+              63:    46(bool)   FOrdGreaterThan 61 62

+                                SelectionMerge 65 None

+                                BranchConditional 63 64 65

+              64:                 Label

+              66:    7(fvec4)     Load 15(color)

+              67:    7(fvec4)     CompositeConstruct 10 10 10 10

+              68:    7(fvec4)     FAdd 66 67

+                                  Store 15(color) 68

+                                  Branch 65

+              65:               Label

+                                Branch 49

+              49:             Label

                               Kill

-              65:             Label

-              66:    6(float) Load 32(radius)

-              68:    42(bool) FOrdGreaterThanEqual 66 67

-                              SelectionMerge 70 None

-                              BranchConditional 68 69 70

-              69:               Label

-              71:    6(float)   Load 32(radius)

-              73:    6(float)   ExtInst 1(GLSL.std.450) 26(Pow) 71 72

-              74:    6(float)   FDiv 73 24

-              75:    6(float)   ExtInst 1(GLSL.std.450) 4(FAbs) 74

-              76:    7(fvec4)   Load 15(color)

-              77:    7(fvec4)   CompositeConstruct 75 75 75 75

-              78:    7(fvec4)   FSub 76 77

-                                Store 15(color) 78

-                                Branch 70

-              70:             Label

-              79:    7(fvec4) Load 15(color)

-                              Store 55(gl_FragColor) 79

+              69:             Label

+              70:    6(float) Load 36(radius)

+              72:    46(bool) FOrdGreaterThanEqual 70 71

+                              SelectionMerge 74 None

+                              BranchConditional 72 73 74

+              73:               Label

+              75:    6(float)   Load 36(radius)

+              77:    6(float)   ExtInst 1(GLSL.std.450) 26(Pow) 75 76

+              78:    6(float)   FDiv 77 27

+              79:    6(float)   ExtInst 1(GLSL.std.450) 4(FAbs) 78

+              80:    7(fvec4)   Load 15(color)

+              81:    7(fvec4)   CompositeConstruct 79 79 79 79

+              82:    7(fvec4)   FSub 80 81

+                                Store 15(color) 82

+                                Branch 74

+              74:             Label

+              83:    7(fvec4) Load 15(color)

+                              Store 59(gl_FragColor) 83

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
index e2d03b4..c085a06 100755
--- a/Test/baseResults/spv.always-discard2.frag.out
+++ b/Test/baseResults/spv.always-discard2.frag.out
@@ -3,26 +3,24 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 36

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 40

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 21

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 110

                               Name 4  "main"

                               Name 9  "white"

                               Name 12  "black"

                               Name 15  "color"

                               Name 18  "x"

                               Name 21  "tex_coord"

-                              Name 27  "y"

-                              Name 34  "gl_FragColor"

-                              Decorate 21(tex_coord) Smooth

-                              Decorate 34(gl_FragColor) BuiltIn FragColor

+                              Name 30  "y"

+                              Name 38  "gl_FragColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -36,29 +34,33 @@
               19:             TypeVector 6(float) 2

               20:             TypePointer Input 19(fvec2)

    21(tex_coord):     20(ptr) Variable Input

-              24:    6(float) Constant 1073741824

-              33:             TypePointer Output 7(fvec4)

-34(gl_FragColor):     33(ptr) Variable Output

+              22:             TypeInt 32 0

+              23:     22(int) Constant 0

+              24:             TypePointer Input 6(float)

+              27:    6(float) Constant 1073741824

+              31:     22(int) Constant 1

+              37:             TypePointer Output 7(fvec4)

+38(gl_FragColor):     37(ptr) Variable Output

          4(main):           2 Function None 3

                5:             Label

         9(white):      8(ptr) Variable Function

        12(black):      8(ptr) Variable Function

        15(color):      8(ptr) Variable Function

            18(x):     17(ptr) Variable Function

-           27(y):     17(ptr) Variable Function

+           30(y):     17(ptr) Variable Function

                               Store 9(white) 11

                               Store 12(black) 14

               16:    7(fvec4) Load 9(white)

                               Store 15(color) 16

-              22:   19(fvec2) Load 21(tex_coord)

-              23:    6(float) CompositeExtract 22 0

-              25:    6(float) FMul 23 24

-              26:    6(float) FSub 25 10

-                              Store 18(x) 26

-              28:   19(fvec2) Load 21(tex_coord)

-              29:    6(float) CompositeExtract 28 1

-              30:    6(float) FMul 29 24

-              31:    6(float) FSub 30 10

-                              Store 27(y) 31

+              25:     24(ptr) AccessChain 21(tex_coord) 23

+              26:    6(float) Load 25

+              28:    6(float) FMul 26 27

+              29:    6(float) FSub 28 10

+                              Store 18(x) 29

+              32:     24(ptr) AccessChain 21(tex_coord) 31

+              33:    6(float) Load 32

+              34:    6(float) FMul 33 27

+              35:    6(float) FSub 34 10

+                              Store 30(y) 35

                               Kill

                               FunctionEnd

diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index ddf48bd..ae3ee49 100755
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -6,16 +6,16 @@
 

 

 TBD functionality: Is atomic_uint an opaque handle in the uniform storage class, or an addresses in the atomic storage class?

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 64

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 74

 

-                              Source ESSL 310

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint GLCompute 4  "main"

                               ExecutionMode 4 LocalSize 1 1 1

+                              Source ESSL 310

                               Name 4  "main"

                               Name 10  "func(au1;"

                               Name 9  "c"

@@ -29,14 +29,19 @@
                               Name 40  "origu"

                               Name 42  "atomu"

                               Name 44  "value"

-                              Name 61  "arrX"

-                              Name 62  "arrY"

-                              Name 63  "arrZ"

+                              Name 61  "dataSSB"

+                              MemberName 61(dataSSB) 0  "f"

+                              MemberName 61(dataSSB) 1  "n_frames_rendered"

+                              Name 63  "result"

+                              Name 71  "arrX"

+                              Name 72  "arrY"

+                              Name 73  "arrZ"

                               Decorate 20(counter) Binding 0

                               Decorate 28(countArr) Binding 0

-                              Decorate 61(arrX) NoStaticUse

-                              Decorate 62(arrY) NoStaticUse

-                              Decorate 63(arrZ) NoStaticUse

+                              MemberDecorate 61(dataSSB) 0 Offset 0

+                              MemberDecorate 61(dataSSB) 1 Offset 16

+                              Decorate 61(dataSSB) BufferBlock

+                              Decorate 63(result) Binding 0

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 0

@@ -44,7 +49,7 @@
                8:             TypeFunction 6(int) 7(ptr)

               14:      6(int) Constant 1

               15:      6(int) Constant 0

-              18:      6(int) Constant 256

+              18:      6(int) Constant 1024

               19:             TypePointer AtomicCounter 6(int)

      20(counter):     19(ptr) Variable AtomicCounter

               25:      6(int) Constant 4

@@ -54,21 +59,29 @@
               29:             TypeInt 32 1

               30:     29(int) Constant 2

               34:             TypePointer Function 29(int)

-              36:             TypePointer WorkgroupLocal 29(int)

-       37(atomi):     36(ptr) Variable WorkgroupLocal

+              36:             TypePointer Workgroup 29(int)

+       37(atomi):     36(ptr) Variable Workgroup

               38:     29(int) Constant 3

-              41:             TypePointer WorkgroupLocal 6(int)

-       42(atomu):     41(ptr) Variable WorkgroupLocal

+              41:             TypePointer Workgroup 6(int)

+       42(atomu):     41(ptr) Variable Workgroup

               43:             TypePointer UniformConstant 6(int)

        44(value):     43(ptr) Variable UniformConstant

               47:      6(int) Constant 7

               52:     29(int) Constant 7

               56:      6(int) Constant 10

-              59:             TypeArray 29(int) 14

-              60:             TypePointer PrivateGlobal 59

-        61(arrX):     60(ptr) Variable PrivateGlobal

-        62(arrY):     60(ptr) Variable PrivateGlobal

-        63(arrZ):     60(ptr) Variable PrivateGlobal

+              59:             TypeFloat 32

+              60:             TypeVector 29(int) 4

+     61(dataSSB):             TypeStruct 59(float) 60(ivec4)

+              62:             TypePointer Uniform 61(dataSSB)

+      63(result):     62(ptr) Variable Uniform

+              64:     29(int) Constant 1

+              65:      6(int) Constant 2

+              66:             TypePointer Uniform 29(int)

+              69:             TypeArray 29(int) 14

+              70:             TypePointer Private 69

+        71(arrX):     70(ptr) Variable Private

+        72(arrY):     70(ptr) Variable Private

+        73(arrZ):     70(ptr) Variable Private

          4(main):           2 Function None 3

                5:             Label

        21(param):      7(ptr) Variable Function

@@ -113,5 +126,7 @@
               57:      6(int) Load 44(value)

               58:      6(int) AtomicCompareExchange 42(atomu) 14 15 15 57 56

                               Store 40(origu) 58

+              67:     66(ptr) AccessChain 63(result) 64 65

+              68:     29(int) AtomicIAdd 67 14 15 64

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index f727174..64bf521 100755
--- a/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -1,25 +1,25 @@
 spv.conditionalDiscard.frag

+Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.

+

 

 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 36

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 17

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 400

                               Name 4  "main"

                               Name 9  "v"

                               Name 13  "tex"

                               Name 17  "coord"

                               Name 34  "gl_FragColor"

-                              Decorate 17(coord) Smooth

-                              Decorate 34(gl_FragColor) BuiltIn FragColor

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index 31d4980..8ca8e7b 100755
--- a/Test/baseResults/spv.conversion.frag.out
+++ b/Test/baseResults/spv.conversion.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 452

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 455

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 39 446 448 157 53 450 452 454

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "b"

                               Name 11  "u_i"

@@ -34,50 +34,29 @@
                               Name 114  "f3"

                               Name 118  "f4"

                               Name 157  "i_i4"

-                              Name 321  "gl_FragColor"

-                              Name 414  "cv2"

-                              Name 415  "cv5"

-                              Name 425  "u_b"

-                              Name 427  "u_b2"

-                              Name 429  "u_b3"

-                              Name 431  "u_b4"

-                              Name 433  "u_i2"

-                              Name 435  "u_i3"

-                              Name 437  "u_i4"

-                              Name 438  "i_b"

-                              Name 439  "i_b2"

-                              Name 440  "i_b3"

-                              Name 441  "i_b4"

-                              Name 443  "i_i2"

-                              Name 445  "i_i3"

-                              Name 447  "i_f2"

-                              Name 449  "i_f3"

-                              Name 451  "i_f4"

+                              Name 322  "gl_FragColor"

+                              Name 417  "cv2"

+                              Name 418  "cv5"

+                              Name 428  "u_b"

+                              Name 430  "u_b2"

+                              Name 432  "u_b3"

+                              Name 434  "u_b4"

+                              Name 436  "u_i2"

+                              Name 438  "u_i3"

+                              Name 440  "u_i4"

+                              Name 441  "i_b"

+                              Name 442  "i_b2"

+                              Name 443  "i_b3"

+                              Name 444  "i_b4"

+                              Name 446  "i_i2"

+                              Name 448  "i_i3"

+                              Name 450  "i_f2"

+                              Name 452  "i_f3"

+                              Name 454  "i_f4"

                               Decorate 39(i_i) Flat

-                              Decorate 53(i_f) Smooth

                               Decorate 157(i_i4) Flat

-                              Decorate 321(gl_FragColor) BuiltIn FragColor

-                              Decorate 425(u_b) NoStaticUse

-                              Decorate 427(u_b2) NoStaticUse

-                              Decorate 429(u_b3) NoStaticUse

-                              Decorate 431(u_b4) NoStaticUse

-                              Decorate 433(u_i2) NoStaticUse

-                              Decorate 435(u_i3) NoStaticUse

-                              Decorate 437(u_i4) NoStaticUse

-                              Decorate 438(i_b) NoStaticUse

-                              Decorate 439(i_b2) NoStaticUse

-                              Decorate 440(i_b3) NoStaticUse

-                              Decorate 441(i_b4) NoStaticUse

-                              Decorate 443(i_i2) Flat

-                              Decorate 443(i_i2) NoStaticUse

-                              Decorate 445(i_i3) Flat

-                              Decorate 445(i_i3) NoStaticUse

-                              Decorate 447(i_f2) Smooth

-                              Decorate 447(i_f2) NoStaticUse

-                              Decorate 449(i_f3) Smooth

-                              Decorate 449(i_f3) NoStaticUse

-                              Decorate 451(i_f4) Smooth

-                              Decorate 451(i_f4) NoStaticUse

+                              Decorate 446(i_i2) Flat

+                              Decorate 448(i_i3) Flat

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeBool

@@ -140,36 +119,39 @@
        157(i_i4):    156(ptr) Variable Input

              159:             TypeVector 13(int) 4

              160:  159(ivec4) ConstantComposite 14 14 14 14

-             320:             TypePointer Output 95(fvec4)

-321(gl_FragColor):    320(ptr) Variable Output

-             424:             TypePointer UniformConstant 6(bool)

-        425(u_b):    424(ptr) Variable UniformConstant

-             426:             TypePointer UniformConstant 23(bvec2)

-       427(u_b2):    426(ptr) Variable UniformConstant

-             428:             TypePointer UniformConstant 31(bvec3)

-       429(u_b3):    428(ptr) Variable UniformConstant

-             430:             TypePointer UniformConstant 43(bvec4)

-       431(u_b4):    430(ptr) Variable UniformConstant

-             432:             TypePointer UniformConstant 66(ivec2)

-       433(u_i2):    432(ptr) Variable UniformConstant

-             434:             TypePointer UniformConstant 79(ivec3)

-       435(u_i3):    434(ptr) Variable UniformConstant

-             436:             TypePointer UniformConstant 92(ivec4)

-       437(u_i4):    436(ptr) Variable UniformConstant

-        438(i_b):    424(ptr) Variable UniformConstant

-       439(i_b2):    426(ptr) Variable UniformConstant

-       440(i_b3):    428(ptr) Variable UniformConstant

-       441(i_b4):    430(ptr) Variable UniformConstant

-             442:             TypePointer Input 66(ivec2)

-       443(i_i2):    442(ptr) Variable Input

-             444:             TypePointer Input 79(ivec3)

-       445(i_i3):    444(ptr) Variable Input

-             446:             TypePointer Input 69(fvec2)

-       447(i_f2):    446(ptr) Variable Input

-             448:             TypePointer Input 82(fvec3)

-       449(i_f3):    448(ptr) Variable Input

-             450:             TypePointer Input 95(fvec4)

-       451(i_f4):    450(ptr) Variable Input

+             315:     13(int) Constant 1

+             321:             TypePointer Output 95(fvec4)

+322(gl_FragColor):    321(ptr) Variable Output

+             367:     13(int) Constant 2

+             380:     13(int) Constant 3

+             427:             TypePointer UniformConstant 6(bool)

+        428(u_b):    427(ptr) Variable UniformConstant

+             429:             TypePointer UniformConstant 23(bvec2)

+       430(u_b2):    429(ptr) Variable UniformConstant

+             431:             TypePointer UniformConstant 31(bvec3)

+       432(u_b3):    431(ptr) Variable UniformConstant

+             433:             TypePointer UniformConstant 43(bvec4)

+       434(u_b4):    433(ptr) Variable UniformConstant

+             435:             TypePointer UniformConstant 66(ivec2)

+       436(u_i2):    435(ptr) Variable UniformConstant

+             437:             TypePointer UniformConstant 79(ivec3)

+       438(u_i3):    437(ptr) Variable UniformConstant

+             439:             TypePointer UniformConstant 92(ivec4)

+       440(u_i4):    439(ptr) Variable UniformConstant

+        441(i_b):    427(ptr) Variable UniformConstant

+       442(i_b2):    429(ptr) Variable UniformConstant

+       443(i_b3):    431(ptr) Variable UniformConstant

+       444(i_b4):    433(ptr) Variable UniformConstant

+             445:             TypePointer Input 66(ivec2)

+       446(i_i2):    445(ptr) Variable Input

+             447:             TypePointer Input 79(ivec3)

+       448(i_i3):    447(ptr) Variable Input

+             449:             TypePointer Input 69(fvec2)

+       450(i_f2):    449(ptr) Variable Input

+             451:             TypePointer Input 82(fvec3)

+       452(i_f3):    451(ptr) Variable Input

+             453:             TypePointer Input 95(fvec4)

+       454(i_f4):    453(ptr) Variable Input

          4(main):           2 Function None 3

                5:             Label

             8(b):      7(ptr) Variable Function

@@ -186,9 +168,9 @@
          118(f4):    117(ptr) Variable Function

              297:    105(ptr) Variable Function

              307:    105(ptr) Variable Function

-             322:    117(ptr) Variable Function

-        414(cv2):     93(ptr) Variable Function

-        415(cv5):     44(ptr) Variable Function

+             323:    117(ptr) Variable Function

+        417(cv2):     93(ptr) Variable Function

+        418(cv5):     44(ptr) Variable Function

               12:      9(int) Load 11(u_i)

               15:     6(bool) INotEqual 12 14

               19:   16(float) Load 18(u_f)

@@ -455,8 +437,8 @@
                                   Store 297 302

                                   Branch 300

              303:                 Label

-             304:   69(fvec2)     Load 110(f2)

-             305:   16(float)     CompositeExtract 304 0

+             304:    105(ptr)     AccessChain 110(f2) 14

+             305:   16(float)     Load 304

                                   Store 297 305

                                   Branch 300

              300:               Label

@@ -466,130 +448,130 @@
                                 SelectionMerge 311 None

                                 BranchConditional 309 310 314

              310:                 Label

-             312:   82(fvec3)     Load 114(f3)

-             313:   16(float)     CompositeExtract 312 0

+             312:    105(ptr)     AccessChain 114(f3) 14

+             313:   16(float)     Load 312

                                   Store 307 313

                                   Branch 311

              314:                 Label

-             315:   66(ivec2)     Load 68(i2)

-             316:      9(int)     CompositeExtract 315 1

-             317:   16(float)     ConvertSToF 316

-                                  Store 307 317

+             316:     57(ptr)     AccessChain 68(i2) 315

+             317:      9(int)     Load 316

+             318:   16(float)     ConvertSToF 317

+                                  Store 307 318

                                   Branch 311

              311:               Label

-             318:   16(float)   Load 307

-             319:   16(float)   FAdd 306 318

-                                Store 106(f) 319

+             319:   16(float)   Load 307

+             320:   16(float)   FAdd 306 319

+                                Store 106(f) 320

                                 Branch 296

              296:             Label

-             323:     6(bool) Load 8(b)

-             324:   23(bvec2) Load 25(b2)

-             325:     6(bool) CompositeExtract 324 0

-             326:     6(bool) LogicalOr 323 325

-             327:   23(bvec2) Load 25(b2)

-             328:     6(bool) CompositeExtract 327 1

-             329:     6(bool) LogicalOr 326 328

-             330:   31(bvec3) Load 33(b3)

-             331:     6(bool) CompositeExtract 330 0

-             332:     6(bool) LogicalOr 329 331

-             333:   31(bvec3) Load 33(b3)

-             334:     6(bool) CompositeExtract 333 1

-             335:     6(bool) LogicalOr 332 334

-             336:   31(bvec3) Load 33(b3)

-             337:     6(bool) CompositeExtract 336 2

-             338:     6(bool) LogicalOr 335 337

-             339:   43(bvec4) Load 45(b4)

-             340:     6(bool) CompositeExtract 339 0

-             341:     6(bool) LogicalOr 338 340

-             342:   43(bvec4) Load 45(b4)

-             343:     6(bool) CompositeExtract 342 1

-             344:     6(bool) LogicalOr 341 343

-             345:   43(bvec4) Load 45(b4)

-             346:     6(bool) CompositeExtract 345 2

-             347:     6(bool) LogicalOr 344 346

-             348:   43(bvec4) Load 45(b4)

-             349:     6(bool) CompositeExtract 348 3

-             350:     6(bool) LogicalOr 347 349

-                              SelectionMerge 352 None

-                              BranchConditional 350 351 412

-             351:               Label

-             353:      9(int)   Load 58(i)

-             354:   66(ivec2)   Load 68(i2)

-             355:      9(int)   CompositeExtract 354 0

-             356:      9(int)   IAdd 353 355

-             357:   66(ivec2)   Load 68(i2)

-             358:      9(int)   CompositeExtract 357 1

-             359:      9(int)   IAdd 356 358

-             360:   79(ivec3)   Load 81(i3)

-             361:      9(int)   CompositeExtract 360 0

-             362:      9(int)   IAdd 359 361

-             363:   79(ivec3)   Load 81(i3)

-             364:      9(int)   CompositeExtract 363 1

-             365:      9(int)   IAdd 362 364

-             366:   79(ivec3)   Load 81(i3)

-             367:      9(int)   CompositeExtract 366 2

-             368:      9(int)   IAdd 365 367

-             369:   92(ivec4)   Load 94(i4)

-             370:      9(int)   CompositeExtract 369 0

-             371:      9(int)   IAdd 368 370

-             372:   92(ivec4)   Load 94(i4)

-             373:      9(int)   CompositeExtract 372 1

-             374:      9(int)   IAdd 371 373

-             375:   92(ivec4)   Load 94(i4)

-             376:      9(int)   CompositeExtract 375 2

-             377:      9(int)   IAdd 374 376

-             378:   92(ivec4)   Load 94(i4)

-             379:      9(int)   CompositeExtract 378 3

-             380:      9(int)   IAdd 377 379

-             381:   16(float)   ConvertSToF 380

-             382:   16(float)   Load 106(f)

-             383:   16(float)   FAdd 381 382

-             384:   69(fvec2)   Load 110(f2)

-             385:   16(float)   CompositeExtract 384 0

-             386:   16(float)   FAdd 383 385

-             387:   69(fvec2)   Load 110(f2)

-             388:   16(float)   CompositeExtract 387 1

+             324:     6(bool) Load 8(b)

+             325:   23(bvec2) Load 25(b2)

+             326:     6(bool) CompositeExtract 325 0

+             327:     6(bool) LogicalOr 324 326

+             328:   23(bvec2) Load 25(b2)

+             329:     6(bool) CompositeExtract 328 1

+             330:     6(bool) LogicalOr 327 329

+             331:   31(bvec3) Load 33(b3)

+             332:     6(bool) CompositeExtract 331 0

+             333:     6(bool) LogicalOr 330 332

+             334:   31(bvec3) Load 33(b3)

+             335:     6(bool) CompositeExtract 334 1

+             336:     6(bool) LogicalOr 333 335

+             337:   31(bvec3) Load 33(b3)

+             338:     6(bool) CompositeExtract 337 2

+             339:     6(bool) LogicalOr 336 338

+             340:   43(bvec4) Load 45(b4)

+             341:     6(bool) CompositeExtract 340 0

+             342:     6(bool) LogicalOr 339 341

+             343:   43(bvec4) Load 45(b4)

+             344:     6(bool) CompositeExtract 343 1

+             345:     6(bool) LogicalOr 342 344

+             346:   43(bvec4) Load 45(b4)

+             347:     6(bool) CompositeExtract 346 2

+             348:     6(bool) LogicalOr 345 347

+             349:   43(bvec4) Load 45(b4)

+             350:     6(bool) CompositeExtract 349 3

+             351:     6(bool) LogicalOr 348 350

+                              SelectionMerge 353 None

+                              BranchConditional 351 352 415

+             352:               Label

+             354:      9(int)   Load 58(i)

+             355:     57(ptr)   AccessChain 68(i2) 14

+             356:      9(int)   Load 355

+             357:      9(int)   IAdd 354 356

+             358:     57(ptr)   AccessChain 68(i2) 315

+             359:      9(int)   Load 358

+             360:      9(int)   IAdd 357 359

+             361:     57(ptr)   AccessChain 81(i3) 14

+             362:      9(int)   Load 361

+             363:      9(int)   IAdd 360 362

+             364:     57(ptr)   AccessChain 81(i3) 315

+             365:      9(int)   Load 364

+             366:      9(int)   IAdd 363 365

+             368:     57(ptr)   AccessChain 81(i3) 367

+             369:      9(int)   Load 368

+             370:      9(int)   IAdd 366 369

+             371:     57(ptr)   AccessChain 94(i4) 14

+             372:      9(int)   Load 371

+             373:      9(int)   IAdd 370 372

+             374:     57(ptr)   AccessChain 94(i4) 315

+             375:      9(int)   Load 374

+             376:      9(int)   IAdd 373 375

+             377:     57(ptr)   AccessChain 94(i4) 367

+             378:      9(int)   Load 377

+             379:      9(int)   IAdd 376 378

+             381:     57(ptr)   AccessChain 94(i4) 380

+             382:      9(int)   Load 381

+             383:      9(int)   IAdd 379 382

+             384:   16(float)   ConvertSToF 383

+             385:   16(float)   Load 106(f)

+             386:   16(float)   FAdd 384 385

+             387:    105(ptr)   AccessChain 110(f2) 14

+             388:   16(float)   Load 387

              389:   16(float)   FAdd 386 388

-             390:   82(fvec3)   Load 114(f3)

-             391:   16(float)   CompositeExtract 390 0

+             390:    105(ptr)   AccessChain 110(f2) 315

+             391:   16(float)   Load 390

              392:   16(float)   FAdd 389 391

-             393:   82(fvec3)   Load 114(f3)

-             394:   16(float)   CompositeExtract 393 1

+             393:    105(ptr)   AccessChain 114(f3) 14

+             394:   16(float)   Load 393

              395:   16(float)   FAdd 392 394

-             396:   82(fvec3)   Load 114(f3)

-             397:   16(float)   CompositeExtract 396 2

+             396:    105(ptr)   AccessChain 114(f3) 315

+             397:   16(float)   Load 396

              398:   16(float)   FAdd 395 397

-             399:   95(fvec4)   Load 118(f4)

-             400:   16(float)   CompositeExtract 399 0

+             399:    105(ptr)   AccessChain 114(f3) 367

+             400:   16(float)   Load 399

              401:   16(float)   FAdd 398 400

-             402:   95(fvec4)   Load 118(f4)

-             403:   16(float)   CompositeExtract 402 1

+             402:    105(ptr)   AccessChain 118(f4) 14

+             403:   16(float)   Load 402

              404:   16(float)   FAdd 401 403

-             405:   95(fvec4)   Load 118(f4)

-             406:   16(float)   CompositeExtract 405 2

+             405:    105(ptr)   AccessChain 118(f4) 315

+             406:   16(float)   Load 405

              407:   16(float)   FAdd 404 406

-             408:   95(fvec4)   Load 118(f4)

-             409:   16(float)   CompositeExtract 408 3

+             408:    105(ptr)   AccessChain 118(f4) 367

+             409:   16(float)   Load 408

              410:   16(float)   FAdd 407 409

-             411:   95(fvec4)   CompositeConstruct 410 410 410 410

-                                Store 322 411

-                                Branch 352

-             412:               Label

-                                Store 322 151

-                                Branch 352

-             352:             Label

-             413:   95(fvec4) Load 322

-                              Store 321(gl_FragColor) 413

-                              Store 414(cv2) 102

-             416:   92(ivec4) Load 414(cv2)

-             417:   43(bvec4) INotEqual 416 160

-                              Store 415(cv5) 417

-             418:   43(bvec4) Load 415(cv5)

-             419:   95(fvec4) Select 418 151 150

-             420:   16(float) CompositeExtract 419 0

-             421:   95(fvec4) Load 321(gl_FragColor)

-             422:   95(fvec4) CompositeConstruct 420 420 420 420

-             423:   95(fvec4) FAdd 421 422

-                              Store 321(gl_FragColor) 423

+             411:    105(ptr)   AccessChain 118(f4) 380

+             412:   16(float)   Load 411

+             413:   16(float)   FAdd 410 412

+             414:   95(fvec4)   CompositeConstruct 413 413 413 413

+                                Store 323 414

+                                Branch 353

+             415:               Label

+                                Store 323 151

+                                Branch 353

+             353:             Label

+             416:   95(fvec4) Load 323

+                              Store 322(gl_FragColor) 416

+                              Store 417(cv2) 102

+             419:   92(ivec4) Load 417(cv2)

+             420:   43(bvec4) INotEqual 419 160

+                              Store 418(cv5) 420

+             421:   43(bvec4) Load 418(cv5)

+             422:   95(fvec4) Select 421 151 150

+             423:   16(float) CompositeExtract 422 0

+             424:   95(fvec4) Load 322(gl_FragColor)

+             425:   95(fvec4) CompositeConstruct 423 423 423 423

+             426:   95(fvec4) FAdd 424 425

+                              Store 322(gl_FragColor) 426

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
index ebbd60f..ee3c691 100755
--- a/Test/baseResults/spv.dataOut.frag.out
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -5,21 +5,19 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 20

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 16

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 12  "gl_FragData"

                               Name 16  "Color"

-                              Decorate 12(gl_FragData) BuiltIn FragColor

-                              Decorate 16(Color) Smooth

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index c88d21c..6a2fd70 100755
--- a/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -5,22 +5,20 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 22

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 18

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 12  "gl_FragData"

                               Name 15  "i"

                               Name 18  "Color"

-                              Decorate 12(gl_FragData) BuiltIn FragColor

-                              Decorate 18(Color) Smooth

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
index 705f7f4..0b24b62 100755
--- a/Test/baseResults/spv.dataOutIndirect.vert.out
+++ b/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -6,25 +6,23 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 38

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 26 23 37

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "i"

                               Name 23  "colorOut"

                               Name 26  "color"

                               Name 32  "gl_Position"

                               Name 37  "gl_VertexID"

-                              Decorate 23(colorOut) Smooth

                               Decorate 32(gl_Position) BuiltIn Position

                               Decorate 37(gl_VertexID) BuiltIn VertexId

-                              Decorate 37(gl_VertexID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -54,7 +52,7 @@
               10:             Label

               13:      6(int) Load 8(i)

               16:    15(bool) SLessThan 13 14

-                              LoopMerge 11 None

+                              LoopMerge 11 10 None

                               BranchConditional 16 12 11

               12:               Label

               24:      6(int)   Load 8(i)

diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
index a3baf4a..07fb171 100755
--- a/Test/baseResults/spv.depthOut.frag.out
+++ b/Test/baseResults/spv.depthOut.frag.out
@@ -5,27 +5,23 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 18

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 15

 

-                              Source GLSL 450

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 14 10 8 8

                               ExecutionMode 4 OriginLowerLeft

-                              ExecutionMode 4 DepthAny

+                              ExecutionMode 4 DepthGreater

                               ExecutionMode 4 DepthReplacing

+                              Source GLSL 450

                               Name 4  "main"

                               Name 8  "gl_FragDepth"

                               Name 10  "Depth"

-                              Name 14  "gl_FragColor"

-                              Name 16  "Color"

+                              Name 14  "Color"

                               Decorate 8(gl_FragDepth) BuiltIn FragDepth

-                              Decorate 10(Depth) Smooth

-                              Decorate 14(gl_FragColor) BuiltIn FragColor

-                              Decorate 16(Color) Smooth

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -34,15 +30,11 @@
                9:             TypePointer Input 6(float)

        10(Depth):      9(ptr) Variable Input

               12:             TypeVector 6(float) 4

-              13:             TypePointer Output 12(fvec4)

-14(gl_FragColor):     13(ptr) Variable Output

-              15:             TypePointer Input 12(fvec4)

-       16(Color):     15(ptr) Variable Input

+              13:             TypePointer Input 12(fvec4)

+       14(Color):     13(ptr) Variable Input

          4(main):           2 Function None 3

                5:             Label

               11:    6(float) Load 10(Depth)

                               Store 8(gl_FragDepth) 11

-              17:   12(fvec4) Load 16(Color)

-                              Store 14(gl_FragColor) 17

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index 087fe69..7f48250 100755
--- a/Test/baseResults/spv.discard-dce.frag.out
+++ b/Test/baseResults/spv.discard-dce.frag.out
@@ -3,27 +3,25 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 80

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 84

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 21

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 110

                               Name 4  "main"

                               Name 9  "white"

                               Name 12  "black"

                               Name 15  "color"

                               Name 18  "x"

                               Name 21  "tex_coord"

-                              Name 27  "y"

-                              Name 32  "radius"

-                              Name 55  "gl_FragColor"

-                              Decorate 21(tex_coord) Smooth

-                              Decorate 55(gl_FragColor) BuiltIn FragColor

+                              Name 30  "y"

+                              Name 36  "radius"

+                              Name 59  "gl_FragColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -37,92 +35,96 @@
               19:             TypeVector 6(float) 2

               20:             TypePointer Input 19(fvec2)

    21(tex_coord):     20(ptr) Variable Input

-              24:    6(float) Constant 1073741824

-              42:             TypeBool

-              47:    6(float) Constant 1066192077

-              54:             TypePointer Output 7(fvec4)

-55(gl_FragColor):     54(ptr) Variable Output

-              58:    6(float) Constant 1067030938

-              67:    6(float) Constant 1061158912

-              72:    6(float) Constant 1098907648

+              22:             TypeInt 32 0

+              23:     22(int) Constant 0

+              24:             TypePointer Input 6(float)

+              27:    6(float) Constant 1073741824

+              31:     22(int) Constant 1

+              46:             TypeBool

+              51:    6(float) Constant 1066192077

+              58:             TypePointer Output 7(fvec4)

+59(gl_FragColor):     58(ptr) Variable Output

+              62:    6(float) Constant 1067030938

+              71:    6(float) Constant 1061158912

+              76:    6(float) Constant 1098907648

          4(main):           2 Function None 3

                5:             Label

         9(white):      8(ptr) Variable Function

        12(black):      8(ptr) Variable Function

        15(color):      8(ptr) Variable Function

            18(x):     17(ptr) Variable Function

-           27(y):     17(ptr) Variable Function

-      32(radius):     17(ptr) Variable Function

+           30(y):     17(ptr) Variable Function

+      36(radius):     17(ptr) Variable Function

                               Store 9(white) 11

                               Store 12(black) 14

               16:    7(fvec4) Load 9(white)

                               Store 15(color) 16

-              22:   19(fvec2) Load 21(tex_coord)

-              23:    6(float) CompositeExtract 22 0

-              25:    6(float) FMul 23 24

-              26:    6(float) FSub 25 10

-                              Store 18(x) 26

-              28:   19(fvec2) Load 21(tex_coord)

-              29:    6(float) CompositeExtract 28 1

-              30:    6(float) FMul 29 24

-              31:    6(float) FSub 30 10

-                              Store 27(y) 31

-              33:    6(float) Load 18(x)

-              34:    6(float) Load 18(x)

-              35:    6(float) FMul 33 34

-              36:    6(float) Load 27(y)

-              37:    6(float) Load 27(y)

-              38:    6(float) FMul 36 37

-              39:    6(float) FAdd 35 38

-              40:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 39

-                              Store 32(radius) 40

-              41:    6(float) Load 32(radius)

-              43:    42(bool) FOrdGreaterThan 41 10

-                              SelectionMerge 45 None

-                              BranchConditional 43 44 45

-              44:               Label

-              46:    6(float)   Load 32(radius)

-              48:    42(bool)   FOrdGreaterThan 46 47

-                                SelectionMerge 50 None

-                                BranchConditional 48 49 50

-              49:                 Label

-              51:    7(fvec4)     Load 15(color)

-              52:    7(fvec4)     CompositeConstruct 10 10 10 10

-              53:    7(fvec4)     FAdd 51 52

-                                  Store 15(color) 53

-                                  Branch 50

-              50:               Label

-              56:    7(fvec4)   Load 15(color)

-                                Store 55(gl_FragColor) 56

-              57:    6(float)   Load 32(radius)

-              59:    42(bool)   FOrdGreaterThan 57 58

-                                SelectionMerge 61 None

-                                BranchConditional 59 60 61

-              60:                 Label

-              62:    7(fvec4)     Load 15(color)

-              63:    7(fvec4)     CompositeConstruct 10 10 10 10

-              64:    7(fvec4)     FAdd 62 63

-                                  Store 15(color) 64

-                                  Branch 61

-              61:               Label

+              25:     24(ptr) AccessChain 21(tex_coord) 23

+              26:    6(float) Load 25

+              28:    6(float) FMul 26 27

+              29:    6(float) FSub 28 10

+                              Store 18(x) 29

+              32:     24(ptr) AccessChain 21(tex_coord) 31

+              33:    6(float) Load 32

+              34:    6(float) FMul 33 27

+              35:    6(float) FSub 34 10

+                              Store 30(y) 35

+              37:    6(float) Load 18(x)

+              38:    6(float) Load 18(x)

+              39:    6(float) FMul 37 38

+              40:    6(float) Load 30(y)

+              41:    6(float) Load 30(y)

+              42:    6(float) FMul 40 41

+              43:    6(float) FAdd 39 42

+              44:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 43

+                              Store 36(radius) 44

+              45:    6(float) Load 36(radius)

+              47:    46(bool) FOrdGreaterThan 45 10

+                              SelectionMerge 49 None

+                              BranchConditional 47 48 49

+              48:               Label

+              50:    6(float)   Load 36(radius)

+              52:    46(bool)   FOrdGreaterThan 50 51

+                                SelectionMerge 54 None

+                                BranchConditional 52 53 54

+              53:                 Label

+              55:    7(fvec4)     Load 15(color)

+              56:    7(fvec4)     CompositeConstruct 10 10 10 10

+              57:    7(fvec4)     FAdd 55 56

+                                  Store 15(color) 57

+                                  Branch 54

+              54:               Label

+              60:    7(fvec4)   Load 15(color)

+                                Store 59(gl_FragColor) 60

+              61:    6(float)   Load 36(radius)

+              63:    46(bool)   FOrdGreaterThan 61 62

+                                SelectionMerge 65 None

+                                BranchConditional 63 64 65

+              64:                 Label

+              66:    7(fvec4)     Load 15(color)

+              67:    7(fvec4)     CompositeConstruct 10 10 10 10

+              68:    7(fvec4)     FAdd 66 67

+                                  Store 15(color) 68

+                                  Branch 65

+              65:               Label

                                 Kill

-              45:             Label

-              66:    6(float) Load 32(radius)

-              68:    42(bool) FOrdGreaterThanEqual 66 67

-                              SelectionMerge 70 None

-                              BranchConditional 68 69 70

-              69:               Label

-              71:    6(float)   Load 32(radius)

-              73:    6(float)   ExtInst 1(GLSL.std.450) 26(Pow) 71 72

-              74:    6(float)   FDiv 73 24

-              75:    6(float)   ExtInst 1(GLSL.std.450) 4(FAbs) 74

-              76:    7(fvec4)   Load 15(color)

-              77:    7(fvec4)   CompositeConstruct 75 75 75 75

-              78:    7(fvec4)   FSub 76 77

-                                Store 15(color) 78

-                                Branch 70

-              70:             Label

-              79:    7(fvec4) Load 15(color)

-                              Store 55(gl_FragColor) 79

+              49:             Label

+              70:    6(float) Load 36(radius)

+              72:    46(bool) FOrdGreaterThanEqual 70 71

+                              SelectionMerge 74 None

+                              BranchConditional 72 73 74

+              73:               Label

+              75:    6(float)   Load 36(radius)

+              77:    6(float)   ExtInst 1(GLSL.std.450) 26(Pow) 75 76

+              78:    6(float)   FDiv 77 27

+              79:    6(float)   ExtInst 1(GLSL.std.450) 4(FAbs) 78

+              80:    7(fvec4)   Load 15(color)

+              81:    7(fvec4)   CompositeConstruct 79 79 79 79

+              82:    7(fvec4)   FSub 80 81

+                                Store 15(color) 82

+                                Branch 74

+              74:             Label

+              83:    7(fvec4) Load 15(color)

+                              Store 59(gl_FragColor) 83

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
index be11114..5da8827 100755
--- a/Test/baseResults/spv.do-simple.vert.out
+++ b/Test/baseResults/spv.do-simple.vert.out
@@ -3,23 +3,21 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 29

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 27 28

+                              Source ESSL 300

                               Name 4  "main"

                               Name 8  "i"

                               Name 27  "gl_VertexID"

                               Name 28  "gl_InstanceID"

                               Decorate 27(gl_VertexID) BuiltIn VertexId

-                              Decorate 27(gl_VertexID) NoStaticUse

                               Decorate 28(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 28(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -40,7 +38,7 @@
                               Branch 10

               10:             Label

               13:    14(bool) Phi 15 5 25 12

-                              LoopMerge 11 None

+                              LoopMerge 11 10 None

                               Branch 16

               16:             Label

                               SelectionMerge 12 None

diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out
index 5687acd..f148d51 100755
--- a/Test/baseResults/spv.do-while-continue-break.vert.out
+++ b/Test/baseResults/spv.do-while-continue-break.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 51

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 49 50

+                              Source ESSL 300

                               Name 4  "main"

                               Name 8  "i"

                               Name 24  "A"

@@ -24,9 +24,7 @@
                               Name 49  "gl_VertexID"

                               Name 50  "gl_InstanceID"

                               Decorate 49(gl_VertexID) BuiltIn VertexId

-                              Decorate 49(gl_VertexID) NoStaticUse

                               Decorate 50(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 50(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -60,7 +58,7 @@
                               Branch 10

               10:             Label

               13:    14(bool) Phi 15 5 31 28 31 38

-                              LoopMerge 11 None

+                              LoopMerge 11 10 None

                               Branch 16

               16:             Label

                               SelectionMerge 12 None

diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
index 1a204b0..d33fb8b 100755
--- a/Test/baseResults/spv.doWhileLoop.frag.out
+++ b/Test/baseResults/spv.doWhileLoop.frag.out
@@ -3,24 +3,22 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 37

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 40

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 11

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 110

                               Name 4  "main"

                               Name 9  "color"

                               Name 11  "BaseColor"

-                              Name 24  "d"

-                              Name 29  "bigColor"

-                              Name 35  "gl_FragColor"

-                              Decorate 11(BaseColor) Smooth

-                              Decorate 35(gl_FragColor) BuiltIn FragColor

+                              Name 27  "d"

+                              Name 32  "bigColor"

+                              Name 38  "gl_FragColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -30,13 +28,16 @@
    11(BaseColor):     10(ptr) Variable Input

               17:             TypeBool

               18:    17(bool) ConstantTrue

-              23:             TypePointer UniformConstant 6(float)

-           24(d):     23(ptr) Variable UniformConstant

-              28:             TypePointer UniformConstant 7(fvec4)

-    29(bigColor):     28(ptr) Variable UniformConstant

-              33:    17(bool) ConstantFalse

-              34:             TypePointer Output 7(fvec4)

-35(gl_FragColor):     34(ptr) Variable Output

+              21:             TypeInt 32 0

+              22:     21(int) Constant 0

+              23:             TypePointer Function 6(float)

+              26:             TypePointer UniformConstant 6(float)

+           27(d):     26(ptr) Variable UniformConstant

+              31:             TypePointer UniformConstant 7(fvec4)

+    32(bigColor):     31(ptr) Variable UniformConstant

+              36:    17(bool) ConstantFalse

+              37:             TypePointer Output 7(fvec4)

+38(gl_FragColor):     37(ptr) Variable Output

          4(main):           2 Function None 3

                5:             Label

         9(color):      8(ptr) Variable Function

@@ -44,29 +45,29 @@
                               Store 9(color) 12

                               Branch 13

               13:             Label

-              16:    17(bool) Phi 18 5 33 15

-                              LoopMerge 14 None

+              16:    17(bool) Phi 18 5 36 15

+                              LoopMerge 14 13 None

                               Branch 19

               19:             Label

                               SelectionMerge 15 None

                               BranchConditional 16 15 20

               20:               Label

-              21:    7(fvec4)   Load 9(color)

-              22:    6(float)   CompositeExtract 21 0

-              25:    6(float)   Load 24(d)

-              26:    17(bool)   FOrdLessThan 22 25

-                                SelectionMerge 27 None

-                                BranchConditional 26 27 14

-              27:               Label

+              24:     23(ptr)   AccessChain 9(color) 22

+              25:    6(float)   Load 24

+              28:    6(float)   Load 27(d)

+              29:    17(bool)   FOrdLessThan 25 28

+                                SelectionMerge 30 None

+                                BranchConditional 29 30 14

+              30:               Label

                                 Branch 15

               15:             Label

-              30:    7(fvec4) Load 29(bigColor)

-              31:    7(fvec4) Load 9(color)

-              32:    7(fvec4) FAdd 31 30

-                              Store 9(color) 32

+              33:    7(fvec4) Load 32(bigColor)

+              34:    7(fvec4) Load 9(color)

+              35:    7(fvec4) FAdd 34 33

+                              Store 9(color) 35

                               Branch 13

               14:             Label

-              36:    7(fvec4) Load 9(color)

-                              Store 35(gl_FragColor) 36

+              39:    7(fvec4) Load 9(color)

+                              Store 38(gl_FragColor) 39

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index 60183ef..1a63bbb 100755
--- a/Test/baseResults/spv.double.comp.out
+++ b/Test/baseResults/spv.double.comp.out
@@ -5,16 +5,16 @@
 Linked compute stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 62

 

-                              Source GLSL 430

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint GLCompute 4  "main"

                               ExecutionMode 4 LocalSize 1 1 1

+                              Source GLSL 430

                               Name 4  "main"

                               Name 8  "bufName"

                               MemberName 8(bufName) 0  "f"

@@ -32,12 +32,6 @@
                               Decorate 8(bufName) BufferBlock

                               Decorate 26(gl_GlobalInvocationID) BuiltIn GlobalInvocationId

                               Decorate 33(gl_LocalInvocationID) BuiltIn LocalInvocationId

-                              Decorate 13 NoStaticUse

-                              Decorate 56 NoStaticUse

-                              Decorate 13 NoStaticUse

-                              Decorate 13 NoStaticUse

-                              Decorate 58(roll) NoStaticUse

-                              Decorate 61(destTex) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -99,7 +93,7 @@
               41:   40(fvec2) ConvertSToF 39

               43:   40(fvec2) CompositeConstruct 42 42

               44:   40(fvec2) FDiv 41 43

-              45:    6(float) ExtInst 1(GLSL.std.450) 65(Length) 44

+              45:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 44

               46:    7(float) FConvert 45

                               Store 32(localCoef) 46

                               Store 49(aa) 53

diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index 1ed8627..ab5f922 100755
--- a/Test/baseResults/spv.earlyReturnDiscard.frag.out
+++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 111

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 112

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 18 11

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 110

                               Name 4  "main"

                               Name 9  "color"

                               Name 11  "BaseColor"

@@ -22,16 +22,12 @@
                               Name 21  "d"

                               Name 27  "bigColor"

                               Name 32  "smallColor"

-                              Name 38  "minimum"

-                              Name 52  "threshhold"

-                              Name 63  "threshhold2"

-                              Name 77  "b"

-                              Name 106  "gl_FragColor"

-                              Name 110  "threshhold3"

-                              Decorate 11(BaseColor) Smooth

-                              Decorate 18(c) Smooth

-                              Decorate 106(gl_FragColor) BuiltIn FragColor

-                              Decorate 110(threshhold3) NoStaticUse

+                              Name 41  "minimum"

+                              Name 53  "threshhold"

+                              Name 65  "threshhold2"

+                              Name 79  "b"

+                              Name 107  "gl_FragColor"

+                              Name 111  "threshhold3"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -48,15 +44,20 @@
               23:             TypeBool

     27(bigColor):     14(ptr) Variable UniformConstant

   32(smallColor):     14(ptr) Variable UniformConstant

-     38(minimum):     20(ptr) Variable UniformConstant

-              46:    6(float) Constant 1065353216

-  52(threshhold):     20(ptr) Variable UniformConstant

- 63(threshhold2):     20(ptr) Variable UniformConstant

-              76:             TypePointer UniformConstant 23(bool)

-           77(b):     76(ptr) Variable UniformConstant

-             105:             TypePointer Output 7(fvec4)

-106(gl_FragColor):    105(ptr) Variable Output

-110(threshhold3):     20(ptr) Variable UniformConstant

+              36:             TypeInt 32 0

+              37:     36(int) Constant 2

+              38:             TypePointer Function 6(float)

+     41(minimum):     20(ptr) Variable UniformConstant

+              49:    6(float) Constant 1065353216

+  53(threshhold):     20(ptr) Variable UniformConstant

+              62:     36(int) Constant 3

+ 65(threshhold2):     20(ptr) Variable UniformConstant

+              78:             TypePointer UniformConstant 23(bool)

+           79(b):     78(ptr) Variable UniformConstant

+              87:     36(int) Constant 0

+             106:             TypePointer Output 7(fvec4)

+107(gl_FragColor):    106(ptr) Variable Output

+111(threshhold3):     20(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

         9(color):      8(ptr) Variable Function

@@ -83,96 +84,92 @@
                                 Store 9(color) 35

                                 Branch 26

               26:             Label

-              36:    7(fvec4) Load 9(color)

-              37:    6(float) CompositeExtract 36 2

-              39:    6(float) Load 38(minimum)

-              40:    23(bool) FOrdLessThan 37 39

-                              SelectionMerge 42 None

-                              BranchConditional 40 41 42

-              41:               Label

+              39:     38(ptr) AccessChain 9(color) 37

+              40:    6(float) Load 39

+              42:    6(float) Load 41(minimum)

+              43:    23(bool) FOrdLessThan 40 42

+                              SelectionMerge 45 None

+                              BranchConditional 43 44 45

+              44:               Label

                                 Return

-              42:             Label

-              44:    7(fvec4) Load 9(color)

-              45:    6(float) CompositeExtract 44 2

-              47:    6(float) FAdd 45 46

-              48:    7(fvec4) Load 9(color)

-              49:    7(fvec4) CompositeInsert 47 48 2

-                              Store 9(color) 49

-              50:    7(fvec4) Load 9(color)

-              51:    6(float) CompositeExtract 50 2

-              53:    6(float) Load 52(threshhold)

-              54:    23(bool) FOrdGreaterThan 51 53

-                              SelectionMerge 56 None

-                              BranchConditional 54 55 56

-              55:               Label

+              45:             Label

+              47:     38(ptr) AccessChain 9(color) 37

+              48:    6(float) Load 47

+              50:    6(float) FAdd 48 49

+                              Store 47 50

+              51:     38(ptr) AccessChain 9(color) 37

+              52:    6(float) Load 51

+              54:    6(float) Load 53(threshhold)

+              55:    23(bool) FOrdGreaterThan 52 54

+                              SelectionMerge 57 None

+                              BranchConditional 55 56 57

+              56:               Label

                                 Kill

-              56:             Label

-              58:    7(fvec4) Load 9(color)

-              59:    7(fvec4) CompositeConstruct 46 46 46 46

-              60:    7(fvec4) FAdd 58 59

-                              Store 9(color) 60

-              61:    7(fvec4) Load 9(color)

-              62:    6(float) CompositeExtract 61 3

-              64:    6(float) Load 63(threshhold2)

-              65:    23(bool) FOrdGreaterThan 62 64

-                              SelectionMerge 67 None

-                              BranchConditional 65 66 98

-              66:               Label

-              68:    7(fvec4)   Load 9(color)

-              69:    6(float)   CompositeExtract 68 2

-              70:    6(float)   Load 63(threshhold2)

-              71:    23(bool)   FOrdGreaterThan 69 70

-                                SelectionMerge 73 None

-                                BranchConditional 71 72 75

-              72:                 Label

+              57:             Label

+              59:    7(fvec4) Load 9(color)

+              60:    7(fvec4) CompositeConstruct 49 49 49 49

+              61:    7(fvec4) FAdd 59 60

+                              Store 9(color) 61

+              63:     38(ptr) AccessChain 9(color) 62

+              64:    6(float) Load 63

+              66:    6(float) Load 65(threshhold2)

+              67:    23(bool) FOrdGreaterThan 64 66

+                              SelectionMerge 69 None

+                              BranchConditional 67 68 99

+              68:               Label

+              70:     38(ptr)   AccessChain 9(color) 37

+              71:    6(float)   Load 70

+              72:    6(float)   Load 65(threshhold2)

+              73:    23(bool)   FOrdGreaterThan 71 72

+                                SelectionMerge 75 None

+                                BranchConditional 73 74 77

+              74:                 Label

                                   Return

-              75:                 Label

-              78:    23(bool)     Load 77(b)

-                                  SelectionMerge 80 None

-                                  BranchConditional 78 79 86

-              79:                   Label

-              81:    7(fvec4)       Load 9(color)

-              82:    6(float)       CompositeExtract 81 2

-              83:    6(float)       FAdd 82 46

-              84:    7(fvec4)       Load 9(color)

-              85:    7(fvec4)       CompositeInsert 83 84 2

-                                    Store 9(color) 85

-                                    Branch 80

+              77:                 Label

+              80:    23(bool)     Load 79(b)

+                                  SelectionMerge 82 None

+                                  BranchConditional 80 81 86

+              81:                   Label

+              83:     38(ptr)       AccessChain 9(color) 37

+              84:    6(float)       Load 83

+              85:    6(float)       FAdd 84 49

+                                    Store 83 85

+                                    Branch 82

               86:                   Label

-              87:    7(fvec4)       Load 9(color)

-              88:    6(float)       CompositeExtract 87 0

-              89:    6(float)       Load 38(minimum)

-              90:    23(bool)       FOrdLessThan 88 89

-                                    SelectionMerge 92 None

-                                    BranchConditional 90 91 94

-              91:                     Label

+              88:     38(ptr)       AccessChain 9(color) 87

+              89:    6(float)       Load 88

+              90:    6(float)       Load 41(minimum)

+              91:    23(bool)       FOrdLessThan 89 90

+                                    SelectionMerge 93 None

+                                    BranchConditional 91 92 95

+              92:                     Label

                                       Kill

-              94:                     Label

-              95:    7(fvec4)         Load 9(color)

-              96:    7(fvec4)         CompositeConstruct 46 46 46 46

-              97:    7(fvec4)         FAdd 95 96

-                                      Store 9(color) 97

-                                      Branch 92

-              92:                   Label

-                                    Branch 80

-              80:                 Label

-                                  Branch 73

-              73:               Label

-                                Branch 67

-              98:               Label

-              99:    23(bool)   Load 77(b)

-                                SelectionMerge 101 None

-                                BranchConditional 99 100 103

-             100:                 Label

+              95:                     Label

+              96:    7(fvec4)         Load 9(color)

+              97:    7(fvec4)         CompositeConstruct 49 49 49 49

+              98:    7(fvec4)         FAdd 96 97

+                                      Store 9(color) 98

+                                      Branch 93

+              93:                   Label

+                                    Branch 82

+              82:                 Label

+                                  Branch 75

+              75:               Label

+                                Branch 69

+              99:               Label

+             100:    23(bool)   Load 79(b)

+                                SelectionMerge 102 None

+                                BranchConditional 100 101 104

+             101:                 Label

                                   Kill

-             103:                 Label

+             104:                 Label

                                   Return

-             101:               Label

-                                Branch 67

-              67:             Label

-             107:    7(fvec4) Load 9(color)

-             108:    7(fvec4) Load 13(color2)

-             109:    7(fvec4) FMul 107 108

-                              Store 106(gl_FragColor) 109

+             102:               Label

+                                Branch 69

+              69:             Label

+             108:    7(fvec4) Load 9(color)

+             109:    7(fvec4) Load 13(color2)

+             110:    7(fvec4) FMul 108 109

+                              Store 107(gl_FragColor) 110

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index eb6ced4..fa1b5c0 100755
--- a/Test/baseResults/spv.flowControl.frag.out
+++ b/Test/baseResults/spv.flowControl.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 41

 

-                              Source GLSL 120

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 18 11

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 120

                               Name 4  "main"

                               Name 9  "color"

                               Name 11  "BaseColor"

@@ -23,9 +23,6 @@
                               Name 27  "bigColor"

                               Name 32  "smallColor"

                               Name 37  "gl_FragColor"

-                              Decorate 11(BaseColor) Smooth

-                              Decorate 18(c) Smooth

-                              Decorate 37(gl_FragColor) BuiltIn FragColor

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.for-continue-break.vert.out b/Test/baseResults/spv.for-continue-break.vert.out
index 633a6b4..eac3ddb 100755
--- a/Test/baseResults/spv.for-continue-break.vert.out
+++ b/Test/baseResults/spv.for-continue-break.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 48

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 46 47

+                              Source ESSL 300

                               Name 4  "main"

                               Name 8  "i"

                               Name 17  "A"

@@ -24,9 +24,7 @@
                               Name 46  "gl_VertexID"

                               Name 47  "gl_InstanceID"

                               Decorate 46(gl_VertexID) BuiltIn VertexId

-                              Decorate 46(gl_VertexID) NoStaticUse

                               Decorate 47(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 47(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -57,7 +55,7 @@
               10:             Label

               13:      6(int) Load 8(i)

               16:    15(bool) SLessThan 13 14

-                              LoopMerge 11 None

+                              LoopMerge 11 10 None

                               BranchConditional 16 12 11

               12:               Label

                                 Store 17(A) 18

diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
index 9e4a7a7..95ca758 100755
--- a/Test/baseResults/spv.for-simple.vert.out
+++ b/Test/baseResults/spv.for-simple.vert.out
@@ -3,24 +3,22 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 25

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 23 24

+                              Source ESSL 300

                               Name 4  "main"

                               Name 8  "i"

                               Name 17  "j"

                               Name 23  "gl_VertexID"

                               Name 24  "gl_InstanceID"

                               Decorate 23(gl_VertexID) BuiltIn VertexId

-                              Decorate 23(gl_VertexID) NoStaticUse

                               Decorate 24(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 24(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -42,7 +40,7 @@
               10:             Label

               13:      6(int) Load 8(i)

               16:    15(bool) SLessThan 13 14

-                              LoopMerge 11 None

+                              LoopMerge 11 10 None

                               BranchConditional 16 12 11

               12:               Label

                                 Store 17(j) 18

diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
index 086f884..1be209b 100755
--- a/Test/baseResults/spv.forLoop.frag.out
+++ b/Test/baseResults/spv.forLoop.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 122

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 11 97

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 9  "color"

                               Name 11  "BaseColor"

@@ -23,15 +23,12 @@
                               Name 38  "sum"

                               Name 40  "i"

                               Name 50  "v4"

-                              Name 59  "i"

-                              Name 65  "tv4"

+                              Name 60  "i"

+                              Name 66  "tv4"

                               Name 83  "r"

                               Name 89  "i"

                               Name 97  "f"

                               Name 110  "i"

-                              Decorate 11(BaseColor) Smooth

-                              Decorate 35(gl_FragColor) BuiltIn FragColor

-                              Decorate 97(f) Smooth

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -57,10 +54,12 @@
               48:             TypeVector 47(int) 4

               49:             TypePointer UniformConstant 48(ivec4)

           50(v4):     49(ptr) Variable UniformConstant

-              70:     47(int) Constant 4

+              52:             TypePointer UniformConstant 47(int)

+              71:     47(int) Constant 4

               84:             TypeVector 6(float) 3

               96:             TypePointer Input 6(float)

            97(f):     96(ptr) Variable Input

+              99:     47(int) Constant 3

              115:     13(int) Constant 16

          4(main):           2 Function None 3

                5:             Label

@@ -68,8 +67,8 @@
            15(i):     14(ptr) Variable Function

          38(sum):     37(ptr) Variable Function

            40(i):     14(ptr) Variable Function

-           59(i):     14(ptr) Variable Function

-         65(tv4):      8(ptr) Variable Function

+           60(i):     14(ptr) Variable Function

+         66(tv4):      8(ptr) Variable Function

            83(r):      8(ptr) Variable Function

            89(i):     14(ptr) Variable Function

           110(i):     14(ptr) Variable Function

@@ -81,7 +80,7 @@
               20:     13(int) Load 15(i)

               23:     13(int) Load 22(Count)

               25:    24(bool) SLessThan 20 23

-                              LoopMerge 18 None

+                              LoopMerge 18 17 None

                               BranchConditional 25 19 18

               19:               Label

               28:    7(fvec4)   Load 27(bigColor)

@@ -101,46 +100,45 @@
               41:             Label

               44:     13(int) Load 40(i)

               46:    24(bool) SLessThan 44 45

-                              LoopMerge 42 None

+                              LoopMerge 42 41 None

                               BranchConditional 46 43 42

               43:               Label

               51:     13(int)   Load 40(i)

-              52:   48(ivec4)   Load 50(v4)

-              53:     47(int)   VectorExtractDynamic 52 51

-              54:    6(float)   ConvertUToF 53

-              55:    6(float)   Load 38(sum)

-              56:    6(float)   FAdd 55 54

-                                Store 38(sum) 56

-              57:     13(int)   Load 40(i)

-              58:     13(int)   IAdd 57 32

-                                Store 40(i) 58

+              53:     52(ptr)   AccessChain 50(v4) 51

+              54:     47(int)   Load 53

+              55:    6(float)   ConvertUToF 54

+              56:    6(float)   Load 38(sum)

+              57:    6(float)   FAdd 56 55

+                                Store 38(sum) 57

+              58:     13(int)   Load 40(i)

+              59:     13(int)   IAdd 58 32

+                                Store 40(i) 59

                                 Branch 41

               42:             Label

-                              Store 59(i) 16

-                              Branch 60

-              60:             Label

-              63:     13(int) Load 59(i)

-              64:    24(bool) SLessThan 63 45

-                              LoopMerge 61 None

-                              BranchConditional 64 62 61

-              62:               Label

-              66:     13(int)   Load 59(i)

-              67:     13(int)   Load 59(i)

-              68:   48(ivec4)   Load 50(v4)

-              69:     47(int)   VectorExtractDynamic 68 67

-              71:     47(int)   IMul 69 70

-              72:    6(float)   ConvertUToF 71

-              73:    7(fvec4)   Load 65(tv4)

-              74:    7(fvec4)   VectorInsertDynamic 73 72 66

-                                Store 65(tv4) 74

-              75:     13(int)   Load 59(i)

-              76:     13(int)   IAdd 75 32

-                                Store 59(i) 76

-                                Branch 60

+                              Store 60(i) 16

+                              Branch 61

               61:             Label

+              64:     13(int) Load 60(i)

+              65:    24(bool) SLessThan 64 45

+                              LoopMerge 62 61 None

+                              BranchConditional 65 63 62

+              63:               Label

+              67:     13(int)   Load 60(i)

+              68:     13(int)   Load 60(i)

+              69:     52(ptr)   AccessChain 50(v4) 68

+              70:     47(int)   Load 69

+              72:     47(int)   IMul 70 71

+              73:    6(float)   ConvertUToF 72

+              74:     37(ptr)   AccessChain 66(tv4) 67

+                                Store 74 73

+              75:     13(int)   Load 60(i)

+              76:     13(int)   IAdd 75 32

+                                Store 60(i) 76

+                                Branch 61

+              62:             Label

               77:    6(float) Load 38(sum)

               78:    7(fvec4) CompositeConstruct 77 77 77 77

-              79:    7(fvec4) Load 65(tv4)

+              79:    7(fvec4) Load 66(tv4)

               80:    7(fvec4) FAdd 78 79

               81:    7(fvec4) Load 35(gl_FragColor)

               82:    7(fvec4) FAdd 81 80

@@ -156,13 +154,12 @@
               93:     13(int) Load 89(i)

               94:     13(int) Load 22(Count)

               95:    24(bool) SLessThan 93 94

-                              LoopMerge 91 None

+                              LoopMerge 91 90 None

                               BranchConditional 95 92 91

               92:               Label

               98:    6(float)   Load 97(f)

-              99:    7(fvec4)   Load 83(r)

-             100:    7(fvec4)   CompositeInsert 98 99 3

-                                Store 83(r) 100

+             100:     37(ptr)   AccessChain 83(r) 99

+                                Store 100 98

              101:     13(int)   Load 89(i)

              102:     13(int)   IAdd 101 32

                                 Store 89(i) 102

@@ -181,7 +178,7 @@
              111:             Label

              114:     13(int) Load 110(i)

              116:    24(bool) SLessThan 114 115

-                              LoopMerge 112 None

+                              LoopMerge 112 111 None

                               BranchConditional 116 113 112

              113:               Label

              117:    6(float)   Load 97(f)

diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
old mode 100644
new mode 100755
index 0af086d..ce0cdb8
--- a/Test/baseResults/spv.forwardFun.frag.out
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 57

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 60

 

-                              Source ESSL 100

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 20

                               ExecutionMode 4 OriginLowerLeft

+                              Source ESSL 100

                               Name 4  "main"

                               Name 6  "bar("

                               Name 10  "unreachableReturn("

@@ -24,16 +24,13 @@
                               Name 27  "f"

                               Name 30  "gl_FragColor"

                               Name 36  "d"

-                              Name 56  "bigColor"

+                              Name 59  "bigColor"

                               Decorate 18(color) RelaxedPrecision

                               Decorate 20(BaseColor) RelaxedPrecision

-                              Decorate 20(BaseColor) Smooth

                               Decorate 27(f) RelaxedPrecision

                               Decorate 30(gl_FragColor) RelaxedPrecision

-                              Decorate 30(gl_FragColor) BuiltIn FragColor

                               Decorate 36(d) RelaxedPrecision

-                              Decorate 56(bigColor) RelaxedPrecision

-                              Decorate 56(bigColor) NoStaticUse

+                              Decorate 59(bigColor) RelaxedPrecision

                2:             TypeVoid

                3:             TypeFunction 2

                8:             TypeFloat 32

@@ -52,8 +49,11 @@
               39:             TypeBool

               43:    8(float) Constant 1067030938

               46:    8(float) Constant 1083179008

-              55:             TypePointer UniformConstant 12(fvec4)

-    56(bigColor):     55(ptr) Variable UniformConstant

+              49:             TypeInt 32 0

+              50:     49(int) Constant 0

+              53:     49(int) Constant 1

+              58:             TypePointer UniformConstant 12(fvec4)

+    59(bigColor):     58(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

        18(color):     13(ptr) Variable Function

@@ -95,10 +95,10 @@
     16(foo(vf4;):    8(float) Function None 14

          15(bar):     13(ptr) FunctionParameter

               17:             Label

-              49:   12(fvec4) Load 15(bar)

-              50:    8(float) CompositeExtract 49 0

-              51:   12(fvec4) Load 15(bar)

-              52:    8(float) CompositeExtract 51 1

-              53:    8(float) FAdd 50 52

-                              ReturnValue 53

+              51:     26(ptr) AccessChain 15(bar) 50

+              52:    8(float) Load 51

+              54:     26(ptr) AccessChain 15(bar) 53

+              55:    8(float) Load 54

+              56:    8(float) FAdd 52 55

+                              ReturnValue 56

                               FunctionEnd

diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
old mode 100644
new mode 100755
index 42ec4c5..0d8bed7
--- a/Test/baseResults/spv.functionCall.frag.out
+++ b/Test/baseResults/spv.functionCall.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 73

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 76

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 57

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 11  "foo(vf4;"

                               Name 10  "bar"

@@ -22,17 +22,14 @@
                               Name 16  "unreachableReturn("

                               Name 18  "missingReturn("

                               Name 21  "h"

-                              Name 30  "d"

-                              Name 51  "color"

-                              Name 53  "BaseColor"

-                              Name 54  "param"

-                              Name 60  "f"

-                              Name 62  "g"

-                              Name 65  "gl_FragColor"

-                              Name 72  "bigColor"

-                              Decorate 53(BaseColor) Smooth

-                              Decorate 65(gl_FragColor) BuiltIn FragColor

-                              Decorate 72(bigColor) NoStaticUse

+                              Name 34  "d"

+                              Name 55  "color"

+                              Name 57  "BaseColor"

+                              Name 58  "param"

+                              Name 63  "f"

+                              Name 65  "g"

+                              Name 68  "gl_FragColor"

+                              Name 75  "bigColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -40,57 +37,60 @@
                8:             TypePointer Function 7(fvec4)

                9:             TypeFunction 6(float) 8(ptr)

               15:             TypeFunction 6(float)

-              20:             TypePointer PrivateGlobal 6(float)

-           21(h):     20(ptr) Variable PrivateGlobal

+              20:             TypePointer Private 6(float)

+           21(h):     20(ptr) Variable Private

               22:    6(float) Constant 0

-              29:             TypePointer UniformConstant 6(float)

-           30(d):     29(ptr) Variable UniformConstant

-              32:    6(float) Constant 1082549862

-              33:             TypeBool

-              37:    6(float) Constant 1067030938

-              40:    6(float) Constant 1083179008

-              48:    6(float) Constant 1081711002

-              52:             TypePointer Input 7(fvec4)

-   53(BaseColor):     52(ptr) Variable Input

-              59:             TypePointer Function 6(float)

-              64:             TypePointer Output 7(fvec4)

-65(gl_FragColor):     64(ptr) Variable Output

-              71:             TypePointer UniformConstant 7(fvec4)

-    72(bigColor):     71(ptr) Variable UniformConstant

+              23:             TypeInt 32 0

+              24:     23(int) Constant 0

+              25:             TypePointer Function 6(float)

+              28:     23(int) Constant 1

+              33:             TypePointer UniformConstant 6(float)

+           34(d):     33(ptr) Variable UniformConstant

+              36:    6(float) Constant 1082549862

+              37:             TypeBool

+              41:    6(float) Constant 1067030938

+              44:    6(float) Constant 1083179008

+              52:    6(float) Constant 1081711002

+              56:             TypePointer Input 7(fvec4)

+   57(BaseColor):     56(ptr) Variable Input

+              67:             TypePointer Output 7(fvec4)

+68(gl_FragColor):     67(ptr) Variable Output

+              74:             TypePointer UniformConstant 7(fvec4)

+    75(bigColor):     74(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

-       51(color):      8(ptr) Variable Function

-       54(param):      8(ptr) Variable Function

-           60(f):     59(ptr) Variable Function

-           62(g):     59(ptr) Variable Function

+       55(color):      8(ptr) Variable Function

+       58(param):      8(ptr) Variable Function

+           63(f):     25(ptr) Variable Function

+           65(g):     25(ptr) Variable Function

                               Store 21(h) 22

-              55:    7(fvec4) Load 53(BaseColor)

-                              Store 54(param) 55

-              56:    6(float) FunctionCall 11(foo(vf4;) 54(param)

-              57:    7(fvec4) CompositeConstruct 56 56 56 56

-                              Store 51(color) 57

-              58:           2 FunctionCall 13(bar()

-              61:    6(float) FunctionCall 16(unreachableReturn()

-                              Store 60(f) 61

-              63:    6(float) FunctionCall 18(missingReturn()

-                              Store 62(g) 63

-              66:    7(fvec4) Load 51(color)

-              67:    6(float) Load 60(f)

-              68:    7(fvec4) VectorTimesScalar 66 67

-              69:    6(float) Load 21(h)

-              70:    7(fvec4) VectorTimesScalar 68 69

-                              Store 65(gl_FragColor) 70

+              59:    7(fvec4) Load 57(BaseColor)

+                              Store 58(param) 59

+              60:    6(float) FunctionCall 11(foo(vf4;) 58(param)

+              61:    7(fvec4) CompositeConstruct 60 60 60 60

+                              Store 55(color) 61

+              62:           2 FunctionCall 13(bar()

+              64:    6(float) FunctionCall 16(unreachableReturn()

+                              Store 63(f) 64

+              66:    6(float) FunctionCall 18(missingReturn()

+                              Store 65(g) 66

+              69:    7(fvec4) Load 55(color)

+              70:    6(float) Load 63(f)

+              71:    7(fvec4) VectorTimesScalar 69 70

+              72:    6(float) Load 21(h)

+              73:    7(fvec4) VectorTimesScalar 71 72

+                              Store 68(gl_FragColor) 73

                               Return

                               FunctionEnd

     11(foo(vf4;):    6(float) Function None 9

          10(bar):      8(ptr) FunctionParameter

               12:             Label

-              23:    7(fvec4) Load 10(bar)

-              24:    6(float) CompositeExtract 23 0

-              25:    7(fvec4) Load 10(bar)

-              26:    6(float) CompositeExtract 25 1

-              27:    6(float) FAdd 24 26

-                              ReturnValue 27

+              26:     25(ptr) AccessChain 10(bar) 24

+              27:    6(float) Load 26

+              29:     25(ptr) AccessChain 10(bar) 28

+              30:    6(float) Load 29

+              31:    6(float) FAdd 27 30

+                              ReturnValue 31

                               FunctionEnd

         13(bar():           2 Function None 3

               14:             Label

@@ -98,29 +98,29 @@
                               FunctionEnd

 16(unreachableReturn():    6(float) Function None 15

               17:             Label

-              31:    6(float) Load 30(d)

-              34:    33(bool) FOrdLessThan 31 32

-                              SelectionMerge 36 None

-                              BranchConditional 34 35 39

-              35:               Label

-                                ReturnValue 37

+              35:    6(float) Load 34(d)

+              38:    37(bool) FOrdLessThan 35 36

+                              SelectionMerge 40 None

+                              BranchConditional 38 39 43

               39:               Label

-                                ReturnValue 40

-              36:             Label

-              42:    6(float) Undef

-                              ReturnValue 42

+                                ReturnValue 41

+              43:               Label

+                                ReturnValue 44

+              40:             Label

+              46:    6(float) Undef

+                              ReturnValue 46

                               FunctionEnd

 18(missingReturn():    6(float) Function None 15

               19:             Label

-              43:    6(float) Load 30(d)

-              44:    33(bool) FOrdLessThan 43 40

-                              SelectionMerge 46 None

-                              BranchConditional 44 45 46

-              45:               Label

-              47:    6(float)   Load 30(d)

-                                Store 21(h) 47

-                                ReturnValue 48

-              46:             Label

-              50:    6(float) Undef

-                              ReturnValue 50

+              47:    6(float) Load 34(d)

+              48:    37(bool) FOrdLessThan 47 44

+                              SelectionMerge 50 None

+                              BranchConditional 48 49 50

+              49:               Label

+              51:    6(float)   Load 34(d)

+                                Store 21(h) 51

+                                ReturnValue 52

+              50:             Label

+              54:    6(float) Undef

+                              ReturnValue 54

                               FunctionEnd

diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
index bc0b07c..1200d28 100755
--- a/Test/baseResults/spv.functionSemantics.frag.out
+++ b/Test/baseResults/spv.functionSemantics.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 158

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 153

 

-                              Source GLSL 400

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint Fragment 4  "main"

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 400

                               Name 4  "main"

                               Name 15  "foo(i1;i1;i1;i1;i1;i1;"

                               Name 9  "a"

@@ -29,26 +29,25 @@
                               Name 24  "r"

                               Name 28  "foo3("

                               Name 30  "sum"

-                              Name 72  "u"

-                              Name 84  "t"

-                              Name 87  "s"

-                              MemberName 87(s) 0  "t"

-                              Name 89  "f"

-                              Name 96  "color"

-                              Name 102  "e"

+                              Name 74  "u"

+                              Name 86  "t"

+                              Name 89  "s"

+                              MemberName 89(s) 0  "t"

+                              Name 91  "f"

+                              Name 95  "color"

+                              Name 101  "e"

+                              Name 102  "param"

                               Name 103  "param"

                               Name 104  "param"

                               Name 105  "param"

-                              Name 106  "param"

-                              Name 125  "ret"

-                              Name 127  "tempReturn"

-                              Name 132  "tempArg"

-                              Name 133  "param"

-                              Name 134  "param"

-                              Name 135  "param"

-                              Name 138  "arg"

-                              Name 154  "gl_FragColor"

-                              Decorate 154(gl_FragColor) BuiltIn FragColor

+                              Name 120  "ret"

+                              Name 122  "tempReturn"

+                              Name 127  "tempArg"

+                              Name 128  "param"

+                              Name 129  "param"

+                              Name 130  "param"

+                              Name 133  "arg"

+                              Name 149  "gl_FragColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -64,106 +63,101 @@
               43:      6(int) Constant 1024

               61:   17(float) Constant 1077936128

               65:   17(float) Constant 1084227584

-              71:             TypePointer UniformConstant 17(float)

-           72(u):     71(ptr) Variable UniformConstant

-              74:   17(float) Constant 1078774989

-              75:             TypeBool

-              80:      6(int) Constant 1000000

-              82:      6(int) Constant 2000000

-              85:      6(int) Constant 2

-              86:             TypeVector 6(int) 4

-           87(s):             TypeStruct 86(ivec4)

-              88:             TypePointer Function 87(s)

-              90:      6(int) Constant 0

-              91:      6(int) Constant 32

-              92:             TypePointer Function 86(ivec4)

-              97:      6(int) Constant 1

-             101:      6(int) Constant 8

-             116:      6(int) Constant 128

-             126:             TypePointer PrivateGlobal 6(int)

- 127(tempReturn):    126(ptr) Variable PrivateGlobal

-             128:   17(float) Constant 1082130432

-             129:   17(float) Constant 1065353216

-             130:   17(float) Constant 1073741824

-             131:   19(fvec3) ConstantComposite 129 130 61

-             152:             TypeVector 17(float) 4

-             153:             TypePointer Output 152(fvec4)

-154(gl_FragColor):    153(ptr) Variable Output

+              66:             TypeInt 32 0

+              67:     66(int) Constant 1

+              73:             TypePointer UniformConstant 17(float)

+           74(u):     73(ptr) Variable UniformConstant

+              76:   17(float) Constant 1078774989

+              77:             TypeBool

+              82:      6(int) Constant 1000000

+              84:      6(int) Constant 2000000

+              87:      6(int) Constant 2

+              88:             TypeVector 6(int) 4

+           89(s):             TypeStruct 88(ivec4)

+              90:             TypePointer Function 89(s)

+              92:      6(int) Constant 0

+              93:      6(int) Constant 32

+              96:      6(int) Constant 1

+             100:      6(int) Constant 8

+             112:      6(int) Constant 128

+             121:             TypePointer Private 6(int)

+ 122(tempReturn):    121(ptr) Variable Private

+             123:   17(float) Constant 1082130432

+             124:   17(float) Constant 1065353216

+             125:   17(float) Constant 1073741824

+             126:   19(fvec3) ConstantComposite 124 125 61

+             147:             TypeVector 17(float) 4

+             148:             TypePointer Output 147(fvec4)

+149(gl_FragColor):    148(ptr) Variable Output

          4(main):           2 Function None 3

                5:             Label

-           84(t):      7(ptr) Variable Function

-           89(f):     88(ptr) Variable Function

-       96(color):      7(ptr) Variable Function

-          102(e):      7(ptr) Variable Function

+           86(t):      7(ptr) Variable Function

+           91(f):     90(ptr) Variable Function

+       95(color):      7(ptr) Variable Function

+          101(e):      7(ptr) Variable Function

+      102(param):      7(ptr) Variable Function

       103(param):      7(ptr) Variable Function

       104(param):      7(ptr) Variable Function

       105(param):      7(ptr) Variable Function

-      106(param):      7(ptr) Variable Function

-        125(ret):     18(ptr) Variable Function

-    132(tempArg):      7(ptr) Variable Function

-      133(param):     18(ptr) Variable Function

-      134(param):     20(ptr) Variable Function

-      135(param):      7(ptr) Variable Function

-        138(arg):     18(ptr) Variable Function

-                              Store 84(t) 85

-              93:     92(ptr) AccessChain 89(f) 90

-              94:   86(ivec4) Load 93

-              95:   86(ivec4) CompositeInsert 91 94 1

-                              Store 93 95

-              98:      6(int) Load 84(t)

-              99:      6(int) Load 84(t)

-             100:      6(int) IAdd 98 99

-                              Store 103(param) 97

-                              Store 104(param) 100

-             107:     92(ptr) AccessChain 89(f) 90

-             108:   86(ivec4) Load 107

-             109:      6(int) CompositeExtract 108 1

-                              Store 106(param) 109

-             110:      6(int) FunctionCall 15(foo(i1;i1;i1;i1;i1;i1;) 103(param) 85 104(param) 101 105(param) 106(param)

-             111:      6(int) Load 105(param)

-                              Store 102(e) 111

-             112:      6(int) Load 106(param)

-             113:     92(ptr) AccessChain 89(f) 90

-             114:   86(ivec4) Load 113

-             115:   86(ivec4) CompositeInsert 112 114 1

-                              Store 113 115

-                              Store 96(color) 110

-             117:      6(int) Load 102(e)

-             118:     92(ptr) AccessChain 89(f) 90

-             119:   86(ivec4) Load 118

-             120:      6(int) CompositeExtract 119 1

-             121:      6(int) IAdd 117 120

-             122:      6(int) IMul 116 121

-             123:      6(int) Load 96(color)

-             124:      6(int) IAdd 123 122

-                              Store 96(color) 124

-                              Store 133(param) 128

-                              Store 134(param) 131

-             136:      6(int) FunctionCall 25(foo2(f1;vf3;i1;) 133(param) 134(param) 135(param)

-             137:      6(int) Load 135(param)

-                              Store 132(tempArg) 137

-                              Store 127(tempReturn) 136

-             139:      6(int) Load 132(tempArg)

-             140:   17(float) ConvertSToF 139

-                              Store 138(arg) 140

-             141:      6(int) Load 127(tempReturn)

-             142:   17(float) ConvertSToF 141

-                              Store 125(ret) 142

-             143:   17(float) Load 125(ret)

-             144:   17(float) Load 138(arg)

-             145:   17(float) FAdd 143 144

-             146:      6(int) ConvertFToS 145

-             147:      6(int) Load 96(color)

-             148:      6(int) IAdd 147 146

-                              Store 96(color) 148

-             149:      6(int) FunctionCall 28(foo3()

-             150:      6(int) Load 96(color)

-             151:      6(int) IAdd 150 149

-                              Store 96(color) 151

-             155:      6(int) Load 96(color)

-             156:   17(float) ConvertSToF 155

-             157:  152(fvec4) CompositeConstruct 156 156 156 156

-                              Store 154(gl_FragColor) 157

+        120(ret):     18(ptr) Variable Function

+    127(tempArg):      7(ptr) Variable Function

+      128(param):     18(ptr) Variable Function

+      129(param):     20(ptr) Variable Function

+      130(param):      7(ptr) Variable Function

+        133(arg):     18(ptr) Variable Function

+                              Store 86(t) 87

+              94:      7(ptr) AccessChain 91(f) 92 67

+                              Store 94 93

+              97:      6(int) Load 86(t)

+              98:      6(int) Load 86(t)

+              99:      6(int) IAdd 97 98

+                              Store 102(param) 96

+                              Store 103(param) 99

+             106:      7(ptr) AccessChain 91(f) 92 67

+             107:      6(int) Load 106

+                              Store 105(param) 107

+             108:      6(int) FunctionCall 15(foo(i1;i1;i1;i1;i1;i1;) 102(param) 87 103(param) 100 104(param) 105(param)

+             109:      6(int) Load 104(param)

+                              Store 101(e) 109

+             110:      6(int) Load 105(param)

+             111:      7(ptr) AccessChain 91(f) 92 67

+                              Store 111 110

+                              Store 95(color) 108

+             113:      6(int) Load 101(e)

+             114:      7(ptr) AccessChain 91(f) 92 67

+             115:      6(int) Load 114

+             116:      6(int) IAdd 113 115

+             117:      6(int) IMul 112 116

+             118:      6(int) Load 95(color)

+             119:      6(int) IAdd 118 117

+                              Store 95(color) 119

+                              Store 128(param) 123

+                              Store 129(param) 126

+             131:      6(int) FunctionCall 25(foo2(f1;vf3;i1;) 128(param) 129(param) 130(param)

+             132:      6(int) Load 130(param)

+                              Store 127(tempArg) 132

+                              Store 122(tempReturn) 131

+             134:      6(int) Load 127(tempArg)

+             135:   17(float) ConvertSToF 134

+                              Store 133(arg) 135

+             136:      6(int) Load 122(tempReturn)

+             137:   17(float) ConvertSToF 136

+                              Store 120(ret) 137

+             138:   17(float) Load 120(ret)

+             139:   17(float) Load 133(arg)

+             140:   17(float) FAdd 138 139

+             141:      6(int) ConvertFToS 140

+             142:      6(int) Load 95(color)

+             143:      6(int) IAdd 142 141

+                              Store 95(color) 143

+             144:      6(int) FunctionCall 28(foo3()

+             145:      6(int) Load 95(color)

+             146:      6(int) IAdd 145 144

+                              Store 95(color) 146

+             150:      6(int) Load 95(color)

+             151:   17(float) ConvertSToF 150

+             152:  147(fvec4) CompositeConstruct 151 151 151 151

+                              Store 149(gl_FragColor) 152

                               Return

                               FunctionEnd

 15(foo(i1;i1;i1;i1;i1;i1;):      6(int) Function None 8

@@ -219,20 +213,20 @@
               63:   17(float) FMul 61 62

               64:      6(int) ConvertFToS 63

                               Store 24(r) 64

-              66:   19(fvec3) Load 23(b)

-              67:   17(float) CompositeExtract 66 1

-              68:   17(float) FMul 65 67

-              69:      6(int) ConvertFToS 68

-                              ReturnValue 69

+              68:     18(ptr) AccessChain 23(b) 67

+              69:   17(float) Load 68

+              70:   17(float) FMul 65 69

+              71:      6(int) ConvertFToS 70

+                              ReturnValue 71

                               FunctionEnd

        28(foo3():      6(int) Function None 27

               29:             Label

-              73:   17(float) Load 72(u)

-              76:    75(bool) FOrdGreaterThan 73 74

-                              SelectionMerge 78 None

-                              BranchConditional 76 77 78

-              77:               Label

+              75:   17(float) Load 74(u)

+              78:    77(bool) FOrdGreaterThan 75 76

+                              SelectionMerge 80 None

+                              BranchConditional 78 79 80

+              79:               Label

                                 Kill

-              78:             Label

-                              ReturnValue 82

+              80:             Label

+                              ReturnValue 84

                               FunctionEnd

diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index 40258ba..1baad76 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -5,53 +5,52 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 383

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 372

 

-                              Source GLSL 450

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 356

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 450

                               Name 4  "main"

                               Name 9  "iv"

                               Name 15  "i1D"

-                              Name 25  "i2D"

-                              Name 36  "i3D"

-                              Name 43  "iCube"

-                              Name 53  "iCubeArray"

-                              Name 60  "i2DRect"

-                              Name 70  "i1DArray"

-                              Name 80  "i2DArray"

-                              Name 87  "iBuffer"

-                              Name 97  "i2DMS"

-                              Name 107  "i2DMSArray"

-                              Name 128  "v"

-                              Name 133  "ic1D"

-                              Name 143  "ic2D"

-                              Name 153  "ic3D"

-                              Name 231  "ui"

-                              Name 235  "ii1D"

-                              Name 249  "ui2D"

-                              Name 252  "value"

-                              Name 367  "fragData"

-                              Name 382  "ic4D"

+                              Name 27  "i2D"

+                              Name 38  "i3D"

+                              Name 45  "iCube"

+                              Name 55  "iCubeArray"

+                              Name 62  "i2DRect"

+                              Name 72  "i1DArray"

+                              Name 82  "i2DArray"

+                              Name 89  "iBuffer"

+                              Name 98  "i2DMS"

+                              Name 108  "i2DMSArray"

+                              Name 127  "v"

+                              Name 132  "ic1D"

+                              Name 142  "ic2D"

+                              Name 152  "ic3D"

+                              Name 229  "ui"

+                              Name 232  "ii1D"

+                              Name 245  "ui2D"

+                              Name 248  "value"

+                              Name 356  "fragData"

+                              Name 371  "ic4D"

                               Decorate 15(i1D) Binding 0

-                              Decorate 25(i2D) Binding 1

-                              Decorate 36(i3D) Binding 2

-                              Decorate 43(iCube) Binding 3

-                              Decorate 53(iCubeArray) Binding 4

-                              Decorate 60(i2DRect) Binding 5

-                              Decorate 70(i1DArray) Binding 6

-                              Decorate 80(i2DArray) Binding 7

-                              Decorate 87(iBuffer) Binding 8

-                              Decorate 97(i2DMS) Binding 9

-                              Decorate 107(i2DMSArray) Binding 10

-                              Decorate 235(ii1D) Binding 11

-                              Decorate 249(ui2D) Binding 12

-                              Decorate 382(ic4D) NoStaticUse

+                              Decorate 27(i2D) Binding 1

+                              Decorate 38(i3D) Binding 2

+                              Decorate 45(iCube) Binding 3

+                              Decorate 55(iCubeArray) Binding 4

+                              Decorate 62(i2DRect) Binding 5

+                              Decorate 72(i1DArray) Binding 6

+                              Decorate 82(i2DArray) Binding 7

+                              Decorate 89(iBuffer) Binding 8

+                              Decorate 98(i2DMS) Binding 9

+                              Decorate 108(i2DMSArray) Binding 10

+                              Decorate 232(ii1D) Binding 11

+                              Decorate 245(ui2D) Binding 12

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -63,436 +62,425 @@
               13:             TypeImage 12(float) 1D nonsampled format:Rgba32f

               14:             TypePointer UniformConstant 13

          15(i1D):     14(ptr) Variable UniformConstant

-              23:             TypeImage 12(float) 2D nonsampled format:Rgba32f

-              24:             TypePointer UniformConstant 23

-         25(i2D):     24(ptr) Variable UniformConstant

-              27:             TypeVector 6(int) 2

-              34:             TypeImage 12(float) 3D nonsampled format:Rgba32f

-              35:             TypePointer UniformConstant 34

-         36(i3D):     35(ptr) Variable UniformConstant

-              41:             TypeImage 12(float) Cube nonsampled format:Rgba32f

-              42:             TypePointer UniformConstant 41

-       43(iCube):     42(ptr) Variable UniformConstant

-              51:             TypeImage 12(float) Cube array nonsampled format:Rgba32f

-              52:             TypePointer UniformConstant 51

-  53(iCubeArray):     52(ptr) Variable UniformConstant

-              58:             TypeImage 12(float) Rect nonsampled format:Rgba32f

-              59:             TypePointer UniformConstant 58

-     60(i2DRect):     59(ptr) Variable UniformConstant

-              68:             TypeImage 12(float) 1D array nonsampled format:Rgba32f

-              69:             TypePointer UniformConstant 68

-    70(i1DArray):     69(ptr) Variable UniformConstant

-              78:             TypeImage 12(float) 2D array nonsampled format:Rgba32f

-              79:             TypePointer UniformConstant 78

-    80(i2DArray):     79(ptr) Variable UniformConstant

-              85:             TypeImage 12(float) Buffer nonsampled format:Rgba32f

-              86:             TypePointer UniformConstant 85

-     87(iBuffer):     86(ptr) Variable UniformConstant

-              95:             TypeImage 12(float) 2D multi-sampled nonsampled format:Rgba32f

-              96:             TypePointer UniformConstant 95

-       97(i2DMS):     96(ptr) Variable UniformConstant

-             105:             TypeImage 12(float) 2D array multi-sampled nonsampled format:Rgba32f

-             106:             TypePointer UniformConstant 105

- 107(i2DMSArray):    106(ptr) Variable UniformConstant

-             126:             TypeVector 12(float) 4

-             127:             TypePointer Function 126(fvec4)

-             129:   12(float) Constant 0

-             130:  126(fvec4) ConstantComposite 129 129 129 129

-             132:             TypePointer UniformConstant 6(int)

-       133(ic1D):    132(ptr) Variable UniformConstant

-             142:             TypePointer UniformConstant 27(ivec2)

-       143(ic2D):    142(ptr) Variable UniformConstant

-             152:             TypePointer UniformConstant 7(ivec3)

-       153(ic3D):    152(ptr) Variable UniformConstant

-             211:      6(int) Constant 1

-             217:      6(int) Constant 2

-             221:      6(int) Constant 3

-             227:      6(int) Constant 4

-             229:             TypeInt 32 0

-             230:             TypePointer Function 229(int)

-             232:    229(int) Constant 0

-             233:             TypeImage 6(int) 1D nonsampled format:R32i

-             234:             TypePointer UniformConstant 233

-       235(ii1D):    234(ptr) Variable UniformConstant

-             237:      6(int) Constant 10

-             238:             TypePointer Image 6(int)

-             240:    229(int) Constant 1

-             247:             TypeImage 229(int) 2D nonsampled format:R32ui

-             248:             TypePointer UniformConstant 247

-       249(ui2D):    248(ptr) Variable UniformConstant

-             251:             TypePointer UniformConstant 229(int)

-      252(value):    251(ptr) Variable UniformConstant

-             254:             TypePointer Image 229(int)

-             260:      6(int) Constant 11

-             275:      6(int) Constant 12

-             290:      6(int) Constant 13

-             305:      6(int) Constant 14

-             320:      6(int) Constant 15

-             335:      6(int) Constant 16

-             350:      6(int) Constant 18

-             351:      6(int) Constant 17

-             360:    229(int) Constant 19

-             366:             TypePointer Output 126(fvec4)

-   367(fragData):    366(ptr) Variable Output

-             373:             TypeBool

-             380:             TypeVector 6(int) 4

-             381:             TypePointer UniformConstant 380(ivec4)

-       382(ic4D):    381(ptr) Variable UniformConstant

+              18:             TypeInt 32 0

+              19:     18(int) Constant 0

+              20:             TypePointer Function 6(int)

+              25:             TypeImage 12(float) 2D nonsampled format:Rgba32f

+              26:             TypePointer UniformConstant 25

+         27(i2D):     26(ptr) Variable UniformConstant

+              29:             TypeVector 6(int) 2

+              36:             TypeImage 12(float) 3D nonsampled format:Rgba32f

+              37:             TypePointer UniformConstant 36

+         38(i3D):     37(ptr) Variable UniformConstant

+              43:             TypeImage 12(float) Cube nonsampled format:Rgba32f

+              44:             TypePointer UniformConstant 43

+       45(iCube):     44(ptr) Variable UniformConstant

+              53:             TypeImage 12(float) Cube array nonsampled format:Rgba32f

+              54:             TypePointer UniformConstant 53

+  55(iCubeArray):     54(ptr) Variable UniformConstant

+              60:             TypeImage 12(float) Rect nonsampled format:Rgba32f

+              61:             TypePointer UniformConstant 60

+     62(i2DRect):     61(ptr) Variable UniformConstant

+              70:             TypeImage 12(float) 1D array nonsampled format:Rgba32f

+              71:             TypePointer UniformConstant 70

+    72(i1DArray):     71(ptr) Variable UniformConstant

+              80:             TypeImage 12(float) 2D array nonsampled format:Rgba32f

+              81:             TypePointer UniformConstant 80

+    82(i2DArray):     81(ptr) Variable UniformConstant

+              87:             TypeImage 12(float) Buffer nonsampled format:Rgba32f

+              88:             TypePointer UniformConstant 87

+     89(iBuffer):     88(ptr) Variable UniformConstant

+              96:             TypeImage 12(float) 2D multi-sampled nonsampled format:Rgba32f

+              97:             TypePointer UniformConstant 96

+       98(i2DMS):     97(ptr) Variable UniformConstant

+             106:             TypeImage 12(float) 2D array multi-sampled nonsampled format:Rgba32f

+             107:             TypePointer UniformConstant 106

+ 108(i2DMSArray):    107(ptr) Variable UniformConstant

+             125:             TypeVector 12(float) 4

+             126:             TypePointer Function 125(fvec4)

+             128:   12(float) Constant 0

+             129:  125(fvec4) ConstantComposite 128 128 128 128

+             131:             TypePointer UniformConstant 6(int)

+       132(ic1D):    131(ptr) Variable UniformConstant

+             141:             TypePointer UniformConstant 29(ivec2)

+       142(ic2D):    141(ptr) Variable UniformConstant

+             151:             TypePointer UniformConstant 7(ivec3)

+       152(ic3D):    151(ptr) Variable UniformConstant

+             210:      6(int) Constant 1

+             216:      6(int) Constant 2

+             220:      6(int) Constant 3

+             226:      6(int) Constant 4

+             228:             TypePointer Function 18(int)

+             230:             TypeImage 6(int) 1D nonsampled format:R32i

+             231:             TypePointer UniformConstant 230

+       232(ii1D):    231(ptr) Variable UniformConstant

+             234:      6(int) Constant 10

+             235:             TypePointer Image 6(int)

+             237:     18(int) Constant 1

+             243:             TypeImage 18(int) 2D nonsampled format:R32ui

+             244:             TypePointer UniformConstant 243

+       245(ui2D):    244(ptr) Variable UniformConstant

+             247:             TypePointer UniformConstant 18(int)

+      248(value):    247(ptr) Variable UniformConstant

+             250:             TypePointer Image 18(int)

+             256:      6(int) Constant 11

+             270:      6(int) Constant 12

+             284:      6(int) Constant 13

+             298:      6(int) Constant 14

+             312:      6(int) Constant 15

+             326:      6(int) Constant 16

+             340:      6(int) Constant 18

+             341:      6(int) Constant 17

+             349:     18(int) Constant 19

+             355:             TypePointer Output 125(fvec4)

+   356(fragData):    355(ptr) Variable Output

+             362:             TypeBool

+             369:             TypeVector 6(int) 4

+             370:             TypePointer UniformConstant 369(ivec4)

+       371(ic4D):    370(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

            9(iv):      8(ptr) Variable Function

-          128(v):    127(ptr) Variable Function

-         231(ui):    230(ptr) Variable Function

-             368:    127(ptr) Variable Function

+          127(v):    126(ptr) Variable Function

+         229(ui):    228(ptr) Variable Function

+             357:    126(ptr) Variable Function

                               Store 9(iv) 11

               16:          13 Load 15(i1D)

               17:      6(int) ImageQuerySize 16

-              18:    7(ivec3) Load 9(iv)

-              19:      6(int) CompositeExtract 18 0

-              20:      6(int) IAdd 19 17

-              21:    7(ivec3) Load 9(iv)

-              22:    7(ivec3) CompositeInsert 20 21 0

-                              Store 9(iv) 22

-              26:          23 Load 25(i2D)

-              28:   27(ivec2) ImageQuerySize 26

-              29:    7(ivec3) Load 9(iv)

-              30:   27(ivec2) VectorShuffle 29 29 0 1

-              31:   27(ivec2) IAdd 30 28

-              32:    7(ivec3) Load 9(iv)

-              33:    7(ivec3) VectorShuffle 32 31 3 4 2

-                              Store 9(iv) 33

-              37:          34 Load 36(i3D)

-              38:    7(ivec3) ImageQuerySize 37

-              39:    7(ivec3) Load 9(iv)

-              40:    7(ivec3) IAdd 39 38

-                              Store 9(iv) 40

-              44:          41 Load 43(iCube)

-              45:   27(ivec2) ImageQuerySize 44

-              46:    7(ivec3) Load 9(iv)

-              47:   27(ivec2) VectorShuffle 46 46 0 1

-              48:   27(ivec2) IAdd 47 45

-              49:    7(ivec3) Load 9(iv)

-              50:    7(ivec3) VectorShuffle 49 48 3 4 2

-                              Store 9(iv) 50

-              54:          51 Load 53(iCubeArray)

-              55:    7(ivec3) ImageQuerySize 54

-              56:    7(ivec3) Load 9(iv)

-              57:    7(ivec3) IAdd 56 55

-                              Store 9(iv) 57

-              61:          58 Load 60(i2DRect)

-              62:   27(ivec2) ImageQuerySize 61

-              63:    7(ivec3) Load 9(iv)

-              64:   27(ivec2) VectorShuffle 63 63 0 1

-              65:   27(ivec2) IAdd 64 62

-              66:    7(ivec3) Load 9(iv)

-              67:    7(ivec3) VectorShuffle 66 65 3 4 2

-                              Store 9(iv) 67

-              71:          68 Load 70(i1DArray)

-              72:   27(ivec2) ImageQuerySize 71

-              73:    7(ivec3) Load 9(iv)

-              74:   27(ivec2) VectorShuffle 73 73 0 1

-              75:   27(ivec2) IAdd 74 72

-              76:    7(ivec3) Load 9(iv)

-              77:    7(ivec3) VectorShuffle 76 75 3 4 2

-                              Store 9(iv) 77

-              81:          78 Load 80(i2DArray)

-              82:    7(ivec3) ImageQuerySize 81

-              83:    7(ivec3) Load 9(iv)

-              84:    7(ivec3) IAdd 83 82

-                              Store 9(iv) 84

-              88:          85 Load 87(iBuffer)

-              89:      6(int) ImageQuerySize 88

-              90:    7(ivec3) Load 9(iv)

-              91:      6(int) CompositeExtract 90 0

-              92:      6(int) IAdd 91 89

-              93:    7(ivec3) Load 9(iv)

-              94:    7(ivec3) CompositeInsert 92 93 0

-                              Store 9(iv) 94

-              98:          95 Load 97(i2DMS)

-              99:   27(ivec2) ImageQuerySize 98

-             100:    7(ivec3) Load 9(iv)

-             101:   27(ivec2) VectorShuffle 100 100 0 1

-             102:   27(ivec2) IAdd 101 99

-             103:    7(ivec3) Load 9(iv)

-             104:    7(ivec3) VectorShuffle 103 102 3 4 2

-                              Store 9(iv) 104

-             108:         105 Load 107(i2DMSArray)

-             109:    7(ivec3) ImageQuerySize 108

-             110:    7(ivec3) Load 9(iv)

-             111:    7(ivec3) IAdd 110 109

-                              Store 9(iv) 111

-             112:          95 Load 97(i2DMS)

-             113:      6(int) ImageQuerySamples 112

-             114:    7(ivec3) Load 9(iv)

-             115:      6(int) CompositeExtract 114 0

-             116:      6(int) IAdd 115 113

-             117:    7(ivec3) Load 9(iv)

-             118:    7(ivec3) CompositeInsert 116 117 0

-                              Store 9(iv) 118

-             119:         105 Load 107(i2DMSArray)

+              21:     20(ptr) AccessChain 9(iv) 19

+              22:      6(int) Load 21

+              23:      6(int) IAdd 22 17

+              24:     20(ptr) AccessChain 9(iv) 19

+                              Store 24 23

+              28:          25 Load 27(i2D)

+              30:   29(ivec2) ImageQuerySize 28

+              31:    7(ivec3) Load 9(iv)

+              32:   29(ivec2) VectorShuffle 31 31 0 1

+              33:   29(ivec2) IAdd 32 30

+              34:    7(ivec3) Load 9(iv)

+              35:    7(ivec3) VectorShuffle 34 33 3 4 2

+                              Store 9(iv) 35

+              39:          36 Load 38(i3D)

+              40:    7(ivec3) ImageQuerySize 39

+              41:    7(ivec3) Load 9(iv)

+              42:    7(ivec3) IAdd 41 40

+                              Store 9(iv) 42

+              46:          43 Load 45(iCube)

+              47:   29(ivec2) ImageQuerySize 46

+              48:    7(ivec3) Load 9(iv)

+              49:   29(ivec2) VectorShuffle 48 48 0 1

+              50:   29(ivec2) IAdd 49 47

+              51:    7(ivec3) Load 9(iv)

+              52:    7(ivec3) VectorShuffle 51 50 3 4 2

+                              Store 9(iv) 52

+              56:          53 Load 55(iCubeArray)

+              57:    7(ivec3) ImageQuerySize 56

+              58:    7(ivec3) Load 9(iv)

+              59:    7(ivec3) IAdd 58 57

+                              Store 9(iv) 59

+              63:          60 Load 62(i2DRect)

+              64:   29(ivec2) ImageQuerySize 63

+              65:    7(ivec3) Load 9(iv)

+              66:   29(ivec2) VectorShuffle 65 65 0 1

+              67:   29(ivec2) IAdd 66 64

+              68:    7(ivec3) Load 9(iv)

+              69:    7(ivec3) VectorShuffle 68 67 3 4 2

+                              Store 9(iv) 69

+              73:          70 Load 72(i1DArray)

+              74:   29(ivec2) ImageQuerySize 73

+              75:    7(ivec3) Load 9(iv)

+              76:   29(ivec2) VectorShuffle 75 75 0 1

+              77:   29(ivec2) IAdd 76 74

+              78:    7(ivec3) Load 9(iv)

+              79:    7(ivec3) VectorShuffle 78 77 3 4 2

+                              Store 9(iv) 79

+              83:          80 Load 82(i2DArray)

+              84:    7(ivec3) ImageQuerySize 83

+              85:    7(ivec3) Load 9(iv)

+              86:    7(ivec3) IAdd 85 84

+                              Store 9(iv) 86

+              90:          87 Load 89(iBuffer)

+              91:      6(int) ImageQuerySize 90

+              92:     20(ptr) AccessChain 9(iv) 19

+              93:      6(int) Load 92

+              94:      6(int) IAdd 93 91

+              95:     20(ptr) AccessChain 9(iv) 19

+                              Store 95 94

+              99:          96 Load 98(i2DMS)

+             100:   29(ivec2) ImageQuerySize 99

+             101:    7(ivec3) Load 9(iv)

+             102:   29(ivec2) VectorShuffle 101 101 0 1

+             103:   29(ivec2) IAdd 102 100

+             104:    7(ivec3) Load 9(iv)

+             105:    7(ivec3) VectorShuffle 104 103 3 4 2

+                              Store 9(iv) 105

+             109:         106 Load 108(i2DMSArray)

+             110:    7(ivec3) ImageQuerySize 109

+             111:    7(ivec3) Load 9(iv)

+             112:    7(ivec3) IAdd 111 110

+                              Store 9(iv) 112

+             113:          96 Load 98(i2DMS)

+             114:      6(int) ImageQuerySamples 113

+             115:     20(ptr) AccessChain 9(iv) 19

+             116:      6(int) Load 115

+             117:      6(int) IAdd 116 114

+             118:     20(ptr) AccessChain 9(iv) 19

+                              Store 118 117

+             119:         106 Load 108(i2DMSArray)

              120:      6(int) ImageQuerySamples 119

-             121:    7(ivec3) Load 9(iv)

-             122:      6(int) CompositeExtract 121 0

+             121:     20(ptr) AccessChain 9(iv) 19

+             122:      6(int) Load 121

              123:      6(int) IAdd 122 120

-             124:    7(ivec3) Load 9(iv)

-             125:    7(ivec3) CompositeInsert 123 124 0

-                              Store 9(iv) 125

-                              Store 128(v) 130

-             131:          13 Load 15(i1D)

-             134:      6(int) Load 133(ic1D)

-             135:  126(fvec4) ImageRead 131 134

-             136:  126(fvec4) Load 128(v)

-             137:  126(fvec4) FAdd 136 135

-                              Store 128(v) 137

-             138:          13 Load 15(i1D)

-             139:      6(int) Load 133(ic1D)

-             140:  126(fvec4) Load 128(v)

-                              ImageWrite 138 139 140

-             141:          23 Load 25(i2D)

-             144:   27(ivec2) Load 143(ic2D)

-             145:  126(fvec4) ImageRead 141 144

-             146:  126(fvec4) Load 128(v)

-             147:  126(fvec4) FAdd 146 145

-                              Store 128(v) 147

-             148:          23 Load 25(i2D)

-             149:   27(ivec2) Load 143(ic2D)

-             150:  126(fvec4) Load 128(v)

-                              ImageWrite 148 149 150

-             151:          34 Load 36(i3D)

-             154:    7(ivec3) Load 153(ic3D)

-             155:  126(fvec4) ImageRead 151 154

-             156:  126(fvec4) Load 128(v)

-             157:  126(fvec4) FAdd 156 155

-                              Store 128(v) 157

-             158:          34 Load 36(i3D)

-             159:    7(ivec3) Load 153(ic3D)

-             160:  126(fvec4) Load 128(v)

-                              ImageWrite 158 159 160

-             161:          41 Load 43(iCube)

-             162:    7(ivec3) Load 153(ic3D)

-             163:  126(fvec4) ImageRead 161 162

-             164:  126(fvec4) Load 128(v)

-             165:  126(fvec4) FAdd 164 163

-                              Store 128(v) 165

-             166:          41 Load 43(iCube)

-             167:    7(ivec3) Load 153(ic3D)

-             168:  126(fvec4) Load 128(v)

-                              ImageWrite 166 167 168

-             169:          51 Load 53(iCubeArray)

-             170:    7(ivec3) Load 153(ic3D)

-             171:  126(fvec4) ImageRead 169 170

-             172:  126(fvec4) Load 128(v)

-             173:  126(fvec4) FAdd 172 171

-                              Store 128(v) 173

-             174:          51 Load 53(iCubeArray)

-             175:    7(ivec3) Load 153(ic3D)

-             176:  126(fvec4) Load 128(v)

-                              ImageWrite 174 175 176

-             177:          58 Load 60(i2DRect)

-             178:   27(ivec2) Load 143(ic2D)

-             179:  126(fvec4) ImageRead 177 178

-             180:  126(fvec4) Load 128(v)

-             181:  126(fvec4) FAdd 180 179

-                              Store 128(v) 181

-             182:          58 Load 60(i2DRect)

-             183:   27(ivec2) Load 143(ic2D)

-             184:  126(fvec4) Load 128(v)

-                              ImageWrite 182 183 184

-             185:          68 Load 70(i1DArray)

-             186:   27(ivec2) Load 143(ic2D)

-             187:  126(fvec4) ImageRead 185 186

-             188:  126(fvec4) Load 128(v)

-             189:  126(fvec4) FAdd 188 187

-                              Store 128(v) 189

-             190:          68 Load 70(i1DArray)

-             191:   27(ivec2) Load 143(ic2D)

-             192:  126(fvec4) Load 128(v)

-                              ImageWrite 190 191 192

-             193:          78 Load 80(i2DArray)

-             194:    7(ivec3) Load 153(ic3D)

-             195:  126(fvec4) ImageRead 193 194

-             196:  126(fvec4) Load 128(v)

-             197:  126(fvec4) FAdd 196 195

-                              Store 128(v) 197

-             198:          78 Load 80(i2DArray)

-             199:    7(ivec3) Load 153(ic3D)

-             200:  126(fvec4) Load 128(v)

-                              ImageWrite 198 199 200

-             201:          85 Load 87(iBuffer)

-             202:      6(int) Load 133(ic1D)

-             203:  126(fvec4) ImageRead 201 202

-             204:  126(fvec4) Load 128(v)

-             205:  126(fvec4) FAdd 204 203

-                              Store 128(v) 205

-             206:          85 Load 87(iBuffer)

-             207:      6(int) Load 133(ic1D)

-             208:  126(fvec4) Load 128(v)

-                              ImageWrite 206 207 208

-             209:          95 Load 97(i2DMS)

-             210:   27(ivec2) Load 143(ic2D)

-             212:  126(fvec4) ImageRead 209 210

-             213:  126(fvec4) Load 128(v)

-             214:  126(fvec4) FAdd 213 212

-                              Store 128(v) 214

-             215:          95 Load 97(i2DMS)

-             216:   27(ivec2) Load 143(ic2D)

-             218:  126(fvec4) Load 128(v)

-                              ImageWrite 215 216 217

-             219:         105 Load 107(i2DMSArray)

-             220:    7(ivec3) Load 153(ic3D)

-             222:  126(fvec4) ImageRead 219 220

-             223:  126(fvec4) Load 128(v)

-             224:  126(fvec4) FAdd 223 222

-                              Store 128(v) 224

-             225:         105 Load 107(i2DMSArray)

-             226:    7(ivec3) Load 153(ic3D)

-             228:  126(fvec4) Load 128(v)

-                              ImageWrite 225 226 227

-                              Store 231(ui) 232

-             236:      6(int) Load 133(ic1D)

-             239:    238(ptr) ImageTexelPointer 235(ii1D) 236 0

-             241:      6(int) AtomicIAdd 239 240 232 237

-             242:    7(ivec3) Load 9(iv)

-             243:      6(int) CompositeExtract 242 0

-             244:      6(int) IAdd 243 241

-             245:    7(ivec3) Load 9(iv)

-             246:    7(ivec3) CompositeInsert 244 245 0

-                              Store 9(iv) 246

-             250:   27(ivec2) Load 143(ic2D)

-             253:    229(int) Load 252(value)

-             255:    254(ptr) ImageTexelPointer 249(ui2D) 250 0

-             256:    229(int) AtomicIAdd 255 240 232 253

-             257:    229(int) Load 231(ui)

-             258:    229(int) IAdd 257 256

-                              Store 231(ui) 258

-             259:      6(int) Load 133(ic1D)

-             261:    238(ptr) ImageTexelPointer 235(ii1D) 259 0

-             262:      6(int) AtomicSMin 261 240 232 260

-             263:    7(ivec3) Load 9(iv)

-             264:      6(int) CompositeExtract 263 0

-             265:      6(int) IAdd 264 262

-             266:    7(ivec3) Load 9(iv)

-             267:    7(ivec3) CompositeInsert 265 266 0

-                              Store 9(iv) 267

-             268:   27(ivec2) Load 143(ic2D)

-             269:    229(int) Load 252(value)

-             270:    254(ptr) ImageTexelPointer 249(ui2D) 268 0

-             271:    229(int) AtomicUMin 270 240 232 269

-             272:    229(int) Load 231(ui)

-             273:    229(int) IAdd 272 271

-                              Store 231(ui) 273

-             274:      6(int) Load 133(ic1D)

-             276:    238(ptr) ImageTexelPointer 235(ii1D) 274 0

-             277:      6(int) AtomicSMax 276 240 232 275

-             278:    7(ivec3) Load 9(iv)

-             279:      6(int) CompositeExtract 278 0

-             280:      6(int) IAdd 279 277

-             281:    7(ivec3) Load 9(iv)

-             282:    7(ivec3) CompositeInsert 280 281 0

-                              Store 9(iv) 282

-             283:   27(ivec2) Load 143(ic2D)

-             284:    229(int) Load 252(value)

-             285:    254(ptr) ImageTexelPointer 249(ui2D) 283 0

-             286:    229(int) AtomicUMax 285 240 232 284

-             287:    229(int) Load 231(ui)

-             288:    229(int) IAdd 287 286

-                              Store 231(ui) 288

-             289:      6(int) Load 133(ic1D)

-             291:    238(ptr) ImageTexelPointer 235(ii1D) 289 0

-             292:      6(int) AtomicAnd 291 240 232 290

-             293:    7(ivec3) Load 9(iv)

-             294:      6(int) CompositeExtract 293 0

-             295:      6(int) IAdd 294 292

-             296:    7(ivec3) Load 9(iv)

-             297:    7(ivec3) CompositeInsert 295 296 0

-                              Store 9(iv) 297

-             298:   27(ivec2) Load 143(ic2D)

-             299:    229(int) Load 252(value)

-             300:    254(ptr) ImageTexelPointer 249(ui2D) 298 0

-             301:    229(int) AtomicAnd 300 240 232 299

-             302:    229(int) Load 231(ui)

-             303:    229(int) IAdd 302 301

-                              Store 231(ui) 303

-             304:      6(int) Load 133(ic1D)

-             306:    238(ptr) ImageTexelPointer 235(ii1D) 304 0

-             307:      6(int) AtomicOr 306 240 232 305

-             308:    7(ivec3) Load 9(iv)

-             309:      6(int) CompositeExtract 308 0

-             310:      6(int) IAdd 309 307

-             311:    7(ivec3) Load 9(iv)

-             312:    7(ivec3) CompositeInsert 310 311 0

-                              Store 9(iv) 312

-             313:   27(ivec2) Load 143(ic2D)

-             314:    229(int) Load 252(value)

-             315:    254(ptr) ImageTexelPointer 249(ui2D) 313 0

-             316:    229(int) AtomicOr 315 240 232 314

-             317:    229(int) Load 231(ui)

-             318:    229(int) IAdd 317 316

-                              Store 231(ui) 318

-             319:      6(int) Load 133(ic1D)

-             321:    238(ptr) ImageTexelPointer 235(ii1D) 319 0

-             322:      6(int) AtomicXor 321 240 232 320

-             323:    7(ivec3) Load 9(iv)

-             324:      6(int) CompositeExtract 323 0

-             325:      6(int) IAdd 324 322

-             326:    7(ivec3) Load 9(iv)

-             327:    7(ivec3) CompositeInsert 325 326 0

-                              Store 9(iv) 327

-             328:   27(ivec2) Load 143(ic2D)

-             329:    229(int) Load 252(value)

-             330:    254(ptr) ImageTexelPointer 249(ui2D) 328 0

-             331:    229(int) AtomicXor 330 240 232 329

-             332:    229(int) Load 231(ui)

-             333:    229(int) IAdd 332 331

-                              Store 231(ui) 333

-             334:      6(int) Load 133(ic1D)

-             336:    238(ptr) ImageTexelPointer 235(ii1D) 334 0

-             337:      6(int) AtomicExchange 336 240 232 335

-             338:    7(ivec3) Load 9(iv)

-             339:      6(int) CompositeExtract 338 0

-             340:      6(int) IAdd 339 337

-             341:    7(ivec3) Load 9(iv)

-             342:    7(ivec3) CompositeInsert 340 341 0

-                              Store 9(iv) 342

-             343:   27(ivec2) Load 143(ic2D)

-             344:    229(int) Load 252(value)

-             345:    254(ptr) ImageTexelPointer 249(ui2D) 343 0

-             346:    229(int) AtomicExchange 345 240 232 344

-             347:    229(int) Load 231(ui)

-             348:    229(int) IAdd 347 346

-                              Store 231(ui) 348

-             349:      6(int) Load 133(ic1D)

-             352:    238(ptr) ImageTexelPointer 235(ii1D) 349 0

-             353:      6(int) AtomicCompareExchange 352 240 232 232 351 350

-             354:    7(ivec3) Load 9(iv)

-             355:      6(int) CompositeExtract 354 0

-             356:      6(int) IAdd 355 353

-             357:    7(ivec3) Load 9(iv)

-             358:    7(ivec3) CompositeInsert 356 357 0

-                              Store 9(iv) 358

-             359:   27(ivec2) Load 143(ic2D)

-             361:    229(int) Load 252(value)

-             362:    254(ptr) ImageTexelPointer 249(ui2D) 359 0

-             363:    229(int) AtomicCompareExchange 362 240 232 232 361 360

-             364:    229(int) Load 231(ui)

-             365:    229(int) IAdd 364 363

-                              Store 231(ui) 365

-             369:    229(int) Load 231(ui)

-             370:    7(ivec3) Load 9(iv)

-             371:      6(int) CompositeExtract 370 1

-             372:    229(int) Bitcast 371

-             374:   373(bool) INotEqual 369 372

-                              SelectionMerge 376 None

-                              BranchConditional 374 375 378

-             375:               Label

-             377:  126(fvec4)   Load 128(v)

-                                Store 368 377

-                                Branch 376

-             378:               Label

-                                Store 368 130

-                                Branch 376

-             376:             Label

-             379:  126(fvec4) Load 368

-                              Store 367(fragData) 379

+             124:     20(ptr) AccessChain 9(iv) 19

+                              Store 124 123

+                              Store 127(v) 129

+             130:          13 Load 15(i1D)

+             133:      6(int) Load 132(ic1D)

+             134:  125(fvec4) ImageRead 130 133

+             135:  125(fvec4) Load 127(v)

+             136:  125(fvec4) FAdd 135 134

+                              Store 127(v) 136

+             137:          13 Load 15(i1D)

+             138:      6(int) Load 132(ic1D)

+             139:  125(fvec4) Load 127(v)

+                              ImageWrite 137 138 139

+             140:          25 Load 27(i2D)

+             143:   29(ivec2) Load 142(ic2D)

+             144:  125(fvec4) ImageRead 140 143

+             145:  125(fvec4) Load 127(v)

+             146:  125(fvec4) FAdd 145 144

+                              Store 127(v) 146

+             147:          25 Load 27(i2D)

+             148:   29(ivec2) Load 142(ic2D)

+             149:  125(fvec4) Load 127(v)

+                              ImageWrite 147 148 149

+             150:          36 Load 38(i3D)

+             153:    7(ivec3) Load 152(ic3D)

+             154:  125(fvec4) ImageRead 150 153

+             155:  125(fvec4) Load 127(v)

+             156:  125(fvec4) FAdd 155 154

+                              Store 127(v) 156

+             157:          36 Load 38(i3D)

+             158:    7(ivec3) Load 152(ic3D)

+             159:  125(fvec4) Load 127(v)

+                              ImageWrite 157 158 159

+             160:          43 Load 45(iCube)

+             161:    7(ivec3) Load 152(ic3D)

+             162:  125(fvec4) ImageRead 160 161

+             163:  125(fvec4) Load 127(v)

+             164:  125(fvec4) FAdd 163 162

+                              Store 127(v) 164

+             165:          43 Load 45(iCube)

+             166:    7(ivec3) Load 152(ic3D)

+             167:  125(fvec4) Load 127(v)

+                              ImageWrite 165 166 167

+             168:          53 Load 55(iCubeArray)

+             169:    7(ivec3) Load 152(ic3D)

+             170:  125(fvec4) ImageRead 168 169

+             171:  125(fvec4) Load 127(v)

+             172:  125(fvec4) FAdd 171 170

+                              Store 127(v) 172

+             173:          53 Load 55(iCubeArray)

+             174:    7(ivec3) Load 152(ic3D)

+             175:  125(fvec4) Load 127(v)

+                              ImageWrite 173 174 175

+             176:          60 Load 62(i2DRect)

+             177:   29(ivec2) Load 142(ic2D)

+             178:  125(fvec4) ImageRead 176 177

+             179:  125(fvec4) Load 127(v)

+             180:  125(fvec4) FAdd 179 178

+                              Store 127(v) 180

+             181:          60 Load 62(i2DRect)

+             182:   29(ivec2) Load 142(ic2D)

+             183:  125(fvec4) Load 127(v)

+                              ImageWrite 181 182 183

+             184:          70 Load 72(i1DArray)

+             185:   29(ivec2) Load 142(ic2D)

+             186:  125(fvec4) ImageRead 184 185

+             187:  125(fvec4) Load 127(v)

+             188:  125(fvec4) FAdd 187 186

+                              Store 127(v) 188

+             189:          70 Load 72(i1DArray)

+             190:   29(ivec2) Load 142(ic2D)

+             191:  125(fvec4) Load 127(v)

+                              ImageWrite 189 190 191

+             192:          80 Load 82(i2DArray)

+             193:    7(ivec3) Load 152(ic3D)

+             194:  125(fvec4) ImageRead 192 193

+             195:  125(fvec4) Load 127(v)

+             196:  125(fvec4) FAdd 195 194

+                              Store 127(v) 196

+             197:          80 Load 82(i2DArray)

+             198:    7(ivec3) Load 152(ic3D)

+             199:  125(fvec4) Load 127(v)

+                              ImageWrite 197 198 199

+             200:          87 Load 89(iBuffer)

+             201:      6(int) Load 132(ic1D)

+             202:  125(fvec4) ImageRead 200 201

+             203:  125(fvec4) Load 127(v)

+             204:  125(fvec4) FAdd 203 202

+                              Store 127(v) 204

+             205:          87 Load 89(iBuffer)

+             206:      6(int) Load 132(ic1D)

+             207:  125(fvec4) Load 127(v)

+                              ImageWrite 205 206 207

+             208:          96 Load 98(i2DMS)

+             209:   29(ivec2) Load 142(ic2D)

+             211:  125(fvec4) ImageRead 208 209 Sample 210

+             212:  125(fvec4) Load 127(v)

+             213:  125(fvec4) FAdd 212 211

+                              Store 127(v) 213

+             214:          96 Load 98(i2DMS)

+             215:   29(ivec2) Load 142(ic2D)

+             217:  125(fvec4) Load 127(v)

+                              ImageWrite 214 215 216

+             218:         106 Load 108(i2DMSArray)

+             219:    7(ivec3) Load 152(ic3D)

+             221:  125(fvec4) ImageRead 218 219 Sample 220

+             222:  125(fvec4) Load 127(v)

+             223:  125(fvec4) FAdd 222 221

+                              Store 127(v) 223

+             224:         106 Load 108(i2DMSArray)

+             225:    7(ivec3) Load 152(ic3D)

+             227:  125(fvec4) Load 127(v)

+                              ImageWrite 224 225 226

+                              Store 229(ui) 19

+             233:      6(int) Load 132(ic1D)

+             236:    235(ptr) ImageTexelPointer 232(ii1D) 233 0

+             238:      6(int) AtomicIAdd 236 237 19 234

+             239:     20(ptr) AccessChain 9(iv) 19

+             240:      6(int) Load 239

+             241:      6(int) IAdd 240 238

+             242:     20(ptr) AccessChain 9(iv) 19

+                              Store 242 241

+             246:   29(ivec2) Load 142(ic2D)

+             249:     18(int) Load 248(value)

+             251:    250(ptr) ImageTexelPointer 245(ui2D) 246 0

+             252:     18(int) AtomicIAdd 251 237 19 249

+             253:     18(int) Load 229(ui)

+             254:     18(int) IAdd 253 252

+                              Store 229(ui) 254

+             255:      6(int) Load 132(ic1D)

+             257:    235(ptr) ImageTexelPointer 232(ii1D) 255 0

+             258:      6(int) AtomicSMin 257 237 19 256

+             259:     20(ptr) AccessChain 9(iv) 19

+             260:      6(int) Load 259

+             261:      6(int) IAdd 260 258

+             262:     20(ptr) AccessChain 9(iv) 19

+                              Store 262 261

+             263:   29(ivec2) Load 142(ic2D)

+             264:     18(int) Load 248(value)

+             265:    250(ptr) ImageTexelPointer 245(ui2D) 263 0

+             266:     18(int) AtomicUMin 265 237 19 264

+             267:     18(int) Load 229(ui)

+             268:     18(int) IAdd 267 266

+                              Store 229(ui) 268

+             269:      6(int) Load 132(ic1D)

+             271:    235(ptr) ImageTexelPointer 232(ii1D) 269 0

+             272:      6(int) AtomicSMax 271 237 19 270

+             273:     20(ptr) AccessChain 9(iv) 19

+             274:      6(int) Load 273

+             275:      6(int) IAdd 274 272

+             276:     20(ptr) AccessChain 9(iv) 19

+                              Store 276 275

+             277:   29(ivec2) Load 142(ic2D)

+             278:     18(int) Load 248(value)

+             279:    250(ptr) ImageTexelPointer 245(ui2D) 277 0

+             280:     18(int) AtomicUMax 279 237 19 278

+             281:     18(int) Load 229(ui)

+             282:     18(int) IAdd 281 280

+                              Store 229(ui) 282

+             283:      6(int) Load 132(ic1D)

+             285:    235(ptr) ImageTexelPointer 232(ii1D) 283 0

+             286:      6(int) AtomicAnd 285 237 19 284

+             287:     20(ptr) AccessChain 9(iv) 19

+             288:      6(int) Load 287

+             289:      6(int) IAdd 288 286

+             290:     20(ptr) AccessChain 9(iv) 19

+                              Store 290 289

+             291:   29(ivec2) Load 142(ic2D)

+             292:     18(int) Load 248(value)

+             293:    250(ptr) ImageTexelPointer 245(ui2D) 291 0

+             294:     18(int) AtomicAnd 293 237 19 292

+             295:     18(int) Load 229(ui)

+             296:     18(int) IAdd 295 294

+                              Store 229(ui) 296

+             297:      6(int) Load 132(ic1D)

+             299:    235(ptr) ImageTexelPointer 232(ii1D) 297 0

+             300:      6(int) AtomicOr 299 237 19 298

+             301:     20(ptr) AccessChain 9(iv) 19

+             302:      6(int) Load 301

+             303:      6(int) IAdd 302 300

+             304:     20(ptr) AccessChain 9(iv) 19

+                              Store 304 303

+             305:   29(ivec2) Load 142(ic2D)

+             306:     18(int) Load 248(value)

+             307:    250(ptr) ImageTexelPointer 245(ui2D) 305 0

+             308:     18(int) AtomicOr 307 237 19 306

+             309:     18(int) Load 229(ui)

+             310:     18(int) IAdd 309 308

+                              Store 229(ui) 310

+             311:      6(int) Load 132(ic1D)

+             313:    235(ptr) ImageTexelPointer 232(ii1D) 311 0

+             314:      6(int) AtomicXor 313 237 19 312

+             315:     20(ptr) AccessChain 9(iv) 19

+             316:      6(int) Load 315

+             317:      6(int) IAdd 316 314

+             318:     20(ptr) AccessChain 9(iv) 19

+                              Store 318 317

+             319:   29(ivec2) Load 142(ic2D)

+             320:     18(int) Load 248(value)

+             321:    250(ptr) ImageTexelPointer 245(ui2D) 319 0

+             322:     18(int) AtomicXor 321 237 19 320

+             323:     18(int) Load 229(ui)

+             324:     18(int) IAdd 323 322

+                              Store 229(ui) 324

+             325:      6(int) Load 132(ic1D)

+             327:    235(ptr) ImageTexelPointer 232(ii1D) 325 0

+             328:      6(int) AtomicExchange 327 237 19 326

+             329:     20(ptr) AccessChain 9(iv) 19

+             330:      6(int) Load 329

+             331:      6(int) IAdd 330 328

+             332:     20(ptr) AccessChain 9(iv) 19

+                              Store 332 331

+             333:   29(ivec2) Load 142(ic2D)

+             334:     18(int) Load 248(value)

+             335:    250(ptr) ImageTexelPointer 245(ui2D) 333 0

+             336:     18(int) AtomicExchange 335 237 19 334

+             337:     18(int) Load 229(ui)

+             338:     18(int) IAdd 337 336

+                              Store 229(ui) 338

+             339:      6(int) Load 132(ic1D)

+             342:    235(ptr) ImageTexelPointer 232(ii1D) 339 0

+             343:      6(int) AtomicCompareExchange 342 237 19 19 341 340

+             344:     20(ptr) AccessChain 9(iv) 19

+             345:      6(int) Load 344

+             346:      6(int) IAdd 345 343

+             347:     20(ptr) AccessChain 9(iv) 19

+                              Store 347 346

+             348:   29(ivec2) Load 142(ic2D)

+             350:     18(int) Load 248(value)

+             351:    250(ptr) ImageTexelPointer 245(ui2D) 348 0

+             352:     18(int) AtomicCompareExchange 351 237 19 19 350 349

+             353:     18(int) Load 229(ui)

+             354:     18(int) IAdd 353 352

+                              Store 229(ui) 354

+             358:     18(int) Load 229(ui)

+             359:     20(ptr) AccessChain 9(iv) 237

+             360:      6(int) Load 359

+             361:     18(int) Bitcast 360

+             363:   362(bool) INotEqual 358 361

+                              SelectionMerge 365 None

+                              BranchConditional 363 364 367

+             364:               Label

+             366:  125(fvec4)   Load 127(v)

+                                Store 357 366

+                                Branch 365

+             367:               Label

+                                Store 357 129

+                                Branch 365

+             365:             Label

+             368:  125(fvec4) Load 357

+                              Store 356(fragData) 368

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
index 4db2172..af6d3fe 100755
--- a/Test/baseResults/spv.length.frag.out
+++ b/Test/baseResults/spv.length.frag.out
@@ -3,24 +3,21 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 33

 

-                              Source GLSL 120

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 14

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 120

                               Name 4  "main"

                               Name 9  "t"

                               Name 14  "v"

                               Name 26  "gl_FragColor"

                               Name 32  "u"

-                              Decorate 14(v) Smooth

-                              Decorate 26(gl_FragColor) BuiltIn FragColor

-                              Decorate 32(u) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index 6be9457..721b5a8 100755
--- a/Test/baseResults/spv.localAggregates.frag.out
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -6,16 +6,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 134

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 136

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 40 96

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "s1"

                               MemberName 8(s1) 0  "i"

@@ -34,24 +34,18 @@
                               Name 15  "foo3"

                               Name 36  "localFArray"

                               Name 40  "coord"

-                              Name 47  "localIArray"

-                              Name 66  "x"

-                              Name 68  "localArray"

-                              Name 73  "i"

-                              Name 80  "a"

-                              Name 86  "condition"

-                              Name 94  "color"

-                              Name 104  "gl_FragColor"

-                              Name 124  "sampler"

-                              Name 130  "foo"

-                              Name 131  "foo2"

-                              Name 133  "uFloatArray"

-                              Decorate 40(coord) Smooth

-                              Decorate 94(color) Smooth

-                              Decorate 104(gl_FragColor) BuiltIn FragColor

-                              Decorate 130(foo) NoStaticUse

-                              Decorate 131(foo2) NoStaticUse

-                              Decorate 133(uFloatArray) NoStaticUse

+                              Name 49  "localIArray"

+                              Name 68  "x"

+                              Name 70  "localArray"

+                              Name 75  "i"

+                              Name 82  "a"

+                              Name 88  "condition"

+                              Name 96  "color"

+                              Name 106  "gl_FragColor"

+                              Name 126  "samp2D"

+                              Name 132  "foo"

+                              Name 133  "foo2"

+                              Name 135  "uFloatArray"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -79,38 +73,42 @@
               38:             TypeVector 7(float) 2

               39:             TypePointer Input 38(fvec2)

        40(coord):     39(ptr) Variable Input

-              44:     32(int) Constant 8

-              45:             TypeArray 6(int) 44

-              46:             TypePointer Function 45

-              50:             TypePointer Function 6(int)

-              67:      6(int) Constant 5

-              78:      6(int) Constant 16

-              82:    7(float) Constant 0

-   86(condition):     20(ptr) Variable UniformConstant

-              92:      6(int) Constant 3

-              93:             TypePointer Input 9(fvec4)

-       94(color):     93(ptr) Variable Input

-              96:             TypePointer Function 9(fvec4)

-             103:             TypePointer Output 9(fvec4)

-104(gl_FragColor):    103(ptr) Variable Output

-             121:             TypeImage 7(float) 2D sampled format:Unknown

-             122:             TypeSampledImage 121

-             123:             TypePointer UniformConstant 122

-    124(sampler):    123(ptr) Variable UniformConstant

-             129:             TypePointer UniformConstant 8(s1)

-        130(foo):    129(ptr) Variable UniformConstant

-       131(foo2):     17(ptr) Variable UniformConstant

-             132:             TypePointer UniformConstant 34

-133(uFloatArray):    132(ptr) Variable UniformConstant

+              41:     32(int) Constant 0

+              42:             TypePointer Input 7(float)

+              46:     32(int) Constant 8

+              47:             TypeArray 6(int) 46

+              48:             TypePointer Function 47

+              52:             TypePointer Function 6(int)

+              69:      6(int) Constant 5

+              80:      6(int) Constant 16

+              84:    7(float) Constant 0

+   88(condition):     20(ptr) Variable UniformConstant

+              94:      6(int) Constant 3

+              95:             TypePointer Input 9(fvec4)

+       96(color):     95(ptr) Variable Input

+              98:             TypePointer Function 9(fvec4)

+             100:     32(int) Constant 1

+             103:     32(int) Constant 2

+             105:             TypePointer Output 9(fvec4)

+106(gl_FragColor):    105(ptr) Variable Output

+             123:             TypeImage 7(float) 2D sampled format:Unknown

+             124:             TypeSampledImage 123

+             125:             TypePointer UniformConstant 124

+     126(samp2D):    125(ptr) Variable UniformConstant

+             131:             TypePointer UniformConstant 8(s1)

+        132(foo):    131(ptr) Variable UniformConstant

+       133(foo2):     17(ptr) Variable UniformConstant

+             134:             TypePointer UniformConstant 34

+135(uFloatArray):    134(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

      12(locals2):     11(ptr) Variable Function

  36(localFArray):     35(ptr) Variable Function

- 47(localIArray):     46(ptr) Variable Function

-           66(x):     50(ptr) Variable Function

-  68(localArray):     35(ptr) Variable Function

-           73(i):     50(ptr) Variable Function

-           80(a):     35(ptr) Variable Function

+ 49(localIArray):     48(ptr) Variable Function

+           68(x):     52(ptr) Variable Function

+  70(localArray):     35(ptr) Variable Function

+           75(i):     52(ptr) Variable Function

+           82(a):     35(ptr) Variable Function

               18:     17(ptr) AccessChain 15(foo3) 16

               19:      10(s2) Load 18

                               Store 12(locals2) 19

@@ -118,102 +116,100 @@
               22:      6(int) Load 21

               24:    23(bool) SGreaterThan 22 16

                               SelectionMerge 26 None

-                              BranchConditional 24 25 52

+                              BranchConditional 24 25 54

               25:               Label

               31:     30(ptr)   AccessChain 12(locals2) 27 28

                                 Store 31 29

-              41:   38(fvec2)   Load 40(coord)

-              42:    7(float)   CompositeExtract 41 0

-              43:     30(ptr)   AccessChain 36(localFArray) 37

-                                Store 43 42

-              48:     20(ptr)   AccessChain 15(foo3) 16 16

-              49:      6(int)   Load 48

-              51:     50(ptr)   AccessChain 47(localIArray) 27

-                                Store 51 49

+              43:     42(ptr)   AccessChain 40(coord) 41

+              44:    7(float)   Load 43

+              45:     30(ptr)   AccessChain 36(localFArray) 37

+                                Store 45 44

+              50:     20(ptr)   AccessChain 15(foo3) 16 16

+              51:      6(int)   Load 50

+              53:     52(ptr)   AccessChain 49(localIArray) 27

+                                Store 53 51

                                 Branch 26

-              52:               Label

-              53:   38(fvec2)   Load 40(coord)

-              54:    7(float)   CompositeExtract 53 0

-              55:     30(ptr)   AccessChain 12(locals2) 27 28

-                                Store 55 54

-              56:     30(ptr)   AccessChain 36(localFArray) 37

-                                Store 56 29

-              57:     50(ptr)   AccessChain 47(localIArray) 27

-                                Store 57 16

+              54:               Label

+              55:     42(ptr)   AccessChain 40(coord) 41

+              56:    7(float)   Load 55

+              57:     30(ptr)   AccessChain 12(locals2) 27 28

+                                Store 57 56

+              58:     30(ptr)   AccessChain 36(localFArray) 37

+                                Store 58 29

+              59:     52(ptr)   AccessChain 49(localIArray) 27

+                                Store 59 16

                                 Branch 26

               26:             Label

-              58:     50(ptr) AccessChain 47(localIArray) 27

-              59:      6(int) Load 58

-              60:    23(bool) IEqual 59 16

-                              SelectionMerge 62 None

-                              BranchConditional 60 61 62

-              61:               Label

-              63:     30(ptr)   AccessChain 36(localFArray) 37

-              64:    7(float)   Load 63

-              65:    7(float)   FAdd 64 29

-                                Store 63 65

-                                Branch 62

-              62:             Label

-                              Store 66(x) 67

-              69:      6(int) Load 66(x)

-              70:   38(fvec2) Load 40(coord)

-              71:    7(float) CompositeExtract 70 0

-              72:     30(ptr) AccessChain 68(localArray) 69

-                              Store 72 71

-                              Store 73(i) 16

-                              Branch 74

-              74:             Label

-              77:      6(int) Load 73(i)

-              79:    23(bool) SLessThan 77 78

-                              LoopMerge 75 None

-                              BranchConditional 79 76 75

-              76:               Label

-              81:      6(int)   Load 73(i)

-              83:     30(ptr)   AccessChain 80(a) 81

-                                Store 83 82

-              84:      6(int)   Load 73(i)

-              85:      6(int)   IAdd 84 28

-                                Store 73(i) 85

-                                Branch 74

-              75:             Label

-              87:      6(int) Load 86(condition)

-              88:    23(bool) IEqual 87 28

-                              SelectionMerge 90 None

-                              BranchConditional 88 89 90

-              89:               Label

-              91:          34   Load 68(localArray)

-                                Store 80(a) 91

-                                Branch 90

-              90:             Label

-              95:    9(fvec4) Load 94(color)

-              97:     96(ptr) AccessChain 12(locals2) 92

-                              Store 97 95

-              98:   38(fvec2) Load 40(coord)

-              99:    7(float) CompositeExtract 98 1

-             100:     96(ptr) AccessChain 12(locals2) 92

-             101:    9(fvec4) Load 100

-             102:    9(fvec4) CompositeInsert 99 101 2

-                              Store 100 102

-             105:     96(ptr) AccessChain 12(locals2) 92

-             106:    9(fvec4) Load 105

-             107:     30(ptr) AccessChain 36(localFArray) 37

-             108:    7(float) Load 107

-             109:     30(ptr) AccessChain 12(locals2) 27 28

+              60:     52(ptr) AccessChain 49(localIArray) 27

+              61:      6(int) Load 60

+              62:    23(bool) IEqual 61 16

+                              SelectionMerge 64 None

+                              BranchConditional 62 63 64

+              63:               Label

+              65:     30(ptr)   AccessChain 36(localFArray) 37

+              66:    7(float)   Load 65

+              67:    7(float)   FAdd 66 29

+                                Store 65 67

+                                Branch 64

+              64:             Label

+                              Store 68(x) 69

+              71:      6(int) Load 68(x)

+              72:     42(ptr) AccessChain 40(coord) 41

+              73:    7(float) Load 72

+              74:     30(ptr) AccessChain 70(localArray) 71

+                              Store 74 73

+                              Store 75(i) 16

+                              Branch 76

+              76:             Label

+              79:      6(int) Load 75(i)

+              81:    23(bool) SLessThan 79 80

+                              LoopMerge 77 76 None

+                              BranchConditional 81 78 77

+              78:               Label

+              83:      6(int)   Load 75(i)

+              85:     30(ptr)   AccessChain 82(a) 83

+                                Store 85 84

+              86:      6(int)   Load 75(i)

+              87:      6(int)   IAdd 86 28

+                                Store 75(i) 87

+                                Branch 76

+              77:             Label

+              89:      6(int) Load 88(condition)

+              90:    23(bool) IEqual 89 28

+                              SelectionMerge 92 None

+                              BranchConditional 90 91 92

+              91:               Label

+              93:          34   Load 70(localArray)

+                                Store 82(a) 93

+                                Branch 92

+              92:             Label

+              97:    9(fvec4) Load 96(color)

+              99:     98(ptr) AccessChain 12(locals2) 94

+                              Store 99 97

+             101:     42(ptr) AccessChain 40(coord) 100

+             102:    7(float) Load 101

+             104:     30(ptr) AccessChain 12(locals2) 94 103

+                              Store 104 102

+             107:     98(ptr) AccessChain 12(locals2) 94

+             108:    9(fvec4) Load 107

+             109:     30(ptr) AccessChain 36(localFArray) 37

              110:    7(float) Load 109

-             111:    7(float) FAdd 108 110

-             112:      6(int) Load 66(x)

-             113:     30(ptr) AccessChain 68(localArray) 112

-             114:    7(float) Load 113

-             115:    7(float) FAdd 111 114

-             116:      6(int) Load 66(x)

-             117:     30(ptr) AccessChain 80(a) 116

-             118:    7(float) Load 117

-             119:    7(float) FAdd 115 118

-             120:    9(fvec4) VectorTimesScalar 106 119

-             125:         122 Load 124(sampler)

-             126:   38(fvec2) Load 40(coord)

-             127:    9(fvec4) ImageSampleImplicitLod 125 126

-             128:    9(fvec4) FMul 120 127

-                              Store 104(gl_FragColor) 128

+             111:     30(ptr) AccessChain 12(locals2) 27 28

+             112:    7(float) Load 111

+             113:    7(float) FAdd 110 112

+             114:      6(int) Load 68(x)

+             115:     30(ptr) AccessChain 70(localArray) 114

+             116:    7(float) Load 115

+             117:    7(float) FAdd 113 116

+             118:      6(int) Load 68(x)

+             119:     30(ptr) AccessChain 82(a) 118

+             120:    7(float) Load 119

+             121:    7(float) FAdd 117 120

+             122:    9(fvec4) VectorTimesScalar 108 121

+             127:         124 Load 126(samp2D)

+             128:   38(fvec2) Load 40(coord)

+             129:    9(fvec4) ImageSampleImplicitLod 127 128

+             130:    9(fvec4) FMul 122 129

+                              Store 106(gl_FragColor) 130

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
index f2d2fea..5602e08 100755
--- a/Test/baseResults/spv.loops.frag.out
+++ b/Test/baseResults/spv.loops.frag.out
@@ -5,91 +5,72 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 753

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 718

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 11

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 9  "color"

                               Name 11  "BaseColor"

-                              Name 47  "d"

-                              Name 51  "bigColor"

-                              Name 62  "bigColor1_1"

-                              Name 92  "d2"

-                              Name 99  "d3"

-                              Name 103  "bigColor1_2"

-                              Name 114  "bigColor1_3"

-                              Name 120  "d4"

-                              Name 131  "i"

-                              Name 138  "Count"

-                              Name 141  "bigColor2"

-                              Name 159  "bigColor3"

-                              Name 164  "i"

-                              Name 179  "i"

-                              Name 217  "i"

-                              Name 242  "i"

-                              Name 270  "i"

-                              Name 307  "bigColor4"

-                              Name 345  "d5"

-                              Name 349  "bigColor5"

-                              Name 367  "d6"

-                              Name 379  "bigColor6"

-                              Name 414  "d7"

-                              Name 448  "bigColor7"

-                              Name 473  "d8"

-                              Name 519  "d9"

-                              Name 551  "d10"

-                              Name 561  "d11"

-                              Name 573  "d12"

-                              Name 601  "bigColor8"

-                              Name 629  "gl_FragColor"

-                              Name 636  "d14"

-                              Name 641  "d15"

-                              Name 659  "d16"

-                              Name 699  "d17"

-                              Name 705  "d18"

-                              Name 736  "d13"

-                              Name 737  "d19"

-                              Name 738  "d20"

-                              Name 739  "d21"

-                              Name 740  "d22"

-                              Name 741  "d23"

-                              Name 742  "d24"

-                              Name 743  "d25"

-                              Name 744  "d26"

-                              Name 745  "d27"

-                              Name 746  "d28"

-                              Name 747  "d29"

-                              Name 748  "d30"

-                              Name 749  "d31"

-                              Name 750  "d32"

-                              Name 751  "d33"

-                              Name 752  "d34"

-                              Decorate 11(BaseColor) Smooth

-                              Decorate 629(gl_FragColor) BuiltIn FragColor

-                              Decorate 736(d13) NoStaticUse

-                              Decorate 737(d19) NoStaticUse

-                              Decorate 738(d20) NoStaticUse

-                              Decorate 739(d21) NoStaticUse

-                              Decorate 740(d22) NoStaticUse

-                              Decorate 741(d23) NoStaticUse

-                              Decorate 742(d24) NoStaticUse

-                              Decorate 743(d25) NoStaticUse

-                              Decorate 744(d26) NoStaticUse

-                              Decorate 745(d27) NoStaticUse

-                              Decorate 746(d28) NoStaticUse

-                              Decorate 747(d29) NoStaticUse

-                              Decorate 748(d30) NoStaticUse

-                              Decorate 749(d31) NoStaticUse

-                              Decorate 750(d32) NoStaticUse

-                              Decorate 751(d33) NoStaticUse

-                              Decorate 752(d34) NoStaticUse

+                              Name 50  "d"

+                              Name 54  "bigColor"

+                              Name 66  "bigColor1_1"

+                              Name 97  "d2"

+                              Name 105  "d3"

+                              Name 109  "bigColor1_2"

+                              Name 120  "bigColor1_3"

+                              Name 126  "d4"

+                              Name 137  "i"

+                              Name 144  "Count"

+                              Name 147  "bigColor2"

+                              Name 165  "bigColor3"

+                              Name 170  "i"

+                              Name 184  "i"

+                              Name 218  "i"

+                              Name 239  "i"

+                              Name 264  "i"

+                              Name 298  "bigColor4"

+                              Name 334  "d5"

+                              Name 338  "bigColor5"

+                              Name 355  "d6"

+                              Name 367  "bigColor6"

+                              Name 401  "d7"

+                              Name 434  "bigColor7"

+                              Name 457  "d8"

+                              Name 497  "d9"

+                              Name 527  "d10"

+                              Name 535  "d11"

+                              Name 545  "d12"

+                              Name 569  "bigColor8"

+                              Name 596  "gl_FragColor"

+                              Name 603  "d14"

+                              Name 608  "d15"

+                              Name 626  "d16"

+                              Name 664  "d17"

+                              Name 670  "d18"

+                              Name 701  "d13"

+                              Name 702  "d19"

+                              Name 703  "d20"

+                              Name 704  "d21"

+                              Name 705  "d22"

+                              Name 706  "d23"

+                              Name 707  "d24"

+                              Name 708  "d25"

+                              Name 709  "d26"

+                              Name 710  "d27"

+                              Name 711  "d28"

+                              Name 712  "d29"

+                              Name 713  "d30"

+                              Name 714  "d31"

+                              Name 715  "d32"

+                              Name 716  "d33"

+                              Name 717  "d34"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -99,1054 +80,1019 @@
    11(BaseColor):     10(ptr) Variable Input

               16:             TypeBool

               17:    16(bool) ConstantTrue

-              20:    6(float) Constant 1051260355

-              24:    7(fvec4) ConstantComposite 20 20 20 20

-              30:    6(float) Constant 1059648963

-              34:    7(fvec4) ConstantComposite 30 30 30 30

-              46:             TypePointer UniformConstant 6(float)

-           47(d):     46(ptr) Variable UniformConstant

-              50:             TypePointer UniformConstant 7(fvec4)

-    51(bigColor):     50(ptr) Variable UniformConstant

- 62(bigColor1_1):     50(ptr) Variable UniformConstant

-              81:    6(float) Constant 1109917696

-              84:    6(float) Constant 1065353216

-          92(d2):     46(ptr) Variable UniformConstant

-          99(d3):     46(ptr) Variable UniformConstant

-103(bigColor1_2):     50(ptr) Variable UniformConstant

-114(bigColor1_3):     50(ptr) Variable UniformConstant

-         120(d4):     46(ptr) Variable UniformConstant

-             129:             TypeInt 32 1

-             130:             TypePointer Function 129(int)

-             132:    129(int) Constant 0

-             137:             TypePointer UniformConstant 129(int)

-      138(Count):    137(ptr) Variable UniformConstant

-  141(bigColor2):     50(ptr) Variable UniformConstant

-             146:    129(int) Constant 1

-  159(bigColor3):     50(ptr) Variable UniformConstant

-             163:    16(bool) ConstantFalse

-             169:    129(int) Constant 42

-             184:    129(int) Constant 100

-             188:    6(float) Constant 1101004800

-             222:    129(int) Constant 120

-  307(bigColor4):     50(ptr) Variable UniformConstant

-         345(d5):     46(ptr) Variable UniformConstant

-  349(bigColor5):     50(ptr) Variable UniformConstant

-         367(d6):     46(ptr) Variable UniformConstant

-  379(bigColor6):     50(ptr) Variable UniformConstant

-         414(d7):     46(ptr) Variable UniformConstant

-             443:    6(float) Constant 0

-  448(bigColor7):     50(ptr) Variable UniformConstant

-         473(d8):     46(ptr) Variable UniformConstant

-             495:    6(float) Constant 1073741824

-         519(d9):     46(ptr) Variable UniformConstant

-             535:    6(float) Constant 1084227584

-        551(d10):     46(ptr) Variable UniformConstant

-        561(d11):     46(ptr) Variable UniformConstant

-        573(d12):     46(ptr) Variable UniformConstant

-             599:    6(float) Constant 1092616192

-  601(bigColor8):     50(ptr) Variable UniformConstant

-             628:             TypePointer Output 7(fvec4)

-629(gl_FragColor):    628(ptr) Variable Output

-        636(d14):     46(ptr) Variable UniformConstant

-        641(d15):     46(ptr) Variable UniformConstant

-        659(d16):     46(ptr) Variable UniformConstant

-        699(d17):     46(ptr) Variable UniformConstant

-        705(d18):     46(ptr) Variable UniformConstant

-        736(d13):     46(ptr) Variable UniformConstant

-        737(d19):     46(ptr) Variable UniformConstant

-        738(d20):     46(ptr) Variable UniformConstant

-        739(d21):     46(ptr) Variable UniformConstant

-        740(d22):     46(ptr) Variable UniformConstant

-        741(d23):     46(ptr) Variable UniformConstant

-        742(d24):     46(ptr) Variable UniformConstant

-        743(d25):     46(ptr) Variable UniformConstant

-        744(d26):     46(ptr) Variable UniformConstant

-        745(d27):     46(ptr) Variable UniformConstant

-        746(d28):     46(ptr) Variable UniformConstant

-        747(d29):     46(ptr) Variable UniformConstant

-        748(d30):     46(ptr) Variable UniformConstant

-        749(d31):     46(ptr) Variable UniformConstant

-        750(d32):     46(ptr) Variable UniformConstant

-        751(d33):     46(ptr) Variable UniformConstant

-        752(d34):     46(ptr) Variable UniformConstant

+              18:             TypeInt 32 0

+              19:     18(int) Constant 0

+              20:             TypePointer Function 6(float)

+              23:    6(float) Constant 1051260355

+              27:    7(fvec4) ConstantComposite 23 23 23 23

+              33:    6(float) Constant 1059648963

+              37:    7(fvec4) ConstantComposite 33 33 33 33

+              49:             TypePointer UniformConstant 6(float)

+           50(d):     49(ptr) Variable UniformConstant

+              53:             TypePointer UniformConstant 7(fvec4)

+    54(bigColor):     53(ptr) Variable UniformConstant

+              61:     18(int) Constant 2

+ 66(bigColor1_1):     53(ptr) Variable UniformConstant

+              70:     18(int) Constant 3

+              86:    6(float) Constant 1109917696

+              89:    6(float) Constant 1065353216

+          97(d2):     49(ptr) Variable UniformConstant

+             102:     18(int) Constant 1

+         105(d3):     49(ptr) Variable UniformConstant

+109(bigColor1_2):     53(ptr) Variable UniformConstant

+120(bigColor1_3):     53(ptr) Variable UniformConstant

+         126(d4):     49(ptr) Variable UniformConstant

+             135:             TypeInt 32 1

+             136:             TypePointer Function 135(int)

+             138:    135(int) Constant 0

+             143:             TypePointer UniformConstant 135(int)

+      144(Count):    143(ptr) Variable UniformConstant

+  147(bigColor2):     53(ptr) Variable UniformConstant

+             152:    135(int) Constant 1

+  165(bigColor3):     53(ptr) Variable UniformConstant

+             169:    16(bool) ConstantFalse

+             175:    135(int) Constant 42

+             189:    135(int) Constant 100

+             193:    6(float) Constant 1101004800

+             223:    135(int) Constant 120

+  298(bigColor4):     53(ptr) Variable UniformConstant

+         334(d5):     49(ptr) Variable UniformConstant

+  338(bigColor5):     53(ptr) Variable UniformConstant

+         355(d6):     49(ptr) Variable UniformConstant

+  367(bigColor6):     53(ptr) Variable UniformConstant

+         401(d7):     49(ptr) Variable UniformConstant

+             429:    6(float) Constant 0

+  434(bigColor7):     53(ptr) Variable UniformConstant

+         457(d8):     49(ptr) Variable UniformConstant

+             477:    6(float) Constant 1073741824

+         497(d9):     49(ptr) Variable UniformConstant

+             513:    6(float) Constant 1084227584

+        527(d10):     49(ptr) Variable UniformConstant

+        535(d11):     49(ptr) Variable UniformConstant

+        545(d12):     49(ptr) Variable UniformConstant

+             567:    6(float) Constant 1092616192

+  569(bigColor8):     53(ptr) Variable UniformConstant

+             595:             TypePointer Output 7(fvec4)

+596(gl_FragColor):    595(ptr) Variable Output

+        603(d14):     49(ptr) Variable UniformConstant

+        608(d15):     49(ptr) Variable UniformConstant

+        626(d16):     49(ptr) Variable UniformConstant

+        664(d17):     49(ptr) Variable UniformConstant

+        670(d18):     49(ptr) Variable UniformConstant

+        701(d13):     49(ptr) Variable UniformConstant

+        702(d19):     49(ptr) Variable UniformConstant

+        703(d20):     49(ptr) Variable UniformConstant

+        704(d21):     49(ptr) Variable UniformConstant

+        705(d22):     49(ptr) Variable UniformConstant

+        706(d23):     49(ptr) Variable UniformConstant

+        707(d24):     49(ptr) Variable UniformConstant

+        708(d25):     49(ptr) Variable UniformConstant

+        709(d26):     49(ptr) Variable UniformConstant

+        710(d27):     49(ptr) Variable UniformConstant

+        711(d28):     49(ptr) Variable UniformConstant

+        712(d29):     49(ptr) Variable UniformConstant

+        713(d30):     49(ptr) Variable UniformConstant

+        714(d31):     49(ptr) Variable UniformConstant

+        715(d32):     49(ptr) Variable UniformConstant

+        716(d33):     49(ptr) Variable UniformConstant

+        717(d34):     49(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

         9(color):      8(ptr) Variable Function

-          131(i):    130(ptr) Variable Function

-          164(i):    130(ptr) Variable Function

-          179(i):    130(ptr) Variable Function

-          217(i):    130(ptr) Variable Function

-          242(i):    130(ptr) Variable Function

-          270(i):    130(ptr) Variable Function

+          137(i):    136(ptr) Variable Function

+          170(i):    136(ptr) Variable Function

+          184(i):    136(ptr) Variable Function

+          218(i):    136(ptr) Variable Function

+          239(i):    136(ptr) Variable Function

+          264(i):    136(ptr) Variable Function

               12:    7(fvec4) Load 11(BaseColor)

                               Store 9(color) 12

                               Branch 13

               13:             Label

-                              LoopMerge 14 None

+                              LoopMerge 14 13 None

                               BranchConditional 17 15 14

               15:               Label

-              18:    7(fvec4)   Load 9(color)

-              19:    6(float)   CompositeExtract 18 0

-              21:    16(bool)   FOrdLessThan 19 20

-                                SelectionMerge 23 None

-                                BranchConditional 21 22 23

-              22:                 Label

-              25:    7(fvec4)     Load 9(color)

-              26:    7(fvec4)     FAdd 25 24

-                                  Store 9(color) 26

+              21:     20(ptr)   AccessChain 9(color) 19

+              22:    6(float)   Load 21

+              24:    16(bool)   FOrdLessThan 22 23

+                                SelectionMerge 26 None

+                                BranchConditional 24 25 26

+              25:                 Label

+              28:    7(fvec4)     Load 9(color)

+              29:    7(fvec4)     FAdd 28 27

+                                  Store 9(color) 29

                                   Branch 14

-              23:               Label

-              28:    7(fvec4)   Load 9(color)

-              29:    6(float)   CompositeExtract 28 0

-              31:    16(bool)   FOrdLessThan 29 30

-                                SelectionMerge 33 None

-                                BranchConditional 31 32 33

-              32:                 Label

-              35:    7(fvec4)     Load 9(color)

-              36:    7(fvec4)     FAdd 35 34

-                                  Store 9(color) 36

+              26:               Label

+              31:     20(ptr)   AccessChain 9(color) 19

+              32:    6(float)   Load 31

+              34:    16(bool)   FOrdLessThan 32 33

+                                SelectionMerge 36 None

+                                BranchConditional 34 35 36

+              35:                 Label

+              38:    7(fvec4)     Load 9(color)

+              39:    7(fvec4)     FAdd 38 37

+                                  Store 9(color) 39

                                   Branch 14

-              33:               Label

-              38:    7(fvec4)   Load 9(color)

-              39:    7(fvec4)   FAdd 38 24

-                                Store 9(color) 39

+              36:               Label

+              41:    7(fvec4)   Load 9(color)

+              42:    7(fvec4)   FAdd 41 27

+                                Store 9(color) 42

                                 Branch 14

               14:             Label

-                              Branch 41

-              41:             Label

-              44:    7(fvec4) Load 9(color)

-              45:    6(float) CompositeExtract 44 0

-              48:    6(float) Load 47(d)

-              49:    16(bool) FOrdLessThan 45 48

-                              LoopMerge 42 None

-                              BranchConditional 49 43 42

-              43:               Label

-              52:    7(fvec4)   Load 51(bigColor)

-              53:    7(fvec4)   Load 9(color)

-              54:    7(fvec4)   FAdd 53 52

-                                Store 9(color) 54

-                                Branch 41

-              42:             Label

-                              Branch 55

-              55:             Label

-              58:    7(fvec4) Load 9(color)

-              59:    6(float) CompositeExtract 58 2

-              60:    6(float) Load 47(d)

-              61:    16(bool) FOrdLessThan 59 60

-                              LoopMerge 56 None

-                              BranchConditional 61 57 56

-              57:               Label

-              63:    7(fvec4)   Load 62(bigColor1_1)

-              64:    7(fvec4)   Load 9(color)

-              65:    7(fvec4)   FAdd 64 63

-                                Store 9(color) 65

-              66:    7(fvec4)   Load 9(color)

-              67:    6(float)   CompositeExtract 66 3

-              68:    6(float)   Load 47(d)

-              69:    16(bool)   FOrdLessThan 67 68

-                                SelectionMerge 71 None

-                                BranchConditional 69 70 71

-              70:                 Label

-                                  Branch 55

-              71:               Label

-              73:    7(fvec4)   Load 62(bigColor1_1)

-              74:    7(fvec4)   Load 9(color)

-              75:    7(fvec4)   FAdd 74 73

-                                Store 9(color) 75

-                                Branch 55

-              56:             Label

-                              Branch 76

-              76:             Label

-              79:    7(fvec4) Load 9(color)

-              80:    6(float) CompositeExtract 79 0

-              82:    16(bool) FOrdLessThan 80 81

-                              LoopMerge 77 None

-                              BranchConditional 82 78 77

-              78:               Label

-              83:    7(fvec4)   Load 9(color)

-              85:    7(fvec4)   CompositeConstruct 84 84 84 84

-              86:    7(fvec4)   FAdd 83 85

-                                Store 9(color) 86

-                                Branch 76

-              77:             Label

-                              Branch 87

-              87:             Label

-              90:    7(fvec4) Load 9(color)

-              91:    6(float) CompositeExtract 90 3

-              93:    6(float) Load 92(d2)

-              94:    16(bool) FOrdLessThan 91 93

-                              SelectionMerge 96 None

-                              BranchConditional 94 95 96

-              95:               Label

-              97:    7(fvec4)   Load 9(color)

-              98:    6(float)   CompositeExtract 97 1

-             100:    6(float)   Load 99(d3)

-             101:    16(bool)   FOrdLessThan 98 100

-                                Branch 96

-              96:             Label

-             102:    16(bool) Phi 94 87 101 95

-                              LoopMerge 88 None

-                              BranchConditional 102 89 88

-              89:               Label

-             104:    7(fvec4)   Load 103(bigColor1_2)

-             105:    7(fvec4)   Load 9(color)

-             106:    7(fvec4)   FAdd 105 104

-                                Store 9(color) 106

-                                Branch 87

-              88:             Label

-                              Branch 107

-             107:             Label

-             110:    7(fvec4) Load 9(color)

-             111:    6(float) CompositeExtract 110 2

-             112:    6(float) Load 99(d3)

-             113:    16(bool) FOrdLessThan 111 112

-                              LoopMerge 108 None

-                              BranchConditional 113 109 108

-             109:               Label

-             115:    7(fvec4)   Load 114(bigColor1_3)

-             116:    7(fvec4)   Load 9(color)

-             117:    7(fvec4)   FAdd 116 115

-                                Store 9(color) 117

-             118:    7(fvec4)   Load 9(color)

-             119:    6(float)   CompositeExtract 118 1

-             121:    6(float)   Load 120(d4)

-             122:    16(bool)   FOrdLessThan 119 121

-                                SelectionMerge 124 None

-                                BranchConditional 122 123 124

-             123:                 Label

-                                  Branch 108

-             124:               Label

-             126:    7(fvec4)   Load 114(bigColor1_3)

-             127:    7(fvec4)   Load 9(color)

-             128:    7(fvec4)   FAdd 127 126

-                                Store 9(color) 128

-                                Branch 107

-             108:             Label

-                              Store 131(i) 132

-                              Branch 133

-             133:             Label

-             136:    129(int) Load 131(i)

-             139:    129(int) Load 138(Count)

-             140:    16(bool) SLessThan 136 139

-                              LoopMerge 134 None

-                              BranchConditional 140 135 134

-             135:               Label

-             142:    7(fvec4)   Load 141(bigColor2)

-             143:    7(fvec4)   Load 9(color)

-             144:    7(fvec4)   FAdd 143 142

-                                Store 9(color) 144

-             145:    129(int)   Load 131(i)

-             147:    129(int)   IAdd 145 146

-                                Store 131(i) 147

-                                Branch 133

-             134:             Label

-                              Branch 148

-             148:             Label

-             151:    16(bool) Phi 17 134 163 150

-                              LoopMerge 149 None

-                              Branch 152

-             152:             Label

-                              SelectionMerge 150 None

-                              BranchConditional 151 150 153

-             153:               Label

-             154:    7(fvec4)   Load 9(color)

-             155:    6(float)   CompositeExtract 154 0

-             156:    6(float)   Load 92(d2)

-             157:    16(bool)   FOrdLessThan 155 156

-                                SelectionMerge 158 None

-                                BranchConditional 157 158 149

-             158:               Label

-                                Branch 150

-             150:             Label

-             160:    7(fvec4) Load 159(bigColor3)

-             161:    7(fvec4) Load 9(color)

-             162:    7(fvec4) FAdd 161 160

-                              Store 9(color) 162

-                              Branch 148

-             149:             Label

-                              Store 164(i) 132

-                              Branch 165

-             165:             Label

-             168:    129(int) Load 164(i)

-             170:    16(bool) SLessThan 168 169

-                              LoopMerge 166 None

-                              BranchConditional 170 167 166

-             167:               Label

-             171:    6(float)   Load 99(d3)

-             172:    7(fvec4)   Load 9(color)

-             173:    6(float)   CompositeExtract 172 2

-             174:    6(float)   FAdd 173 171

-             175:    7(fvec4)   Load 9(color)

-             176:    7(fvec4)   CompositeInsert 174 175 2

-                                Store 9(color) 176

-             177:    129(int)   Load 164(i)

-             178:    129(int)   IAdd 177 146

-                                Store 164(i) 178

-                                Branch 165

-             166:             Label

-                              Store 179(i) 132

-                              Branch 180

-             180:             Label

-             183:    129(int) Load 179(i)

-             185:    16(bool) SLessThan 183 184

-                              LoopMerge 181 None

-                              BranchConditional 185 182 181

-             182:               Label

-             186:    7(fvec4)   Load 9(color)

-             187:    6(float)   CompositeExtract 186 2

-             189:    16(bool)   FOrdLessThan 187 188

-                                SelectionMerge 191 None

-                                BranchConditional 189 190 197

-             190:                 Label

-             192:    7(fvec4)     Load 9(color)

-             193:    6(float)     CompositeExtract 192 0

-             194:    6(float)     FAdd 193 84

-             195:    7(fvec4)     Load 9(color)

-             196:    7(fvec4)     CompositeInsert 194 195 0

-                                  Store 9(color) 196

-                                  Branch 191

-             197:                 Label

-             198:    7(fvec4)     Load 9(color)

-             199:    6(float)     CompositeExtract 198 1

-             200:    6(float)     FAdd 199 84

-             201:    7(fvec4)     Load 9(color)

-             202:    7(fvec4)     CompositeInsert 200 201 1

-                                  Store 9(color) 202

-                                  Branch 191

-             191:               Label

-             203:    7(fvec4)   Load 9(color)

-             204:    6(float)   CompositeExtract 203 3

-             205:    16(bool)   FOrdLessThan 204 188

-                                SelectionMerge 207 None

-                                BranchConditional 205 206 207

-             206:                 Label

-             208:    7(fvec4)     Load 9(color)

-             209:    6(float)     CompositeExtract 208 2

-             210:    7(fvec4)     Load 9(color)

-             211:    6(float)     CompositeExtract 210 1

-             212:    16(bool)     FOrdGreaterThan 209 211

-                                  SelectionMerge 214 None

-                                  BranchConditional 212 213 214

-             213:                   Label

-                                    Branch 214

-             214:                 Label

-                                  Branch 207

-             207:               Label

-             215:    129(int)   Load 179(i)

-             216:    129(int)   IAdd 215 146

-                                Store 179(i) 216

-                                Branch 180

-             181:             Label

-                              Store 217(i) 132

-                              Branch 218

-             218:             Label

-             221:    129(int) Load 217(i)

-             223:    16(bool) SLessThan 221 222

-                              LoopMerge 219 None

-                              BranchConditional 223 220 219

-             220:               Label

-             224:    7(fvec4)   Load 9(color)

-             225:    6(float)   CompositeExtract 224 2

-             226:    16(bool)   FOrdLessThan 225 188

-                                SelectionMerge 228 None

-                                BranchConditional 226 227 234

-             227:                 Label

-             229:    7(fvec4)     Load 9(color)

-             230:    6(float)     CompositeExtract 229 0

-             231:    6(float)     FAdd 230 84

-             232:    7(fvec4)     Load 9(color)

-             233:    7(fvec4)     CompositeInsert 231 232 0

-                                  Store 9(color) 233

-                                  Branch 228

-             234:                 Label

-             235:    7(fvec4)     Load 9(color)

-             236:    6(float)     CompositeExtract 235 1

-             237:    6(float)     FAdd 236 84

-             238:    7(fvec4)     Load 9(color)

-             239:    7(fvec4)     CompositeInsert 237 238 1

-                                  Store 9(color) 239

-                                  Branch 228

-             228:               Label

-             240:    129(int)   Load 217(i)

-             241:    129(int)   IAdd 240 146

-                                Store 217(i) 241

-                                Branch 218

+                              Branch 44

+              44:             Label

+              47:     20(ptr) AccessChain 9(color) 19

+              48:    6(float) Load 47

+              51:    6(float) Load 50(d)

+              52:    16(bool) FOrdLessThan 48 51

+                              LoopMerge 45 44 None

+                              BranchConditional 52 46 45

+              46:               Label

+              55:    7(fvec4)   Load 54(bigColor)

+              56:    7(fvec4)   Load 9(color)

+              57:    7(fvec4)   FAdd 56 55

+                                Store 9(color) 57

+                                Branch 44

+              45:             Label

+                              Branch 58

+              58:             Label

+              62:     20(ptr) AccessChain 9(color) 61

+              63:    6(float) Load 62

+              64:    6(float) Load 50(d)

+              65:    16(bool) FOrdLessThan 63 64

+                              LoopMerge 59 58 None

+                              BranchConditional 65 60 59

+              60:               Label

+              67:    7(fvec4)   Load 66(bigColor1_1)

+              68:    7(fvec4)   Load 9(color)

+              69:    7(fvec4)   FAdd 68 67

+                                Store 9(color) 69

+              71:     20(ptr)   AccessChain 9(color) 70

+              72:    6(float)   Load 71

+              73:    6(float)   Load 50(d)

+              74:    16(bool)   FOrdLessThan 72 73

+                                SelectionMerge 76 None

+                                BranchConditional 74 75 76

+              75:                 Label

+                                  Branch 58

+              76:               Label

+              78:    7(fvec4)   Load 66(bigColor1_1)

+              79:    7(fvec4)   Load 9(color)

+              80:    7(fvec4)   FAdd 79 78

+                                Store 9(color) 80

+                                Branch 58

+              59:             Label

+                              Branch 81

+              81:             Label

+              84:     20(ptr) AccessChain 9(color) 19

+              85:    6(float) Load 84

+              87:    16(bool) FOrdLessThan 85 86

+                              LoopMerge 82 81 None

+                              BranchConditional 87 83 82

+              83:               Label

+              88:    7(fvec4)   Load 9(color)

+              90:    7(fvec4)   CompositeConstruct 89 89 89 89

+              91:    7(fvec4)   FAdd 88 90

+                                Store 9(color) 91

+                                Branch 81

+              82:             Label

+                              Branch 92

+              92:             Label

+              95:     20(ptr) AccessChain 9(color) 70

+              96:    6(float) Load 95

+              98:    6(float) Load 97(d2)

+              99:    16(bool) FOrdLessThan 96 98

+                              SelectionMerge 101 None

+                              BranchConditional 99 100 101

+             100:               Label

+             103:     20(ptr)   AccessChain 9(color) 102

+             104:    6(float)   Load 103

+             106:    6(float)   Load 105(d3)

+             107:    16(bool)   FOrdLessThan 104 106

+                                Branch 101

+             101:             Label

+             108:    16(bool) Phi 99 92 107 100

+                              LoopMerge 93 92 None

+                              BranchConditional 108 94 93

+              94:               Label

+             110:    7(fvec4)   Load 109(bigColor1_2)

+             111:    7(fvec4)   Load 9(color)

+             112:    7(fvec4)   FAdd 111 110

+                                Store 9(color) 112

+                                Branch 92

+              93:             Label

+                              Branch 113

+             113:             Label

+             116:     20(ptr) AccessChain 9(color) 61

+             117:    6(float) Load 116

+             118:    6(float) Load 105(d3)

+             119:    16(bool) FOrdLessThan 117 118

+                              LoopMerge 114 113 None

+                              BranchConditional 119 115 114

+             115:               Label

+             121:    7(fvec4)   Load 120(bigColor1_3)

+             122:    7(fvec4)   Load 9(color)

+             123:    7(fvec4)   FAdd 122 121

+                                Store 9(color) 123

+             124:     20(ptr)   AccessChain 9(color) 102

+             125:    6(float)   Load 124

+             127:    6(float)   Load 126(d4)

+             128:    16(bool)   FOrdLessThan 125 127

+                                SelectionMerge 130 None

+                                BranchConditional 128 129 130

+             129:                 Label

+                                  Branch 114

+             130:               Label

+             132:    7(fvec4)   Load 120(bigColor1_3)

+             133:    7(fvec4)   Load 9(color)

+             134:    7(fvec4)   FAdd 133 132

+                                Store 9(color) 134

+                                Branch 113

+             114:             Label

+                              Store 137(i) 138

+                              Branch 139

+             139:             Label

+             142:    135(int) Load 137(i)

+             145:    135(int) Load 144(Count)

+             146:    16(bool) SLessThan 142 145

+                              LoopMerge 140 139 None

+                              BranchConditional 146 141 140

+             141:               Label

+             148:    7(fvec4)   Load 147(bigColor2)

+             149:    7(fvec4)   Load 9(color)

+             150:    7(fvec4)   FAdd 149 148

+                                Store 9(color) 150

+             151:    135(int)   Load 137(i)

+             153:    135(int)   IAdd 151 152

+                                Store 137(i) 153

+                                Branch 139

+             140:             Label

+                              Branch 154

+             154:             Label

+             157:    16(bool) Phi 17 140 169 156

+                              LoopMerge 155 154 None

+                              Branch 158

+             158:             Label

+                              SelectionMerge 156 None

+                              BranchConditional 157 156 159

+             159:               Label

+             160:     20(ptr)   AccessChain 9(color) 19

+             161:    6(float)   Load 160

+             162:    6(float)   Load 97(d2)

+             163:    16(bool)   FOrdLessThan 161 162

+                                SelectionMerge 164 None

+                                BranchConditional 163 164 155

+             164:               Label

+                                Branch 156

+             156:             Label

+             166:    7(fvec4) Load 165(bigColor3)

+             167:    7(fvec4) Load 9(color)

+             168:    7(fvec4) FAdd 167 166

+                              Store 9(color) 168

+                              Branch 154

+             155:             Label

+                              Store 170(i) 138

+                              Branch 171

+             171:             Label

+             174:    135(int) Load 170(i)

+             176:    16(bool) SLessThan 174 175

+                              LoopMerge 172 171 None

+                              BranchConditional 176 173 172

+             173:               Label

+             177:    6(float)   Load 105(d3)

+             178:     20(ptr)   AccessChain 9(color) 61

+             179:    6(float)   Load 178

+             180:    6(float)   FAdd 179 177

+             181:     20(ptr)   AccessChain 9(color) 61

+                                Store 181 180

+             182:    135(int)   Load 170(i)

+             183:    135(int)   IAdd 182 152

+                                Store 170(i) 183

+                                Branch 171

+             172:             Label

+                              Store 184(i) 138

+                              Branch 185

+             185:             Label

+             188:    135(int) Load 184(i)

+             190:    16(bool) SLessThan 188 189

+                              LoopMerge 186 185 None

+                              BranchConditional 190 187 186

+             187:               Label

+             191:     20(ptr)   AccessChain 9(color) 61

+             192:    6(float)   Load 191

+             194:    16(bool)   FOrdLessThan 192 193

+                                SelectionMerge 196 None

+                                BranchConditional 194 195 200

+             195:                 Label

+             197:     20(ptr)     AccessChain 9(color) 19

+             198:    6(float)     Load 197

+             199:    6(float)     FAdd 198 89

+                                  Store 197 199

+                                  Branch 196

+             200:                 Label

+             201:     20(ptr)     AccessChain 9(color) 102

+             202:    6(float)     Load 201

+             203:    6(float)     FAdd 202 89

+                                  Store 201 203

+                                  Branch 196

+             196:               Label

+             204:     20(ptr)   AccessChain 9(color) 70

+             205:    6(float)   Load 204

+             206:    16(bool)   FOrdLessThan 205 193

+                                SelectionMerge 208 None

+                                BranchConditional 206 207 208

+             207:                 Label

+             209:     20(ptr)     AccessChain 9(color) 61

+             210:    6(float)     Load 209

+             211:     20(ptr)     AccessChain 9(color) 102

+             212:    6(float)     Load 211

+             213:    16(bool)     FOrdGreaterThan 210 212

+                                  SelectionMerge 215 None

+                                  BranchConditional 213 214 215

+             214:                   Label

+                                    Branch 215

+             215:                 Label

+                                  Branch 208

+             208:               Label

+             216:    135(int)   Load 184(i)

+             217:    135(int)   IAdd 216 152

+                                Store 184(i) 217

+                                Branch 185

+             186:             Label

+                              Store 218(i) 138

+                              Branch 219

              219:             Label

-                              Store 242(i) 132

-                              Branch 243

-             243:             Label

-             246:    129(int) Load 242(i)

-             247:    16(bool) SLessThan 246 169

-                              LoopMerge 244 None

-                              BranchConditional 247 245 244

-             245:               Label

-             248:    6(float)   Load 99(d3)

-             249:    7(fvec4)   Load 9(color)

-             250:    6(float)   CompositeExtract 249 2

-             251:    6(float)   FAdd 250 248

-             252:    7(fvec4)   Load 9(color)

-             253:    7(fvec4)   CompositeInsert 251 252 2

-                                Store 9(color) 253

-             254:    7(fvec4)   Load 9(color)

-             255:    6(float)   CompositeExtract 254 0

-             256:    6(float)   Load 120(d4)

-             257:    16(bool)   FOrdLessThan 255 256

-                                SelectionMerge 259 None

-                                BranchConditional 257 258 259

-             258:                 Label

-             260:    129(int)     Load 242(i)

-             261:    129(int)     IAdd 260 146

-                                  Store 242(i) 261

-                                  Branch 243

-             259:               Label

-             263:    7(fvec4)   Load 9(color)

-             264:    6(float)   CompositeExtract 263 3

-             265:    6(float)   FAdd 264 84

-             266:    7(fvec4)   Load 9(color)

-             267:    7(fvec4)   CompositeInsert 265 266 3

-                                Store 9(color) 267

-             268:    129(int)   Load 242(i)

-             269:    129(int)   IAdd 268 146

-                                Store 242(i) 269

-                                Branch 243

-             244:             Label

-                              Store 270(i) 132

-                              Branch 271

-             271:             Label

-             274:    129(int) Load 270(i)

-             275:    16(bool) SLessThan 274 169

-                              LoopMerge 272 None

-                              BranchConditional 275 273 272

-             273:               Label

-             276:    6(float)   Load 99(d3)

-             277:    7(fvec4)   Load 9(color)

-             278:    6(float)   CompositeExtract 277 2

-             279:    6(float)   FAdd 278 276

-             280:    7(fvec4)   Load 9(color)

-             281:    7(fvec4)   CompositeInsert 279 280 2

-                                Store 9(color) 281

-             282:    7(fvec4)   Load 9(color)

-             283:    6(float)   CompositeExtract 282 0

-             284:    6(float)   Load 120(d4)

-             285:    16(bool)   FOrdLessThan 283 284

-                                SelectionMerge 287 None

-                                BranchConditional 285 286 287

-             286:                 Label

-                                  Branch 272

-             287:               Label

-             289:    7(fvec4)   Load 9(color)

-             290:    6(float)   CompositeExtract 289 3

-             291:    6(float)   FAdd 290 84

-             292:    7(fvec4)   Load 9(color)

-             293:    7(fvec4)   CompositeInsert 291 292 3

-                                Store 9(color) 293

-             294:    129(int)   Load 270(i)

-             295:    129(int)   IAdd 294 146

-                                Store 270(i) 295

-                                Branch 271

-             272:             Label

-                              Branch 296

-             296:             Label

-             299:    16(bool) Phi 17 272 163 315 163 323

-                              LoopMerge 297 None

-                              Branch 300

-             300:             Label

-                              SelectionMerge 298 None

-                              BranchConditional 299 298 301

-             301:               Label

-             302:    7(fvec4)   Load 9(color)

-             303:    6(float)   CompositeExtract 302 2

-             304:    6(float)   Load 120(d4)

-             305:    16(bool)   FOrdLessThan 303 304

-                                SelectionMerge 306 None

-                                BranchConditional 305 306 297

+             222:    135(int) Load 218(i)

+             224:    16(bool) SLessThan 222 223

+                              LoopMerge 220 219 None

+                              BranchConditional 224 221 220

+             221:               Label

+             225:     20(ptr)   AccessChain 9(color) 61

+             226:    6(float)   Load 225

+             227:    16(bool)   FOrdLessThan 226 193

+                                SelectionMerge 229 None

+                                BranchConditional 227 228 233

+             228:                 Label

+             230:     20(ptr)     AccessChain 9(color) 19

+             231:    6(float)     Load 230

+             232:    6(float)     FAdd 231 89

+                                  Store 230 232

+                                  Branch 229

+             233:                 Label

+             234:     20(ptr)     AccessChain 9(color) 102

+             235:    6(float)     Load 234

+             236:    6(float)     FAdd 235 89

+                                  Store 234 236

+                                  Branch 229

+             229:               Label

+             237:    135(int)   Load 218(i)

+             238:    135(int)   IAdd 237 152

+                                Store 218(i) 238

+                                Branch 219

+             220:             Label

+                              Store 239(i) 138

+                              Branch 240

+             240:             Label

+             243:    135(int) Load 239(i)

+             244:    16(bool) SLessThan 243 175

+                              LoopMerge 241 240 None

+                              BranchConditional 244 242 241

+             242:               Label

+             245:    6(float)   Load 105(d3)

+             246:     20(ptr)   AccessChain 9(color) 61

+             247:    6(float)   Load 246

+             248:    6(float)   FAdd 247 245

+             249:     20(ptr)   AccessChain 9(color) 61

+                                Store 249 248

+             250:     20(ptr)   AccessChain 9(color) 19

+             251:    6(float)   Load 250

+             252:    6(float)   Load 126(d4)

+             253:    16(bool)   FOrdLessThan 251 252

+                                SelectionMerge 255 None

+                                BranchConditional 253 254 255

+             254:                 Label

+             256:    135(int)     Load 239(i)

+             257:    135(int)     IAdd 256 152

+                                  Store 239(i) 257

+                                  Branch 240

+             255:               Label

+             259:     20(ptr)   AccessChain 9(color) 70

+             260:    6(float)   Load 259

+             261:    6(float)   FAdd 260 89

+                                Store 259 261

+             262:    135(int)   Load 239(i)

+             263:    135(int)   IAdd 262 152

+                                Store 239(i) 263

+                                Branch 240

+             241:             Label

+                              Store 264(i) 138

+                              Branch 265

+             265:             Label

+             268:    135(int) Load 264(i)

+             269:    16(bool) SLessThan 268 175

+                              LoopMerge 266 265 None

+                              BranchConditional 269 267 266

+             267:               Label

+             270:    6(float)   Load 105(d3)

+             271:     20(ptr)   AccessChain 9(color) 61

+             272:    6(float)   Load 271

+             273:    6(float)   FAdd 272 270

+             274:     20(ptr)   AccessChain 9(color) 61

+                                Store 274 273

+             275:     20(ptr)   AccessChain 9(color) 19

+             276:    6(float)   Load 275

+             277:    6(float)   Load 126(d4)

+             278:    16(bool)   FOrdLessThan 276 277

+                                SelectionMerge 280 None

+                                BranchConditional 278 279 280

+             279:                 Label

+                                  Branch 266

+             280:               Label

+             282:     20(ptr)   AccessChain 9(color) 70

+             283:    6(float)   Load 282

+             284:    6(float)   FAdd 283 89

+                                Store 282 284

+             285:    135(int)   Load 264(i)

+             286:    135(int)   IAdd 285 152

+                                Store 264(i) 286

+                                Branch 265

+             266:             Label

+                              Branch 287

+             287:             Label

+             290:    16(bool) Phi 17 266 169 306 169 314

+                              LoopMerge 288 287 None

+                              Branch 291

+             291:             Label

+                              SelectionMerge 289 None

+                              BranchConditional 290 289 292

+             292:               Label

+             293:     20(ptr)   AccessChain 9(color) 61

+             294:    6(float)   Load 293

+             295:    6(float)   Load 126(d4)

+             296:    16(bool)   FOrdLessThan 294 295

+                                SelectionMerge 297 None

+                                BranchConditional 296 297 288

+             297:               Label

+                                Branch 289

+             289:             Label

+             299:    7(fvec4) Load 298(bigColor4)

+             300:    7(fvec4) Load 9(color)

+             301:    7(fvec4) FAdd 300 299

+                              Store 9(color) 301

+             302:     20(ptr) AccessChain 9(color) 19

+             303:    6(float) Load 302

+             304:    6(float) Load 126(d4)

+             305:    16(bool) FOrdLessThan 303 304

+                              SelectionMerge 307 None

+                              BranchConditional 305 306 307

              306:               Label

-                                Branch 298

-             298:             Label

-             308:    7(fvec4) Load 307(bigColor4)

-             309:    7(fvec4) Load 9(color)

-             310:    7(fvec4) FAdd 309 308

-                              Store 9(color) 310

-             311:    7(fvec4) Load 9(color)

-             312:    6(float) CompositeExtract 311 0

-             313:    6(float) Load 120(d4)

-             314:    16(bool) FOrdLessThan 312 313

-                              SelectionMerge 316 None

-                              BranchConditional 314 315 316

-             315:               Label

-                                Branch 296

-             316:             Label

-             318:    7(fvec4) Load 9(color)

-             319:    6(float) CompositeExtract 318 1

-             320:    6(float) Load 120(d4)

-             321:    16(bool) FOrdLessThan 319 320

-                              SelectionMerge 323 None

-                              BranchConditional 321 322 330

-             322:               Label

-             324:    6(float)   Load 120(d4)

-             325:    7(fvec4)   Load 9(color)

-             326:    6(float)   CompositeExtract 325 1

-             327:    6(float)   FAdd 326 324

-             328:    7(fvec4)   Load 9(color)

-             329:    7(fvec4)   CompositeInsert 327 328 1

-                                Store 9(color) 329

-                                Branch 323

-             330:               Label

-             331:    6(float)   Load 120(d4)

-             332:    7(fvec4)   Load 9(color)

-             333:    6(float)   CompositeExtract 332 0

-             334:    6(float)   FAdd 333 331

-             335:    7(fvec4)   Load 9(color)

-             336:    7(fvec4)   CompositeInsert 334 335 0

-                                Store 9(color) 336

-                                Branch 323

-             323:             Label

-                              Branch 296

-             297:             Label

-                              Branch 337

-             337:             Label

-             340:    16(bool) Phi 17 297 163 358

-                              LoopMerge 338 None

-                              Branch 341

-             341:             Label

-                              SelectionMerge 339 None

-                              BranchConditional 340 339 342

-             342:               Label

-             343:    7(fvec4)   Load 9(color)

-             344:    6(float)   CompositeExtract 343 0

-             346:    6(float)   Load 345(d5)

-             347:    16(bool)   FOrdLessThan 344 346

-                                SelectionMerge 348 None

-                                BranchConditional 347 348 338

-             348:               Label

-                                Branch 339

-             339:             Label

-             350:    7(fvec4) Load 349(bigColor5)

-             351:    7(fvec4) Load 9(color)

-             352:    7(fvec4) FAdd 351 350

-                              Store 9(color) 352

-             353:    7(fvec4) Load 9(color)

-             354:    6(float) CompositeExtract 353 1

-             355:    6(float) Load 345(d5)

-             356:    16(bool) FOrdLessThan 354 355

-                              SelectionMerge 358 None

-                              BranchConditional 356 357 358

-             357:               Label

-             359:    6(float)   Load 345(d5)

-             360:    7(fvec4)   Load 9(color)

-             361:    6(float)   CompositeExtract 360 1

-             362:    6(float)   FAdd 361 359

-             363:    7(fvec4)   Load 9(color)

-             364:    7(fvec4)   CompositeInsert 362 363 1

-                                Store 9(color) 364

-                                Branch 358

-             358:             Label

-                              Branch 337

-             338:             Label

-             365:    7(fvec4) Load 9(color)

-             366:    6(float) CompositeExtract 365 0

-             368:    6(float) Load 367(d6)

-             369:    16(bool) FOrdLessThan 366 368

-                              SelectionMerge 371 None

-                              BranchConditional 369 370 383

-             370:               Label

+                                Branch 287

+             307:             Label

+             309:     20(ptr) AccessChain 9(color) 102

+             310:    6(float) Load 309

+             311:    6(float) Load 126(d4)

+             312:    16(bool) FOrdLessThan 310 311

+                              SelectionMerge 314 None

+                              BranchConditional 312 313 320

+             313:               Label

+             315:    6(float)   Load 126(d4)

+             316:     20(ptr)   AccessChain 9(color) 102

+             317:    6(float)   Load 316

+             318:    6(float)   FAdd 317 315

+             319:     20(ptr)   AccessChain 9(color) 102

+                                Store 319 318

+                                Branch 314

+             320:               Label

+             321:    6(float)   Load 126(d4)

+             322:     20(ptr)   AccessChain 9(color) 19

+             323:    6(float)   Load 322

+             324:    6(float)   FAdd 323 321

+             325:     20(ptr)   AccessChain 9(color) 19

+                                Store 325 324

+                                Branch 314

+             314:             Label

+                              Branch 287

+             288:             Label

+                              Branch 326

+             326:             Label

+             329:    16(bool) Phi 17 288 169 347

+                              LoopMerge 327 326 None

+                              Branch 330

+             330:             Label

+                              SelectionMerge 328 None

+                              BranchConditional 329 328 331

+             331:               Label

+             332:     20(ptr)   AccessChain 9(color) 19

+             333:    6(float)   Load 332

+             335:    6(float)   Load 334(d5)

+             336:    16(bool)   FOrdLessThan 333 335

+                                SelectionMerge 337 None

+                                BranchConditional 336 337 327

+             337:               Label

+                                Branch 328

+             328:             Label

+             339:    7(fvec4) Load 338(bigColor5)

+             340:    7(fvec4) Load 9(color)

+             341:    7(fvec4) FAdd 340 339

+                              Store 9(color) 341

+             342:     20(ptr) AccessChain 9(color) 102

+             343:    6(float) Load 342

+             344:    6(float) Load 334(d5)

+             345:    16(bool) FOrdLessThan 343 344

+                              SelectionMerge 347 None

+                              BranchConditional 345 346 347

+             346:               Label

+             348:    6(float)   Load 334(d5)

+             349:     20(ptr)   AccessChain 9(color) 102

+             350:    6(float)   Load 349

+             351:    6(float)   FAdd 350 348

+             352:     20(ptr)   AccessChain 9(color) 102

+                                Store 352 351

+                                Branch 347

+             347:             Label

+                              Branch 326

+             327:             Label

+             353:     20(ptr) AccessChain 9(color) 19

+             354:    6(float) Load 353

+             356:    6(float) Load 355(d6)

+             357:    16(bool) FOrdLessThan 354 356

+                              SelectionMerge 359 None

+                              BranchConditional 357 358 371

+             358:               Label

+                                Branch 360

+             360:               Label

+             363:     20(ptr)   AccessChain 9(color) 102

+             364:    6(float)   Load 363

+             365:    6(float)   Load 355(d6)

+             366:    16(bool)   FOrdLessThan 364 365

+                                LoopMerge 361 360 None

+                                BranchConditional 366 362 361

+             362:                 Label

+             368:    7(fvec4)     Load 367(bigColor6)

+             369:    7(fvec4)     Load 9(color)

+             370:    7(fvec4)     FAdd 369 368

+                                  Store 9(color) 370

+                                  Branch 360

+             361:               Label

+                                Branch 359

+             371:               Label

                                 Branch 372

              372:               Label

-             375:    7(fvec4)   Load 9(color)

-             376:    6(float)   CompositeExtract 375 1

-             377:    6(float)   Load 367(d6)

+             375:     20(ptr)   AccessChain 9(color) 61

+             376:    6(float)   Load 375

+             377:    6(float)   Load 355(d6)

              378:    16(bool)   FOrdLessThan 376 377

-                                LoopMerge 373 None

+                                LoopMerge 373 372 None

                                 BranchConditional 378 374 373

              374:                 Label

-             380:    7(fvec4)     Load 379(bigColor6)

-             381:    7(fvec4)     Load 9(color)

-             382:    7(fvec4)     FAdd 381 380

-                                  Store 9(color) 382

+             379:     49(ptr)     AccessChain 367(bigColor6) 61

+             380:    6(float)     Load 379

+             381:     20(ptr)     AccessChain 9(color) 61

+             382:    6(float)     Load 381

+             383:    6(float)     FAdd 382 380

+             384:     20(ptr)     AccessChain 9(color) 61

+                                  Store 384 383

                                   Branch 372

              373:               Label

-                                Branch 371

-             383:               Label

-                                Branch 384

-             384:               Label

-             387:    7(fvec4)   Load 9(color)

-             388:    6(float)   CompositeExtract 387 2

-             389:    6(float)   Load 367(d6)

-             390:    16(bool)   FOrdLessThan 388 389

-                                LoopMerge 385 None

-                                BranchConditional 390 386 385

-             386:                 Label

-             391:    7(fvec4)     Load 379(bigColor6)

-             392:    6(float)     CompositeExtract 391 2

-             393:    7(fvec4)     Load 9(color)

-             394:    6(float)     CompositeExtract 393 2

-             395:    6(float)     FAdd 394 392

-             396:    7(fvec4)     Load 9(color)

-             397:    7(fvec4)     CompositeInsert 395 396 2

-                                  Store 9(color) 397

-                                  Branch 384

-             385:               Label

-                                Branch 371

-             371:             Label

-             398:    7(fvec4) Load 9(color)

-             399:    6(float) CompositeExtract 398 0

-             400:    6(float) Load 367(d6)

-             401:    16(bool) FOrdLessThan 399 400

-                              SelectionMerge 403 None

-                              BranchConditional 401 402 420

-             402:               Label

-                                Branch 404

-             404:               Label

-             407:    7(fvec4)   Load 9(color)

-             408:    6(float)   CompositeExtract 407 1

-             409:    6(float)   Load 367(d6)

-             410:    16(bool)   FOrdLessThan 408 409

-                                LoopMerge 405 None

-                                BranchConditional 410 406 405

-             406:                 Label

-             411:    7(fvec4)     Load 379(bigColor6)

-             412:    7(fvec4)     Load 9(color)

-             413:    7(fvec4)     FAdd 412 411

-                                  Store 9(color) 413

-             415:    6(float)     Load 414(d7)

-             416:    16(bool)     FOrdLessThan 415 84

-                                  SelectionMerge 418 None

-                                  BranchConditional 416 417 418

-             417:                   Label

-                                    Branch 405

-             418:                 Label

-                                  Branch 404

-             405:               Label

-                                Branch 403

-             420:               Label

-                                Branch 421

-             421:               Label

-             424:    7(fvec4)   Load 9(color)

-             425:    6(float)   CompositeExtract 424 2

-             426:    6(float)   Load 367(d6)

-             427:    16(bool)   FOrdLessThan 425 426

-                                LoopMerge 422 None

-                                BranchConditional 427 423 422

-             423:                 Label

-             428:    7(fvec4)     Load 379(bigColor6)

-             429:    6(float)     CompositeExtract 428 2

-             430:    7(fvec4)     Load 9(color)

-             431:    6(float)     CompositeExtract 430 2

-             432:    6(float)     FAdd 431 429

-             433:    7(fvec4)     Load 9(color)

-             434:    7(fvec4)     CompositeInsert 432 433 2

-                                  Store 9(color) 434

-                                  Branch 421

-             422:               Label

-                                Branch 403

-             403:             Label

-                              Branch 435

-             435:             Label

-             438:    16(bool) Phi 17 403 163 455

-                              LoopMerge 436 None

-                              Branch 439

-             439:             Label

-                              SelectionMerge 437 None

-                              BranchConditional 438 437 440

+                                Branch 359

+             359:             Label

+             385:     20(ptr) AccessChain 9(color) 19

+             386:    6(float) Load 385

+             387:    6(float) Load 355(d6)

+             388:    16(bool) FOrdLessThan 386 387

+                              SelectionMerge 390 None

+                              BranchConditional 388 389 407

+             389:               Label

+                                Branch 391

+             391:               Label

+             394:     20(ptr)   AccessChain 9(color) 102

+             395:    6(float)   Load 394

+             396:    6(float)   Load 355(d6)

+             397:    16(bool)   FOrdLessThan 395 396

+                                LoopMerge 392 391 None

+                                BranchConditional 397 393 392

+             393:                 Label

+             398:    7(fvec4)     Load 367(bigColor6)

+             399:    7(fvec4)     Load 9(color)

+             400:    7(fvec4)     FAdd 399 398

+                                  Store 9(color) 400

+             402:    6(float)     Load 401(d7)

+             403:    16(bool)     FOrdLessThan 402 89

+                                  SelectionMerge 405 None

+                                  BranchConditional 403 404 405

+             404:                   Label

+                                    Branch 392

+             405:                 Label

+                                  Branch 391

+             392:               Label

+                                Branch 390

+             407:               Label

+                                Branch 408

+             408:               Label

+             411:     20(ptr)   AccessChain 9(color) 61

+             412:    6(float)   Load 411

+             413:    6(float)   Load 355(d6)

+             414:    16(bool)   FOrdLessThan 412 413

+                                LoopMerge 409 408 None

+                                BranchConditional 414 410 409

+             410:                 Label

+             415:     49(ptr)     AccessChain 367(bigColor6) 61

+             416:    6(float)     Load 415

+             417:     20(ptr)     AccessChain 9(color) 61

+             418:    6(float)     Load 417

+             419:    6(float)     FAdd 418 416

+             420:     20(ptr)     AccessChain 9(color) 61

+                                  Store 420 419

+                                  Branch 408

+             409:               Label

+                                Branch 390

+             390:             Label

+                              Branch 421

+             421:             Label

+             424:    16(bool) Phi 17 390 169 441

+                              LoopMerge 422 421 None

+                              Branch 425

+             425:             Label

+                              SelectionMerge 423 None

+                              BranchConditional 424 423 426

+             426:               Label

+                                SelectionMerge 427 None

+                                BranchConditional 17 427 422

+             427:               Label

+                                Branch 423

+             423:             Label

+             428:    6(float) Load 401(d7)

+             430:    16(bool) FOrdLessThan 428 429

+                              SelectionMerge 432 None

+                              BranchConditional 430 431 432

+             431:               Label

+                                Branch 422

+             432:             Label

+             435:    7(fvec4) Load 434(bigColor7)

+             436:    7(fvec4) Load 9(color)

+             437:    7(fvec4) FAdd 436 435

+                              Store 9(color) 437

+             438:    6(float) Load 401(d7)

+             439:    16(bool) FOrdLessThan 438 89

+                              SelectionMerge 441 None

+                              BranchConditional 439 440 441

              440:               Label

-                                SelectionMerge 441 None

-                                BranchConditional 17 441 436

-             441:               Label

-                                Branch 437

-             437:             Label

-             442:    6(float) Load 414(d7)

-             444:    16(bool) FOrdLessThan 442 443

-                              SelectionMerge 446 None

-                              BranchConditional 444 445 446

-             445:               Label

-                                Branch 436

-             446:             Label

-             449:    7(fvec4) Load 448(bigColor7)

-             450:    7(fvec4) Load 9(color)

-             451:    7(fvec4) FAdd 450 449

-                              Store 9(color) 451

-             452:    6(float) Load 414(d7)

-             453:    16(bool) FOrdLessThan 452 84

-                              SelectionMerge 455 None

-                              BranchConditional 453 454 455

+             442:     20(ptr)   AccessChain 9(color) 61

+             443:    6(float)   Load 442

+             444:    6(float)   FAdd 443 89

+                                Store 442 444

+                                Branch 422

+             441:             Label

+             446:    7(fvec4) Load 11(BaseColor)

+             447:    7(fvec4) Load 9(color)

+             448:    7(fvec4) FAdd 447 446

+                              Store 9(color) 448

+                              Branch 421

+             422:             Label

+                              Branch 449

+             449:             Label

+             452:    16(bool) Phi 17 422 169 472

+                              LoopMerge 450 449 None

+                              Branch 453

+             453:             Label

+                              SelectionMerge 451 None

+                              BranchConditional 452 451 454

              454:               Label

-             456:    7(fvec4)   Load 9(color)

-             457:    6(float)   CompositeExtract 456 2

-             458:    6(float)   FAdd 457 84

-             459:    7(fvec4)   Load 9(color)

-             460:    7(fvec4)   CompositeInsert 458 459 2

-                                Store 9(color) 460

-                                Branch 436

-             455:             Label

-             462:    7(fvec4) Load 11(BaseColor)

-             463:    7(fvec4) Load 9(color)

-             464:    7(fvec4) FAdd 463 462

-                              Store 9(color) 464

-                              Branch 435

-             436:             Label

-                              Branch 465

-             465:             Label

-             468:    16(bool) Phi 17 436 163 488

-                              LoopMerge 466 None

-                              Branch 469

-             469:             Label

-                              SelectionMerge 467 None

-                              BranchConditional 468 467 470

-             470:               Label

-             471:    7(fvec4)   Load 9(color)

-             472:    6(float)   CompositeExtract 471 2

-             474:    6(float)   Load 473(d8)

-             475:    16(bool)   FOrdLessThan 472 474

-                                SelectionMerge 476 None

-                                BranchConditional 475 476 466

-             476:               Label

-                                Branch 467

-             467:             Label

-             477:    6(float) Load 473(d8)

-             478:    16(bool) FOrdLessThan 477 443

-                              SelectionMerge 480 None

-                              BranchConditional 478 479 480

-             479:               Label

-                                Branch 466

-             480:             Label

-             482:    7(fvec4) Load 448(bigColor7)

-             483:    7(fvec4) Load 9(color)

-             484:    7(fvec4) FAdd 483 482

-                              Store 9(color) 484

-             485:    6(float) Load 473(d8)

-             486:    16(bool) FOrdLessThan 485 84

-                              SelectionMerge 488 None

-                              BranchConditional 486 487 488

-             487:               Label

-             489:    7(fvec4)   Load 9(color)

-             490:    6(float)   CompositeExtract 489 2

-             491:    6(float)   FAdd 490 84

-             492:    7(fvec4)   Load 9(color)

-             493:    7(fvec4)   CompositeInsert 491 492 2

-                                Store 9(color) 493

-             494:    6(float)   Load 473(d8)

-             496:    16(bool)   FOrdLessThan 494 495

-                                SelectionMerge 498 None

-                                BranchConditional 496 497 504

-             497:                 Label

-             499:    7(fvec4)     Load 9(color)

-             500:    6(float)     CompositeExtract 499 1

-             501:    6(float)     FAdd 500 84

-             502:    7(fvec4)     Load 9(color)

-             503:    7(fvec4)     CompositeInsert 501 502 1

-                                  Store 9(color) 503

-                                  Branch 498

-             504:                 Label

-             505:    7(fvec4)     Load 9(color)

-             506:    6(float)     CompositeExtract 505 0

-             507:    6(float)     FAdd 506 84

-             508:    7(fvec4)     Load 9(color)

-             509:    7(fvec4)     CompositeInsert 507 508 0

-                                  Store 9(color) 509

-                                  Branch 498

-             498:               Label

-                                Branch 466

-             488:             Label

-             511:    7(fvec4) Load 11(BaseColor)

-             512:    7(fvec4) Load 9(color)

-             513:    7(fvec4) FAdd 512 511

-                              Store 9(color) 513

-                              Branch 465

-             466:             Label

-                              Branch 514

-             514:             Label

-             517:    7(fvec4) Load 9(color)

-             518:    6(float) CompositeExtract 517 3

-             520:    6(float) Load 519(d9)

-             521:    16(bool) FOrdLessThan 518 520

-                              LoopMerge 515 None

-                              BranchConditional 521 516 515

-             516:               Label

-             522:    6(float)   Load 519(d9)

-             523:    6(float)   Load 473(d8)

-             524:    16(bool)   FOrdGreaterThan 522 523

-                                SelectionMerge 526 None

-                                BranchConditional 524 525 526

-             525:                 Label

-             527:    7(fvec4)     Load 9(color)

-             528:    6(float)     CompositeExtract 527 0

-             529:    6(float)     Load 414(d7)

-             530:    16(bool)     FOrdLessThanEqual 528 529

-                                  SelectionMerge 532 None

-                                  BranchConditional 530 531 532

-             531:                   Label

-             533:    7(fvec4)       Load 9(color)

-             534:    6(float)       CompositeExtract 533 2

-             536:    16(bool)       FOrdEqual 534 535

-                                    SelectionMerge 538 None

-                                    BranchConditional 536 537 544

-             537:                     Label

-             539:    7(fvec4)         Load 9(color)

-             540:    6(float)         CompositeExtract 539 3

-             541:    6(float)         FAdd 540 84

-             542:    7(fvec4)         Load 9(color)

-             543:    7(fvec4)         CompositeInsert 541 542 3

-                                      Store 9(color) 543

-                                      Branch 538

-             544:                     Label

-                                      Branch 515

-             538:                   Label

-                                    Branch 532

-             532:                 Label

-                                  Branch 526

-             526:               Label

-                                Branch 514

-             515:             Label

-                              Branch 546

-             546:             Label

-             549:    7(fvec4) Load 9(color)

-             550:    6(float) CompositeExtract 549 2

-             552:    6(float) Load 551(d10)

-             553:    16(bool) FOrdLessThan 550 552

-                              LoopMerge 547 None

-                              BranchConditional 553 548 547

-             548:               Label

-             554:    7(fvec4)   Load 9(color)

-             555:    6(float)   CompositeExtract 554 1

-             556:    6(float)   FAdd 555 84

-             557:    7(fvec4)   Load 9(color)

-             558:    7(fvec4)   CompositeInsert 556 557 1

-                                Store 9(color) 558

-             559:    7(fvec4)   Load 9(color)

-             560:    6(float)   CompositeExtract 559 1

-             562:    6(float)   Load 561(d11)

-             563:    16(bool)   FOrdLessThan 560 562

-                                SelectionMerge 565 None

-                                BranchConditional 563 564 565

-             564:                 Label

-             566:    7(fvec4)     Load 9(color)

-             567:    6(float)     CompositeExtract 566 2

-             568:    6(float)     FAdd 567 84

-             569:    7(fvec4)     Load 9(color)

-             570:    7(fvec4)     CompositeInsert 568 569 2

-                                  Store 9(color) 570

-             571:    7(fvec4)     Load 9(color)

-             572:    6(float)     CompositeExtract 571 3

-             574:    6(float)     Load 573(d12)

-             575:    16(bool)     FOrdLessThan 572 574

-                                  SelectionMerge 577 None

-                                  BranchConditional 575 576 583

-             576:                   Label

-             578:    7(fvec4)       Load 9(color)

-             579:    6(float)       CompositeExtract 578 3

-             580:    6(float)       FAdd 579 84

-             581:    7(fvec4)       Load 9(color)

-             582:    7(fvec4)       CompositeInsert 580 581 3

-                                    Store 9(color) 582

-                                    Branch 577

-             583:                   Label

-             584:    7(fvec4)       Load 9(color)

-             585:    6(float)       CompositeExtract 584 0

-             586:    6(float)       FAdd 585 84

-             587:    7(fvec4)       Load 9(color)

-             588:    7(fvec4)       CompositeInsert 586 587 0

-                                    Store 9(color) 588

-                                    Branch 577

+             455:     20(ptr)   AccessChain 9(color) 61

+             456:    6(float)   Load 455

+             458:    6(float)   Load 457(d8)

+             459:    16(bool)   FOrdLessThan 456 458

+                                SelectionMerge 460 None

+                                BranchConditional 459 460 450

+             460:               Label

+                                Branch 451

+             451:             Label

+             461:    6(float) Load 457(d8)

+             462:    16(bool) FOrdLessThan 461 429

+                              SelectionMerge 464 None

+                              BranchConditional 462 463 464

+             463:               Label

+                                Branch 450

+             464:             Label

+             466:    7(fvec4) Load 434(bigColor7)

+             467:    7(fvec4) Load 9(color)

+             468:    7(fvec4) FAdd 467 466

+                              Store 9(color) 468

+             469:    6(float) Load 457(d8)

+             470:    16(bool) FOrdLessThan 469 89

+                              SelectionMerge 472 None

+                              BranchConditional 470 471 472

+             471:               Label

+             473:     20(ptr)   AccessChain 9(color) 61

+             474:    6(float)   Load 473

+             475:    6(float)   FAdd 474 89

+                                Store 473 475

+             476:    6(float)   Load 457(d8)

+             478:    16(bool)   FOrdLessThan 476 477

+                                SelectionMerge 480 None

+                                BranchConditional 478 479 484

+             479:                 Label

+             481:     20(ptr)     AccessChain 9(color) 102

+             482:    6(float)     Load 481

+             483:    6(float)     FAdd 482 89

+                                  Store 481 483

+                                  Branch 480

+             484:                 Label

+             485:     20(ptr)     AccessChain 9(color) 19

+             486:    6(float)     Load 485

+             487:    6(float)     FAdd 486 89

+                                  Store 485 487

+                                  Branch 480

+             480:               Label

+                                Branch 450

+             472:             Label

+             489:    7(fvec4) Load 11(BaseColor)

+             490:    7(fvec4) Load 9(color)

+             491:    7(fvec4) FAdd 490 489

+                              Store 9(color) 491

+                              Branch 449

+             450:             Label

+                              Branch 492

+             492:             Label

+             495:     20(ptr) AccessChain 9(color) 70

+             496:    6(float) Load 495

+             498:    6(float) Load 497(d9)

+             499:    16(bool) FOrdLessThan 496 498

+                              LoopMerge 493 492 None

+                              BranchConditional 499 494 493

+             494:               Label

+             500:    6(float)   Load 497(d9)

+             501:    6(float)   Load 457(d8)

+             502:    16(bool)   FOrdGreaterThan 500 501

+                                SelectionMerge 504 None

+                                BranchConditional 502 503 504

+             503:                 Label

+             505:     20(ptr)     AccessChain 9(color) 19

+             506:    6(float)     Load 505

+             507:    6(float)     Load 401(d7)

+             508:    16(bool)     FOrdLessThanEqual 506 507

+                                  SelectionMerge 510 None

+                                  BranchConditional 508 509 510

+             509:                   Label

+             511:     20(ptr)       AccessChain 9(color) 61

+             512:    6(float)       Load 511

+             514:    16(bool)       FOrdEqual 512 513

+                                    SelectionMerge 516 None

+                                    BranchConditional 514 515 520

+             515:                     Label

+             517:     20(ptr)         AccessChain 9(color) 70

+             518:    6(float)         Load 517

+             519:    6(float)         FAdd 518 89

+                                      Store 517 519

+                                      Branch 516

+             520:                     Label

+                                      Branch 493

+             516:                   Label

+                                    Branch 510

+             510:                 Label

+                                  Branch 504

+             504:               Label

+                                Branch 492

+             493:             Label

+                              Branch 522

+             522:             Label

+             525:     20(ptr) AccessChain 9(color) 61

+             526:    6(float) Load 525

+             528:    6(float) Load 527(d10)

+             529:    16(bool) FOrdLessThan 526 528

+                              LoopMerge 523 522 None

+                              BranchConditional 529 524 523

+             524:               Label

+             530:     20(ptr)   AccessChain 9(color) 102

+             531:    6(float)   Load 530

+             532:    6(float)   FAdd 531 89

+                                Store 530 532

+             533:     20(ptr)   AccessChain 9(color) 102

+             534:    6(float)   Load 533

+             536:    6(float)   Load 535(d11)

+             537:    16(bool)   FOrdLessThan 534 536

+                                SelectionMerge 539 None

+                                BranchConditional 537 538 539

+             538:                 Label

+             540:     20(ptr)     AccessChain 9(color) 61

+             541:    6(float)     Load 540

+             542:    6(float)     FAdd 541 89

+                                  Store 540 542

+             543:     20(ptr)     AccessChain 9(color) 70

+             544:    6(float)     Load 543

+             546:    6(float)     Load 545(d12)

+             547:    16(bool)     FOrdLessThan 544 546

+                                  SelectionMerge 549 None

+                                  BranchConditional 547 548 553

+             548:                   Label

+             550:     20(ptr)       AccessChain 9(color) 70

+             551:    6(float)       Load 550

+             552:    6(float)       FAdd 551 89

+                                    Store 550 552

+                                    Branch 549

+             553:                   Label

+             554:     20(ptr)       AccessChain 9(color) 19

+             555:    6(float)       Load 554

+             556:    6(float)       FAdd 555 89

+                                    Store 554 556

+                                    Branch 549

+             549:                 Label

+                                  Branch 522

+             539:               Label

+             558:    7(fvec4)   Load 9(color)

+             559:    7(fvec4)   CompositeConstruct 89 89 89 89

+             560:    7(fvec4)   FAdd 558 559

+                                Store 9(color) 560

+                                Branch 523

+             523:             Label

+                              Branch 562

+             562:             Label

+             565:     20(ptr) AccessChain 9(color) 19

+             566:    6(float) Load 565

+             568:    16(bool) FOrdLessThan 566 567

+                              LoopMerge 563 562 None

+                              BranchConditional 568 564 563

+             564:               Label

+             570:    7(fvec4)   Load 569(bigColor8)

+             571:    7(fvec4)   Load 9(color)

+             572:    7(fvec4)   FAdd 571 570

+                                Store 9(color) 572

+             573:     20(ptr)   AccessChain 9(color) 61

+             574:    6(float)   Load 573

+             575:    6(float)   Load 457(d8)

+             576:    16(bool)   FOrdLessThan 574 575

+                                SelectionMerge 578 None

+                                BranchConditional 576 577 578

              577:                 Label

-                                  Branch 546

-             565:               Label

-             590:    7(fvec4)   Load 9(color)

-             591:    7(fvec4)   CompositeConstruct 84 84 84 84

-             592:    7(fvec4)   FAdd 590 591

-                                Store 9(color) 592

-                                Branch 547

-             547:             Label

-                              Branch 594

-             594:             Label

+             579:     20(ptr)     AccessChain 9(color) 70

+             580:    6(float)     Load 579

+             581:    6(float)     Load 355(d6)

+             582:    16(bool)     FOrdLessThan 580 581

+                                  SelectionMerge 584 None

+                                  BranchConditional 582 583 584

+             583:                   Label

+                                    Branch 562

+             584:                 Label

+                                  Branch 578

+             578:               Label

+             586:     49(ptr)   AccessChain 569(bigColor8) 19

+             587:    6(float)   Load 586

+             588:     20(ptr)   AccessChain 9(color) 102

+             589:    6(float)   Load 588

+             590:    6(float)   FAdd 589 587

+             591:     20(ptr)   AccessChain 9(color) 102

+                                Store 591 590

+                                Branch 562

+             563:             Label

+             592:    7(fvec4) Load 9(color)

+             593:    7(fvec4) CompositeConstruct 89 89 89 89

+             594:    7(fvec4) FAdd 592 593

+                              Store 9(color) 594

              597:    7(fvec4) Load 9(color)

-             598:    6(float) CompositeExtract 597 0

-             600:    16(bool) FOrdLessThan 598 599

-                              LoopMerge 595 None

-                              BranchConditional 600 596 595

-             596:               Label

-             602:    7(fvec4)   Load 601(bigColor8)

-             603:    7(fvec4)   Load 9(color)

-             604:    7(fvec4)   FAdd 603 602

-                                Store 9(color) 604

-             605:    7(fvec4)   Load 9(color)

-             606:    6(float)   CompositeExtract 605 2

-             607:    6(float)   Load 473(d8)

-             608:    16(bool)   FOrdLessThan 606 607

-                                SelectionMerge 610 None

-                                BranchConditional 608 609 610

-             609:                 Label

-             611:    7(fvec4)     Load 9(color)

-             612:    6(float)     CompositeExtract 611 3

-             613:    6(float)     Load 367(d6)

-             614:    16(bool)     FOrdLessThan 612 613

-                                  SelectionMerge 616 None

-                                  BranchConditional 614 615 616

-             615:                   Label

-                                    Branch 594

-             616:                 Label

-                                  Branch 610

-             610:               Label

-             618:    7(fvec4)   Load 601(bigColor8)

-             619:    6(float)   CompositeExtract 618 0

-             620:    7(fvec4)   Load 9(color)

-             621:    6(float)   CompositeExtract 620 1

-             622:    6(float)   FAdd 621 619

-             623:    7(fvec4)   Load 9(color)

-             624:    7(fvec4)   CompositeInsert 622 623 1

-                                Store 9(color) 624

-                                Branch 594

-             595:             Label

-             625:    7(fvec4) Load 9(color)

-             626:    7(fvec4) CompositeConstruct 84 84 84 84

-             627:    7(fvec4) FAdd 625 626

-                              Store 9(color) 627

-             630:    7(fvec4) Load 9(color)

-                              Store 629(gl_FragColor) 630

-                              Branch 631

-             631:             Label

-             634:    7(fvec4) Load 9(color)

-             635:    6(float) CompositeExtract 634 0

-             637:    6(float) Load 636(d14)

-             638:    16(bool) FOrdLessThan 635 637

-                              LoopMerge 632 None

-                              BranchConditional 638 633 632

-             633:               Label

-             639:    7(fvec4)   Load 9(color)

-             640:    6(float)   CompositeExtract 639 1

-             642:    6(float)   Load 641(d15)

-             643:    16(bool)   FOrdLessThan 640 642

-                                SelectionMerge 645 None

-                                BranchConditional 643 644 647

-             644:                 Label

+                              Store 596(gl_FragColor) 597

+                              Branch 598

+             598:             Label

+             601:     20(ptr) AccessChain 9(color) 19

+             602:    6(float) Load 601

+             604:    6(float) Load 603(d14)

+             605:    16(bool) FOrdLessThan 602 604

+                              LoopMerge 599 598 None

+                              BranchConditional 605 600 599

+             600:               Label

+             606:     20(ptr)   AccessChain 9(color) 102

+             607:    6(float)   Load 606

+             609:    6(float)   Load 608(d15)

+             610:    16(bool)   FOrdLessThan 607 609

+                                SelectionMerge 612 None

+                                BranchConditional 610 611 614

+             611:                 Label

                                   Return

-             647:                 Label

-             648:    7(fvec4)     Load 9(color)

-             649:    7(fvec4)     CompositeConstruct 84 84 84 84

-             650:    7(fvec4)     FAdd 648 649

-                                  Store 9(color) 650

-                                  Branch 645

-             645:               Label

-                                Branch 631

+             614:                 Label

+             615:    7(fvec4)     Load 9(color)

+             616:    7(fvec4)     CompositeConstruct 89 89 89 89

+             617:    7(fvec4)     FAdd 615 616

+                                  Store 9(color) 617

+                                  Branch 612

+             612:               Label

+                                Branch 598

+             599:             Label

+             618:    7(fvec4) Load 9(color)

+             619:    7(fvec4) CompositeConstruct 89 89 89 89

+             620:    7(fvec4) FAdd 618 619

+                              Store 9(color) 620

+                              Branch 621

+             621:             Label

+             624:     20(ptr) AccessChain 9(color) 70

+             625:    6(float) Load 624

+             627:    6(float) Load 626(d16)

+             628:    16(bool) FOrdLessThan 625 627

+                              LoopMerge 622 621 None

+                              BranchConditional 628 623 622

+             623:               Label

+             629:     20(ptr)   AccessChain 9(color) 70

+             630:    6(float)   Load 629

+             631:    6(float)   FAdd 630 89

+                                Store 629 631

+                                Branch 621

+             622:             Label

+                              Branch 632

              632:             Label

-             651:    7(fvec4) Load 9(color)

-             652:    7(fvec4) CompositeConstruct 84 84 84 84

-             653:    7(fvec4) FAdd 651 652

-                              Store 9(color) 653

-                              Branch 654

-             654:             Label

-             657:    7(fvec4) Load 9(color)

-             658:    6(float) CompositeExtract 657 3

-             660:    6(float) Load 659(d16)

-             661:    16(bool) FOrdLessThan 658 660

-                              LoopMerge 655 None

-                              BranchConditional 661 656 655

-             656:               Label

-             662:    7(fvec4)   Load 9(color)

-             663:    6(float)   CompositeExtract 662 3

-             664:    6(float)   FAdd 663 84

-             665:    7(fvec4)   Load 9(color)

-             666:    7(fvec4)   CompositeInsert 664 665 3

-                                Store 9(color) 666

-                                Branch 654

-             655:             Label

-                              Branch 667

-             667:             Label

-             670:    7(fvec4) Load 9(color)

-             671:    6(float) CompositeExtract 670 3

-             672:    6(float) Load 92(d2)

-             673:    16(bool) FOrdLessThan 671 672

-                              SelectionMerge 675 None

-                              BranchConditional 673 674 675

-             674:               Label

-             676:    7(fvec4)   Load 9(color)

-             677:    6(float)   CompositeExtract 676 1

-             678:    6(float)   Load 99(d3)

-             679:    16(bool)   FOrdLessThan 677 678

-                                Branch 675

-             675:             Label

-             680:    16(bool) Phi 673 667 679 674

-                              LoopMerge 668 None

-                              BranchConditional 680 669 668

-             669:               Label

-             681:    7(fvec4)   Load 103(bigColor1_2)

-             682:    7(fvec4)   Load 9(color)

-             683:    7(fvec4)   FAdd 682 681

-                                Store 9(color) 683

-             684:    7(fvec4)   Load 9(color)

-             685:    6(float)   CompositeExtract 684 2

-             686:    6(float)   Load 99(d3)

-             687:    16(bool)   FOrdLessThan 685 686

-                                SelectionMerge 689 None

-                                BranchConditional 687 688 689

-             688:                 Label

+             635:     20(ptr) AccessChain 9(color) 70

+             636:    6(float) Load 635

+             637:    6(float) Load 97(d2)

+             638:    16(bool) FOrdLessThan 636 637

+                              SelectionMerge 640 None

+                              BranchConditional 638 639 640

+             639:               Label

+             641:     20(ptr)   AccessChain 9(color) 102

+             642:    6(float)   Load 641

+             643:    6(float)   Load 105(d3)

+             644:    16(bool)   FOrdLessThan 642 643

+                                Branch 640

+             640:             Label

+             645:    16(bool) Phi 638 632 644 639

+                              LoopMerge 633 632 None

+                              BranchConditional 645 634 633

+             634:               Label

+             646:    7(fvec4)   Load 109(bigColor1_2)

+             647:    7(fvec4)   Load 9(color)

+             648:    7(fvec4)   FAdd 647 646

+                                Store 9(color) 648

+             649:     20(ptr)   AccessChain 9(color) 61

+             650:    6(float)   Load 649

+             651:    6(float)   Load 105(d3)

+             652:    16(bool)   FOrdLessThan 650 651

+                                SelectionMerge 654 None

+                                BranchConditional 652 653 654

+             653:                 Label

                                   Return

-             689:               Label

-                                Branch 667

-             668:             Label

-                              Branch 691

-             691:             Label

-             694:    16(bool) Phi 17 668 163 709

-                              LoopMerge 692 None

-                              Branch 695

-             695:             Label

-                              SelectionMerge 693 None

-                              BranchConditional 694 693 696

-             696:               Label

-             697:    7(fvec4)   Load 9(color)

-             698:    6(float)   CompositeExtract 697 0

-             700:    6(float)   Load 699(d17)

-             701:    16(bool)   FOrdLessThan 698 700

-                                SelectionMerge 702 None

-                                BranchConditional 701 702 692

-             702:               Label

-                                Branch 693

-             693:             Label

-             703:    7(fvec4) Load 9(color)

-             704:    6(float) CompositeExtract 703 1

-             706:    6(float) Load 705(d18)

-             707:    16(bool) FOrdLessThan 704 706

-                              SelectionMerge 709 None

-                              BranchConditional 707 708 709

-             708:               Label

+             654:               Label

+                                Branch 632

+             633:             Label

+                              Branch 656

+             656:             Label

+             659:    16(bool) Phi 17 633 169 674

+                              LoopMerge 657 656 None

+                              Branch 660

+             660:             Label

+                              SelectionMerge 658 None

+                              BranchConditional 659 658 661

+             661:               Label

+             662:     20(ptr)   AccessChain 9(color) 19

+             663:    6(float)   Load 662

+             665:    6(float)   Load 664(d17)

+             666:    16(bool)   FOrdLessThan 663 665

+                                SelectionMerge 667 None

+                                BranchConditional 666 667 657

+             667:               Label

+                                Branch 658

+             658:             Label

+             668:     20(ptr) AccessChain 9(color) 102

+             669:    6(float) Load 668

+             671:    6(float) Load 670(d18)

+             672:    16(bool) FOrdLessThan 669 671

+                              SelectionMerge 674 None

+                              BranchConditional 672 673 674

+             673:               Label

                                 Return

-             709:             Label

-             711:    7(fvec4) Load 9(color)

-             712:    7(fvec4) CompositeConstruct 84 84 84 84

-             713:    7(fvec4) FAdd 711 712

-                              Store 9(color) 713

-                              Branch 691

-             692:             Label

-                              Branch 714

-             714:             Label

-             717:    7(fvec4) Load 9(color)

-             718:    6(float) CompositeExtract 717 1

-             719:    6(float) Load 659(d16)

-             720:    16(bool) FOrdLessThan 718 719

-                              LoopMerge 715 None

-                              BranchConditional 720 716 715

-             716:               Label

-             721:    7(fvec4)   Load 9(color)

-             722:    6(float)   CompositeExtract 721 3

-             723:    6(float)   Load 659(d16)

-             724:    16(bool)   FOrdLessThan 722 723

-                                SelectionMerge 726 None

-                                BranchConditional 724 725 728

-             725:                 Label

+             674:             Label

+             676:    7(fvec4) Load 9(color)

+             677:    7(fvec4) CompositeConstruct 89 89 89 89

+             678:    7(fvec4) FAdd 676 677

+                              Store 9(color) 678

+                              Branch 656

+             657:             Label

+                              Branch 679

+             679:             Label

+             682:     20(ptr) AccessChain 9(color) 102

+             683:    6(float) Load 682

+             684:    6(float) Load 626(d16)

+             685:    16(bool) FOrdLessThan 683 684

+                              LoopMerge 680 679 None

+                              BranchConditional 685 681 680

+             681:               Label

+             686:     20(ptr)   AccessChain 9(color) 70

+             687:    6(float)   Load 686

+             688:    6(float)   Load 626(d16)

+             689:    16(bool)   FOrdLessThan 687 688

+                                SelectionMerge 691 None

+                                BranchConditional 689 690 693

+             690:                 Label

                                   Kill

-             728:                 Label

-             729:    7(fvec4)     Load 9(color)

-             730:    7(fvec4)     CompositeConstruct 84 84 84 84

-             731:    7(fvec4)     FAdd 729 730

-                                  Store 9(color) 731

-                                  Branch 726

-             726:               Label

-                                Branch 714

-             715:             Label

-             732:    7(fvec4) Load 9(color)

-             733:    7(fvec4) CompositeConstruct 84 84 84 84

-             734:    7(fvec4) FAdd 732 733

-                              Store 9(color) 734

-             735:    7(fvec4) Load 9(color)

-                              Store 629(gl_FragColor) 735

+             693:                 Label

+             694:    7(fvec4)     Load 9(color)

+             695:    7(fvec4)     CompositeConstruct 89 89 89 89

+             696:    7(fvec4)     FAdd 694 695

+                                  Store 9(color) 696

+                                  Branch 691

+             691:               Label

+                                Branch 679

+             680:             Label

+             697:    7(fvec4) Load 9(color)

+             698:    7(fvec4) CompositeConstruct 89 89 89 89

+             699:    7(fvec4) FAdd 697 698

+                              Store 9(color) 699

+             700:    7(fvec4) Load 9(color)

+                              Store 596(gl_FragColor) 700

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
index 3871d85..314a969 100755
--- a/Test/baseResults/spv.loopsArtificial.frag.out
+++ b/Test/baseResults/spv.loopsArtificial.frag.out
@@ -5,111 +5,66 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 195

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 191

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 11

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 9  "color"

                               Name 11  "BaseColor"

-                              Name 24  "d4"

-                              Name 29  "bigColor4"

-                              Name 83  "d13"

-                              Name 148  "gl_FragColor"

-                              Name 150  "bigColor"

-                              Name 151  "bigColor1_1"

-                              Name 152  "bigColor1_2"

-                              Name 153  "bigColor1_3"

-                              Name 154  "bigColor2"

-                              Name 155  "bigColor3"

-                              Name 156  "bigColor5"

-                              Name 157  "bigColor6"

-                              Name 158  "bigColor7"

-                              Name 159  "bigColor8"

-                              Name 160  "d"

-                              Name 161  "d2"

-                              Name 162  "d3"

-                              Name 163  "d5"

-                              Name 164  "d6"

-                              Name 165  "d7"

-                              Name 166  "d8"

-                              Name 167  "d9"

-                              Name 168  "d10"

-                              Name 169  "d11"

-                              Name 170  "d12"

-                              Name 171  "d14"

-                              Name 172  "d15"

-                              Name 173  "d16"

-                              Name 174  "d17"

-                              Name 175  "d18"

-                              Name 176  "d19"

-                              Name 177  "d20"

-                              Name 178  "d21"

-                              Name 179  "d22"

-                              Name 180  "d23"

-                              Name 181  "d24"

-                              Name 182  "d25"

-                              Name 183  "d26"

-                              Name 184  "d27"

-                              Name 185  "d28"

-                              Name 186  "d29"

-                              Name 187  "d30"

-                              Name 188  "d31"

-                              Name 189  "d32"

-                              Name 190  "d33"

-                              Name 191  "d34"

-                              Name 194  "Count"

-                              Decorate 11(BaseColor) Smooth

-                              Decorate 148(gl_FragColor) BuiltIn FragColor

-                              Decorate 150(bigColor) NoStaticUse

-                              Decorate 151(bigColor1_1) NoStaticUse

-                              Decorate 152(bigColor1_2) NoStaticUse

-                              Decorate 153(bigColor1_3) NoStaticUse

-                              Decorate 154(bigColor2) NoStaticUse

-                              Decorate 155(bigColor3) NoStaticUse

-                              Decorate 156(bigColor5) NoStaticUse

-                              Decorate 157(bigColor6) NoStaticUse

-                              Decorate 158(bigColor7) NoStaticUse

-                              Decorate 159(bigColor8) NoStaticUse

-                              Decorate 160(d) NoStaticUse

-                              Decorate 161(d2) NoStaticUse

-                              Decorate 162(d3) NoStaticUse

-                              Decorate 163(d5) NoStaticUse

-                              Decorate 164(d6) NoStaticUse

-                              Decorate 165(d7) NoStaticUse

-                              Decorate 166(d8) NoStaticUse

-                              Decorate 167(d9) NoStaticUse

-                              Decorate 168(d10) NoStaticUse

-                              Decorate 169(d11) NoStaticUse

-                              Decorate 170(d12) NoStaticUse

-                              Decorate 171(d14) NoStaticUse

-                              Decorate 172(d15) NoStaticUse

-                              Decorate 173(d16) NoStaticUse

-                              Decorate 174(d17) NoStaticUse

-                              Decorate 175(d18) NoStaticUse

-                              Decorate 176(d19) NoStaticUse

-                              Decorate 177(d20) NoStaticUse

-                              Decorate 178(d21) NoStaticUse

-                              Decorate 179(d22) NoStaticUse

-                              Decorate 180(d23) NoStaticUse

-                              Decorate 181(d24) NoStaticUse

-                              Decorate 182(d25) NoStaticUse

-                              Decorate 183(d26) NoStaticUse

-                              Decorate 184(d27) NoStaticUse

-                              Decorate 185(d28) NoStaticUse

-                              Decorate 186(d29) NoStaticUse

-                              Decorate 187(d30) NoStaticUse

-                              Decorate 188(d31) NoStaticUse

-                              Decorate 189(d32) NoStaticUse

-                              Decorate 190(d33) NoStaticUse

-                              Decorate 191(d34) NoStaticUse

-                              Decorate 194(Count) NoStaticUse

+                              Name 27  "d4"

+                              Name 32  "bigColor4"

+                              Name 84  "d13"

+                              Name 144  "gl_FragColor"

+                              Name 146  "bigColor"

+                              Name 147  "bigColor1_1"

+                              Name 148  "bigColor1_2"

+                              Name 149  "bigColor1_3"

+                              Name 150  "bigColor2"

+                              Name 151  "bigColor3"

+                              Name 152  "bigColor5"

+                              Name 153  "bigColor6"

+                              Name 154  "bigColor7"

+                              Name 155  "bigColor8"

+                              Name 156  "d"

+                              Name 157  "d2"

+                              Name 158  "d3"

+                              Name 159  "d5"

+                              Name 160  "d6"

+                              Name 161  "d7"

+                              Name 162  "d8"

+                              Name 163  "d9"

+                              Name 164  "d10"

+                              Name 165  "d11"

+                              Name 166  "d12"

+                              Name 167  "d14"

+                              Name 168  "d15"

+                              Name 169  "d16"

+                              Name 170  "d17"

+                              Name 171  "d18"

+                              Name 172  "d19"

+                              Name 173  "d20"

+                              Name 174  "d21"

+                              Name 175  "d22"

+                              Name 176  "d23"

+                              Name 177  "d24"

+                              Name 178  "d25"

+                              Name 179  "d26"

+                              Name 180  "d27"

+                              Name 181  "d28"

+                              Name 182  "d29"

+                              Name 183  "d30"

+                              Name 184  "d31"

+                              Name 185  "d32"

+                              Name 186  "d33"

+                              Name 187  "d34"

+                              Name 190  "Count"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -119,61 +74,67 @@
    11(BaseColor):     10(ptr) Variable Input

               17:             TypeBool

               18:    17(bool) ConstantTrue

-              23:             TypePointer UniformConstant 6(float)

-          24(d4):     23(ptr) Variable UniformConstant

-              28:             TypePointer UniformConstant 7(fvec4)

-   29(bigColor4):     28(ptr) Variable UniformConstant

-              39:    6(float) Constant 1073741824

-              53:    6(float) Constant 1065353216

-              57:    17(bool) ConstantFalse

-         83(d13):     23(ptr) Variable UniformConstant

-             147:             TypePointer Output 7(fvec4)

-148(gl_FragColor):    147(ptr) Variable Output

-   150(bigColor):     28(ptr) Variable UniformConstant

-151(bigColor1_1):     28(ptr) Variable UniformConstant

-152(bigColor1_2):     28(ptr) Variable UniformConstant

-153(bigColor1_3):     28(ptr) Variable UniformConstant

-  154(bigColor2):     28(ptr) Variable UniformConstant

-  155(bigColor3):     28(ptr) Variable UniformConstant

-  156(bigColor5):     28(ptr) Variable UniformConstant

-  157(bigColor6):     28(ptr) Variable UniformConstant

-  158(bigColor7):     28(ptr) Variable UniformConstant

-  159(bigColor8):     28(ptr) Variable UniformConstant

-          160(d):     23(ptr) Variable UniformConstant

-         161(d2):     23(ptr) Variable UniformConstant

-         162(d3):     23(ptr) Variable UniformConstant

-         163(d5):     23(ptr) Variable UniformConstant

-         164(d6):     23(ptr) Variable UniformConstant

-         165(d7):     23(ptr) Variable UniformConstant

-         166(d8):     23(ptr) Variable UniformConstant

-         167(d9):     23(ptr) Variable UniformConstant

-        168(d10):     23(ptr) Variable UniformConstant

-        169(d11):     23(ptr) Variable UniformConstant

-        170(d12):     23(ptr) Variable UniformConstant

-        171(d14):     23(ptr) Variable UniformConstant

-        172(d15):     23(ptr) Variable UniformConstant

-        173(d16):     23(ptr) Variable UniformConstant

-        174(d17):     23(ptr) Variable UniformConstant

-        175(d18):     23(ptr) Variable UniformConstant

-        176(d19):     23(ptr) Variable UniformConstant

-        177(d20):     23(ptr) Variable UniformConstant

-        178(d21):     23(ptr) Variable UniformConstant

-        179(d22):     23(ptr) Variable UniformConstant

-        180(d23):     23(ptr) Variable UniformConstant

-        181(d24):     23(ptr) Variable UniformConstant

-        182(d25):     23(ptr) Variable UniformConstant

-        183(d26):     23(ptr) Variable UniformConstant

-        184(d27):     23(ptr) Variable UniformConstant

-        185(d28):     23(ptr) Variable UniformConstant

-        186(d29):     23(ptr) Variable UniformConstant

-        187(d30):     23(ptr) Variable UniformConstant

-        188(d31):     23(ptr) Variable UniformConstant

-        189(d32):     23(ptr) Variable UniformConstant

-        190(d33):     23(ptr) Variable UniformConstant

-        191(d34):     23(ptr) Variable UniformConstant

-             192:             TypeInt 32 1

-             193:             TypePointer UniformConstant 192(int)

-      194(Count):    193(ptr) Variable UniformConstant

+              21:             TypeInt 32 0

+              22:     21(int) Constant 2

+              23:             TypePointer Function 6(float)

+              26:             TypePointer UniformConstant 6(float)

+          27(d4):     26(ptr) Variable UniformConstant

+              31:             TypePointer UniformConstant 7(fvec4)

+   32(bigColor4):     31(ptr) Variable UniformConstant

+              36:     21(int) Constant 0

+              43:    6(float) Constant 1073741824

+              56:    6(float) Constant 1065353216

+              58:    17(bool) ConstantFalse

+              60:     21(int) Constant 1

+              81:     21(int) Constant 3

+         84(d13):     26(ptr) Variable UniformConstant

+             143:             TypePointer Output 7(fvec4)

+144(gl_FragColor):    143(ptr) Variable Output

+   146(bigColor):     31(ptr) Variable UniformConstant

+147(bigColor1_1):     31(ptr) Variable UniformConstant

+148(bigColor1_2):     31(ptr) Variable UniformConstant

+149(bigColor1_3):     31(ptr) Variable UniformConstant

+  150(bigColor2):     31(ptr) Variable UniformConstant

+  151(bigColor3):     31(ptr) Variable UniformConstant

+  152(bigColor5):     31(ptr) Variable UniformConstant

+  153(bigColor6):     31(ptr) Variable UniformConstant

+  154(bigColor7):     31(ptr) Variable UniformConstant

+  155(bigColor8):     31(ptr) Variable UniformConstant

+          156(d):     26(ptr) Variable UniformConstant

+         157(d2):     26(ptr) Variable UniformConstant

+         158(d3):     26(ptr) Variable UniformConstant

+         159(d5):     26(ptr) Variable UniformConstant

+         160(d6):     26(ptr) Variable UniformConstant

+         161(d7):     26(ptr) Variable UniformConstant

+         162(d8):     26(ptr) Variable UniformConstant

+         163(d9):     26(ptr) Variable UniformConstant

+        164(d10):     26(ptr) Variable UniformConstant

+        165(d11):     26(ptr) Variable UniformConstant

+        166(d12):     26(ptr) Variable UniformConstant

+        167(d14):     26(ptr) Variable UniformConstant

+        168(d15):     26(ptr) Variable UniformConstant

+        169(d16):     26(ptr) Variable UniformConstant

+        170(d17):     26(ptr) Variable UniformConstant

+        171(d18):     26(ptr) Variable UniformConstant

+        172(d19):     26(ptr) Variable UniformConstant

+        173(d20):     26(ptr) Variable UniformConstant

+        174(d21):     26(ptr) Variable UniformConstant

+        175(d22):     26(ptr) Variable UniformConstant

+        176(d23):     26(ptr) Variable UniformConstant

+        177(d24):     26(ptr) Variable UniformConstant

+        178(d25):     26(ptr) Variable UniformConstant

+        179(d26):     26(ptr) Variable UniformConstant

+        180(d27):     26(ptr) Variable UniformConstant

+        181(d28):     26(ptr) Variable UniformConstant

+        182(d29):     26(ptr) Variable UniformConstant

+        183(d30):     26(ptr) Variable UniformConstant

+        184(d31):     26(ptr) Variable UniformConstant

+        185(d32):     26(ptr) Variable UniformConstant

+        186(d33):     26(ptr) Variable UniformConstant

+        187(d34):     26(ptr) Variable UniformConstant

+             188:             TypeInt 32 1

+             189:             TypePointer UniformConstant 188(int)

+      190(Count):    189(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

         9(color):      8(ptr) Variable Function

@@ -181,177 +142,167 @@
                               Store 9(color) 12

                               Branch 13

               13:             Label

-              16:    17(bool) Phi 18 5 57 49 57 64

-                              LoopMerge 14 None

+              16:    17(bool) Phi 18 5 58 52 58 66

+                              LoopMerge 14 13 None

                               Branch 19

               19:             Label

                               SelectionMerge 15 None

                               BranchConditional 16 15 20

               20:               Label

-              21:    7(fvec4)   Load 9(color)

-              22:    6(float)   CompositeExtract 21 2

-              25:    6(float)   Load 24(d4)

-              26:    17(bool)   FOrdLessThan 22 25

-                                SelectionMerge 27 None

-                                BranchConditional 26 27 14

-              27:               Label

+              24:     23(ptr)   AccessChain 9(color) 22

+              25:    6(float)   Load 24

+              28:    6(float)   Load 27(d4)

+              29:    17(bool)   FOrdLessThan 25 28

+                                SelectionMerge 30 None

+                                BranchConditional 29 30 14

+              30:               Label

                                 Branch 15

               15:             Label

-              30:    7(fvec4) Load 29(bigColor4)

-              31:    7(fvec4) Load 9(color)

-              32:    7(fvec4) FAdd 31 30

-                              Store 9(color) 32

-              33:    7(fvec4) Load 9(color)

-              34:    6(float) CompositeExtract 33 0

-              35:    6(float) Load 24(d4)

-              36:    17(bool) FOrdLessThan 34 35

-                              SelectionMerge 38 None

-                              BranchConditional 36 37 38

-              37:               Label

-              40:    7(fvec4)   Load 9(color)

-              41:    6(float)   CompositeExtract 40 2

-              42:    6(float)   FAdd 41 39

-              43:    7(fvec4)   Load 9(color)

-              44:    7(fvec4)   CompositeInsert 42 43 2

-                                Store 9(color) 44

-              45:    7(fvec4)   Load 9(color)

-              46:    6(float)   CompositeExtract 45 2

-              47:    6(float)   Load 24(d4)

-              48:    17(bool)   FOrdLessThan 46 47

-                                SelectionMerge 50 None

-                                BranchConditional 48 49 50

-              49:                 Label

-              51:    7(fvec4)     Load 9(color)

-              52:    6(float)     CompositeExtract 51 0

-              54:    6(float)     FAdd 52 53

-              55:    7(fvec4)     Load 9(color)

-              56:    7(fvec4)     CompositeInsert 54 55 0

-                                  Store 9(color) 56

+              33:    7(fvec4) Load 32(bigColor4)

+              34:    7(fvec4) Load 9(color)

+              35:    7(fvec4) FAdd 34 33

+                              Store 9(color) 35

+              37:     23(ptr) AccessChain 9(color) 36

+              38:    6(float) Load 37

+              39:    6(float) Load 27(d4)

+              40:    17(bool) FOrdLessThan 38 39

+                              SelectionMerge 42 None

+                              BranchConditional 40 41 42

+              41:               Label

+              44:     23(ptr)   AccessChain 9(color) 22

+              45:    6(float)   Load 44

+              46:    6(float)   FAdd 45 43

+              47:     23(ptr)   AccessChain 9(color) 22

+                                Store 47 46

+              48:     23(ptr)   AccessChain 9(color) 22

+              49:    6(float)   Load 48

+              50:    6(float)   Load 27(d4)

+              51:    17(bool)   FOrdLessThan 49 50

+                                SelectionMerge 53 None

+                                BranchConditional 51 52 53

+              52:                 Label

+              54:     23(ptr)     AccessChain 9(color) 36

+              55:    6(float)     Load 54

+              57:    6(float)     FAdd 55 56

+                                  Store 54 57

                                   Branch 13

-              50:               Label

-                                Branch 38

-              38:             Label

-              59:    7(fvec4) Load 9(color)

-              60:    6(float) CompositeExtract 59 1

-              61:    6(float) Load 24(d4)

-              62:    17(bool) FOrdLessThan 60 61

-                              SelectionMerge 64 None

-                              BranchConditional 62 63 71

-              63:               Label

-              65:    6(float)   Load 24(d4)

-              66:    7(fvec4)   Load 9(color)

-              67:    6(float)   CompositeExtract 66 1

-              68:    6(float)   FAdd 67 65

-              69:    7(fvec4)   Load 9(color)

-              70:    7(fvec4)   CompositeInsert 68 69 1

-                                Store 9(color) 70

-                                Branch 64

-              71:               Label

-              72:    6(float)   Load 24(d4)

-              73:    7(fvec4)   Load 9(color)

-              74:    6(float)   CompositeExtract 73 0

-              75:    6(float)   FAdd 74 72

-              76:    7(fvec4)   Load 9(color)

-              77:    7(fvec4)   CompositeInsert 75 76 0

-                                Store 9(color) 77

-                                Branch 64

-              64:             Label

+              53:               Label

+                                Branch 42

+              42:             Label

+              61:     23(ptr) AccessChain 9(color) 60

+              62:    6(float) Load 61

+              63:    6(float) Load 27(d4)

+              64:    17(bool) FOrdLessThan 62 63

+                              SelectionMerge 66 None

+                              BranchConditional 64 65 72

+              65:               Label

+              67:    6(float)   Load 27(d4)

+              68:     23(ptr)   AccessChain 9(color) 60

+              69:    6(float)   Load 68

+              70:    6(float)   FAdd 69 67

+              71:     23(ptr)   AccessChain 9(color) 60

+                                Store 71 70

+                                Branch 66

+              72:               Label

+              73:    6(float)   Load 27(d4)

+              74:     23(ptr)   AccessChain 9(color) 36

+              75:    6(float)   Load 74

+              76:    6(float)   FAdd 75 73

+              77:     23(ptr)   AccessChain 9(color) 36

+                                Store 77 76

+                                Branch 66

+              66:             Label

                               Branch 13

               14:             Label

                               Branch 78

               78:             Label

-              81:    7(fvec4) Load 9(color)

-              82:    6(float) CompositeExtract 81 3

-              84:    6(float) Load 83(d13)

-              85:    17(bool) FOrdLessThan 82 84

-                              LoopMerge 79 None

-                              BranchConditional 85 80 79

+              82:     23(ptr) AccessChain 9(color) 81

+              83:    6(float) Load 82

+              85:    6(float) Load 84(d13)

+              86:    17(bool) FOrdLessThan 83 85

+                              LoopMerge 79 78 None

+                              BranchConditional 86 80 79

               80:               Label

-              86:    7(fvec4)   Load 9(color)

-              87:    6(float)   CompositeExtract 86 2

-              88:    6(float)   Load 83(d13)

-              89:    17(bool)   FOrdLessThan 87 88

-                                SelectionMerge 91 None

-                                BranchConditional 89 90 95

-              90:                 Label

-              92:    7(fvec4)     Load 9(color)

-              93:    7(fvec4)     CompositeConstruct 53 53 53 53

-              94:    7(fvec4)     FAdd 92 93

-                                  Store 9(color) 94

-                                  Branch 91

-              95:                 Label

-              96:    7(fvec4)     Load 9(color)

-              97:    7(fvec4)     CompositeConstruct 53 53 53 53

-              98:    7(fvec4)     FSub 96 97

-                                  Store 9(color) 98

-                                  Branch 91

-              91:               Label

-              99:    7(fvec4)   Load 29(bigColor4)

-             100:    7(fvec4)   Load 9(color)

-             101:    7(fvec4)   FAdd 100 99

-                                Store 9(color) 101

-             102:    7(fvec4)   Load 9(color)

-             103:    6(float)   CompositeExtract 102 0

-             104:    6(float)   Load 24(d4)

-             105:    17(bool)   FOrdLessThan 103 104

-                                SelectionMerge 107 None

-                                BranchConditional 105 106 107

-             106:                 Label

-             108:    7(fvec4)     Load 9(color)

-             109:    6(float)     CompositeExtract 108 2

-             110:    6(float)     FAdd 109 39

-             111:    7(fvec4)     Load 9(color)

-             112:    7(fvec4)     CompositeInsert 110 111 2

-                                  Store 9(color) 112

-             113:    7(fvec4)     Load 9(color)

-             114:    6(float)     CompositeExtract 113 2

-             115:    6(float)     Load 24(d4)

+              87:     23(ptr)   AccessChain 9(color) 22

+              88:    6(float)   Load 87

+              89:    6(float)   Load 84(d13)

+              90:    17(bool)   FOrdLessThan 88 89

+                                SelectionMerge 92 None

+                                BranchConditional 90 91 96

+              91:                 Label

+              93:    7(fvec4)     Load 9(color)

+              94:    7(fvec4)     CompositeConstruct 56 56 56 56

+              95:    7(fvec4)     FAdd 93 94

+                                  Store 9(color) 95

+                                  Branch 92

+              96:                 Label

+              97:    7(fvec4)     Load 9(color)

+              98:    7(fvec4)     CompositeConstruct 56 56 56 56

+              99:    7(fvec4)     FSub 97 98

+                                  Store 9(color) 99

+                                  Branch 92

+              92:               Label

+             100:    7(fvec4)   Load 32(bigColor4)

+             101:    7(fvec4)   Load 9(color)

+             102:    7(fvec4)   FAdd 101 100

+                                Store 9(color) 102

+             103:     23(ptr)   AccessChain 9(color) 36

+             104:    6(float)   Load 103

+             105:    6(float)   Load 27(d4)

+             106:    17(bool)   FOrdLessThan 104 105

+                                SelectionMerge 108 None

+                                BranchConditional 106 107 108

+             107:                 Label

+             109:     23(ptr)     AccessChain 9(color) 22

+             110:    6(float)     Load 109

+             111:    6(float)     FAdd 110 43

+             112:     23(ptr)     AccessChain 9(color) 22

+                                  Store 112 111

+             113:     23(ptr)     AccessChain 9(color) 22

+             114:    6(float)     Load 113

+             115:    6(float)     Load 27(d4)

              116:    17(bool)     FOrdLessThan 114 115

                                   SelectionMerge 118 None

                                   BranchConditional 116 117 118

              117:                   Label

-             119:    7(fvec4)       Load 9(color)

-             120:    6(float)       CompositeExtract 119 0

-             121:    6(float)       FAdd 120 53

-             122:    7(fvec4)       Load 9(color)

-             123:    7(fvec4)       CompositeInsert 121 122 0

-                                    Store 9(color) 123

+             119:     23(ptr)       AccessChain 9(color) 36

+             120:    6(float)       Load 119

+             121:    6(float)       FAdd 120 56

+                                    Store 119 121

                                     Branch 78

              118:                 Label

-                                  Branch 107

-             107:               Label

-             125:    7(fvec4)   Load 9(color)

-             126:    6(float)   CompositeExtract 125 1

-             127:    6(float)   Load 24(d4)

-             128:    17(bool)   FOrdLessThan 126 127

-                                SelectionMerge 130 None

-                                BranchConditional 128 129 137

-             129:                 Label

-             131:    6(float)     Load 24(d4)

-             132:    7(fvec4)     Load 9(color)

-             133:    6(float)     CompositeExtract 132 1

-             134:    6(float)     FAdd 133 131

-             135:    7(fvec4)     Load 9(color)

-             136:    7(fvec4)     CompositeInsert 134 135 1

-                                  Store 9(color) 136

-                                  Branch 130

-             137:                 Label

-             138:    6(float)     Load 24(d4)

-             139:    7(fvec4)     Load 9(color)

-             140:    6(float)     CompositeExtract 139 0

-             141:    6(float)     FAdd 140 138

-             142:    7(fvec4)     Load 9(color)

-             143:    7(fvec4)     CompositeInsert 141 142 0

-                                  Store 9(color) 143

-                                  Branch 130

-             130:               Label

+                                  Branch 108

+             108:               Label

+             123:     23(ptr)   AccessChain 9(color) 60

+             124:    6(float)   Load 123

+             125:    6(float)   Load 27(d4)

+             126:    17(bool)   FOrdLessThan 124 125

+                                SelectionMerge 128 None

+                                BranchConditional 126 127 134

+             127:                 Label

+             129:    6(float)     Load 27(d4)

+             130:     23(ptr)     AccessChain 9(color) 60

+             131:    6(float)     Load 130

+             132:    6(float)     FAdd 131 129

+             133:     23(ptr)     AccessChain 9(color) 60

+                                  Store 133 132

+                                  Branch 128

+             134:                 Label

+             135:    6(float)     Load 27(d4)

+             136:     23(ptr)     AccessChain 9(color) 36

+             137:    6(float)     Load 136

+             138:    6(float)     FAdd 137 135

+             139:     23(ptr)     AccessChain 9(color) 36

+                                  Store 139 138

+                                  Branch 128

+             128:               Label

                                 Branch 78

               79:             Label

-             144:    7(fvec4) Load 9(color)

-             145:    7(fvec4) CompositeConstruct 53 53 53 53

-             146:    7(fvec4) FAdd 144 145

-                              Store 9(color) 146

-             149:    7(fvec4) Load 9(color)

-                              Store 148(gl_FragColor) 149

+             140:    7(fvec4) Load 9(color)

+             141:    7(fvec4) CompositeConstruct 56 56 56 56

+             142:    7(fvec4) FAdd 140 141

+                              Store 9(color) 142

+             145:    7(fvec4) Load 9(color)

+                              Store 144(gl_FragColor) 145

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index e46f796..cc4a422 100755
--- a/Test/baseResults/spv.matFun.vert.out
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 93

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 73 92

+                              Source GLSL 130

                               Name 4  "main"

                               Name 14  "xf(mf33;vf3;"

                               Name 12  "m"

@@ -33,7 +33,6 @@
                               Name 92  "gl_VertexID"

                               Decorate 69(gl_Position) BuiltIn Position

                               Decorate 92(gl_VertexID) BuiltIn VertexId

-                              Decorate 92(gl_VertexID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
old mode 100644
new mode 100755
index 60802a1..9642445
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 265

 

-                              Source GLSL 430

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 55 17 38 26 72 79 69 264 234

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 430

                               Name 4  "main"

                               Name 9  "v"

                               Name 13  "s2D"

@@ -25,40 +25,30 @@
                               Name 38  "c3D"

                               Name 47  "s2DShadow"

                               Name 55  "c1D"

-                              Name 67  "ic3D"

-                              Name 70  "ic1D"

-                              Name 77  "ic2D"

-                              Name 86  "sr"

-                              Name 112  "sCube"

-                              Name 123  "s2DArrayShadow"

-                              Name 151  "iv"

-                              Name 155  "is2D"

-                              Name 190  "is3D"

-                              Name 202  "isCube"

-                              Name 214  "is2DArray"

-                              Name 224  "iv2"

-                              Name 228  "sCubeShadow"

-                              Name 233  "FragData"

-                              Name 245  "is2Dms"

+                              Name 69  "ic3D"

+                              Name 72  "ic1D"

+                              Name 79  "ic2D"

+                              Name 88  "sr"

+                              Name 113  "sCube"

+                              Name 124  "s2DArrayShadow"

+                              Name 152  "iv"

+                              Name 156  "is2D"

+                              Name 191  "is3D"

+                              Name 203  "isCube"

+                              Name 215  "is2DArray"

+                              Name 225  "iv2"

+                              Name 229  "sCubeShadow"

+                              Name 234  "FragData"

+                              Name 246  "is2Dms"

                               Name 250  "us2D"

                               Name 254  "us3D"

                               Name 258  "usCube"

                               Name 262  "us2DArray"

                               Name 264  "ic4D"

-                              Decorate 17(c2D) Smooth

-                              Decorate 26(c4D) Smooth

-                              Decorate 38(c3D) Smooth

-                              Decorate 55(c1D) Smooth

-                              Decorate 67(ic3D) Flat

-                              Decorate 70(ic1D) Flat

-                              Decorate 77(ic2D) Flat

-                              Decorate 245(is2Dms) NoStaticUse

-                              Decorate 250(us2D) NoStaticUse

-                              Decorate 254(us3D) NoStaticUse

-                              Decorate 258(usCube) NoStaticUse

-                              Decorate 262(us2DArray) NoStaticUse

+                              Decorate 69(ic3D) Flat

+                              Decorate 72(ic1D) Flat

+                              Decorate 79(ic2D) Flat

                               Decorate 264(ic4D) Flat

-                              Decorate 264(ic4D) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -95,83 +85,86 @@
               53:   51(ivec2) ConstantComposite 52 52

               54:             TypePointer Input 6(float)

          55(c1D):     54(ptr) Variable Input

-              65:             TypeVector 50(int) 3

-              66:             TypePointer Input 65(ivec3)

-        67(ic3D):     66(ptr) Variable Input

-              69:             TypePointer Input 50(int)

-        70(ic1D):     69(ptr) Variable Input

-              76:             TypePointer Input 51(ivec2)

-        77(ic2D):     76(ptr) Variable Input

-              79:     50(int) Constant 4

-              83:             TypeImage 6(float) Rect sampled format:Unknown

-              84:             TypeSampledImage 83

-              85:             TypePointer UniformConstant 84

-          86(sr):     85(ptr) Variable UniformConstant

-              89:   51(ivec2) ConstantComposite 79 79

-             109:             TypeImage 6(float) Cube sampled format:Unknown

-             110:             TypeSampledImage 109

-             111:             TypePointer UniformConstant 110

-      112(sCube):    111(ptr) Variable UniformConstant

-             120:             TypeImage 6(float) 2D depth array sampled format:Unknown

-             121:             TypeSampledImage 120

-             122:             TypePointer UniformConstant 121

-123(s2DArrayShadow):    122(ptr) Variable UniformConstant

-             149:             TypeVector 50(int) 4

-             150:             TypePointer Function 149(ivec4)

-             152:             TypeImage 50(int) 2D sampled format:Unknown

-             153:             TypeSampledImage 152

-             154:             TypePointer UniformConstant 153

-       155(is2D):    154(ptr) Variable UniformConstant

-             187:             TypeImage 50(int) 3D sampled format:Unknown

-             188:             TypeSampledImage 187

-             189:             TypePointer UniformConstant 188

-       190(is3D):    189(ptr) Variable UniformConstant

-             193:    6(float) Constant 1082549862

-             199:             TypeImage 50(int) Cube sampled format:Unknown

-             200:             TypeSampledImage 199

-             201:             TypePointer UniformConstant 200

-     202(isCube):    201(ptr) Variable UniformConstant

-             211:             TypeImage 50(int) 2D array sampled format:Unknown

-             212:             TypeSampledImage 211

-             213:             TypePointer UniformConstant 212

-  214(is2DArray):    213(ptr) Variable UniformConstant

-             223:             TypePointer Function 51(ivec2)

-             225:             TypeImage 6(float) Cube depth sampled format:Unknown

-             226:             TypeSampledImage 225

-             227:             TypePointer UniformConstant 226

-228(sCubeShadow):    227(ptr) Variable UniformConstant

-             230:     50(int) Constant 2

-             232:             TypePointer Output 7(fvec4)

-   233(FragData):    232(ptr) Variable Output

-             237:    6(float) Constant 0

-             242:             TypeImage 50(int) 2D multi-sampled sampled format:Unknown

-             243:             TypeSampledImage 242

-             244:             TypePointer UniformConstant 243

-     245(is2Dms):    244(ptr) Variable UniformConstant

-             246:             TypeInt 32 0

-             247:             TypeImage 246(int) 2D sampled format:Unknown

+              59:             TypeInt 32 0

+              60:     59(int) Constant 1

+              61:             TypePointer Function 6(float)

+              67:             TypeVector 50(int) 3

+              68:             TypePointer Input 67(ivec3)

+        69(ic3D):     68(ptr) Variable Input

+              71:             TypePointer Input 50(int)

+        72(ic1D):     71(ptr) Variable Input

+              78:             TypePointer Input 51(ivec2)

+        79(ic2D):     78(ptr) Variable Input

+              81:     50(int) Constant 4

+              85:             TypeImage 6(float) Rect sampled format:Unknown

+              86:             TypeSampledImage 85

+              87:             TypePointer UniformConstant 86

+          88(sr):     87(ptr) Variable UniformConstant

+              91:   51(ivec2) ConstantComposite 81 81

+             110:             TypeImage 6(float) Cube sampled format:Unknown

+             111:             TypeSampledImage 110

+             112:             TypePointer UniformConstant 111

+      113(sCube):    112(ptr) Variable UniformConstant

+             121:             TypeImage 6(float) 2D depth array sampled format:Unknown

+             122:             TypeSampledImage 121

+             123:             TypePointer UniformConstant 122

+124(s2DArrayShadow):    123(ptr) Variable UniformConstant

+             131:     59(int) Constant 0

+             150:             TypeVector 50(int) 4

+             151:             TypePointer Function 150(ivec4)

+             153:             TypeImage 50(int) 2D sampled format:Unknown

+             154:             TypeSampledImage 153

+             155:             TypePointer UniformConstant 154

+       156(is2D):    155(ptr) Variable UniformConstant

+             188:             TypeImage 50(int) 3D sampled format:Unknown

+             189:             TypeSampledImage 188

+             190:             TypePointer UniformConstant 189

+       191(is3D):    190(ptr) Variable UniformConstant

+             194:    6(float) Constant 1082549862

+             200:             TypeImage 50(int) Cube sampled format:Unknown

+             201:             TypeSampledImage 200

+             202:             TypePointer UniformConstant 201

+     203(isCube):    202(ptr) Variable UniformConstant

+             212:             TypeImage 50(int) 2D array sampled format:Unknown

+             213:             TypeSampledImage 212

+             214:             TypePointer UniformConstant 213

+  215(is2DArray):    214(ptr) Variable UniformConstant

+             224:             TypePointer Function 51(ivec2)

+             226:             TypeImage 6(float) Cube depth sampled format:Unknown

+             227:             TypeSampledImage 226

+             228:             TypePointer UniformConstant 227

+229(sCubeShadow):    228(ptr) Variable UniformConstant

+             231:     50(int) Constant 2

+             233:             TypePointer Output 7(fvec4)

+   234(FragData):    233(ptr) Variable Output

+             238:    6(float) Constant 0

+             243:             TypeImage 50(int) 2D multi-sampled sampled format:Unknown

+             244:             TypeSampledImage 243

+             245:             TypePointer UniformConstant 244

+     246(is2Dms):    245(ptr) Variable UniformConstant

+             247:             TypeImage 59(int) 2D sampled format:Unknown

              248:             TypeSampledImage 247

              249:             TypePointer UniformConstant 248

        250(us2D):    249(ptr) Variable UniformConstant

-             251:             TypeImage 246(int) 3D sampled format:Unknown

+             251:             TypeImage 59(int) 3D sampled format:Unknown

              252:             TypeSampledImage 251

              253:             TypePointer UniformConstant 252

        254(us3D):    253(ptr) Variable UniformConstant

-             255:             TypeImage 246(int) Cube sampled format:Unknown

+             255:             TypeImage 59(int) Cube sampled format:Unknown

              256:             TypeSampledImage 255

              257:             TypePointer UniformConstant 256

      258(usCube):    257(ptr) Variable UniformConstant

-             259:             TypeImage 246(int) 2D array sampled format:Unknown

+             259:             TypeImage 59(int) 2D array sampled format:Unknown

              260:             TypeSampledImage 259

              261:             TypePointer UniformConstant 260

   262(us2DArray):    261(ptr) Variable UniformConstant

-             263:             TypePointer Input 149(ivec4)

+             263:             TypePointer Input 150(ivec4)

        264(ic4D):    263(ptr) Variable Input

          4(main):           2 Function None 3

                5:             Label

             9(v):      8(ptr) Variable Function

-         151(iv):    150(ptr) Variable Function

-        224(iv2):    223(ptr) Variable Function

+         152(iv):    151(ptr) Variable Function

+        225(iv2):    224(ptr) Variable Function

               14:          11 Load 13(s2D)

               18:   15(fvec2) Load 17(c2D)

               19:    7(fvec4) ImageSampleImplicitLod 14 18

@@ -193,163 +186,160 @@
               56:    6(float) Load 55(c1D)

               57:    6(float) CompositeExtract 49 2

               58:    6(float) ImageSampleDrefImplicitLod 48 49 57 Bias ConstOffset 56 53

-              59:    7(fvec4) Load 9(v)

-              60:    6(float) CompositeExtract 59 1

-              61:    6(float) FAdd 60 58

-              62:    7(fvec4) Load 9(v)

-              63:    7(fvec4) CompositeInsert 61 62 1

-                              Store 9(v) 63

-              64:          21 Load 23(s3D)

-              68:   65(ivec3) Load 67(ic3D)

-              71:     50(int) Load 70(ic1D)

-              72:    7(fvec4) ImageFetch 64 68 Lod 71

-              73:    7(fvec4) Load 9(v)

-              74:    7(fvec4) FAdd 73 72

-                              Store 9(v) 74

-              75:          11 Load 13(s2D)

-              78:   51(ivec2) Load 77(ic2D)

-              80:    7(fvec4) ImageFetch 75 78 Lod ConstOffset 79 53

-              81:    7(fvec4) Load 9(v)

-              82:    7(fvec4) FAdd 81 80

-                              Store 9(v) 82

-              87:          84 Load 86(sr)

-              88:   51(ivec2) Load 77(ic2D)

-              90:    7(fvec4) ImageFetch 87 88 ConstOffset 89

-              91:    7(fvec4) Load 9(v)

-              92:    7(fvec4) FAdd 91 90

-                              Store 9(v) 92

-              93:          45 Load 47(s2DShadow)

-              94:   36(fvec3) Load 38(c3D)

-              95:    6(float) Load 55(c1D)

-              96:    6(float) CompositeExtract 94 2

-              97:    6(float) ImageSampleDrefExplicitLod 93 94 96 Lod ConstOffset 95 53

-              98:    7(fvec4) Load 9(v)

-              99:    6(float) CompositeExtract 98 1

-             100:    6(float) FAdd 99 97

-             101:    7(fvec4) Load 9(v)

-             102:    7(fvec4) CompositeInsert 100 101 1

-                              Store 9(v) 102

-             103:          11 Load 13(s2D)

-             104:   36(fvec3) Load 38(c3D)

-             105:    6(float) Load 55(c1D)

-             106:    7(fvec4) ImageSampleProjExplicitLod 103 104 Lod ConstOffset 105 53

-             107:    7(fvec4) Load 9(v)

-             108:    7(fvec4) FAdd 107 106

-                              Store 9(v) 108

-             113:         110 Load 112(sCube)

-             114:   36(fvec3) Load 38(c3D)

+              62:     61(ptr) AccessChain 9(v) 60

+              63:    6(float) Load 62

+              64:    6(float) FAdd 63 58

+              65:     61(ptr) AccessChain 9(v) 60

+                              Store 65 64

+              66:          21 Load 23(s3D)

+              70:   67(ivec3) Load 69(ic3D)

+              73:     50(int) Load 72(ic1D)

+              74:    7(fvec4) ImageFetch 66 70 Lod 73

+              75:    7(fvec4) Load 9(v)

+              76:    7(fvec4) FAdd 75 74

+                              Store 9(v) 76

+              77:          11 Load 13(s2D)

+              80:   51(ivec2) Load 79(ic2D)

+              82:    7(fvec4) ImageFetch 77 80 Lod ConstOffset 81 53

+              83:    7(fvec4) Load 9(v)

+              84:    7(fvec4) FAdd 83 82

+                              Store 9(v) 84

+              89:          86 Load 88(sr)

+              90:   51(ivec2) Load 79(ic2D)

+              92:    7(fvec4) ImageFetch 89 90 ConstOffset 91

+              93:    7(fvec4) Load 9(v)

+              94:    7(fvec4) FAdd 93 92

+                              Store 9(v) 94

+              95:          45 Load 47(s2DShadow)

+              96:   36(fvec3) Load 38(c3D)

+              97:    6(float) Load 55(c1D)

+              98:    6(float) CompositeExtract 96 2

+              99:    6(float) ImageSampleDrefExplicitLod 95 96 98 Lod ConstOffset 97 53

+             100:     61(ptr) AccessChain 9(v) 60

+             101:    6(float) Load 100

+             102:    6(float) FAdd 101 99

+             103:     61(ptr) AccessChain 9(v) 60

+                              Store 103 102

+             104:          11 Load 13(s2D)

+             105:   36(fvec3) Load 38(c3D)

+             106:    6(float) Load 55(c1D)

+             107:    7(fvec4) ImageSampleProjExplicitLod 104 105 Lod ConstOffset 106 53

+             108:    7(fvec4) Load 9(v)

+             109:    7(fvec4) FAdd 108 107

+                              Store 9(v) 109

+             114:         111 Load 113(sCube)

              115:   36(fvec3) Load 38(c3D)

              116:   36(fvec3) Load 38(c3D)

-             117:    7(fvec4) ImageSampleExplicitLod 113 114 Grad 115 116

-             118:    7(fvec4) Load 9(v)

-             119:    7(fvec4) FAdd 118 117

-                              Store 9(v) 119

-             124:         121 Load 123(s2DArrayShadow)

-             125:    7(fvec4) Load 26(c4D)

-             126:   15(fvec2) Load 17(c2D)

+             117:   36(fvec3) Load 38(c3D)

+             118:    7(fvec4) ImageSampleExplicitLod 114 115 Grad 116 117

+             119:    7(fvec4) Load 9(v)

+             120:    7(fvec4) FAdd 119 118

+                              Store 9(v) 120

+             125:         122 Load 124(s2DArrayShadow)

+             126:    7(fvec4) Load 26(c4D)

              127:   15(fvec2) Load 17(c2D)

-             128:    6(float) CompositeExtract 125 3

-             129:    6(float) ImageSampleDrefExplicitLod 124 125 128 Grad ConstOffset 126 127 53

-             130:    7(fvec4) Load 9(v)

-             131:    6(float) CompositeExtract 130 0

-             132:    6(float) FAdd 131 129

-             133:    7(fvec4) Load 9(v)

-             134:    7(fvec4) CompositeInsert 132 133 0

-                              Store 9(v) 134

-             135:          21 Load 23(s3D)

-             136:    7(fvec4) Load 26(c4D)

-             137:   36(fvec3) Load 38(c3D)

+             128:   15(fvec2) Load 17(c2D)

+             129:    6(float) CompositeExtract 126 3

+             130:    6(float) ImageSampleDrefExplicitLod 125 126 129 Grad ConstOffset 127 128 53

+             132:     61(ptr) AccessChain 9(v) 131

+             133:    6(float) Load 132

+             134:    6(float) FAdd 133 130

+             135:     61(ptr) AccessChain 9(v) 131

+                              Store 135 134

+             136:          21 Load 23(s3D)

+             137:    7(fvec4) Load 26(c4D)

              138:   36(fvec3) Load 38(c3D)

-             139:    7(fvec4) ImageSampleProjExplicitLod 135 136 Grad 137 138

-             140:    7(fvec4) Load 9(v)

-             141:    7(fvec4) FAdd 140 139

-                              Store 9(v) 141

-             142:          11 Load 13(s2D)

-             143:   36(fvec3) Load 38(c3D)

-             144:   15(fvec2) Load 17(c2D)

+             139:   36(fvec3) Load 38(c3D)

+             140:    7(fvec4) ImageSampleProjExplicitLod 136 137 Grad 138 139

+             141:    7(fvec4) Load 9(v)

+             142:    7(fvec4) FAdd 141 140

+                              Store 9(v) 142

+             143:          11 Load 13(s2D)

+             144:   36(fvec3) Load 38(c3D)

              145:   15(fvec2) Load 17(c2D)

-             146:    7(fvec4) ImageSampleProjExplicitLod 142 143 Grad ConstOffset 144 145 53

-             147:    7(fvec4) Load 9(v)

-             148:    7(fvec4) FAdd 147 146

-                              Store 9(v) 148

-             156:         153 Load 155(is2D)

-             157:   15(fvec2) Load 17(c2D)

-             158:  149(ivec4) ImageSampleImplicitLod 156 157

-                              Store 151(iv) 158

-             159:  149(ivec4) Load 151(iv)

-             160:    7(fvec4) ConvertSToF 159

-             161:    7(fvec4) Load 9(v)

-             162:    7(fvec4) FAdd 161 160

-                              Store 9(v) 162

-             163:         153 Load 155(is2D)

-             164:    7(fvec4) Load 26(c4D)

-             165:  149(ivec4) ImageSampleProjImplicitLod 163 164 ConstOffset 53

-                              Store 151(iv) 165

-             166:  149(ivec4) Load 151(iv)

-             167:    7(fvec4) ConvertSToF 166

-             168:    7(fvec4) Load 9(v)

-             169:    7(fvec4) FAdd 168 167

-                              Store 9(v) 169

-             170:         153 Load 155(is2D)

-             171:   36(fvec3) Load 38(c3D)

-             172:    6(float) Load 55(c1D)

-             173:  149(ivec4) ImageSampleProjExplicitLod 170 171 Lod 172

-                              Store 151(iv) 173

-             174:  149(ivec4) Load 151(iv)

-             175:    7(fvec4) ConvertSToF 174

-             176:    7(fvec4) Load 9(v)

-             177:    7(fvec4) FAdd 176 175

-                              Store 9(v) 177

-             178:         153 Load 155(is2D)

-             179:   36(fvec3) Load 38(c3D)

-             180:   15(fvec2) Load 17(c2D)

+             146:   15(fvec2) Load 17(c2D)

+             147:    7(fvec4) ImageSampleProjExplicitLod 143 144 Grad ConstOffset 145 146 53

+             148:    7(fvec4) Load 9(v)

+             149:    7(fvec4) FAdd 148 147

+                              Store 9(v) 149

+             157:         154 Load 156(is2D)

+             158:   15(fvec2) Load 17(c2D)

+             159:  150(ivec4) ImageSampleImplicitLod 157 158

+                              Store 152(iv) 159

+             160:  150(ivec4) Load 152(iv)

+             161:    7(fvec4) ConvertSToF 160

+             162:    7(fvec4) Load 9(v)

+             163:    7(fvec4) FAdd 162 161

+                              Store 9(v) 163

+             164:         154 Load 156(is2D)

+             165:    7(fvec4) Load 26(c4D)

+             166:  150(ivec4) ImageSampleProjImplicitLod 164 165 ConstOffset 53

+                              Store 152(iv) 166

+             167:  150(ivec4) Load 152(iv)

+             168:    7(fvec4) ConvertSToF 167

+             169:    7(fvec4) Load 9(v)

+             170:    7(fvec4) FAdd 169 168

+                              Store 9(v) 170

+             171:         154 Load 156(is2D)

+             172:   36(fvec3) Load 38(c3D)

+             173:    6(float) Load 55(c1D)

+             174:  150(ivec4) ImageSampleProjExplicitLod 171 172 Lod 173

+                              Store 152(iv) 174

+             175:  150(ivec4) Load 152(iv)

+             176:    7(fvec4) ConvertSToF 175

+             177:    7(fvec4) Load 9(v)

+             178:    7(fvec4) FAdd 177 176

+                              Store 9(v) 178

+             179:         154 Load 156(is2D)

+             180:   36(fvec3) Load 38(c3D)

              181:   15(fvec2) Load 17(c2D)

-             182:  149(ivec4) ImageSampleProjExplicitLod 178 179 Grad 180 181

-                              Store 151(iv) 182

-             183:  149(ivec4) Load 151(iv)

-             184:    7(fvec4) ConvertSToF 183

-             185:    7(fvec4) Load 9(v)

-             186:    7(fvec4) FAdd 185 184

-                              Store 9(v) 186

-             191:         188 Load 190(is3D)

-             192:   36(fvec3) Load 38(c3D)

-             194:  149(ivec4) ImageSampleImplicitLod 191 192 Bias 193

-                              Store 151(iv) 194

-             195:  149(ivec4) Load 151(iv)

-             196:    7(fvec4) ConvertSToF 195

-             197:    7(fvec4) Load 9(v)

-             198:    7(fvec4) FAdd 197 196

-                              Store 9(v) 198

-             203:         200 Load 202(isCube)

-             204:   36(fvec3) Load 38(c3D)

-             205:    6(float) Load 55(c1D)

-             206:  149(ivec4) ImageSampleExplicitLod 203 204 Lod 205

-                              Store 151(iv) 206

-             207:  149(ivec4) Load 151(iv)

-             208:    7(fvec4) ConvertSToF 207

-             209:    7(fvec4) Load 9(v)

-             210:    7(fvec4) FAdd 209 208

-                              Store 9(v) 210

-             215:         212 Load 214(is2DArray)

-             216:   65(ivec3) Load 67(ic3D)

-             217:     50(int) Load 70(ic1D)

-             218:  149(ivec4) ImageFetch 215 216 Lod 217

-                              Store 151(iv) 218

-             219:  149(ivec4) Load 151(iv)

-             220:    7(fvec4) ConvertSToF 219

-             221:    7(fvec4) Load 9(v)

-             222:    7(fvec4) FAdd 221 220

-                              Store 9(v) 222

-             229:         226 Load 228(sCubeShadow)

-             231:   51(ivec2) ImageQuerySizeLod 229 230

-                              Store 224(iv2) 231

-             234:    7(fvec4) Load 9(v)

-             235:   51(ivec2) Load 224(iv2)

-             236:   15(fvec2) ConvertSToF 235

-             238:    6(float) CompositeExtract 236 0

-             239:    6(float) CompositeExtract 236 1

-             240:    7(fvec4) CompositeConstruct 238 239 237 237

-             241:    7(fvec4) FAdd 234 240

-                              Store 233(FragData) 241

+             182:   15(fvec2) Load 17(c2D)

+             183:  150(ivec4) ImageSampleProjExplicitLod 179 180 Grad 181 182

+                              Store 152(iv) 183

+             184:  150(ivec4) Load 152(iv)

+             185:    7(fvec4) ConvertSToF 184

+             186:    7(fvec4) Load 9(v)

+             187:    7(fvec4) FAdd 186 185

+                              Store 9(v) 187

+             192:         189 Load 191(is3D)

+             193:   36(fvec3) Load 38(c3D)

+             195:  150(ivec4) ImageSampleImplicitLod 192 193 Bias 194

+                              Store 152(iv) 195

+             196:  150(ivec4) Load 152(iv)

+             197:    7(fvec4) ConvertSToF 196

+             198:    7(fvec4) Load 9(v)

+             199:    7(fvec4) FAdd 198 197

+                              Store 9(v) 199

+             204:         201 Load 203(isCube)

+             205:   36(fvec3) Load 38(c3D)

+             206:    6(float) Load 55(c1D)

+             207:  150(ivec4) ImageSampleExplicitLod 204 205 Lod 206

+                              Store 152(iv) 207

+             208:  150(ivec4) Load 152(iv)

+             209:    7(fvec4) ConvertSToF 208

+             210:    7(fvec4) Load 9(v)

+             211:    7(fvec4) FAdd 210 209

+                              Store 9(v) 211

+             216:         213 Load 215(is2DArray)

+             217:   67(ivec3) Load 69(ic3D)

+             218:     50(int) Load 72(ic1D)

+             219:  150(ivec4) ImageFetch 216 217 Lod 218

+                              Store 152(iv) 219

+             220:  150(ivec4) Load 152(iv)

+             221:    7(fvec4) ConvertSToF 220

+             222:    7(fvec4) Load 9(v)

+             223:    7(fvec4) FAdd 222 221

+                              Store 9(v) 223

+             230:         227 Load 229(sCubeShadow)

+             232:   51(ivec2) ImageQuerySizeLod 230 231

+                              Store 225(iv2) 232

+             235:    7(fvec4) Load 9(v)

+             236:   51(ivec2) Load 225(iv2)

+             237:   15(fvec2) ConvertSToF 236

+             239:    6(float) CompositeExtract 237 0

+             240:    6(float) CompositeExtract 237 1

+             241:    7(fvec4) CompositeConstruct 239 240 238 238

+             242:    7(fvec4) FAdd 235 241

+                              Store 234(FragData) 242

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
index 6903490..1ee8262 100755
--- a/Test/baseResults/spv.nonSquare.vert.out
+++ b/Test/baseResults/spv.nonSquare.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 90

 

-                              Source GLSL 120

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 12 55

+                              Source GLSL 120

                               Name 4  "main"

                               Name 9  "a"

                               Name 12  "v3"

@@ -21,9 +21,6 @@
                               Name 28  "gl_Position"

                               Name 55  "v4"

                               Decorate 28(gl_Position) BuiltIn Position

-                              Decorate 74 NoStaticUse

-                              Decorate 78 NoStaticUse

-                              Decorate 89 NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
index 042faa4..32bf094 100755
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 110

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 112

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 57 59 23 71

                               ExecutionMode 4 OriginLowerLeft

+                              Source ESSL 300

                               Name 4  "main"

                               Name 12  "foo(vf3;"

                               Name 11  "mv3"

@@ -31,9 +31,8 @@
                               Name 63  "global_highp"

                               Name 67  "local_highp"

                               Name 71  "mediumfout"

-                              Name 100  "ub2"

-                              Name 101  "param"

-                              Decorate 23(highfin) Smooth

+                              Name 102  "ub2"

+                              Name 103  "param"

                               Decorate 36(sum) RelaxedPrecision

                               Decorate 38(uniform_medium) RelaxedPrecision

                               Decorate 46(uniform_low) RelaxedPrecision

@@ -41,9 +40,7 @@
                               Decorate 53(arg2) RelaxedPrecision

                               Decorate 55(d) RelaxedPrecision

                               Decorate 57(lowfin) RelaxedPrecision

-                              Decorate 57(lowfin) Smooth

                               Decorate 59(mediumfin) RelaxedPrecision

-                              Decorate 59(mediumfin) Smooth

                               Decorate 71(mediumfout) RelaxedPrecision

                2:             TypeVoid

                3:             TypeFunction 2

@@ -74,16 +71,18 @@
               56:             TypePointer Input 6(float)

       57(lowfin):     56(ptr) Variable Input

    59(mediumfin):     56(ptr) Variable Input

-              62:             TypePointer PrivateGlobal 6(float)

-63(global_highp):     62(ptr) Variable PrivateGlobal

+              62:             TypePointer Private 6(float)

+63(global_highp):     62(ptr) Variable Private

               66:             TypePointer Function 21(fvec4)

               70:             TypePointer Output 21(fvec4)

   71(mediumfout):     70(ptr) Variable Output

               80:     34(int) Constant 4

               82:             TypeVector 34(int) 2

-              99:             TypePointer UniformConstant 15(bvec2)

-        100(ub2):     99(ptr) Variable UniformConstant

-             107:    6(float) Constant 1065353216

+              90:             TypeInt 32 0

+              91:     90(int) Constant 0

+             101:             TypePointer UniformConstant 15(bvec2)

+        102(ub2):    101(ptr) Variable UniformConstant

+             109:    6(float) Constant 1065353216

          4(main):           2 Function None 3

                5:             Label

          36(sum):     35(ptr) Variable Function

@@ -91,7 +90,7 @@
         53(arg2):     50(ptr) Variable Function

            55(d):     50(ptr) Variable Function

  67(local_highp):     66(ptr) Variable Function

-      101(param):     16(ptr) Variable Function

+      103(param):     16(ptr) Variable Function

               39:     34(int) Load 38(uniform_medium)

               41:     34(int) Load 40(uniform_high)

               42:     34(int) IAdd 39 41

@@ -108,10 +107,10 @@
                               Store 53(arg2) 54

               58:    6(float) Load 57(lowfin)

               60:    6(float) Load 59(mediumfin)

-              61:    6(float) ExtInst 1(GLSL.std.450) 66(Distance) 58 60

+              61:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 58 60

                               Store 55(d) 61

               64:   21(fvec4) Load 23(highfin)

-              65:    6(float) ExtInst 1(GLSL.std.450) 65(Length) 64

+              65:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 64

                               Store 63(global_highp) 65

               68:    6(float) Load 63(global_highp)

               69:   21(fvec4) CompositeConstruct 68 68 68 68

@@ -133,29 +132,29 @@
               87:     34(int) Load 40(uniform_high)

               88:   82(ivec2) CompositeConstruct 87 87

               89:   82(ivec2) IAdd 86 88

-              90:     34(int) CompositeExtract 89 0

-              91:     34(int) IAdd 80 90

-              92:     34(int) Load 36(sum)

-              93:     34(int) IAdd 92 91

-                              Store 36(sum) 93

+              92:     34(int) CompositeExtract 89 0

+              93:     34(int) IAdd 80 92

               94:     34(int) Load 36(sum)

-              95:    6(float) ConvertSToF 94

-              96:   21(fvec4) CompositeConstruct 95 95 95 95

-              97:   21(fvec4) Load 71(mediumfout)

-              98:   21(fvec4) FAdd 97 96

-                              Store 71(mediumfout) 98

-             102:   15(bvec2) Load 100(ub2)

-                              Store 101(param) 102

-             103:    14(bool) FunctionCall 19(boolfun(vb2;) 101(param)

-                              SelectionMerge 105 None

-                              BranchConditional 103 104 105

-             104:               Label

-             106:   21(fvec4)   Load 71(mediumfout)

-             108:   21(fvec4)   CompositeConstruct 107 107 107 107

-             109:   21(fvec4)   FAdd 106 108

-                                Store 71(mediumfout) 109

-                                Branch 105

-             105:             Label

+              95:     34(int) IAdd 94 93

+                              Store 36(sum) 95

+              96:     34(int) Load 36(sum)

+              97:    6(float) ConvertSToF 96

+              98:   21(fvec4) CompositeConstruct 97 97 97 97

+              99:   21(fvec4) Load 71(mediumfout)

+             100:   21(fvec4) FAdd 99 98

+                              Store 71(mediumfout) 100

+             104:   15(bvec2) Load 102(ub2)

+                              Store 103(param) 104

+             105:    14(bool) FunctionCall 19(boolfun(vb2;) 103(param)

+                              SelectionMerge 107 None

+                              BranchConditional 105 106 107

+             106:               Label

+             108:   21(fvec4)   Load 71(mediumfout)

+             110:   21(fvec4)   CompositeConstruct 109 109 109 109

+             111:   21(fvec4)   FAdd 108 110

+                                Store 71(mediumfout) 111

+                                Branch 107

+             107:             Label

                               Return

                               FunctionEnd

     12(foo(vf3;):    9(fvec2) Function None 10

diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index 22f41a6..f579125 100755
--- a/Test/baseResults/spv.prepost.frag.out
+++ b/Test/baseResults/spv.prepost.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 96

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 94

 

-                              Source GLSL 140

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint Fragment 4  "main"

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 140

                               Name 4  "main"

                               Name 8  "index"

                               Name 14  "s"

@@ -23,8 +23,7 @@
                               Name 61  "y"

                               Name 66  "z"

                               Name 73  "v"

-                              Name 92  "gl_FragColor"

-                              Decorate 92(gl_FragColor) BuiltIn FragColor

+                              Name 90  "gl_FragColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -47,8 +46,12 @@
               74:   10(float) Constant 1077936128

               75:   10(float) Constant 1082130432

               76:   71(fvec4) ConstantComposite 28 19 74 75

-              91:             TypePointer Output 71(fvec4)

-92(gl_FragColor):     91(ptr) Variable Output

+              77:     11(int) Constant 2

+              81:     11(int) Constant 1

+              83:     11(int) Constant 3

+              87:     11(int) Constant 0

+              89:             TypePointer Output 71(fvec4)

+90(gl_FragColor):     89(ptr) Variable Output

          4(main):           2 Function None 3

                5:             Label

         8(index):      7(ptr) Variable Function

@@ -124,27 +127,21 @@
               70:   10(float) FMul 67 68

                               Store 66(z) 70

                               Store 73(v) 76

-              77:   71(fvec4) Load 73(v)

-              78:   10(float) CompositeExtract 77 2

-              79:   10(float) FSub 78 28

-              80:   71(fvec4) Load 73(v)

-              81:   71(fvec4) CompositeInsert 79 80 2

-                              Store 73(v) 81

-              82:   71(fvec4) Load 73(v)

-              83:   71(fvec4) CompositeInsert 78 82 1

-                              Store 73(v) 83

-              84:   71(fvec4) Load 73(v)

-              85:   10(float) CompositeExtract 84 3

+              78:     20(ptr) AccessChain 73(v) 77

+              79:   10(float) Load 78

+              80:   10(float) FSub 79 28

+                              Store 78 80

+              82:     20(ptr) AccessChain 73(v) 81

+                              Store 82 79

+              84:     20(ptr) AccessChain 73(v) 83

+              85:   10(float) Load 84

               86:   10(float) FSub 85 28

-              87:   71(fvec4) Load 73(v)

-              88:   71(fvec4) CompositeInsert 86 87 3

-                              Store 73(v) 88

-              89:   71(fvec4) Load 73(v)

-              90:   71(fvec4) CompositeInsert 86 89 0

-                              Store 73(v) 90

-              93:   10(float) Load 66(z)

-              94:   71(fvec4) Load 73(v)

-              95:   71(fvec4) VectorTimesScalar 94 93

-                              Store 92(gl_FragColor) 95

+                              Store 84 86

+              88:     20(ptr) AccessChain 73(v) 87

+                              Store 88 86

+              91:   10(float) Load 66(z)

+              92:   71(fvec4) Load 73(v)

+              93:   71(fvec4) VectorTimesScalar 92 91

+                              Store 90(gl_FragColor) 93

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
index 90b7f72..0e5aa43 100755
--- a/Test/baseResults/spv.qualifiers.vert.out
+++ b/Test/baseResults/spv.qualifiers.vert.out
@@ -5,15 +5,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 25

 

-                              Source GLSL 430

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 11 9 13 15 17 19 23 24

+                              Source GLSL 430

                               Name 4  "main"

                               Name 9  "outVc"

                               Name 11  "inV"

@@ -23,15 +23,11 @@
                               Name 19  "outVcn"

                               Name 23  "gl_VertexID"

                               Name 24  "gl_InstanceID"

-                              Decorate 9(outVc) Smooth

-                              Decorate 13(outVs) Smooth

                               Decorate 15(outVf) Flat

-                              Decorate 17(outVn) Noperspective

-                              Decorate 19(outVcn) Noperspective

+                              Decorate 17(outVn) NoPerspective

+                              Decorate 19(outVcn) NoPerspective

                               Decorate 23(gl_VertexID) BuiltIn VertexId

-                              Decorate 23(gl_VertexID) NoStaticUse

                               Decorate 24(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 24(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
old mode 100644
new mode 100755
index 2b2b57f..e9a18e1
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 211

 

-                              Source GLSL 430

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint Fragment 4  "main"

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 430

                               Name 4  "main"

                               Name 9  "lod"

                               Name 13  "samp1D"

@@ -41,8 +41,6 @@
                               Name 176  "usampCubeA"

                               Name 206  "sampBuf"

                               Name 210  "sampRect"

-                              Decorate 206(sampBuf) NoStaticUse

-                              Decorate 210(sampRect) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index 77868fa..caff57d 100755
--- a/Test/baseResults/spv.set.vert.out
+++ b/Test/baseResults/spv.set.vert.out
@@ -5,35 +5,31 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 25

 

-                              Source GLSL 450

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 9 23 24

+                              Source GLSL 450

                               Name 4  "main"

                               Name 9  "color"

                               Name 10  "setBuf"

                               MemberName 10(setBuf) 0  "color"

                               Name 12  "setBufInst"

-                              Name 21  "sampler"

+                              Name 21  "samp2D"

                               Name 23  "gl_VertexID"

                               Name 24  "gl_InstanceID"

-                              Decorate 9(color) Smooth

                               Decorate 10(setBuf) GLSLShared

                               Decorate 10(setBuf) BufferBlock

                               Decorate 12(setBufInst) DescriptorSet 0

                               Decorate 12(setBufInst) Binding 8

-                              Decorate 21(sampler) DescriptorSet 4

-                              Decorate 21(sampler) Binding 7

-                              Decorate 21(sampler) NoStaticUse

+                              Decorate 21(samp2D) DescriptorSet 4

+                              Decorate 21(samp2D) Binding 7

                               Decorate 23(gl_VertexID) BuiltIn VertexId

-                              Decorate 23(gl_VertexID) NoStaticUse

                               Decorate 24(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 24(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -49,7 +45,7 @@
               18:             TypeImage 6(float) 2D sampled format:Unknown

               19:             TypeSampledImage 18

               20:             TypePointer UniformConstant 19

-     21(sampler):     20(ptr) Variable UniformConstant

+      21(samp2D):     20(ptr) Variable UniformConstant

               22:             TypePointer Input 13(int)

  23(gl_VertexID):     22(ptr) Variable Input

 24(gl_InstanceID):     22(ptr) Variable Input

diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out
index 7f152f7..d812be9 100644
--- a/Test/baseResults/spv.shortCircuit.frag.out
+++ b/Test/baseResults/spv.shortCircuit.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 143

 

-                              Source GLSL 400

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 12 23

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 400

                               Name 4  "main"

                               Name 8  "foo("

                               Name 12  "of1"

@@ -27,10 +27,6 @@
                               Name 138  "uv4"

                               Name 141  "ub41"

                               Name 142  "ub42"

-                              Decorate 136(uiv4) NoStaticUse

-                              Decorate 138(uv4) NoStaticUse

-                              Decorate 141(ub41) NoStaticUse

-                              Decorate 142(ub42) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeBool

diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
index 3c04142..a8b194b 100755
--- a/Test/baseResults/spv.simpleFunctionCall.frag.out
+++ b/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -5,26 +5,22 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 22

 

-                              Source GLSL 150

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 12

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 150

                               Name 4  "main"

                               Name 9  "foo("

                               Name 12  "BaseColor"

                               Name 16  "gl_FragColor"

                               Name 19  "bigColor"

                               Name 21  "d"

-                              Decorate 12(BaseColor) Smooth

-                              Decorate 16(gl_FragColor) BuiltIn FragColor

-                              Decorate 19(bigColor) NoStaticUse

-                              Decorate 21(d) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
index e2502c1..8963c6b 100755
--- a/Test/baseResults/spv.simpleMat.vert.out
+++ b/Test/baseResults/spv.simpleMat.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 43

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 42

 

-                              Source GLSL 330

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 15 23 34 19 9 40 41

+                              Source GLSL 330

                               Name 4  "main"

                               Name 9  "glPos"

                               Name 12  "mvp"

@@ -19,14 +19,10 @@
                               Name 19  "f"

                               Name 23  "am3"

                               Name 34  "arraym"

-                              Name 41  "gl_VertexID"

-                              Name 42  "gl_InstanceID"

-                              Decorate 9(glPos) Smooth

-                              Decorate 19(f) Smooth

-                              Decorate 41(gl_VertexID) BuiltIn VertexId

-                              Decorate 41(gl_VertexID) NoStaticUse

-                              Decorate 42(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 42(gl_InstanceID) NoStaticUse

+                              Name 40  "gl_VertexID"

+                              Name 41  "gl_InstanceID"

+                              Decorate 40(gl_VertexID) BuiltIn VertexId

+                              Decorate 41(gl_InstanceID) BuiltIn InstanceId

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -46,29 +42,28 @@
          23(am3):     22(ptr) Variable Input

               24:             TypeInt 32 1

               25:     24(int) Constant 2

-              26:             TypePointer Input 20(fvec3)

-              30:             TypeInt 32 0

-              31:     30(int) Constant 3

+              26:             TypeInt 32 0

+              27:     26(int) Constant 1

+              28:             TypePointer Input 6(float)

+              31:     26(int) Constant 3

               32:             TypeArray 10 31

               33:             TypePointer Input 32

       34(arraym):     33(ptr) Variable Input

               35:     24(int) Constant 1

-              40:             TypePointer Input 24(int)

- 41(gl_VertexID):     40(ptr) Variable Input

-42(gl_InstanceID):     40(ptr) Variable Input

+              39:             TypePointer Input 24(int)

+ 40(gl_VertexID):     39(ptr) Variable Input

+41(gl_InstanceID):     39(ptr) Variable Input

          4(main):           2 Function None 3

                5:             Label

               13:          10 Load 12(mvp)

               16:    7(fvec4) Load 15(v)

               17:    7(fvec4) MatrixTimesVector 13 16

                               Store 9(glPos) 17

-              27:     26(ptr) AccessChain 23(am3) 25

-              28:   20(fvec3) Load 27

-              29:    6(float) CompositeExtract 28 1

-              36:     14(ptr) AccessChain 34(arraym) 35 25

-              37:    7(fvec4) Load 36

-              38:    6(float) CompositeExtract 37 3

-              39:    6(float) FAdd 29 38

-                              Store 19(f) 39

+              29:     28(ptr) AccessChain 23(am3) 25 27

+              30:    6(float) Load 29

+              36:     28(ptr) AccessChain 34(arraym) 35 25 31

+              37:    6(float) Load 36

+              38:    6(float) FAdd 30 37

+                              Store 19(f) 38

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index e7cfd0e..faded47 100755
--- a/Test/baseResults/spv.structAssignment.frag.out
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 50

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 44

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "lunarStruct1"

                               MemberName 8(lunarStruct1) 0  "i"

@@ -32,12 +32,9 @@
                               Name 22  "locals2"

                               Name 27  "foo2"

                               Name 31  "gl_FragColor"

-                              Name 40  "sampler"

+                              Name 40  "samp2D"

                               Name 44  "coord"

                               Name 49  "foo"

-                              Decorate 31(gl_FragColor) BuiltIn FragColor

-                              Decorate 44(coord) Smooth

-                              Decorate 49(foo) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -62,7 +59,7 @@
               37:             TypeImage 7(float) 2D sampled format:Unknown

               38:             TypeSampledImage 37

               39:             TypePointer UniformConstant 38

-     40(sampler):     39(ptr) Variable UniformConstant

+      40(samp2D):     39(ptr) Variable UniformConstant

               42:             TypeVector 7(float) 2

               43:             TypePointer Input 42(fvec2)

        44(coord):     43(ptr) Variable Input

@@ -88,7 +85,7 @@
               20:             Label

               35:     34(ptr) AccessChain 22(locals2) 32 33

               36:    7(float) Load 35

-              41:          38 Load 40(sampler)

+              41:          38 Load 40(samp2D)

               45:   42(fvec2) Load 44(coord)

               46:   29(fvec4) ImageSampleImplicitLod 41 45

               47:   29(fvec4) VectorTimesScalar 46 36

diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index 3e37696..ec0f762 100755
--- a/Test/baseResults/spv.structDeref.frag.out
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 120

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 123

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 61

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "s0"

                               MemberName 8(s0) 0  "i"

@@ -41,14 +41,11 @@
                               MemberName 54(s00) 0  "s0_0"

                               Name 56  "locals00"

                               Name 61  "coord"

-                              Name 68  "foo0"

-                              Name 83  "foo00"

-                              Name 96  "gl_FragColor"

-                              Name 113  "sampler"

-                              Name 119  "foo2"

-                              Decorate 61(coord) Smooth

-                              Decorate 96(gl_FragColor) BuiltIn FragColor

-                              Decorate 119(foo2) NoStaticUse

+                              Name 71  "foo0"

+                              Name 86  "foo00"

+                              Name 99  "gl_FragColor"

+                              Name 116  "samp2D"

+                              Name 122  "foo2"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -92,27 +89,30 @@
               59:             TypeVector 7(float) 2

               60:             TypePointer Input 59(fvec2)

        61(coord):     60(ptr) Variable Input

-              67:             TypePointer UniformConstant 8(s0)

-        68(foo0):     67(ptr) Variable UniformConstant

-              72:    7(float) Constant 1073741824

-              73:    7(float) Constant 1077936128

-              74:    7(float) Constant 1082130432

-              75:    7(float) Constant 1084227584

-              76:          38 ConstantComposite 41 29 72 73 74 75

-              82:             TypePointer UniformConstant 54(s00)

-       83(foo00):     82(ptr) Variable UniformConstant

-              85:             TypePointer Function 6(int)

-              88:      6(int) Constant 5

-              94:             TypeVector 7(float) 4

-              95:             TypePointer Output 94(fvec4)

-96(gl_FragColor):     95(ptr) Variable Output

-             103:      6(int) Constant 3

-             110:             TypeImage 7(float) 2D sampled format:Unknown

-             111:             TypeSampledImage 110

-             112:             TypePointer UniformConstant 111

-    113(sampler):    112(ptr) Variable UniformConstant

-             118:             TypePointer UniformConstant 10(s2)

-       119(foo2):    118(ptr) Variable UniformConstant

+              62:     11(int) Constant 0

+              63:             TypePointer Input 7(float)

+              67:     11(int) Constant 1

+              70:             TypePointer UniformConstant 8(s0)

+        71(foo0):     70(ptr) Variable UniformConstant

+              75:    7(float) Constant 1073741824

+              76:    7(float) Constant 1077936128

+              77:    7(float) Constant 1082130432

+              78:    7(float) Constant 1084227584

+              79:          38 ConstantComposite 41 29 75 76 77 78

+              85:             TypePointer UniformConstant 54(s00)

+       86(foo00):     85(ptr) Variable UniformConstant

+              88:             TypePointer Function 6(int)

+              91:      6(int) Constant 5

+              97:             TypeVector 7(float) 4

+              98:             TypePointer Output 97(fvec4)

+99(gl_FragColor):     98(ptr) Variable Output

+             106:      6(int) Constant 3

+             113:             TypeImage 7(float) 2D sampled format:Unknown

+             114:             TypeSampledImage 113

+             115:             TypePointer UniformConstant 114

+     116(samp2D):    115(ptr) Variable UniformConstant

+             121:             TypePointer UniformConstant 10(s2)

+       122(foo2):    121(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

      27(locals2):     26(ptr) Variable Function

@@ -138,55 +138,55 @@
                                 Store 56(locals00) 57

                                 Branch 25

               58:               Label

-              62:   59(fvec2)   Load 61(coord)

-              63:    7(float)   CompositeExtract 62 0

-              64:     30(ptr)   AccessChain 27(locals2) 28

-                                Store 64 63

-              65:   59(fvec2)   Load 61(coord)

-              66:    7(float)   CompositeExtract 65 1

-              69:       8(s0)   Load 68(foo0)

-              70:       9(s1)   CompositeConstruct 28 66 69

-              71:     35(ptr)   AccessChain 27(locals2) 32

-                                Store 71 70

-                                Store 40(fArray) 76

-              77:     35(ptr)   AccessChain 27(locals2) 32

-              78:       9(s1)   Load 77

-              79:     35(ptr)   AccessChain 46(locals1Array) 47

-                                Store 79 78

-              80:     67(ptr)   AccessChain 49(foo1) 32

-              81:       8(s0)   Load 80

-                                Store 53(locals0) 81

-              84:     54(s00)   Load 83(foo00)

-                                Store 56(locals00) 84

+              64:     63(ptr)   AccessChain 61(coord) 62

+              65:    7(float)   Load 64

+              66:     30(ptr)   AccessChain 27(locals2) 28

+                                Store 66 65

+              68:     63(ptr)   AccessChain 61(coord) 67

+              69:    7(float)   Load 68

+              72:       8(s0)   Load 71(foo0)

+              73:       9(s1)   CompositeConstruct 28 69 72

+              74:     35(ptr)   AccessChain 27(locals2) 32

+                                Store 74 73

+                                Store 40(fArray) 79

+              80:     35(ptr)   AccessChain 27(locals2) 32

+              81:       9(s1)   Load 80

+              82:     35(ptr)   AccessChain 46(locals1Array) 47

+                                Store 82 81

+              83:     70(ptr)   AccessChain 49(foo1) 32

+              84:       8(s0)   Load 83

+                                Store 53(locals0) 84

+              87:     54(s00)   Load 86(foo00)

+                                Store 56(locals00) 87

                                 Branch 25

               25:             Label

-              86:     85(ptr) AccessChain 53(locals0) 17

-              87:      6(int) Load 86

-              89:    22(bool) SGreaterThan 87 88

-                              SelectionMerge 91 None

-                              BranchConditional 89 90 91

-              90:               Label

-              92:     52(ptr)   AccessChain 56(locals00) 17

-              93:       8(s0)   Load 92

-                                Store 53(locals0) 93

-                                Branch 91

-              91:             Label

-              97:     85(ptr) AccessChain 53(locals0) 17

-              98:      6(int) Load 97

-              99:    7(float) ConvertSToF 98

-             100:     30(ptr) AccessChain 46(locals1Array) 47 28

-             101:    7(float) Load 100

-             102:    7(float) FAdd 99 101

-             104:     30(ptr) AccessChain 40(fArray) 103

-             105:    7(float) Load 104

-             106:    7(float) FAdd 102 105

-             107:     30(ptr) AccessChain 27(locals2) 32 28

+              89:     88(ptr) AccessChain 53(locals0) 17

+              90:      6(int) Load 89

+              92:    22(bool) SGreaterThan 90 91

+                              SelectionMerge 94 None

+                              BranchConditional 92 93 94

+              93:               Label

+              95:     52(ptr)   AccessChain 56(locals00) 17

+              96:       8(s0)   Load 95

+                                Store 53(locals0) 96

+                                Branch 94

+              94:             Label

+             100:     88(ptr) AccessChain 53(locals0) 17

+             101:      6(int) Load 100

+             102:    7(float) ConvertSToF 101

+             103:     30(ptr) AccessChain 46(locals1Array) 47 28

+             104:    7(float) Load 103

+             105:    7(float) FAdd 102 104

+             107:     30(ptr) AccessChain 40(fArray) 106

              108:    7(float) Load 107

-             109:    7(float) FAdd 106 108

-             114:         111 Load 113(sampler)

-             115:   59(fvec2) Load 61(coord)

-             116:   94(fvec4) ImageSampleImplicitLod 114 115

-             117:   94(fvec4) VectorTimesScalar 116 109

-                              Store 96(gl_FragColor) 117

+             109:    7(float) FAdd 105 108

+             110:     30(ptr) AccessChain 27(locals2) 32 28

+             111:    7(float) Load 110

+             112:    7(float) FAdd 109 111

+             117:         114 Load 116(samp2D)

+             118:   59(fvec2) Load 61(coord)

+             119:   97(fvec4) ImageSampleImplicitLod 117 118

+             120:   97(fvec4) VectorTimesScalar 119 112

+                              Store 99(gl_FragColor) 120

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index 5ae6fc4..79110b8 100755
--- a/Test/baseResults/spv.structure.frag.out
+++ b/Test/baseResults/spv.structure.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 61

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 60

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 54

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "scale"

                               Name 18  "lunarStruct1"

@@ -26,13 +26,10 @@
                               MemberName 21(lunarStruct2) 1  "f"

                               MemberName 21(lunarStruct2) 2  "s1_1"

                               Name 24  "foo2"

-                              Name 46  "gl_FragColor"

-                              Name 51  "sampler"

-                              Name 55  "coord"

-                              Name 60  "foo"

-                              Decorate 46(gl_FragColor) BuiltIn FragColor

-                              Decorate 55(coord) Smooth

-                              Decorate 60(foo) NoStaticUse

+                              Name 45  "gl_FragColor"

+                              Name 50  "samp2D"

+                              Name 54  "coord"

+                              Name 59  "foo"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -59,20 +56,20 @@
               28:             TypePointer UniformConstant 10(int)

               31:             TypeBool

               35:     10(int) Constant 2

-              36:             TypePointer UniformConstant 16(fvec4)

+              36:     11(int) Constant 0

+              37:             TypePointer UniformConstant 6(float)

               41:     10(int) Constant 1

-              42:             TypePointer UniformConstant 6(float)

-              45:             TypePointer Output 16(fvec4)

-46(gl_FragColor):     45(ptr) Variable Output

-              48:             TypeImage 6(float) 2D sampled format:Unknown

-              49:             TypeSampledImage 48

-              50:             TypePointer UniformConstant 49

-     51(sampler):     50(ptr) Variable UniformConstant

-              53:             TypeVector 6(float) 2

-              54:             TypePointer Input 53(fvec2)

-       55(coord):     54(ptr) Variable Input

-              59:             TypePointer UniformConstant 18(lunarStruct1)

-         60(foo):     59(ptr) Variable UniformConstant

+              44:             TypePointer Output 16(fvec4)

+45(gl_FragColor):     44(ptr) Variable Output

+              47:             TypeImage 6(float) 2D sampled format:Unknown

+              48:             TypeSampledImage 47

+              49:             TypePointer UniformConstant 48

+      50(samp2D):     49(ptr) Variable UniformConstant

+              52:             TypeVector 6(float) 2

+              53:             TypePointer Input 52(fvec2)

+       54(coord):     53(ptr) Variable Input

+              58:             TypePointer UniformConstant 18(lunarStruct1)

+         59(foo):     58(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

         8(scale):      7(ptr) Variable Function

@@ -83,22 +80,21 @@
                               SelectionMerge 34 None

                               BranchConditional 32 33 40

               33:               Label

-              37:     36(ptr)   AccessChain 24(foo2) 25 35 35 35 25

-              38:   16(fvec4)   Load 37

-              39:    6(float)   CompositeExtract 38 0

+              38:     37(ptr)   AccessChain 24(foo2) 25 35 35 35 25 36

+              39:    6(float)   Load 38

                                 Store 8(scale) 39

                                 Branch 34

               40:               Label

-              43:     42(ptr)   AccessChain 24(foo2) 25 35 35 41 25

-              44:    6(float)   Load 43

-                                Store 8(scale) 44

+              42:     37(ptr)   AccessChain 24(foo2) 25 35 35 41 25

+              43:    6(float)   Load 42

+                                Store 8(scale) 43

                                 Branch 34

               34:             Label

-              47:    6(float) Load 8(scale)

-              52:          49 Load 51(sampler)

-              56:   53(fvec2) Load 55(coord)

-              57:   16(fvec4) ImageSampleImplicitLod 52 56

-              58:   16(fvec4) VectorTimesScalar 57 47

-                              Store 46(gl_FragColor) 58

+              46:    6(float) Load 8(scale)

+              51:          48 Load 50(samp2D)

+              55:   52(fvec2) Load 54(coord)

+              56:   16(fvec4) ImageSampleImplicitLod 51 55

+              57:   16(fvec4) VectorTimesScalar 56 46

+                              Store 45(gl_FragColor) 57

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index a67c629..97cbcf9 100755
--- a/Test/baseResults/spv.switch.frag.out
+++ b/Test/baseResults/spv.switch.frag.out
@@ -8,16 +8,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 260

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 263

 

-                              Source ESSL 310

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 73 221

                               ExecutionMode 4 OriginLowerLeft

+                              Source ESSL 310

                               Name 4  "main"

                               Name 15  "foo1(vf4;vf4;i1;"

                               Name 12  "v1"

@@ -39,14 +39,13 @@
                               Name 228  "param"

                               Name 230  "param"

                               Name 232  "param"

-                              Name 238  "param"

                               Name 240  "param"

                               Name 242  "param"

+                              Name 244  "param"

                               Decorate 58(local) RelaxedPrecision

                               Decorate 60(c) RelaxedPrecision

                               Decorate 71(f) RelaxedPrecision

                               Decorate 73(x) RelaxedPrecision

-                              Decorate 73(x) Smooth

                               Decorate 127(d) RelaxedPrecision

                               Decorate 153(i) RelaxedPrecision

                               Decorate 171(j) RelaxedPrecision

@@ -82,6 +81,9 @@
       221(color):    220(ptr) Variable Output

              226:             TypePointer UniformConstant 7(fvec4)

           227(v):    226(ptr) Variable UniformConstant

+             235:             TypeInt 32 0

+             236:    235(int) Constant 1

+             247:    235(int) Constant 2

          4(main):           2 Function None 3

                5:             Label

        58(local):     10(ptr) Variable Function

@@ -91,9 +93,9 @@
       228(param):      8(ptr) Variable Function

       230(param):      8(ptr) Variable Function

       232(param):     10(ptr) Variable Function

-      238(param):      8(ptr) Variable Function

       240(param):      8(ptr) Variable Function

-      242(param):     10(ptr) Variable Function

+      242(param):      8(ptr) Variable Function

+      244(param):     10(ptr) Variable Function

               61:      9(int) Load 60(c)

                               Store 58(local) 61

               62:      9(int) Load 58(local)

@@ -218,7 +220,7 @@
              155:             Label

              158:      9(int) Load 153(i)

              161:   160(bool) SLessThan 158 159

-                              LoopMerge 156 None

+                              LoopMerge 156 155 None

                               BranchConditional 161 157 156

              157:               Label

              162:      9(int)   Load 60(c)

@@ -237,7 +239,7 @@
              173:                 Label

              176:      9(int)     Load 171(j)

              178:   160(bool)     SLessThan 176 177

-                                  LoopMerge 174 None

+                                  LoopMerge 174 173 None

                                   BranchConditional 178 175 174

              175:                   Label

              179:    6(float)       Load 71(f)

@@ -310,36 +312,36 @@
              233:      9(int) Load 60(c)

                               Store 232(param) 233

              234:    7(fvec4) FunctionCall 15(foo1(vf4;vf4;i1;) 228(param) 230(param) 232(param)

-             235:    6(float) CompositeExtract 234 1

-             236:    6(float) Load 221(color)

-             237:    6(float) FAdd 236 235

-                              Store 221(color) 237

-             239:    7(fvec4) Load 227(v)

-                              Store 238(param) 239

+             237:    6(float) CompositeExtract 234 1

+             238:    6(float) Load 221(color)

+             239:    6(float) FAdd 238 237

+                              Store 221(color) 239

              241:    7(fvec4) Load 227(v)

                               Store 240(param) 241

-             243:      9(int) Load 60(c)

+             243:    7(fvec4) Load 227(v)

                               Store 242(param) 243

-             244:    7(fvec4) FunctionCall 20(foo2(vf4;vf4;i1;) 238(param) 240(param) 242(param)

-             245:    6(float) CompositeExtract 244 2

-             246:    6(float) Load 221(color)

-             247:    6(float) FAdd 246 245

-                              Store 221(color) 247

-             248:      9(int) Load 60(c)

-                              SelectionMerge 251 None

-                              Switch 248 250 

-                                     case 0: 249

-             249:               Label

-                                Branch 251

-             250:               Label

-                                Branch 251

-             251:             Label

-             255:      9(int) Load 60(c)

-                              SelectionMerge 257 None

-                              Switch 255 256

-             256:               Label

-                                Branch 257

-             257:             Label

+             245:      9(int) Load 60(c)

+                              Store 244(param) 245

+             246:    7(fvec4) FunctionCall 20(foo2(vf4;vf4;i1;) 240(param) 242(param) 244(param)

+             248:    6(float) CompositeExtract 246 2

+             249:    6(float) Load 221(color)

+             250:    6(float) FAdd 249 248

+                              Store 221(color) 250

+             251:      9(int) Load 60(c)

+                              SelectionMerge 254 None

+                              Switch 251 253 

+                                     case 0: 252

+             252:               Label

+                                Branch 254

+             253:               Label

+                                Branch 254

+             254:             Label

+             258:      9(int) Load 60(c)

+                              SelectionMerge 260 None

+                              Switch 258 259

+             259:               Label

+                                Branch 260

+             260:             Label

                               Return

                               FunctionEnd

 15(foo1(vf4;vf4;i1;):    7(fvec4) Function None 11

diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
index 827eb5b..f66dc4e 100755
--- a/Test/baseResults/spv.swizzle.frag.out
+++ b/Test/baseResults/spv.swizzle.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 111

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 109

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 30

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 110

                               Name 4  "main"

                               Name 8  "blendscale"

                               Name 12  "w"

@@ -21,16 +21,13 @@
                               Name 18  "w_reorder"

                               Name 20  "w2"

                               Name 22  "w_flow"

-                              Name 29  "t"

-                              Name 48  "w_undef"

-                              Name 55  "p"

+                              Name 30  "t"

+                              Name 49  "w_undef"

+                              Name 56  "p"

                               Name 69  "gl_FragColor"

                               Name 81  "c"

                               Name 83  "rep"

-                              Name 110  "blend"

-                              Decorate 29(t) Smooth

-                              Decorate 69(gl_FragColor) BuiltIn FragColor

-                              Decorate 110(blend) NoStaticUse

+                              Name 108  "blend"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -40,22 +37,27 @@
               11:             TypePointer Function 10(fvec4)

               13:             TypePointer UniformConstant 10(fvec4)

            14(u):     13(ptr) Variable UniformConstant

-              27:             TypeVector 6(float) 2

-              28:             TypePointer Input 27(fvec2)

-           29(t):     28(ptr) Variable Input

-              53:             TypeBool

-              54:             TypePointer UniformConstant 53(bool)

-           55(p):     54(ptr) Variable UniformConstant

+              25:             TypeInt 32 0

+              26:     25(int) Constant 2

+              28:             TypeVector 6(float) 2

+              29:             TypePointer Input 28(fvec2)

+           30(t):     29(ptr) Variable Input

+              35:     25(int) Constant 0

+              40:     25(int) Constant 1

+              54:             TypeBool

+              55:             TypePointer UniformConstant 54(bool)

+           56(p):     55(ptr) Variable UniformConstant

+              60:             TypePointer Input 6(float)

               68:             TypePointer Output 10(fvec4)

 69(gl_FragColor):     68(ptr) Variable Output

-              80:             TypePointer Function 27(fvec2)

+              80:             TypePointer Function 28(fvec2)

               84:    6(float) Constant 0

               85:    6(float) Constant 1065353216

               86:   10(fvec4) ConstantComposite 84 84 84 85

               92:    6(float) Constant 3212836864

-             103:    6(float) Constant 1079613850

-             109:             TypePointer UniformConstant 6(float)

-      110(blend):    109(ptr) Variable UniformConstant

+             102:    6(float) Constant 1079613850

+             107:             TypePointer UniformConstant 6(float)

+      108(blend):    107(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

    8(blendscale):      7(ptr) Variable Function

@@ -64,7 +66,7 @@
    18(w_reorder):     11(ptr) Variable Function

           20(w2):     11(ptr) Variable Function

       22(w_flow):     11(ptr) Variable Function

-     48(w_undef):     11(ptr) Variable Function

+     49(w_undef):     11(ptr) Variable Function

            81(c):     80(ptr) Variable Function

          83(rep):     11(ptr) Variable Function

                               Store 8(blendscale) 9

@@ -79,58 +81,53 @@
               23:   10(fvec4) Load 14(u)

                               Store 22(w_flow) 23

               24:    6(float) Load 8(blendscale)

-              25:   10(fvec4) Load 18(w_reorder)

-              26:   10(fvec4) CompositeInsert 24 25 2

-                              Store 18(w_reorder) 26

-              30:   27(fvec2) Load 29(t)

-              31:   10(fvec4) Load 12(w)

-              32:   10(fvec4) VectorShuffle 31 30 0 5 2 4

-                              Store 12(w) 32

-              33:    6(float) Load 8(blendscale)

-              34:   10(fvec4) Load 18(w_reorder)

-              35:   10(fvec4) CompositeInsert 33 34 0

-                              Store 18(w_reorder) 35

-              36:   10(fvec4) Load 14(u)

-              37:   10(fvec4) VectorShuffle 36 36 2 3 0 1

-                              Store 20(w2) 37

-              38:    6(float) Load 8(blendscale)

-              39:   10(fvec4) Load 18(w_reorder)

-              40:   10(fvec4) CompositeInsert 38 39 1

-                              Store 18(w_reorder) 40

-              41:   10(fvec4) Load 20(w2)

-              42:   27(fvec2) VectorShuffle 41 41 0 2

-              43:   10(fvec4) Load 16(w_dep)

-              44:   10(fvec4) VectorShuffle 43 42 4 5 2 3

-                              Store 16(w_dep) 44

-              45:   27(fvec2) Load 29(t)

-              46:   10(fvec4) Load 16(w_dep)

-              47:   10(fvec4) VectorShuffle 46 45 0 1 4 5

-                              Store 16(w_dep) 47

-              49:   10(fvec4) Load 14(u)

-              50:   27(fvec2) VectorShuffle 49 49 2 3

-              51:   10(fvec4) Load 48(w_undef)

-              52:   10(fvec4) VectorShuffle 51 50 4 5 2 3

-                              Store 48(w_undef) 52

-              56:    53(bool) Load 55(p)

-                              SelectionMerge 58 None

-                              BranchConditional 56 57 63

-              57:               Label

-              59:   27(fvec2)   Load 29(t)

-              60:    6(float)   CompositeExtract 59 0

-              61:   10(fvec4)   Load 22(w_flow)

-              62:   10(fvec4)   CompositeInsert 60 61 0

-                                Store 22(w_flow) 62

-                                Branch 58

-              63:               Label

-              64:   27(fvec2)   Load 29(t)

-              65:    6(float)   CompositeExtract 64 1

-              66:   10(fvec4)   Load 22(w_flow)

-              67:   10(fvec4)   CompositeInsert 65 66 0

-                                Store 22(w_flow) 67

-                                Branch 58

-              58:             Label

+              27:      7(ptr) AccessChain 18(w_reorder) 26

+                              Store 27 24

+              31:   28(fvec2) Load 30(t)

+              32:   10(fvec4) Load 12(w)

+              33:   10(fvec4) VectorShuffle 32 31 0 5 2 4

+                              Store 12(w) 33

+              34:    6(float) Load 8(blendscale)

+              36:      7(ptr) AccessChain 18(w_reorder) 35

+                              Store 36 34

+              37:   10(fvec4) Load 14(u)

+              38:   10(fvec4) VectorShuffle 37 37 2 3 0 1

+                              Store 20(w2) 38

+              39:    6(float) Load 8(blendscale)

+              41:      7(ptr) AccessChain 18(w_reorder) 40

+                              Store 41 39

+              42:   10(fvec4) Load 20(w2)

+              43:   28(fvec2) VectorShuffle 42 42 0 2

+              44:   10(fvec4) Load 16(w_dep)

+              45:   10(fvec4) VectorShuffle 44 43 4 5 2 3

+                              Store 16(w_dep) 45

+              46:   28(fvec2) Load 30(t)

+              47:   10(fvec4) Load 16(w_dep)

+              48:   10(fvec4) VectorShuffle 47 46 0 1 4 5

+                              Store 16(w_dep) 48

+              50:   10(fvec4) Load 14(u)

+              51:   28(fvec2) VectorShuffle 50 50 2 3

+              52:   10(fvec4) Load 49(w_undef)

+              53:   10(fvec4) VectorShuffle 52 51 4 5 2 3

+                              Store 49(w_undef) 53

+              57:    54(bool) Load 56(p)

+                              SelectionMerge 59 None

+                              BranchConditional 57 58 64

+              58:               Label

+              61:     60(ptr)   AccessChain 30(t) 35

+              62:    6(float)   Load 61

+              63:      7(ptr)   AccessChain 22(w_flow) 35

+                                Store 63 62

+                                Branch 59

+              64:               Label

+              65:     60(ptr)   AccessChain 30(t) 40

+              66:    6(float)   Load 65

+              67:      7(ptr)   AccessChain 22(w_flow) 35

+                                Store 67 66

+                                Branch 59

+              59:             Label

               70:   10(fvec4) Load 18(w_reorder)

-              71:   10(fvec4) Load 48(w_undef)

+              71:   10(fvec4) Load 49(w_undef)

               72:   10(fvec4) Load 12(w)

               73:   10(fvec4) Load 20(w2)

               74:   10(fvec4) FMul 72 73

@@ -138,39 +135,37 @@
               76:   10(fvec4) FMul 74 75

               77:   10(fvec4) Load 22(w_flow)

               78:   10(fvec4) FMul 76 77

-              79:   10(fvec4) ExtInst 1(GLSL.std.450) 46(Mix) 70 71 78

+              79:   10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 70 71 78

                               Store 69(gl_FragColor) 79

-              82:   27(fvec2) Load 29(t)

+              82:   28(fvec2) Load 30(t)

                               Store 81(c) 82

                               Store 83(rep) 86

-              87:   27(fvec2) Load 81(c)

-              88:    6(float) CompositeExtract 87 0

-              89:    53(bool) FOrdLessThan 88 84

+              87:      7(ptr) AccessChain 81(c) 35

+              88:    6(float) Load 87

+              89:    54(bool) FOrdLessThan 88 84

                               SelectionMerge 91 None

                               BranchConditional 89 90 91

               90:               Label

-              93:   27(fvec2)   Load 81(c)

-              94:    6(float)   CompositeExtract 93 0

+              93:      7(ptr)   AccessChain 81(c) 35

+              94:    6(float)   Load 93

               95:    6(float)   FMul 94 92

-              96:   27(fvec2)   Load 81(c)

-              97:   27(fvec2)   CompositeInsert 95 96 0

-                                Store 81(c) 97

+              96:      7(ptr)   AccessChain 81(c) 35

+                                Store 96 95

                                 Branch 91

               91:             Label

-              98:   27(fvec2) Load 81(c)

-              99:    6(float) CompositeExtract 98 0

-             100:    53(bool) FOrdLessThanEqual 99 85

-                              SelectionMerge 102 None

-                              BranchConditional 100 101 102

-             101:               Label

-             104:   10(fvec4)   Load 83(rep)

-             105:   10(fvec4)   CompositeInsert 103 104 0

-                                Store 83(rep) 105

-                                Branch 102

-             102:             Label

-             106:   10(fvec4) Load 83(rep)

-             107:   10(fvec4) Load 69(gl_FragColor)

-             108:   10(fvec4) FAdd 107 106

-                              Store 69(gl_FragColor) 108

+              97:      7(ptr) AccessChain 81(c) 35

+              98:    6(float) Load 97

+              99:    54(bool) FOrdLessThanEqual 98 85

+                              SelectionMerge 101 None

+                              BranchConditional 99 100 101

+             100:               Label

+             103:      7(ptr)   AccessChain 83(rep) 35

+                                Store 103 102

+                                Branch 101

+             101:             Label

+             104:   10(fvec4) Load 83(rep)

+             105:   10(fvec4) Load 69(gl_FragColor)

+             106:   10(fvec4) FAdd 105 104

+                              Store 69(gl_FragColor) 106

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index b8091b7..344d021 100755
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -1,18 +1,20 @@
 spv.test.frag

+Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.

+

 

 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 55

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 20 38

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 400

                               Name 4  "main"

                               Name 8  "blendscale"

                               Name 12  "v"

@@ -25,9 +27,6 @@
                               Name 44  "gl_FragColor"

                               Name 47  "u"

                               Name 50  "blend"

-                              Decorate 20(t) Smooth

-                              Decorate 38(coords) Smooth

-                              Decorate 44(gl_FragColor) BuiltIn FragColor

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -83,7 +82,7 @@
               51:    6(float) Load 50(blend)

               52:    6(float) Load 8(blendscale)

               53:    6(float) FMul 51 52

-              54:   10(fvec4) ExtInst 1(GLSL.std.450) 46(Mix) 45 48 53

+              54:   10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 45 48 53

                               Store 44(gl_FragColor) 54

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
old mode 100644
new mode 100755
index c2b921b..3995baa
--- a/Test/baseResults/spv.test.vert.out
+++ b/Test/baseResults/spv.test.vert.out
@@ -5,15 +5,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 27

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 21 11 9 26

+                              Source GLSL 130

                               Name 4  "main"

                               Name 9  "uv"

                               Name 11  "uv_in"

@@ -21,10 +21,8 @@
                               Name 18  "transform"

                               Name 21  "position"

                               Name 26  "gl_VertexID"

-                              Decorate 9(uv) Smooth

                               Decorate 15(gl_Position) BuiltIn Position

                               Decorate 26(gl_VertexID) BuiltIn VertexId

-                              Decorate 26(gl_VertexID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
old mode 100644
new mode 100755
index b6a139e..b6efb4a
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -6,16 +6,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 290

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 289 47

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "blendscale"

                               Name 10  "bias"

@@ -41,11 +41,6 @@
                               Name 282  "blend"

                               Name 288  "scale"

                               Name 289  "t"

-                              Decorate 47(coords2D) Smooth

-                              Decorate 276(gl_FragColor) BuiltIn FragColor

-                              Decorate 288(scale) NoStaticUse

-                              Decorate 289(t) Smooth

-                              Decorate 289(t) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -241,69 +236,69 @@
              141:   16(fvec3) Load 18(coords3D)

              142:    6(float) CompositeExtract 141 2

              143:    6(float) ImageSampleDrefImplicitLod 140 141 142

-             144:   22(fvec4) CompositeConstruct 143 143 143 143

-             145:   22(fvec4) Load 26(color)

-             146:   22(fvec4) FAdd 145 144

+             144:   22(fvec4) Load 26(color)

+             145:   22(fvec4) CompositeConstruct 143 143 143 143

+             146:   22(fvec4) FAdd 144 145

                               Store 26(color) 146

              147:         137 Load 139(shadowSampler1D)

              148:   16(fvec3) Load 18(coords3D)

              149:    6(float) Load 10(bias)

              150:    6(float) CompositeExtract 148 2

              151:    6(float) ImageSampleDrefImplicitLod 147 148 150 Bias 149

-             152:   22(fvec4) CompositeConstruct 151 151 151 151

-             153:   22(fvec4) Load 26(color)

-             154:   22(fvec4) FAdd 153 152

+             152:   22(fvec4) Load 26(color)

+             153:   22(fvec4) CompositeConstruct 151 151 151 151

+             154:   22(fvec4) FAdd 152 153

                               Store 26(color) 154

              159:         156 Load 158(shadowSampler2D)

              160:   16(fvec3) Load 18(coords3D)

              161:    6(float) CompositeExtract 160 2

              162:    6(float) ImageSampleDrefImplicitLod 159 160 161

-             163:   22(fvec4) CompositeConstruct 162 162 162 162

-             164:   22(fvec4) Load 26(color)

-             165:   22(fvec4) FAdd 164 163

+             163:   22(fvec4) Load 26(color)

+             164:   22(fvec4) CompositeConstruct 162 162 162 162

+             165:   22(fvec4) FAdd 163 164

                               Store 26(color) 165

              166:         156 Load 158(shadowSampler2D)

              167:   16(fvec3) Load 18(coords3D)

              168:    6(float) Load 10(bias)

              169:    6(float) CompositeExtract 167 2

              170:    6(float) ImageSampleDrefImplicitLod 166 167 169 Bias 168

-             171:   22(fvec4) CompositeConstruct 170 170 170 170

-             172:   22(fvec4) Load 26(color)

-             173:   22(fvec4) FAdd 172 171

+             171:   22(fvec4) Load 26(color)

+             172:   22(fvec4) CompositeConstruct 170 170 170 170

+             173:   22(fvec4) FAdd 171 172

                               Store 26(color) 173

              174:         137 Load 139(shadowSampler1D)

              175:   22(fvec4) Load 24(coords4D)

              176:    6(float) CompositeExtract 175 3

              177:    6(float) ImageSampleProjDrefImplicitLod 174 175 176

-             178:   22(fvec4) CompositeConstruct 177 177 177 177

-             179:   22(fvec4) Load 26(color)

-             180:   22(fvec4) FAdd 179 178

+             178:   22(fvec4) Load 26(color)

+             179:   22(fvec4) CompositeConstruct 177 177 177 177

+             180:   22(fvec4) FAdd 178 179

                               Store 26(color) 180

              181:         137 Load 139(shadowSampler1D)

              182:   22(fvec4) Load 24(coords4D)

              183:    6(float) Load 10(bias)

              184:    6(float) CompositeExtract 182 3

              185:    6(float) ImageSampleProjDrefImplicitLod 181 182 184 Bias 183

-             186:   22(fvec4) CompositeConstruct 185 185 185 185

-             187:   22(fvec4) Load 26(color)

-             188:   22(fvec4) FAdd 187 186

+             186:   22(fvec4) Load 26(color)

+             187:   22(fvec4) CompositeConstruct 185 185 185 185

+             188:   22(fvec4) FAdd 186 187

                               Store 26(color) 188

              189:         156 Load 158(shadowSampler2D)

              190:   22(fvec4) Load 24(coords4D)

              191:    6(float) CompositeExtract 190 3

              192:    6(float) ImageSampleProjDrefImplicitLod 189 190 191

-             193:   22(fvec4) CompositeConstruct 192 192 192 192

-             194:   22(fvec4) Load 26(color)

-             195:   22(fvec4) FAdd 194 193

+             193:   22(fvec4) Load 26(color)

+             194:   22(fvec4) CompositeConstruct 192 192 192 192

+             195:   22(fvec4) FAdd 193 194

                               Store 26(color) 195

              196:         156 Load 158(shadowSampler2D)

              197:   22(fvec4) Load 24(coords4D)

              198:    6(float) Load 10(bias)

              199:    6(float) CompositeExtract 197 3

              200:    6(float) ImageSampleProjDrefImplicitLod 196 197 199 Bias 198

-             201:   22(fvec4) CompositeConstruct 200 200 200 200

-             202:   22(fvec4) Load 26(color)

-             203:   22(fvec4) FAdd 202 201

+             201:   22(fvec4) Load 26(color)

+             202:   22(fvec4) CompositeConstruct 200 200 200 200

+             203:   22(fvec4) FAdd 201 202

                               Store 26(color) 203

                               Store 207(iCoords2D) 210

                               Store 212(iLod) 213

@@ -375,7 +370,7 @@
              283:    6(float) Load 282(blend)

              284:    6(float) Load 8(blendscale)

              285:    6(float) FMul 283 284

-             286:   22(fvec4) ExtInst 1(GLSL.std.450) 46(Mix) 277 280 285

+             286:   22(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 277 280 285

                               Store 276(gl_FragColor) 286

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index 957a1eb..807b03d 100755
--- a/Test/baseResults/spv.texture.vert.out
+++ b/Test/baseResults/spv.texture.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 145

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 39 144

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "lod"

                               Name 10  "coords1D"

@@ -29,7 +29,6 @@
                               Name 144  "gl_VertexID"

                               Decorate 140(gl_Position) BuiltIn Position

                               Decorate 144(gl_VertexID) BuiltIn VertexId

-                              Decorate 144(gl_VertexID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -159,36 +158,36 @@
              105:    6(float) Load 8(lod)

              106:    6(float) CompositeExtract 104 2

              107:    6(float) ImageSampleDrefExplicitLod 103 104 106 Lod 105

-             108:   18(fvec4) CompositeConstruct 107 107 107 107

-             109:   18(fvec4) Load 23(color)

-             110:   18(fvec4) FAdd 109 108

+             108:   18(fvec4) Load 23(color)

+             109:   18(fvec4) CompositeConstruct 107 107 107 107

+             110:   18(fvec4) FAdd 108 109

                               Store 23(color) 110

              115:         112 Load 114(shadowSampler2D)

              116:   12(fvec3) Load 14(coords3D)

              117:    6(float) Load 8(lod)

              118:    6(float) CompositeExtract 116 2

              119:    6(float) ImageSampleDrefExplicitLod 115 116 118 Lod 117

-             120:   18(fvec4) CompositeConstruct 119 119 119 119

-             121:   18(fvec4) Load 23(color)

-             122:   18(fvec4) FAdd 121 120

+             120:   18(fvec4) Load 23(color)

+             121:   18(fvec4) CompositeConstruct 119 119 119 119

+             122:   18(fvec4) FAdd 120 121

                               Store 23(color) 122

              123:         100 Load 102(shadowSampler1D)

              124:   18(fvec4) Load 20(coords4D)

              125:    6(float) Load 8(lod)

              126:    6(float) CompositeExtract 124 3

              127:    6(float) ImageSampleProjDrefExplicitLod 123 124 126 Lod 125

-             128:   18(fvec4) CompositeConstruct 127 127 127 127

-             129:   18(fvec4) Load 23(color)

-             130:   18(fvec4) FAdd 129 128

+             128:   18(fvec4) Load 23(color)

+             129:   18(fvec4) CompositeConstruct 127 127 127 127

+             130:   18(fvec4) FAdd 128 129

                               Store 23(color) 130

              131:         112 Load 114(shadowSampler2D)

              132:   18(fvec4) Load 20(coords4D)

              133:    6(float) Load 8(lod)

              134:    6(float) CompositeExtract 132 3

              135:    6(float) ImageSampleProjDrefExplicitLod 131 132 134 Lod 133

-             136:   18(fvec4) CompositeConstruct 135 135 135 135

-             137:   18(fvec4) Load 23(color)

-             138:   18(fvec4) FAdd 137 136

+             136:   18(fvec4) Load 23(color)

+             137:   18(fvec4) CompositeConstruct 135 135 135 135

+             138:   18(fvec4) FAdd 136 137

                               Store 23(color) 138

              141:   18(fvec4) Load 23(color)

                               Store 140(gl_Position) 141

diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
index 27e4d6f..82b97a2 100755
--- a/Test/baseResults/spv.types.frag.out
+++ b/Test/baseResults/spv.types.frag.out
@@ -3,16 +3,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 263

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 268

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 94 104 114 124 134 144 154 164

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "b"

                               Name 10  "u_b"

@@ -55,11 +55,6 @@
                               Decorate 104(i_i2) Flat

                               Decorate 114(i_i3) Flat

                               Decorate 124(i_i4) Flat

-                              Decorate 134(i_f) Smooth

-                              Decorate 144(i_f2) Smooth

-                              Decorate 154(i_f3) Smooth

-                              Decorate 164(i_f4) Smooth

-                              Decorate 168(gl_FragColor) BuiltIn FragColor

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeBool

@@ -132,8 +127,13 @@
        164(i_f4):    163(ptr) Variable Input

              167:             TypePointer Output 157(fvec4)

 168(gl_FragColor):    167(ptr) Variable Output

-             260:  127(float) Constant 1065353216

-             261:  157(fvec4) ConstantComposite 260 260 260 260

+             201:             TypeInt 32 0

+             202:    201(int) Constant 0

+             206:    201(int) Constant 1

+             216:    201(int) Constant 2

+             229:    201(int) Constant 3

+             265:  127(float) Constant 1065353216

+             266:  157(fvec4) ConstantComposite 265 265 265 265

          4(main):           2 Function None 3

                5:             Label

             8(b):      7(ptr) Variable Function

@@ -271,74 +271,74 @@
              196:     6(bool) CompositeExtract 195 3

              197:     6(bool) LogicalOr 194 196

                               SelectionMerge 199 None

-                              BranchConditional 197 198 259

+                              BranchConditional 197 198 264

              198:               Label

              200:     87(int)   Load 89(i)

-             201:   97(ivec2)   Load 99(i2)

-             202:     87(int)   CompositeExtract 201 0

-             203:     87(int)   IAdd 200 202

-             204:   97(ivec2)   Load 99(i2)

-             205:     87(int)   CompositeExtract 204 1

-             206:     87(int)   IAdd 203 205

-             207:  107(ivec3)   Load 109(i3)

-             208:     87(int)   CompositeExtract 207 0

-             209:     87(int)   IAdd 206 208

-             210:  107(ivec3)   Load 109(i3)

-             211:     87(int)   CompositeExtract 210 1

+             203:     88(ptr)   AccessChain 99(i2) 202

+             204:     87(int)   Load 203

+             205:     87(int)   IAdd 200 204

+             207:     88(ptr)   AccessChain 99(i2) 206

+             208:     87(int)   Load 207

+             209:     87(int)   IAdd 205 208

+             210:     88(ptr)   AccessChain 109(i3) 202

+             211:     87(int)   Load 210

              212:     87(int)   IAdd 209 211

-             213:  107(ivec3)   Load 109(i3)

-             214:     87(int)   CompositeExtract 213 2

+             213:     88(ptr)   AccessChain 109(i3) 206

+             214:     87(int)   Load 213

              215:     87(int)   IAdd 212 214

-             216:  117(ivec4)   Load 119(i4)

-             217:     87(int)   CompositeExtract 216 0

-             218:     87(int)   IAdd 215 217

-             219:  117(ivec4)   Load 119(i4)

-             220:     87(int)   CompositeExtract 219 1

-             221:     87(int)   IAdd 218 220

-             222:  117(ivec4)   Load 119(i4)

-             223:     87(int)   CompositeExtract 222 2

-             224:     87(int)   IAdd 221 223

-             225:  117(ivec4)   Load 119(i4)

-             226:     87(int)   CompositeExtract 225 3

-             227:     87(int)   IAdd 224 226

-             228:  127(float)   ConvertSToF 227

-             229:  127(float)   Load 129(f)

-             230:  127(float)   FAdd 228 229

-             231:  137(fvec2)   Load 139(f2)

-             232:  127(float)   CompositeExtract 231 0

-             233:  127(float)   FAdd 230 232

-             234:  137(fvec2)   Load 139(f2)

-             235:  127(float)   CompositeExtract 234 1

-             236:  127(float)   FAdd 233 235

-             237:  147(fvec3)   Load 149(f3)

-             238:  127(float)   CompositeExtract 237 0

-             239:  127(float)   FAdd 236 238

-             240:  147(fvec3)   Load 149(f3)

-             241:  127(float)   CompositeExtract 240 1

-             242:  127(float)   FAdd 239 241

-             243:  147(fvec3)   Load 149(f3)

-             244:  127(float)   CompositeExtract 243 2

-             245:  127(float)   FAdd 242 244

-             246:  157(fvec4)   Load 159(f4)

-             247:  127(float)   CompositeExtract 246 0

-             248:  127(float)   FAdd 245 247

-             249:  157(fvec4)   Load 159(f4)

-             250:  127(float)   CompositeExtract 249 1

-             251:  127(float)   FAdd 248 250

-             252:  157(fvec4)   Load 159(f4)

-             253:  127(float)   CompositeExtract 252 2

-             254:  127(float)   FAdd 251 253

-             255:  157(fvec4)   Load 159(f4)

-             256:  127(float)   CompositeExtract 255 3

-             257:  127(float)   FAdd 254 256

-             258:  157(fvec4)   CompositeConstruct 257 257 257 257

-                                Store 169 258

+             217:     88(ptr)   AccessChain 109(i3) 216

+             218:     87(int)   Load 217

+             219:     87(int)   IAdd 215 218

+             220:     88(ptr)   AccessChain 119(i4) 202

+             221:     87(int)   Load 220

+             222:     87(int)   IAdd 219 221

+             223:     88(ptr)   AccessChain 119(i4) 206

+             224:     87(int)   Load 223

+             225:     87(int)   IAdd 222 224

+             226:     88(ptr)   AccessChain 119(i4) 216

+             227:     87(int)   Load 226

+             228:     87(int)   IAdd 225 227

+             230:     88(ptr)   AccessChain 119(i4) 229

+             231:     87(int)   Load 230

+             232:     87(int)   IAdd 228 231

+             233:  127(float)   ConvertSToF 232

+             234:  127(float)   Load 129(f)

+             235:  127(float)   FAdd 233 234

+             236:    128(ptr)   AccessChain 139(f2) 202

+             237:  127(float)   Load 236

+             238:  127(float)   FAdd 235 237

+             239:    128(ptr)   AccessChain 139(f2) 206

+             240:  127(float)   Load 239

+             241:  127(float)   FAdd 238 240

+             242:    128(ptr)   AccessChain 149(f3) 202

+             243:  127(float)   Load 242

+             244:  127(float)   FAdd 241 243

+             245:    128(ptr)   AccessChain 149(f3) 206

+             246:  127(float)   Load 245

+             247:  127(float)   FAdd 244 246

+             248:    128(ptr)   AccessChain 149(f3) 216

+             249:  127(float)   Load 248

+             250:  127(float)   FAdd 247 249

+             251:    128(ptr)   AccessChain 159(f4) 202

+             252:  127(float)   Load 251

+             253:  127(float)   FAdd 250 252

+             254:    128(ptr)   AccessChain 159(f4) 206

+             255:  127(float)   Load 254

+             256:  127(float)   FAdd 253 255

+             257:    128(ptr)   AccessChain 159(f4) 216

+             258:  127(float)   Load 257

+             259:  127(float)   FAdd 256 258

+             260:    128(ptr)   AccessChain 159(f4) 229

+             261:  127(float)   Load 260

+             262:  127(float)   FAdd 259 261

+             263:  157(fvec4)   CompositeConstruct 262 262 262 262

+                                Store 169 263

                                 Branch 199

-             259:               Label

-                                Store 169 261

+             264:               Label

+                                Store 169 266

                                 Branch 199

              199:             Label

-             262:  157(fvec4) Load 169

-                              Store 168(gl_FragColor) 262

+             267:  157(fvec4) Load 169

+                              Store 168(gl_FragColor) 267

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index d7951a9..3cf1a76 100755
--- a/Test/baseResults/spv.uint.frag.out
+++ b/Test/baseResults/spv.uint.frag.out
@@ -3,64 +3,58 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 206

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 207

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 15 200 77 68

                               ExecutionMode 4 OriginLowerLeft

+                              Source ESSL 300

                               Name 4  "main"

                               Name 8  "count"

                               Name 12  "u"

                               Name 15  "t"

-                              Name 53  "shiftedii"

-                              Name 55  "shiftedui"

-                              Name 57  "shiftediu"

-                              Name 58  "shifteduu"

-                              Name 66  "c"

-                              Name 70  "usampler"

-                              Name 75  "tc"

-                              Name 108  "af"

-                              Name 112  "ab"

-                              Name 116  "ai"

-                              Name 151  "mask1"

-                              Name 153  "mask2"

-                              Name 155  "mask3"

-                              Name 159  "mask4"

-                              Name 199  "f"

-                              Name 201  "v"

-                              Name 203  "i"

-                              Name 205  "b"

+                              Name 55  "shiftedii"

+                              Name 57  "shiftedui"

+                              Name 59  "shiftediu"

+                              Name 60  "shifteduu"

+                              Name 68  "c"

+                              Name 72  "usampler"

+                              Name 77  "tc"

+                              Name 111  "af"

+                              Name 115  "ab"

+                              Name 118  "ai"

+                              Name 152  "mask1"

+                              Name 154  "mask2"

+                              Name 156  "mask3"

+                              Name 160  "mask4"

+                              Name 200  "f"

+                              Name 202  "v"

+                              Name 204  "i"

+                              Name 206  "b"

                               Decorate 8(count) RelaxedPrecision

                               Decorate 12(u) RelaxedPrecision

                               Decorate 15(t) RelaxedPrecision

                               Decorate 15(t) Flat

-                              Decorate 53(shiftedii) RelaxedPrecision

-                              Decorate 55(shiftedui) RelaxedPrecision

-                              Decorate 57(shiftediu) RelaxedPrecision

-                              Decorate 58(shifteduu) RelaxedPrecision

-                              Decorate 66(c) RelaxedPrecision

-                              Decorate 70(usampler) RelaxedPrecision

-                              Decorate 75(tc) RelaxedPrecision

-                              Decorate 75(tc) Smooth

-                              Decorate 108(af) RelaxedPrecision

-                              Decorate 116(ai) RelaxedPrecision

-                              Decorate 151(mask1) RelaxedPrecision

-                              Decorate 153(mask2) RelaxedPrecision

-                              Decorate 155(mask3) RelaxedPrecision

-                              Decorate 159(mask4) RelaxedPrecision

-                              Decorate 199(f) RelaxedPrecision

-                              Decorate 199(f) Smooth

-                              Decorate 199(f) NoStaticUse

-                              Decorate 201(v) RelaxedPrecision

-                              Decorate 201(v) NoStaticUse

-                              Decorate 203(i) RelaxedPrecision

-                              Decorate 203(i) NoStaticUse

-                              Decorate 205(b) NoStaticUse

+                              Decorate 55(shiftedii) RelaxedPrecision

+                              Decorate 57(shiftedui) RelaxedPrecision

+                              Decorate 59(shiftediu) RelaxedPrecision

+                              Decorate 60(shifteduu) RelaxedPrecision

+                              Decorate 68(c) RelaxedPrecision

+                              Decorate 72(usampler) RelaxedPrecision

+                              Decorate 77(tc) RelaxedPrecision

+                              Decorate 111(af) RelaxedPrecision

+                              Decorate 118(ai) RelaxedPrecision

+                              Decorate 152(mask1) RelaxedPrecision

+                              Decorate 154(mask2) RelaxedPrecision

+                              Decorate 156(mask3) RelaxedPrecision

+                              Decorate 160(mask4) RelaxedPrecision

+                              Decorate 200(f) RelaxedPrecision

+                              Decorate 202(v) RelaxedPrecision

+                              Decorate 204(i) RelaxedPrecision

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -71,285 +65,286 @@
               13:             TypeVector 10(int) 2

               14:             TypePointer Input 13(ivec2)

            15(t):     14(ptr) Variable Input

-              18:     10(int) Constant 3

-              20:             TypeBool

-              21:    20(bool) ConstantTrue

-              24:      6(int) Constant 2

-              29:      6(int) Constant 3

-              32:    20(bool) ConstantFalse

-              35:      6(int) Constant 5

-              40:      6(int) Constant 7

-              45:      6(int) Constant 11

-              50:      6(int) Constant 13

-              54:      6(int) Constant 4294967295

-              56:     10(int) Constant 4194303

-              64:             TypeVector 10(int) 4

-              65:             TypePointer Output 64(ivec4)

-           66(c):     65(ptr) Variable Output

-              67:             TypeImage 10(int) 2D sampled format:Unknown

-              68:             TypeSampledImage 67

-              69:             TypePointer UniformConstant 68

-    70(usampler):     69(ptr) Variable UniformConstant

-              72:             TypeFloat 32

-              73:             TypeVector 72(float) 2

-              74:             TypePointer Input 73(fvec2)

-          75(tc):     74(ptr) Variable Input

-              85:   72(float) Constant 1065353216

-              97:   72(float) Constant 1073741824

-              98:   73(fvec2) ConstantComposite 97 97

-             103:     10(int) Constant 4

-             107:             TypePointer Function 72(float)

-             111:             TypePointer Function 20(bool)

-             114:     10(int) Constant 0

-             122:     10(int) Constant 1

-             133:      6(int) Constant 17

-             138:      6(int) Constant 19

-             143:      6(int) Constant 23

-             148:      6(int) Constant 27

-             152:     10(int) Constant 161

-             154:     10(int) Constant 2576

-             157:      6(int) Constant 4

-             160:     10(int) Constant 2737

-             198:             TypePointer Input 72(float)

-          199(f):    198(ptr) Variable Input

-             200:             TypePointer UniformConstant 64(ivec4)

-          201(v):    200(ptr) Variable UniformConstant

-             202:             TypePointer UniformConstant 6(int)

-          203(i):    202(ptr) Variable UniformConstant

-             204:             TypePointer UniformConstant 20(bool)

-          205(b):    204(ptr) Variable UniformConstant

+              16:     10(int) Constant 1

+              17:             TypePointer Input 10(int)

+              20:     10(int) Constant 3

+              22:             TypeBool

+              23:    22(bool) ConstantTrue

+              26:      6(int) Constant 2

+              31:      6(int) Constant 3

+              34:    22(bool) ConstantFalse

+              37:      6(int) Constant 5

+              42:      6(int) Constant 7

+              47:      6(int) Constant 11

+              52:      6(int) Constant 13

+              56:      6(int) Constant 4294967295

+              58:     10(int) Constant 4194303

+              66:             TypeVector 10(int) 4

+              67:             TypePointer Output 66(ivec4)

+           68(c):     67(ptr) Variable Output

+              69:             TypeImage 10(int) 2D sampled format:Unknown

+              70:             TypeSampledImage 69

+              71:             TypePointer UniformConstant 70

+    72(usampler):     71(ptr) Variable UniformConstant

+              74:             TypeFloat 32

+              75:             TypeVector 74(float) 2

+              76:             TypePointer Input 75(fvec2)

+          77(tc):     76(ptr) Variable Input

+              87:   74(float) Constant 1065353216

+              99:   74(float) Constant 1073741824

+             100:   75(fvec2) ConstantComposite 99 99

+             103:     10(int) Constant 0

+             106:     10(int) Constant 4

+             110:             TypePointer Function 74(float)

+             114:             TypePointer Function 22(bool)

+             134:      6(int) Constant 17

+             139:      6(int) Constant 19

+             144:      6(int) Constant 23

+             149:      6(int) Constant 27

+             153:     10(int) Constant 161

+             155:     10(int) Constant 2576

+             158:      6(int) Constant 4

+             161:     10(int) Constant 2737

+             199:             TypePointer Input 74(float)

+          200(f):    199(ptr) Variable Input

+             201:             TypePointer UniformConstant 66(ivec4)

+          202(v):    201(ptr) Variable UniformConstant

+             203:             TypePointer UniformConstant 6(int)

+          204(i):    203(ptr) Variable UniformConstant

+             205:             TypePointer UniformConstant 22(bool)

+          206(b):    205(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

         8(count):      7(ptr) Variable Function

            12(u):     11(ptr) Variable Function

-   53(shiftedii):      7(ptr) Variable Function

-   55(shiftedui):     11(ptr) Variable Function

-   57(shiftediu):      7(ptr) Variable Function

-   58(shifteduu):     11(ptr) Variable Function

-         108(af):    107(ptr) Variable Function

-         112(ab):    111(ptr) Variable Function

-         116(ai):      7(ptr) Variable Function

-      151(mask1):     11(ptr) Variable Function

-      153(mask2):     11(ptr) Variable Function

-      155(mask3):     11(ptr) Variable Function

-      159(mask4):     11(ptr) Variable Function

+   55(shiftedii):      7(ptr) Variable Function

+   57(shiftedui):     11(ptr) Variable Function

+   59(shiftediu):      7(ptr) Variable Function

+   60(shifteduu):     11(ptr) Variable Function

+         111(af):    110(ptr) Variable Function

+         115(ab):    114(ptr) Variable Function

+         118(ai):      7(ptr) Variable Function

+      152(mask1):     11(ptr) Variable Function

+      154(mask2):     11(ptr) Variable Function

+      156(mask3):     11(ptr) Variable Function

+      160(mask4):     11(ptr) Variable Function

                               Store 8(count) 9

-              16:   13(ivec2) Load 15(t)

-              17:     10(int) CompositeExtract 16 1

-              19:     10(int) IAdd 17 18

-                              Store 12(u) 19

-                              SelectionMerge 23 None

-                              BranchConditional 21 22 23

-              22:               Label

-              25:      6(int)   Load 8(count)

-              26:      6(int)   IMul 25 24

-                                Store 8(count) 26

-                                Branch 23

-              23:             Label

-                              SelectionMerge 28 None

-                              BranchConditional 21 27 28

-              27:               Label

-              30:      6(int)   Load 8(count)

-              31:      6(int)   IMul 30 29

-                                Store 8(count) 31

-                                Branch 28

-              28:             Label

-                              SelectionMerge 34 None

-                              BranchConditional 32 33 34

-              33:               Label

-              36:      6(int)   Load 8(count)

-              37:      6(int)   IMul 36 35

-                                Store 8(count) 37

-                                Branch 34

-              34:             Label

-                              SelectionMerge 39 None

-                              BranchConditional 21 38 39

-              38:               Label

-              41:      6(int)   Load 8(count)

-              42:      6(int)   IMul 41 40

-                                Store 8(count) 42

-                                Branch 39

-              39:             Label

-                              SelectionMerge 44 None

-                              BranchConditional 21 43 44

-              43:               Label

-              46:      6(int)   Load 8(count)

-              47:      6(int)   IMul 46 45

-                                Store 8(count) 47

-                                Branch 44

-              44:             Label

-                              SelectionMerge 49 None

-                              BranchConditional 32 48 49

-              48:               Label

-              51:      6(int)   Load 8(count)

-              52:      6(int)   IMul 51 50

-                                Store 8(count) 52

-                                Branch 49

-              49:             Label

-                              Store 53(shiftedii) 54

-                              Store 55(shiftedui) 56

-                              Store 57(shiftediu) 54

-                              Store 58(shifteduu) 56

-              59:      6(int) Load 53(shiftedii)

-              60:      6(int) Load 57(shiftediu)

-              61:    20(bool) IEqual 59 60

-                              SelectionMerge 63 None

-                              BranchConditional 61 62 63

-              62:               Label

-              71:          68   Load 70(usampler)

-              76:   73(fvec2)   Load 75(tc)

-              77:   64(ivec4)   ImageSampleImplicitLod 71 76

-                                Store 66(c) 77

-                                Branch 63

-              63:             Label

-              78:     10(int) Load 55(shiftedui)

-              79:     10(int) Load 58(shifteduu)

-              80:    20(bool) IEqual 78 79

-                              SelectionMerge 82 None

-                              BranchConditional 80 81 82

-              81:               Label

-              83:          68   Load 70(usampler)

-              84:   73(fvec2)   Load 75(tc)

-              86:   73(fvec2)   CompositeConstruct 85 85

-              87:   73(fvec2)   FAdd 84 86

-              88:   64(ivec4)   ImageSampleImplicitLod 83 87

-                                Store 66(c) 88

-                                Branch 82

-              82:             Label

-              89:      6(int) Load 53(shiftedii)

-              90:     10(int) Load 55(shiftedui)

-              91:      6(int) Bitcast 90

-              92:    20(bool) IEqual 89 91

-                              SelectionMerge 94 None

-                              BranchConditional 92 93 94

-              93:               Label

-              95:          68   Load 70(usampler)

-              96:   73(fvec2)   Load 75(tc)

-              99:   73(fvec2)   FSub 96 98

-             100:   64(ivec4)   ImageSampleImplicitLod 95 99

-                                Store 66(c) 100

-                                Branch 94

-              94:             Label

-             101:   13(ivec2) Load 15(t)

-             102:     10(int) CompositeExtract 101 0

-             104:    20(bool) UGreaterThan 102 103

-                              SelectionMerge 106 None

-                              BranchConditional 104 105 106

-             105:               Label

-             109:     10(int)   Load 12(u)

-             110:   72(float)   ConvertUToF 109

-                                Store 108(af) 110

-             113:     10(int)   Load 12(u)

-             115:    20(bool)   INotEqual 113 114

-                                Store 112(ab) 115

-             117:     10(int)   Load 12(u)

-             118:      6(int)   Bitcast 117

-                                Store 116(ai) 118

-             119:   72(float)   Load 108(af)

-             120:     10(int)   ConvertFToU 119

-             121:    20(bool)   Load 112(ab)

-             123:     10(int)   Select 121 122 114

-             124:      6(int)   Load 116(ai)

-             125:     10(int)   Bitcast 124

-             126:      6(int)   Load 8(count)

-             127:     10(int)   Bitcast 126

-             128:   64(ivec4)   CompositeConstruct 120 123 125 127

-             129:   64(ivec4)   Load 66(c)

-             130:   64(ivec4)   IAdd 129 128

-                                Store 66(c) 130

-                                Branch 106

-             106:             Label

-                              SelectionMerge 132 None

-                              BranchConditional 21 131 132

-             131:               Label

-             134:      6(int)   Load 8(count)

-             135:      6(int)   IMul 134 133

-                                Store 8(count) 135

-                                Branch 132

-             132:             Label

-                              SelectionMerge 137 None

-                              BranchConditional 32 136 137

-             136:               Label

-             139:      6(int)   Load 8(count)

-             140:      6(int)   IMul 139 138

-                                Store 8(count) 140

-                                Branch 137

-             137:             Label

-                              SelectionMerge 142 None

-                              BranchConditional 21 141 142

-             141:               Label

-             144:      6(int)   Load 8(count)

-             145:      6(int)   IMul 144 143

-                                Store 8(count) 145

-                                Branch 142

-             142:             Label

-                              SelectionMerge 147 None

-                              BranchConditional 21 146 147

-             146:               Label

-             149:      6(int)   Load 8(count)

-             150:      6(int)   IMul 149 148

-                                Store 8(count) 150

-                                Branch 147

-             147:             Label

-                              Store 151(mask1) 152

-                              Store 153(mask2) 154

-             156:     10(int) Load 151(mask1)

-             158:     10(int) ShiftLeftLogical 156 157

-                              Store 155(mask3) 158

-                              Store 159(mask4) 160

-             161:     10(int) Load 155(mask3)

-             162:     10(int) Load 153(mask2)

-             163:    20(bool) IEqual 161 162

-                              SelectionMerge 165 None

-                              BranchConditional 163 164 165

-             164:               Label

-             166:      6(int)   Load 8(count)

-             167:      6(int)   IMul 166 24

-                                Store 8(count) 167

-                                Branch 165

-             165:             Label

-             168:     10(int) Load 155(mask3)

-             169:     10(int) Load 151(mask1)

-             170:     10(int) BitwiseAnd 168 169

-             171:    20(bool) INotEqual 170 114

-                              SelectionMerge 173 None

-                              BranchConditional 171 172 173

-             172:               Label

-             174:      6(int)   Load 8(count)

-             175:      6(int)   IMul 174 29

-                                Store 8(count) 175

-                                Branch 173

-             173:             Label

-             176:     10(int) Load 151(mask1)

-             177:     10(int) Load 155(mask3)

-             178:     10(int) BitwiseOr 176 177

-             179:     10(int) Load 159(mask4)

-             180:    20(bool) IEqual 178 179

-                              SelectionMerge 182 None

-                              BranchConditional 180 181 182

-             181:               Label

-             183:      6(int)   Load 8(count)

-             184:      6(int)   IMul 183 35

-                                Store 8(count) 184

-                                Branch 182

-             182:             Label

-             185:     10(int) Load 151(mask1)

-             186:     10(int) Load 159(mask4)

-             187:     10(int) BitwiseXor 185 186

-             188:    20(bool) IEqual 187 154

-                              SelectionMerge 190 None

-                              BranchConditional 188 189 190

-             189:               Label

-             191:      6(int)   Load 8(count)

-             192:      6(int)   IMul 191 40

-                                Store 8(count) 192

-                                Branch 190

-             190:             Label

-             193:      6(int) Load 8(count)

-             194:     10(int) Bitcast 193

-             195:   64(ivec4) CompositeConstruct 194 194 194 194

-             196:   64(ivec4) Load 66(c)

-             197:   64(ivec4) IAdd 196 195

-                              Store 66(c) 197

+              18:     17(ptr) AccessChain 15(t) 16

+              19:     10(int) Load 18

+              21:     10(int) IAdd 19 20

+                              Store 12(u) 21

+                              SelectionMerge 25 None

+                              BranchConditional 23 24 25

+              24:               Label

+              27:      6(int)   Load 8(count)

+              28:      6(int)   IMul 27 26

+                                Store 8(count) 28

+                                Branch 25

+              25:             Label

+                              SelectionMerge 30 None

+                              BranchConditional 23 29 30

+              29:               Label

+              32:      6(int)   Load 8(count)

+              33:      6(int)   IMul 32 31

+                                Store 8(count) 33

+                                Branch 30

+              30:             Label

+                              SelectionMerge 36 None

+                              BranchConditional 34 35 36

+              35:               Label

+              38:      6(int)   Load 8(count)

+              39:      6(int)   IMul 38 37

+                                Store 8(count) 39

+                                Branch 36

+              36:             Label

+                              SelectionMerge 41 None

+                              BranchConditional 23 40 41

+              40:               Label

+              43:      6(int)   Load 8(count)

+              44:      6(int)   IMul 43 42

+                                Store 8(count) 44

+                                Branch 41

+              41:             Label

+                              SelectionMerge 46 None

+                              BranchConditional 23 45 46

+              45:               Label

+              48:      6(int)   Load 8(count)

+              49:      6(int)   IMul 48 47

+                                Store 8(count) 49

+                                Branch 46

+              46:             Label

+                              SelectionMerge 51 None

+                              BranchConditional 34 50 51

+              50:               Label

+              53:      6(int)   Load 8(count)

+              54:      6(int)   IMul 53 52

+                                Store 8(count) 54

+                                Branch 51

+              51:             Label

+                              Store 55(shiftedii) 56

+                              Store 57(shiftedui) 58

+                              Store 59(shiftediu) 56

+                              Store 60(shifteduu) 58

+              61:      6(int) Load 55(shiftedii)

+              62:      6(int) Load 59(shiftediu)

+              63:    22(bool) IEqual 61 62

+                              SelectionMerge 65 None

+                              BranchConditional 63 64 65

+              64:               Label

+              73:          70   Load 72(usampler)

+              78:   75(fvec2)   Load 77(tc)

+              79:   66(ivec4)   ImageSampleImplicitLod 73 78

+                                Store 68(c) 79

+                                Branch 65

+              65:             Label

+              80:     10(int) Load 57(shiftedui)

+              81:     10(int) Load 60(shifteduu)

+              82:    22(bool) IEqual 80 81

+                              SelectionMerge 84 None

+                              BranchConditional 82 83 84

+              83:               Label

+              85:          70   Load 72(usampler)

+              86:   75(fvec2)   Load 77(tc)

+              88:   75(fvec2)   CompositeConstruct 87 87

+              89:   75(fvec2)   FAdd 86 88

+              90:   66(ivec4)   ImageSampleImplicitLod 85 89

+                                Store 68(c) 90

+                                Branch 84

+              84:             Label

+              91:      6(int) Load 55(shiftedii)

+              92:     10(int) Load 57(shiftedui)

+              93:      6(int) Bitcast 92

+              94:    22(bool) IEqual 91 93

+                              SelectionMerge 96 None

+                              BranchConditional 94 95 96

+              95:               Label

+              97:          70   Load 72(usampler)

+              98:   75(fvec2)   Load 77(tc)

+             101:   75(fvec2)   FSub 98 100

+             102:   66(ivec4)   ImageSampleImplicitLod 97 101

+                                Store 68(c) 102

+                                Branch 96

+              96:             Label

+             104:     17(ptr) AccessChain 15(t) 103

+             105:     10(int) Load 104

+             107:    22(bool) UGreaterThan 105 106

+                              SelectionMerge 109 None

+                              BranchConditional 107 108 109

+             108:               Label

+             112:     10(int)   Load 12(u)

+             113:   74(float)   ConvertUToF 112

+                                Store 111(af) 113

+             116:     10(int)   Load 12(u)

+             117:    22(bool)   INotEqual 116 103

+                                Store 115(ab) 117

+             119:     10(int)   Load 12(u)

+             120:      6(int)   Bitcast 119

+                                Store 118(ai) 120

+             121:   74(float)   Load 111(af)

+             122:     10(int)   ConvertFToU 121

+             123:    22(bool)   Load 115(ab)

+             124:     10(int)   Select 123 16 103

+             125:      6(int)   Load 118(ai)

+             126:     10(int)   Bitcast 125

+             127:      6(int)   Load 8(count)

+             128:     10(int)   Bitcast 127

+             129:   66(ivec4)   CompositeConstruct 122 124 126 128

+             130:   66(ivec4)   Load 68(c)

+             131:   66(ivec4)   IAdd 130 129

+                                Store 68(c) 131

+                                Branch 109

+             109:             Label

+                              SelectionMerge 133 None

+                              BranchConditional 23 132 133

+             132:               Label

+             135:      6(int)   Load 8(count)

+             136:      6(int)   IMul 135 134

+                                Store 8(count) 136

+                                Branch 133

+             133:             Label

+                              SelectionMerge 138 None

+                              BranchConditional 34 137 138

+             137:               Label

+             140:      6(int)   Load 8(count)

+             141:      6(int)   IMul 140 139

+                                Store 8(count) 141

+                                Branch 138

+             138:             Label

+                              SelectionMerge 143 None

+                              BranchConditional 23 142 143

+             142:               Label

+             145:      6(int)   Load 8(count)

+             146:      6(int)   IMul 145 144

+                                Store 8(count) 146

+                                Branch 143

+             143:             Label

+                              SelectionMerge 148 None

+                              BranchConditional 23 147 148

+             147:               Label

+             150:      6(int)   Load 8(count)

+             151:      6(int)   IMul 150 149

+                                Store 8(count) 151

+                                Branch 148

+             148:             Label

+                              Store 152(mask1) 153

+                              Store 154(mask2) 155

+             157:     10(int) Load 152(mask1)

+             159:     10(int) ShiftLeftLogical 157 158

+                              Store 156(mask3) 159

+                              Store 160(mask4) 161

+             162:     10(int) Load 156(mask3)

+             163:     10(int) Load 154(mask2)

+             164:    22(bool) IEqual 162 163

+                              SelectionMerge 166 None

+                              BranchConditional 164 165 166

+             165:               Label

+             167:      6(int)   Load 8(count)

+             168:      6(int)   IMul 167 26

+                                Store 8(count) 168

+                                Branch 166

+             166:             Label

+             169:     10(int) Load 156(mask3)

+             170:     10(int) Load 152(mask1)

+             171:     10(int) BitwiseAnd 169 170

+             172:    22(bool) INotEqual 171 103

+                              SelectionMerge 174 None

+                              BranchConditional 172 173 174

+             173:               Label

+             175:      6(int)   Load 8(count)

+             176:      6(int)   IMul 175 31

+                                Store 8(count) 176

+                                Branch 174

+             174:             Label

+             177:     10(int) Load 152(mask1)

+             178:     10(int) Load 156(mask3)

+             179:     10(int) BitwiseOr 177 178

+             180:     10(int) Load 160(mask4)

+             181:    22(bool) IEqual 179 180

+                              SelectionMerge 183 None

+                              BranchConditional 181 182 183

+             182:               Label

+             184:      6(int)   Load 8(count)

+             185:      6(int)   IMul 184 37

+                                Store 8(count) 185

+                                Branch 183

+             183:             Label

+             186:     10(int) Load 152(mask1)

+             187:     10(int) Load 160(mask4)

+             188:     10(int) BitwiseXor 186 187

+             189:    22(bool) IEqual 188 155

+                              SelectionMerge 191 None

+                              BranchConditional 189 190 191

+             190:               Label

+             192:      6(int)   Load 8(count)

+             193:      6(int)   IMul 192 42

+                                Store 8(count) 193

+                                Branch 191

+             191:             Label

+             194:      6(int) Load 8(count)

+             195:     10(int) Bitcast 194

+             196:   66(ivec4) CompositeConstruct 195 195 195 195

+             197:   66(ivec4) Load 68(c)

+             198:   66(ivec4) IAdd 197 196

+                              Store 68(c) 198

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index b653609..03439d9 100755
--- a/Test/baseResults/spv.uniformArray.frag.out
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -3,25 +3,23 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 52

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 53

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

                               EntryPoint Fragment 4  "main"

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 9  "texColor"

                               Name 14  "color"

                               Name 25  "inColor"

                               Name 35  "alpha"

-                              Name 46  "gl_FragColor"

-                              Name 51  "texSampler2D"

-                              Decorate 46(gl_FragColor) BuiltIn FragColor

-                              Decorate 51(texSampler2D) NoStaticUse

+                              Name 47  "gl_FragColor"

+                              Name 52  "texSampler2D"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -44,12 +42,14 @@
        35(alpha):     34(ptr) Variable UniformConstant

               36:     15(int) Constant 12

               37:             TypePointer UniformConstant 6(float)

-              45:             TypePointer Output 7(fvec4)

-46(gl_FragColor):     45(ptr) Variable Output

-              48:             TypeImage 6(float) 2D sampled format:Unknown

-              49:             TypeSampledImage 48

-              50:             TypePointer UniformConstant 49

-51(texSampler2D):     50(ptr) Variable UniformConstant

+              40:     10(int) Constant 3

+              41:             TypePointer Function 6(float)

+              46:             TypePointer Output 7(fvec4)

+47(gl_FragColor):     46(ptr) Variable Output

+              49:             TypeImage 6(float) 2D sampled format:Unknown

+              50:             TypeSampledImage 49

+              51:             TypePointer UniformConstant 50

+52(texSampler2D):     51(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

      9(texColor):      8(ptr) Variable Function

@@ -68,13 +68,12 @@
                               Store 9(texColor) 31

               38:     37(ptr) AccessChain 35(alpha) 36

               39:    6(float) Load 38

-              40:    7(fvec4) Load 9(texColor)

-              41:    6(float) CompositeExtract 40 3

-              42:    6(float) FAdd 41 39

-              43:    7(fvec4) Load 9(texColor)

-              44:    7(fvec4) CompositeInsert 42 43 3

-                              Store 9(texColor) 44

-              47:    7(fvec4) Load 9(texColor)

-                              Store 46(gl_FragColor) 47

+              42:     41(ptr) AccessChain 9(texColor) 40

+              43:    6(float) Load 42

+              44:    6(float) FAdd 43 39

+              45:     41(ptr) AccessChain 9(texColor) 40

+                              Store 45 44

+              48:    7(fvec4) Load 9(texColor)

+                              Store 47(gl_FragColor) 48

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index 215c22a..1aa0871 100755
--- a/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -5,16 +5,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 93

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 63

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 8  "iLocal"

                               Name 10  "Count"

@@ -35,11 +35,9 @@
                               Name 34  "foo2"

                               Name 36  "foo"

                               Name 54  "gl_FragColor"

-                              Name 59  "sampler"

+                              Name 59  "samp2D"

                               Name 63  "coord"

                               Name 69  "constructed"

-                              Decorate 54(gl_FragColor) BuiltIn FragColor

-                              Decorate 63(coord) Smooth

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -73,7 +71,7 @@
               56:             TypeImage 12(float) 2D sampled format:Unknown

               57:             TypeSampledImage 56

               58:             TypePointer UniformConstant 57

-     59(sampler):     58(ptr) Variable UniformConstant

+      59(samp2D):     58(ptr) Variable UniformConstant

               61:             TypeVector 12(float) 2

               62:             TypePointer Input 61(fvec2)

        63(coord):     62(ptr) Variable Input

@@ -116,7 +114,7 @@
                                 Branch 28

               28:             Label

               55:   12(float) Load 30(scale)

-              60:          57 Load 59(sampler)

+              60:          57 Load 59(samp2D)

               64:   61(fvec2) Load 63(coord)

               65:   52(fvec4) ImageSampleImplicitLod 60 64

               66:   52(fvec4) VectorTimesScalar 65 55

diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index f42947f..afadee3 100755
--- a/Test/baseResults/spv.varyingArray.frag.out
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -8,29 +8,24 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 61

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 34 39 19 19 48

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 9  "texColor"

                               Name 13  "texSampler2D"

                               Name 19  "gl_TexCoord"

                               Name 34  "color"

                               Name 39  "alpha"

-                              Name 44  "gl_FragColor"

+                              Name 45  "gl_FragColor"

                               Name 48  "foo"

-                              Decorate 19(gl_TexCoord) Smooth

-                              Decorate 34(color) Smooth

-                              Decorate 39(alpha) Smooth

-                              Decorate 44(gl_FragColor) BuiltIn FragColor

-                              Decorate 48(foo) Smooth

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -53,10 +48,11 @@
        34(color):     22(ptr) Variable Input

               38:             TypePointer Input 6(float)

        39(alpha):     38(ptr) Variable Input

-              43:             TypePointer Output 7(fvec4)

-44(gl_FragColor):     43(ptr) Variable Output

-              45:     15(int) Constant 3

-              46:             TypeArray 7(fvec4) 45

+              41:     15(int) Constant 3

+              42:             TypePointer Function 6(float)

+              44:             TypePointer Output 7(fvec4)

+45(gl_FragColor):     44(ptr) Variable Output

+              46:             TypeArray 7(fvec4) 41

               47:             TypePointer Input 46

          48(foo):     47(ptr) Variable Input

               49:     20(int) Constant 1

@@ -80,9 +76,8 @@
               37:    7(fvec4) FAdd 36 35

                               Store 9(texColor) 37

               40:    6(float) Load 39(alpha)

-              41:    7(fvec4) Load 9(texColor)

-              42:    7(fvec4) CompositeInsert 40 41 3

-                              Store 9(texColor) 42

+              43:     42(ptr) AccessChain 9(texColor) 41

+                              Store 43 40

               50:     22(ptr) AccessChain 48(foo) 49

               51:    7(fvec4) Load 50

               53:     22(ptr) AccessChain 19(gl_TexCoord) 52

@@ -93,6 +88,6 @@
               58:    7(fvec4) FAdd 55 57

               59:    7(fvec4) Load 9(texColor)

               60:    7(fvec4) FAdd 58 59

-                              Store 44(gl_FragColor) 60

+                              Store 45(gl_FragColor) 60

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index a6db896..ba5bb2e 100755
--- a/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -8,16 +8,16 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 69

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 70

 

-                              Source GLSL 130

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 45 50 30 30 19

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 130

                               Name 4  "main"

                               Name 9  "texColor"

                               Name 13  "texSampler2D"

@@ -27,12 +27,7 @@
                               Name 31  "a"

                               Name 45  "color"

                               Name 50  "alpha"

-                              Name 55  "gl_FragColor"

-                              Decorate 19(userIn) Smooth

-                              Decorate 30(gl_TexCoord) Smooth

-                              Decorate 45(color) Smooth

-                              Decorate 50(alpha) Smooth

-                              Decorate 55(gl_FragColor) BuiltIn FragColor

+                              Name 56  "gl_FragColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -61,9 +56,11 @@
        45(color):     24(ptr) Variable Input

               49:             TypePointer Input 6(float)

        50(alpha):     49(ptr) Variable Input

-              54:             TypePointer Output 7(fvec4)

-55(gl_FragColor):     54(ptr) Variable Output

-              56:     20(int) Constant 0

+              52:     15(int) Constant 3

+              53:             TypePointer Function 6(float)

+              55:             TypePointer Output 7(fvec4)

+56(gl_FragColor):     55(ptr) Variable Output

+              57:     20(int) Constant 0

          4(main):           2 Function None 3

                5:             Label

      9(texColor):      8(ptr) Variable Function

@@ -88,21 +85,20 @@
               48:    7(fvec4) FAdd 47 46

                               Store 9(texColor) 48

               51:    6(float) Load 50(alpha)

-              52:    7(fvec4) Load 9(texColor)

-              53:    7(fvec4) CompositeInsert 51 52 3

-                              Store 9(texColor) 53

-              57:     24(ptr) AccessChain 30(gl_TexCoord) 56

-              58:    7(fvec4) Load 57

-              59:     20(int) Load 22(b)

-              60:     24(ptr) AccessChain 30(gl_TexCoord) 59

-              61:    7(fvec4) Load 60

-              62:    7(fvec4) FAdd 58 61

-              63:    7(fvec4) Load 9(texColor)

-              64:    7(fvec4) FAdd 62 63

-              65:     20(int) Load 31(a)

-              66:     24(ptr) AccessChain 19(userIn) 65

-              67:    7(fvec4) Load 66

-              68:    7(fvec4) FAdd 64 67

-                              Store 55(gl_FragColor) 68

+              54:     53(ptr) AccessChain 9(texColor) 52

+                              Store 54 51

+              58:     24(ptr) AccessChain 30(gl_TexCoord) 57

+              59:    7(fvec4) Load 58

+              60:     20(int) Load 22(b)

+              61:     24(ptr) AccessChain 30(gl_TexCoord) 60

+              62:    7(fvec4) Load 61

+              63:    7(fvec4) FAdd 59 62

+              64:    7(fvec4) Load 9(texColor)

+              65:    7(fvec4) FAdd 63 64

+              66:     20(int) Load 31(a)

+              67:     24(ptr) AccessChain 19(userIn) 66

+              68:    7(fvec4) Load 67

+              69:    7(fvec4) FAdd 65 68

+                              Store 56(gl_FragColor) 69

                               Return

                               FunctionEnd

diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
index a5086d3..0fa9565 100755
--- a/Test/baseResults/spv.voidFunction.frag.out
+++ b/Test/baseResults/spv.voidFunction.frag.out
@@ -3,46 +3,45 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 42

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 44

 

-                              Source GLSL 120

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 41

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 120

                               Name 4  "main"

                               Name 6  "foo("

                               Name 8  "foo2("

                               Name 12  "bar"

                               Name 22  "outColor"

                               Name 24  "bigColor"

-                              Name 35  "gl_FragColor"

-                              Name 39  "BaseColor"

-                              Name 41  "d"

-                              Decorate 35(gl_FragColor) BuiltIn FragColor

-                              Decorate 39(BaseColor) Smooth

-                              Decorate 39(BaseColor) NoStaticUse

-                              Decorate 41(d) NoStaticUse

+                              Name 37  "gl_FragColor"

+                              Name 41  "BaseColor"

+                              Name 43  "d"

                2:             TypeVoid

                3:             TypeFunction 2

               10:             TypeFloat 32

-              11:             TypePointer PrivateGlobal 10(float)

-         12(bar):     11(ptr) Variable PrivateGlobal

+              11:             TypePointer Private 10(float)

+         12(bar):     11(ptr) Variable Private

               13:   10(float) Constant 1073741824

               15:   10(float) Constant 1065353216

               20:             TypeVector 10(float) 4

               21:             TypePointer Function 20(fvec4)

               23:             TypePointer UniformConstant 20(fvec4)

     24(bigColor):     23(ptr) Variable UniformConstant

-              34:             TypePointer Output 20(fvec4)

-35(gl_FragColor):     34(ptr) Variable Output

-              38:             TypePointer Input 20(fvec4)

-   39(BaseColor):     38(ptr) Variable Input

-              40:             TypePointer UniformConstant 10(float)

-           41(d):     40(ptr) Variable UniformConstant

+              29:             TypeInt 32 0

+              30:     29(int) Constant 0

+              31:             TypePointer Function 10(float)

+              36:             TypePointer Output 20(fvec4)

+37(gl_FragColor):     36(ptr) Variable Output

+              40:             TypePointer Input 20(fvec4)

+   41(BaseColor):     40(ptr) Variable Input

+              42:             TypePointer UniformConstant 10(float)

+           43(d):     42(ptr) Variable UniformConstant

          4(main):           2 Function None 3

                5:             Label

     22(outColor):     21(ptr) Variable Function

@@ -52,14 +51,13 @@
               26:           2 FunctionCall 6(foo()

               27:           2 FunctionCall 8(foo2()

               28:   10(float) Load 12(bar)

-              29:   20(fvec4) Load 22(outColor)

-              30:   10(float) CompositeExtract 29 0

-              31:   10(float) FAdd 30 28

-              32:   20(fvec4) Load 22(outColor)

-              33:   20(fvec4) CompositeInsert 31 32 0

-                              Store 22(outColor) 33

-              36:   20(fvec4) Load 22(outColor)

-                              Store 35(gl_FragColor) 36

+              32:     31(ptr) AccessChain 22(outColor) 30

+              33:   10(float) Load 32

+              34:   10(float) FAdd 33 28

+              35:     31(ptr) AccessChain 22(outColor) 30

+                              Store 35 34

+              38:   20(fvec4) Load 22(outColor)

+                              Store 37(gl_FragColor) 38

                               Return

                               FunctionEnd

          6(foo():           2 Function None 3

diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index 533e4cb..5305b98 100755
--- a/Test/baseResults/spv.while-continue-break.vert.out
+++ b/Test/baseResults/spv.while-continue-break.vert.out
@@ -3,15 +3,15 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 42

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 40 41

+                              Source ESSL 300

                               Name 4  "main"

                               Name 8  "i"

                               Name 17  "A"

@@ -21,9 +21,7 @@
                               Name 40  "gl_VertexID"

                               Name 41  "gl_InstanceID"

                               Decorate 40(gl_VertexID) BuiltIn VertexId

-                              Decorate 40(gl_VertexID) NoStaticUse

                               Decorate 41(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 41(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -50,7 +48,7 @@
               10:             Label

               13:      6(int) Load 8(i)

               16:    15(bool) SLessThan 13 14

-                              LoopMerge 11 None

+                              LoopMerge 11 10 None

                               BranchConditional 16 12 11

               12:               Label

                                 Store 17(A) 18

diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out
index 9b04a52..14d46dd 100755
--- a/Test/baseResults/spv.while-simple.vert.out
+++ b/Test/baseResults/spv.while-simple.vert.out
@@ -3,23 +3,21 @@
 Linked vertex stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

+// Module Version 10000

+// Generated by (magic number): 80001

 // Id's are bound by 23

 

-                              Source ESSL 300

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Vertex 4  "main"

+                              EntryPoint Vertex 4  "main" 21 22

+                              Source ESSL 300

                               Name 4  "main"

                               Name 8  "i"

                               Name 21  "gl_VertexID"

                               Name 22  "gl_InstanceID"

                               Decorate 21(gl_VertexID) BuiltIn VertexId

-                              Decorate 21(gl_VertexID) NoStaticUse

                               Decorate 22(gl_InstanceID) BuiltIn InstanceId

-                              Decorate 22(gl_InstanceID) NoStaticUse

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeInt 32 1

@@ -39,7 +37,7 @@
               10:             Label

               13:      6(int) Load 8(i)

               16:    15(bool) SLessThan 13 14

-                              LoopMerge 11 None

+                              LoopMerge 11 10 None

                               BranchConditional 16 12 11

               12:               Label

               17:      6(int)   Load 8(i)

diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
index f6e59e1..591129c 100755
--- a/Test/baseResults/spv.whileLoop.frag.out
+++ b/Test/baseResults/spv.whileLoop.frag.out
@@ -3,24 +3,22 @@
 Linked fragment stage:

 

 

-// Module Version 99

-// Generated by (magic number): 51a00bb

-// Id's are bound by 31

+// Module Version 10000

+// Generated by (magic number): 80001

+// Id's are bound by 34

 

-                              Source GLSL 110

                               Capability Shader

                1:             ExtInstImport  "GLSL.std.450"

                               MemoryModel Logical GLSL450

-                              EntryPoint Fragment 4  "main"

+                              EntryPoint Fragment 4  "main" 11

                               ExecutionMode 4 OriginLowerLeft

+                              Source GLSL 110

                               Name 4  "main"

                               Name 9  "color"

                               Name 11  "BaseColor"

-                              Name 19  "d"

-                              Name 24  "bigColor"

-                              Name 29  "gl_FragColor"

-                              Decorate 11(BaseColor) Smooth

-                              Decorate 29(gl_FragColor) BuiltIn FragColor

+                              Name 22  "d"

+                              Name 27  "bigColor"

+                              Name 32  "gl_FragColor"

                2:             TypeVoid

                3:             TypeFunction 2

                6:             TypeFloat 32

@@ -28,13 +26,16 @@
                8:             TypePointer Function 7(fvec4)

               10:             TypePointer Input 7(fvec4)

    11(BaseColor):     10(ptr) Variable Input

-              18:             TypePointer UniformConstant 6(float)

-           19(d):     18(ptr) Variable UniformConstant

-              21:             TypeBool

-              23:             TypePointer UniformConstant 7(fvec4)

-    24(bigColor):     23(ptr) Variable UniformConstant

-              28:             TypePointer Output 7(fvec4)

-29(gl_FragColor):     28(ptr) Variable Output

+              16:             TypeInt 32 0

+              17:     16(int) Constant 0

+              18:             TypePointer Function 6(float)

+              21:             TypePointer UniformConstant 6(float)

+           22(d):     21(ptr) Variable UniformConstant

+              24:             TypeBool

+              26:             TypePointer UniformConstant 7(fvec4)

+    27(bigColor):     26(ptr) Variable UniformConstant

+              31:             TypePointer Output 7(fvec4)

+32(gl_FragColor):     31(ptr) Variable Output

          4(main):           2 Function None 3

                5:             Label

         9(color):      8(ptr) Variable Function

@@ -42,20 +43,20 @@
                               Store 9(color) 12

                               Branch 13

               13:             Label

-              16:    7(fvec4) Load 9(color)

-              17:    6(float) CompositeExtract 16 0

-              20:    6(float) Load 19(d)

-              22:    21(bool) FOrdLessThan 17 20

-                              LoopMerge 14 None

-                              BranchConditional 22 15 14

+              19:     18(ptr) AccessChain 9(color) 17

+              20:    6(float) Load 19

+              23:    6(float) Load 22(d)

+              25:    24(bool) FOrdLessThan 20 23

+                              LoopMerge 14 13 None

+                              BranchConditional 25 15 14

               15:               Label

-              25:    7(fvec4)   Load 24(bigColor)

-              26:    7(fvec4)   Load 9(color)

-              27:    7(fvec4)   FAdd 26 25

-                                Store 9(color) 27

+              28:    7(fvec4)   Load 27(bigColor)

+              29:    7(fvec4)   Load 9(color)

+              30:    7(fvec4)   FAdd 29 28

+                                Store 9(color) 30

                                 Branch 13

               14:             Label

-              30:    7(fvec4) Load 9(color)

-                              Store 29(gl_FragColor) 30

+              33:    7(fvec4) Load 9(color)

+                              Store 32(gl_FragColor) 33

                               Return

                               FunctionEnd

diff --git a/Test/spv.130.frag b/Test/spv.130.frag
index 5b27e0c..0e580e4 100644
--- a/Test/spv.130.frag
+++ b/Test/spv.130.frag
@@ -90,23 +90,6 @@
 uniform vec3 v3;

 uniform vec4 v4;

 

-void bar7()

-{

-    vec4 v;

-

-    o += texture2DRect(s2DR, v2);

-    o += texture2DRectProj(s2DR, v3);

-    o += texture2DRectProj(s2DR, v4);

-    o += shadow2DRect(s2DRS, v3);

-    o += shadow2DRectProj(s2DRS, v4);

-

-    o += texture1DGradARB(s1D, f, f, f);

-    o += texture2DProjGradARB(s2D, v, v2, v2);

-    o += shadow2DProjGradARB(s2DS, v, v2, v2);

-

-    o += shadow2DRectProjGradARB(s2DRS, v, v2, v2);

-}

-

 void main()

 {

     o = textureGather(sampC, vec3(0.2));

@@ -115,5 +98,4 @@
     bar4();

     bar5();

     bar6();

-    bar7();

 }
\ No newline at end of file
diff --git a/Test/spv.140.frag b/Test/spv.140.frag
index 4c67d6b..61ad1a6 100644
--- a/Test/spv.140.frag
+++ b/Test/spv.140.frag
@@ -39,3 +39,8 @@
 {

     return i1 + i2;

 }

+

+// test arrayed block

+layout(std140) uniform bi {

+    vec3 v[2];

+} bname[4];

diff --git a/Test/spv.aggOps.frag b/Test/spv.aggOps.frag
index a0450dc..9df89ed 100644
--- a/Test/spv.aggOps.frag
+++ b/Test/spv.aggOps.frag
@@ -1,6 +1,6 @@
 #version 130

 

-uniform sampler2D sampler;

+uniform sampler2D samp2D;

 varying mediump vec2 coord;

 

 varying vec4 u, w;

@@ -28,9 +28,9 @@
     b = s1[3](s1(17, 17.0), s1(int(w.x), w.y), s1(int(w.z), w.w));

 

     if (foo2a == foo2b)

-        v = texture2D(sampler, coord);

+        v = texture(samp2D, coord);

     else

-        v = texture2D(sampler, 2.0*coord);

+        v = texture(samp2D, 2.0*coord);

 

     if (u == v)

         v *= 3.0;

diff --git a/Test/spv.atomic.comp b/Test/spv.atomic.comp
index 1a91b3e..76e0c3d 100644
--- a/Test/spv.atomic.comp
+++ b/Test/spv.atomic.comp
@@ -25,6 +25,12 @@
 shared int atomi;

 shared uint atomu;

 

+layout (std140, binding = 0) restrict buffer dataSSB

+{

+    float f;

+    ivec4 n_frames_rendered;

+} result;

+

 void atoms()

 {

     int origi = atomicAdd(atomi, 3);

@@ -35,4 +41,5 @@
     origi = atomicMax(atomi, 7);

     origi = atomicExchange(atomi, origi);

     origu = atomicCompSwap(atomu, 10u, value);

+    atomicAdd(result.n_frames_rendered.z, 1);

 }

diff --git a/Test/spv.conditionalDiscard.frag b/Test/spv.conditionalDiscard.frag
index 58e6fa5..ea80337 100644
--- a/Test/spv.conditionalDiscard.frag
+++ b/Test/spv.conditionalDiscard.frag
@@ -1,11 +1,11 @@
-#version 110

+#version 400

 

 uniform sampler2D tex;

-varying vec2 coord;

+in vec2 coord;

 

 void main (void)

 {

-    vec4 v = texture2D(tex, coord);

+    vec4 v = texture(tex, coord);

 

     if (v == vec4(0.1,0.2,0.3,0.4))

         discard;

diff --git a/Test/spv.deepRvalue.frag b/Test/spv.deepRvalue.frag
index 4d88086..2c88ca8 100644
--- a/Test/spv.deepRvalue.frag
+++ b/Test/spv.deepRvalue.frag
@@ -1,6 +1,6 @@
-#version 120

+#version 330

 

-uniform sampler2D sampler;

+uniform sampler2D samp2D;

 

 vec4 v1 = vec4(2.0, 3.0, 5.0, 7.0);

 vec4 v2 = vec4(11.0, 13.0, 17.0, 19.0);

@@ -25,7 +25,7 @@
 

     float h = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true).b[1][1];  // should be 5.0

 

-    float i = texture2D(sampler, vec2(0.5,0.5)).y;

+    float i = texture(samp2D, vec2(0.5,0.5)).y;

 

     i += (i > 0.1 ? v1 : v2)[3];

 

diff --git a/Test/spv.depthOut.frag b/Test/spv.depthOut.frag
index 9b6890e..feb8a0d 100644
--- a/Test/spv.depthOut.frag
+++ b/Test/spv.depthOut.frag
@@ -3,10 +3,9 @@
 in vec4 Color;

 in float Depth;

 

-layout(depth_any) out float gl_FragDepth;

+layout(depth_greater) out float gl_FragDepth;

 

 void main()

 {

     gl_FragDepth = Depth;

-    gl_FragColor = Color;

 }

diff --git a/Test/spv.localAggregates.frag b/Test/spv.localAggregates.frag
index d8a7fb1..9cfa34e 100644
--- a/Test/spv.localAggregates.frag
+++ b/Test/spv.localAggregates.frag
@@ -1,6 +1,6 @@
 #version 130

 

-uniform sampler2D sampler;

+uniform sampler2D samp2D;

 varying vec2 coord;

 varying vec4 color;

 

@@ -68,5 +68,5 @@
 	locals2.bleh = color;

 	locals2.bleh.z = coord.y;

 

-	gl_FragColor = locals2.bleh * (localFArray[4] + locals2.s1_1.f + localArray[x] + a[x]) * texture2D(sampler, coord);

+	gl_FragColor = locals2.bleh * (localFArray[4] + locals2.s1_1.f + localArray[x] + a[x]) * texture(samp2D, coord);

 }

diff --git a/Test/spv.set.vert b/Test/spv.set.vert
index 5f7807c..d211ef1 100644
--- a/Test/spv.set.vert
+++ b/Test/spv.set.vert
@@ -1,6 +1,6 @@
 #version 450

 

-layout(set = 4, binding = 7) uniform sampler2D sampler;

+layout(set = 4, binding = 7) uniform sampler2D samp2D;

 

 layout(set = 0, binding = 8) buffer setBuf {

     vec4 color;

diff --git a/Test/spv.structAssignment.frag b/Test/spv.structAssignment.frag
index 959f854..072d6b5 100644
--- a/Test/spv.structAssignment.frag
+++ b/Test/spv.structAssignment.frag
@@ -1,6 +1,6 @@
 #version 130

 

-uniform sampler2D sampler;

+uniform sampler2D samp2D;

 varying mediump vec2 coord;

 

 struct lunarStruct1 {

@@ -35,5 +35,5 @@
 	else

 		locals2 = foo2;

 

-	gl_FragColor =  locals2.s1_1.f * texture2D(sampler, coord);

+	gl_FragColor =  locals2.s1_1.f * texture(samp2D, coord);

 }

diff --git a/Test/spv.structDeref.frag b/Test/spv.structDeref.frag
index 376e408..b702583 100644
--- a/Test/spv.structDeref.frag
+++ b/Test/spv.structDeref.frag
@@ -1,6 +1,6 @@
 #version 130

 

-uniform sampler2D sampler;

+uniform sampler2D samp2D;

 varying vec2 coord;

 

 struct s0 {

@@ -67,5 +67,5 @@
     if (locals0.i > 5)

         locals0 = locals00.s0_0;

 

-    gl_FragColor = (float(locals0.i) + locals1Array[6].f + fArray[3] + locals2.s1_1.f) * texture2D(sampler, coord);

+    gl_FragColor = (float(locals0.i) + locals1Array[6].f + fArray[3] + locals2.s1_1.f) * texture(samp2D, coord);

 }

diff --git a/Test/spv.structure.frag b/Test/spv.structure.frag
index 97e79cb..4ed439d 100644
--- a/Test/spv.structure.frag
+++ b/Test/spv.structure.frag
@@ -1,5 +1,5 @@
 #version 130

-uniform sampler2D sampler;

+uniform sampler2D samp2D;

 varying vec2 coord;

 

 struct lunarStruct1 {

@@ -26,6 +26,6 @@
 	else

 		scale = foo2[3].s1_1[2].f[3];

 

-	gl_FragColor =  scale * texture2D(sampler, coord);

+	gl_FragColor =  scale * texture(samp2D, coord);

 }

 

diff --git a/Test/spv.test.frag b/Test/spv.test.frag
index 1b7d0e9..c4fe62d 100644
--- a/Test/spv.test.frag
+++ b/Test/spv.test.frag
@@ -1,4 +1,4 @@
-#version 110

+#version 400

 

 uniform sampler2D texSampler2D;

 uniform sampler3D texSampler3D;

@@ -7,16 +7,16 @@
 uniform vec2 scale;

 uniform vec4 u;

 

-varying vec2 t;

-varying vec3 coords;

+in vec2 t;

+in vec3 coords;

 

 void main()

 {  

     float blendscale = 1.789;

 

-    vec4 v = texture2D(texSampler2D, (t + scale) / scale ).wzyx;

+    vec4 v = texture(texSampler2D, (t + scale) / scale ).wzyx;

 

-	vec4 w = texture3D(texSampler3D, coords) + v;

+	vec4 w = texture(texSampler3D, coords) + v;

     

     gl_FragColor = mix(w, u, blend * blendscale);

 }

diff --git a/Test/spv.texture.frag b/Test/spv.texture.frag
index 8e5391e..1d6a1af 100644
--- a/Test/spv.texture.frag
+++ b/Test/spv.texture.frag
@@ -25,34 +25,34 @@
     vec4  coords4D   = vec4(1.789, 2.718, 3.453, 2.0);

     vec4  color      = vec4(0.0, 0.0, 0.0, 0.0);

 

-    color += texture1D    (texSampler1D, coords1D);

-    color += texture1D    (texSampler1D, coords1D, bias);

-    color += texture1DProj(texSampler1D, coords2D);

-    color += texture1DProj(texSampler1D, coords4D);

-    color += texture1DProj(texSampler1D, coords2D, bias);

-    color += texture1DProj(texSampler1D, coords4D, bias);

+    color += texture    (texSampler1D, coords1D);

+    color += texture    (texSampler1D, coords1D, bias);

+    color += textureProj(texSampler1D, coords2D);

+    color += textureProj(texSampler1D, coords4D);

+    color += textureProj(texSampler1D, coords2D, bias);

+    color += textureProj(texSampler1D, coords4D, bias);

     

-    color += texture2D        (texSampler2D, coords2D);

-    color += texture2D        (texSampler2D, coords2D, bias);

-    color += texture2DProj    (texSampler2D, coords3D);

-    color += texture2DProj    (texSampler2D, coords4D, bias);

+    color += texture        (texSampler2D, coords2D);

+    color += texture        (texSampler2D, coords2D, bias);

+    color += textureProj    (texSampler2D, coords3D);

+    color += textureProj    (texSampler2D, coords4D, bias);

 

-    color += texture3D        (texSampler3D, coords3D);

-    color += texture3D        (texSampler3D, coords3D, bias);

-    color += texture3DProj    (texSampler3D, coords4D);

-    color += texture3DProj    (texSampler3D, coords4D, bias);

+    color += texture        (texSampler3D, coords3D);

+    color += texture        (texSampler3D, coords3D, bias);

+    color += textureProj    (texSampler3D, coords4D);

+    color += textureProj    (texSampler3D, coords4D, bias);

 

-    color += textureCube    (texSamplerCube, coords3D);

-    color += textureCube    (texSamplerCube, coords3D, bias);

+    color += texture    (texSamplerCube, coords3D);

+    color += texture    (texSamplerCube, coords3D, bias);

     

-    color += shadow1D       (shadowSampler1D, coords3D);

-    color += shadow1D       (shadowSampler1D, coords3D, bias);

-    color += shadow2D       (shadowSampler2D, coords3D);

-    color += shadow2D       (shadowSampler2D, coords3D, bias);

-    color += shadow1DProj   (shadowSampler1D, coords4D);

-    color += shadow1DProj   (shadowSampler1D, coords4D, bias);

-    color += shadow2DProj   (shadowSampler2D, coords4D);

-    color += shadow2DProj   (shadowSampler2D, coords4D, bias);

+    color += texture       (shadowSampler1D, coords3D);

+    color += texture       (shadowSampler1D, coords3D, bias);

+    color += texture       (shadowSampler2D, coords3D);

+    color += texture       (shadowSampler2D, coords3D, bias);

+    color += textureProj   (shadowSampler1D, coords4D);

+    color += textureProj   (shadowSampler1D, coords4D, bias);

+    color += textureProj   (shadowSampler2D, coords4D);

+    color += textureProj   (shadowSampler2D, coords4D, bias);

 

     ivec2 iCoords2D = ivec2(0, 5);

     int iLod = 1;

diff --git a/Test/spv.texture.vert b/Test/spv.texture.vert
index d2cbd7b..a135b9d 100644
--- a/Test/spv.texture.vert
+++ b/Test/spv.texture.vert
@@ -17,23 +17,23 @@
     vec4  coords4D   = vec4(1.789, 2.718, 3.453, 2.0);

     vec4  color      = vec4(0.0, 0.0, 0.0, 0.0);

 

-    color += texture1DLod(texSampler1D, coords1D, lod);

-    color += texture1DProjLod(texSampler1D, coords2D, lod);

-    color += texture1DProjLod(texSampler1D, coords4D, lod);

+    color += textureLod(texSampler1D, coords1D, lod);

+    color += textureProjLod(texSampler1D, coords2D, lod);

+    color += textureProjLod(texSampler1D, coords4D, lod);

     

-    color += texture2DLod     (texSampler2D, coords2D, lod);

-    color += texture2DProjLod (texSampler2D, coords3D, lod);

-    color += texture2DProjLod (texSampler2D, coords4D, lod);

+    color += textureLod     (texSampler2D, coords2D, lod);

+    color += textureProjLod (texSampler2D, coords3D, lod);

+    color += textureProjLod (texSampler2D, coords4D, lod);

 

-    color += texture3DLod     (texSampler3D, coords3D, lod);

-    color += texture3DProjLod (texSampler3D, coords4D, lod);

+    color += textureLod     (texSampler3D, coords3D, lod);

+    color += textureProjLod (texSampler3D, coords4D, lod);

     

-    color += textureCubeLod (texSamplerCube, coords3D, lod);

+    color += textureLod (texSamplerCube, coords3D, lod);

 

-    color += shadow1DLod    (shadowSampler1D, coords3D, lod);

-    color += shadow2DLod    (shadowSampler2D, coords3D, lod);

-    color += shadow1DProjLod(shadowSampler1D, coords4D, lod);

-    color += shadow2DProjLod(shadowSampler2D, coords4D, lod);

+    color += textureLod    (shadowSampler1D, coords3D, lod);

+    color += textureLod    (shadowSampler2D, coords3D, lod);

+    color += textureProjLod(shadowSampler1D, coords4D, lod);

+    color += textureProjLod(shadowSampler2D, coords4D, lod);

 

     gl_Position = color;

 }

diff --git a/Test/spv.variableArrayIndex.frag b/Test/spv.variableArrayIndex.frag
index 63b49c7..67fbf93 100644
--- a/Test/spv.variableArrayIndex.frag
+++ b/Test/spv.variableArrayIndex.frag
@@ -1,5 +1,5 @@
 #version 130

-uniform sampler2D sampler;

+uniform sampler2D samp2D;

 varying vec2 coord;

 

 struct lunarStruct1 {

@@ -40,7 +40,7 @@
     //	scale += foo2[i].f;

     //}

 

-    gl_FragColor =  scale * texture2D(sampler, coord);

+    gl_FragColor =  scale * texture(samp2D, coord);

 

     vec2[3] constructed = vec2[3](coord, vec2(scale), vec2(1.0, 2.0));

     gl_FragColor += vec4(constructed[foo.i], constructed[foo.i]);

diff --git a/Test/spv.varyingArray.frag b/Test/spv.varyingArray.frag
index 3bd152f..4bd6f94 100644
--- a/Test/spv.varyingArray.frag
+++ b/Test/spv.varyingArray.frag
@@ -9,7 +9,7 @@
 

 void main()

 {

-	vec4 texColor = texture2D(texSampler2D, vec2(gl_TexCoord[4] + gl_TexCoord[5]));

+	vec4 texColor = texture(texSampler2D, vec2(gl_TexCoord[4] + gl_TexCoord[5]));

 

 	texColor += color;

 

diff --git a/Test/spv.varyingArrayIndirect.frag b/Test/spv.varyingArrayIndirect.frag
index d45e601..e424e6e 100644
--- a/Test/spv.varyingArrayIndirect.frag
+++ b/Test/spv.varyingArrayIndirect.frag
@@ -11,7 +11,7 @@
 

 void main()

 {

-	vec4 texColor = texture2D(texSampler2D, vec2(userIn[b] + gl_TexCoord[a] + gl_TexCoord[5]));

+	vec4 texColor = texture(texSampler2D, vec2(userIn[b] + gl_TexCoord[a] + gl_TexCoord[5]));

 

 	texColor += color;

 

diff --git a/Test/test-spirv-list b/Test/test-spirv-list
index 0e23587..1efcfcb 100644
--- a/Test/test-spirv-list
+++ b/Test/test-spirv-list
@@ -10,7 +10,6 @@
 # vulkan-specific tests
 spv.set.vert
 spv.double.comp
-# snapshot of some LunarGLASS tests, so glslang can stand on its own and tests can now evolve separately
 spv.100ops.frag
 spv.130.frag
 spv.140.frag
@@ -56,6 +55,7 @@
 spv.newTexture.frag
 spv.nonSquare.vert
 spv.Operations.frag
+spv.intOps.vert
 spv.precision.frag
 spv.prepost.frag
 spv.qualifiers.vert
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index efab2d8..e943369 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -66,13 +66,13 @@
     EsdNumDims
 };
 
-struct TSampler {
+struct TSampler {   // misnomer now; includes images, textures without sampler, and textures with sampler
     TBasicType type : 8;  // type returned by sampler
     TSamplerDim dim : 8;
     bool    arrayed : 1;
     bool     shadow : 1;
     bool         ms : 1;
-    bool      image : 1;
+    bool      image : 1;  // image, combined should be false
     bool   external : 1;  // GL_OES_EGL_image_external
 
     void clear()
@@ -86,26 +86,27 @@
         external = false;
     }
 
+    // make a combined sampler and texture
     void set(TBasicType t, TSamplerDim d, bool a = false, bool s = false, bool m = false)
     {
+        clear();
         type = t;
         dim = d;
         arrayed = a;
         shadow = s;
         ms = m;
-        image = false;
-        external = false;
     }
 
+    // make an image
     void setImage(TBasicType t, TSamplerDim d, bool a = false, bool s = false, bool m = false)
     {
+        clear();
         type = t;
         dim = d;
         arrayed = a;
         shadow = s;
         ms = m;
         image = true;
-        external = false;
     }
 
     bool operator==(const TSampler& right) const
@@ -119,6 +120,11 @@
            external == right.external;
     }
 
+    bool operator!=(const TSampler& right) const
+    {
+        return ! operator==(right);
+    }
+
     TString getString() const
     {
         TString s;
@@ -129,21 +135,22 @@
         case EbtUint: s.append("u"); break;
         default:  break;  // some compilers want this
         }
-        if (image)
+        if (image) {
             s.append("image");
-        else
+        } else {
             s.append("sampler");
+        }
         if (external) {
             s.append("ExternalOES");
             return s;
         }
         switch (dim) {
-        case Esd1D:      s.append("1D");     break;
-        case Esd2D:      s.append("2D");     break;
-        case Esd3D:      s.append("3D");     break;
-        case EsdCube:    s.append("Cube");   break;
-        case EsdRect:    s.append("2DRect"); break;
-        case EsdBuffer:  s.append("Buffer"); break;
+        case Esd1D:      s.append("1D");      break;
+        case Esd2D:      s.append("2D");      break;
+        case Esd3D:      s.append("3D");      break;
+        case EsdCube:    s.append("Cube");    break;
+        case EsdRect:    s.append("2DRect");  break;
+        case EsdBuffer:  s.append("Buffer");  break;
         default:  break;  // some compilers want this
         }
         if (ms)
@@ -290,7 +297,7 @@
     EldGreater,
     EldLess,
     EldUnchanged,
-    
+
     EldCount
 };
 
@@ -330,37 +337,37 @@
     // drop qualifiers that don't belong in a temporary variable
     void makeTemporary()
     {
-        storage   = EvqTemporary;
-        builtIn   = EbvNone;
-        centroid  = false;
-        smooth    = false;
-        flat      = false;
-        nopersp   = false;
-        patch     = false;
-        sample    = false;
-        coherent  = false;
-        volatil   = false;
-        restrict  = false;
-        readonly  = false;
-        writeonly = false;
+        storage      = EvqTemporary;
+        builtIn      = EbvNone;
+        centroid     = false;
+        smooth       = false;
+        flat         = false;
+        nopersp      = false;
+        patch        = false;
+        sample       = false;
+        coherent     = false;
+        volatil      = false;
+        restrict     = false;
+        readonly     = false;
+        writeonly    = false;
         clearLayout();
     }
 
     TStorageQualifier   storage   : 6;
     TBuiltInVariable    builtIn   : 8;
     TPrecisionQualifier precision : 3;
-    bool invariant : 1;
-    bool centroid  : 1;
-    bool smooth    : 1;
-    bool flat      : 1;
-    bool nopersp   : 1;
-    bool patch     : 1;
-    bool sample    : 1;
-    bool coherent  : 1;
-    bool volatil   : 1;
-    bool restrict  : 1;
-    bool readonly  : 1;
-    bool writeonly : 1;
+    bool invariant    : 1;
+    bool centroid     : 1;
+    bool smooth       : 1;
+    bool flat         : 1;
+    bool nopersp      : 1;
+    bool patch        : 1;
+    bool sample       : 1;
+    bool coherent     : 1;
+    bool volatil      : 1;
+    bool restrict     : 1;
+    bool readonly     : 1;
+    bool writeonly    : 1;
 
     bool isMemory() const
     {
@@ -501,7 +508,7 @@
     }
     bool hasLayout() const
     {
-        return hasUniformLayout() || 
+        return hasUniformLayout() ||
                hasAnyLocation() ||
                hasBinding() ||
                hasStream() ||
@@ -513,34 +520,34 @@
     int layoutOffset;
     int layoutAlign;
 
-                 unsigned int layoutLocation         :12;
-    static const unsigned int layoutLocationEnd =  0xFFF;
+                 unsigned int layoutLocation            :12;
+    static const unsigned int layoutLocationEnd    =  0xFFF;
 
-                 unsigned int layoutComponent        : 3;
-    static const unsigned int layoutComponentEnd =     4;
+                 unsigned int layoutComponent           : 3;
+    static const unsigned int layoutComponentEnd    =     4;
 
-                 unsigned int layoutSet              : 7;
-    static const unsigned int layoutSetEnd      =   0x3F;
+                 unsigned int layoutSet                 : 7;
+    static const unsigned int layoutSetEnd         =   0x3F;
 
-                 unsigned int layoutBinding          : 8;
-    static const unsigned int layoutBindingEnd =    0xFF;
+                 unsigned int layoutBinding             : 8;
+    static const unsigned int layoutBindingEnd    =    0xFF;
 
-                 unsigned int layoutIndex           :  8;
-    static const unsigned int layoutIndexEnd =      0xFF;
+                 unsigned int layoutIndex              :  8;
+    static const unsigned int layoutIndexEnd    =      0xFF;
 
-                 unsigned int layoutStream           : 8;
-    static const unsigned int layoutStreamEnd =     0xFF;
+                 unsigned int layoutStream              : 8;
+    static const unsigned int layoutStreamEnd    =     0xFF;
 
-                 unsigned int layoutXfbBuffer        : 4;
-    static const unsigned int layoutXfbBufferEnd =   0xF;
+                 unsigned int layoutXfbBuffer           : 4;
+    static const unsigned int layoutXfbBufferEnd    =   0xF;
 
-                 unsigned int layoutXfbStride       : 10;
-    static const unsigned int layoutXfbStrideEnd = 0x3FF;
+                 unsigned int layoutXfbStride          : 10;
+    static const unsigned int layoutXfbStrideEnd    = 0x3FF;
 
-                 unsigned int layoutXfbOffset       : 10;
-    static const unsigned int layoutXfbOffsetEnd = 0x3FF;
+                 unsigned int layoutXfbOffset          : 10;
+    static const unsigned int layoutXfbOffsetEnd    = 0x3FF;
 
-    TLayoutFormat layoutFormat                      :  8;
+    TLayoutFormat layoutFormat                         :  8;
 
     bool hasUniformLayout() const
     {
@@ -893,10 +900,7 @@
         return matrixCols == 0 && vectorSize == 1 && arraySizes == nullptr && userDef == nullptr;
     }
 
-    bool isImage() const
-    {
-        return basicType == EbtSampler && sampler.image;
-    }
+    bool isImage() const { return basicType == EbtSampler && sampler.image; }
 };
 
 //
@@ -984,7 +988,7 @@
                                 typeName = NewPoolTString(n.c_str());
                             }
     // For interface blocks
-    TType(TTypeList* userDef, const TString& n, const TQualifier& q) : 
+    TType(TTypeList* userDef, const TString& n, const TQualifier& q) :
                             basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0),
                             qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr)
                             {
@@ -992,10 +996,10 @@
                                 typeName = NewPoolTString(n.c_str());
                             }
     virtual ~TType() {}
-    
+
     // Not for use across pool pops; it will cause multiple instances of TType to point to the same information.
-    // This only works if that information (like a structure's list of types) does not change and 
-    // the instances are sharing the same pool. 
+    // This only works if that information (like a structure's list of types) does not change and
+    // the instances are sharing the same pool.
     void shallowCopy(const TType& copyOf)
     {
         basicType = copyOf.basicType;
@@ -1035,7 +1039,7 @@
         if (copyOf.typeName)
             typeName = NewPoolTString(copyOf.typeName->c_str());
     }
-    
+
     TType* clone()
     {
         TType *newType = new TType();
@@ -1105,6 +1109,7 @@
     virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; }
     virtual bool isRuntimeSizedArray()    const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage == EvqBuffer; }
     virtual bool isStruct() const { return structure != nullptr; }
+
     virtual bool isImage() const { return basicType == EbtSampler && getSampler().image; }
 
     // Recursively checks if the type contains the given basic type
@@ -1182,7 +1187,7 @@
     //
     // N.B.:  Don't share with the shared symbol tables (symbols are
     // marked as isReadOnly().  Such symbols with arrays that will be
-    // edited need to copyUp() on first use, so that 
+    // edited need to copyUp() on first use, so that
     // A) the edits don't effect the shared symbol table, and
     // B) the edits are shared across all users.
     void updateArraySizes(const TType& type)
@@ -1220,7 +1225,7 @@
         }
     }
 
-    const char* getBasicString() const 
+    const char* getBasicString() const
     {
         return TType::getBasicString(basicType);
     }
@@ -1401,8 +1406,8 @@
     // in different places, but still might satisfy the definition of matching.
     // From the spec:
     //
-    // "Structures must have the same name, sequence of type names, and 
-    //  type definitions, and member names to be considered the same type. 
+    // "Structures must have the same name, sequence of type names, and
+    //  type definitions, and member names to be considered the same type.
     //  This rule applies recursively for nested or embedded types."
     //
     bool sameStructType(const TType& right) const
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 7ae1573..a995181 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 "3.0.790"
-#define GLSLANG_DATE "15-Oct-2015"
+#define GLSLANG_REVISION "3.0.798"
+#define GLSLANG_DATE "15-Nov-2015"
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index a929876..c7f05b5 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -54,7 +54,7 @@
 namespace glslang {
 
 // TODO: ARB_Compatability: do full extension support
-bool ARBCompatibility = true;
+const bool ARBCompatibility = true;
 
 const bool ForwardCompatibility = false;
 
@@ -62,9 +62,9 @@
 // Using PureOperatorBuiltins=false is deprecated.
 bool PureOperatorBuiltins = true;
 
-inline bool IncludeLegacy(int version, EProfile profile)
+inline bool IncludeLegacy(int version, EProfile profile, int spv)
 {
-    return profile != EEsProfile && (version <= 130 || ARBCompatibility || profile == ECompatibilityProfile);
+    return profile != EEsProfile && (version <= 130 || (spv == 0 && ARBCompatibility) || profile == ECompatibilityProfile);
 }
 
 TBuiltIns::TBuiltIns()
@@ -99,7 +99,7 @@
 // Most built-ins variables can be added as simple text strings.  Some need to
 // be added programmatically, which is done later in IdentifyBuiltIns() below.
 //
-void TBuiltIns::initialize(int version, EProfile profile)
+void TBuiltIns::initialize(int version, EProfile profile, int spv)
 {
     //============================================================================
     //
@@ -788,54 +788,60 @@
          profile == ECompatibilityProfile ||
         (profile == ECoreProfile && version < 420) ||
          profile == ENoProfile) {
-        commonBuiltins.append(
-            "vec4 texture2D(sampler2D, vec2);"
+        if (spv == 0) {
+            commonBuiltins.append(
+                "vec4 texture2D(sampler2D, vec2);"
 
-            "vec4 texture2DProj(sampler2D, vec3);"
-            "vec4 texture2DProj(sampler2D, vec4);"
+                "vec4 texture2DProj(sampler2D, vec3);"
+                "vec4 texture2DProj(sampler2D, vec4);"
 
-            "vec4 texture3D(sampler3D, vec3);"     // OES_texture_3D, but caught by keyword check
-            "vec4 texture3DProj(sampler3D, vec4);" // OES_texture_3D, but caught by keyword check
+                "vec4 texture3D(sampler3D, vec3);"     // OES_texture_3D, but caught by keyword check
+                "vec4 texture3DProj(sampler3D, vec4);" // OES_texture_3D, but caught by keyword check
 
-            "vec4 textureCube(samplerCube, vec3);"
+                "vec4 textureCube(samplerCube, vec3);"
             
-            "\n");
+                "\n");
+        }
     }
 
     if ( profile == ECompatibilityProfile ||
         (profile == ECoreProfile && version < 420) ||
          profile == ENoProfile) {
-        commonBuiltins.append(
-            "vec4 texture1D(sampler1D, float);"
+        if (spv == 0) {
+            commonBuiltins.append(
+                "vec4 texture1D(sampler1D, float);"
 
-            "vec4 texture1DProj(sampler1D, vec2);"
-            "vec4 texture1DProj(sampler1D, vec4);"
+                "vec4 texture1DProj(sampler1D, vec2);"
+                "vec4 texture1DProj(sampler1D, vec4);"
                      
-            "vec4 shadow1D(sampler1DShadow, vec3);"
-            "vec4 shadow2D(sampler2DShadow, vec3);"
-            "vec4 shadow1DProj(sampler1DShadow, vec4);"
-            "vec4 shadow2DProj(sampler2DShadow, vec4);"
+                "vec4 shadow1D(sampler1DShadow, vec3);"
+                "vec4 shadow2D(sampler2DShadow, vec3);"
+                "vec4 shadow1DProj(sampler1DShadow, vec4);"
+                "vec4 shadow2DProj(sampler2DShadow, vec4);"
 
-            "vec4 texture2DRect(sampler2DRect, vec2);"          // GL_ARB_texture_rectangle, caught by keyword check
-            "vec4 texture2DRectProj(sampler2DRect, vec3);"      // GL_ARB_texture_rectangle, caught by keyword check
-            "vec4 texture2DRectProj(sampler2DRect, vec4);"      // GL_ARB_texture_rectangle, caught by keyword check
-            "vec4 shadow2DRect(sampler2DRectShadow, vec3);"     // GL_ARB_texture_rectangle, caught by keyword check
-            "vec4 shadow2DRectProj(sampler2DRectShadow, vec4);" // GL_ARB_texture_rectangle, caught by keyword check
+                "vec4 texture2DRect(sampler2DRect, vec2);"          // GL_ARB_texture_rectangle, caught by keyword check
+                "vec4 texture2DRectProj(sampler2DRect, vec3);"      // GL_ARB_texture_rectangle, caught by keyword check
+                "vec4 texture2DRectProj(sampler2DRect, vec4);"      // GL_ARB_texture_rectangle, caught by keyword check
+                "vec4 shadow2DRect(sampler2DRectShadow, vec3);"     // GL_ARB_texture_rectangle, caught by keyword check
+                "vec4 shadow2DRectProj(sampler2DRectShadow, vec4);" // GL_ARB_texture_rectangle, caught by keyword check
 
-            "\n");
+                "\n");
+        }
     }
 
-    if (profile == EEsProfile) {        
-        commonBuiltins.append(
-            "vec4 texture2D(samplerExternalOES, vec2 coord);"  // GL_OES_EGL_image_external, caught by keyword check
-            "vec4 texture2DProj(samplerExternalOES, vec3);"    // GL_OES_EGL_image_external, caught by keyword check
-            "vec4 texture2DProj(samplerExternalOES, vec4);"    // GL_OES_EGL_image_external, caught by keyword check
-            "vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2);"      // GL_EXT_shader_texture_lod
-            "vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2);"  // GL_EXT_shader_texture_lod
-            "vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2);"  // GL_EXT_shader_texture_lod
-            "vec4 textureCubeGradEXT(samplerCube, vec3, vec3, vec3);"  // GL_EXT_shader_texture_lod
+    if (profile == EEsProfile) {
+        if (spv == 0) {
+            commonBuiltins.append(
+                "vec4 texture2D(samplerExternalOES, vec2 coord);"  // GL_OES_EGL_image_external, caught by keyword check
+                "vec4 texture2DProj(samplerExternalOES, vec3);"    // GL_OES_EGL_image_external, caught by keyword check
+                "vec4 texture2DProj(samplerExternalOES, vec4);"    // GL_OES_EGL_image_external, caught by keyword check
+                "vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2);"      // GL_EXT_shader_texture_lod
+                "vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2);"  // GL_EXT_shader_texture_lod
+                "vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2);"  // GL_EXT_shader_texture_lod
+                "vec4 textureCubeGradEXT(samplerCube, vec3, vec3, vec3);"  // GL_EXT_shader_texture_lod
 
-            "\n");
+                "\n");
+        }
     }
 
     //
@@ -977,7 +983,7 @@
     //
     // Geometric Functions.
     //
-    if (IncludeLegacy(version, profile))
+    if (IncludeLegacy(version, profile, spv))
         stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 
     //
@@ -991,49 +997,53 @@
     if ((profile == EEsProfile && version == 100) ||
          profile == ECompatibilityProfile ||
         (profile == ECoreProfile && version < 420) ||
-         profile == ENoProfile) {             
-        s->append(
-            "vec4 texture2DLod(sampler2D, vec2, float);"         // GL_ARB_shader_texture_lod
-            "vec4 texture2DProjLod(sampler2D, vec3, float);"     // GL_ARB_shader_texture_lod
-            "vec4 texture2DProjLod(sampler2D, vec4, float);"     // GL_ARB_shader_texture_lod
-            "vec4 texture3DLod(sampler3D, vec3, float);"         // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
-            "vec4 texture3DProjLod(sampler3D, vec4, float);"     // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
-            "vec4 textureCubeLod(samplerCube, vec3, float);"     // GL_ARB_shader_texture_lod
+         profile == ENoProfile) {
+        if (spv == 0) {
+            s->append(
+                "vec4 texture2DLod(sampler2D, vec2, float);"         // GL_ARB_shader_texture_lod
+                "vec4 texture2DProjLod(sampler2D, vec3, float);"     // GL_ARB_shader_texture_lod
+                "vec4 texture2DProjLod(sampler2D, vec4, float);"     // GL_ARB_shader_texture_lod
+                "vec4 texture3DLod(sampler3D, vec3, float);"         // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
+                "vec4 texture3DProjLod(sampler3D, vec4, float);"     // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
+                "vec4 textureCubeLod(samplerCube, vec3, float);"     // GL_ARB_shader_texture_lod
 
-            "\n");
+                "\n");
+        }
     }
     if ( profile == ECompatibilityProfile ||
         (profile == ECoreProfile && version < 420) ||
          profile == ENoProfile) {
-        s->append(
-            "vec4 texture1DLod(sampler1D, float, float);"                          // GL_ARB_shader_texture_lod
-            "vec4 texture1DProjLod(sampler1D, vec2, float);"                       // GL_ARB_shader_texture_lod
-            "vec4 texture1DProjLod(sampler1D, vec4, float);"                       // GL_ARB_shader_texture_lod
-            "vec4 shadow1DLod(sampler1DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
-            "vec4 shadow2DLod(sampler2DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
-            "vec4 shadow1DProjLod(sampler1DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
-            "vec4 shadow2DProjLod(sampler2DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
+        if (spv == 0) {
+            s->append(
+                "vec4 texture1DLod(sampler1D, float, float);"                          // GL_ARB_shader_texture_lod
+                "vec4 texture1DProjLod(sampler1D, vec2, float);"                       // GL_ARB_shader_texture_lod
+                "vec4 texture1DProjLod(sampler1D, vec4, float);"                       // GL_ARB_shader_texture_lod
+                "vec4 shadow1DLod(sampler1DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
+                "vec4 shadow2DLod(sampler2DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
+                "vec4 shadow1DProjLod(sampler1DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
+                "vec4 shadow2DProjLod(sampler2DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
 
-            "vec4 texture1DGradARB(sampler1D, float, float, float);"               // GL_ARB_shader_texture_lod
-            "vec4 texture1DProjGradARB(sampler1D, vec2, float, float);"            // GL_ARB_shader_texture_lod
-            "vec4 texture1DProjGradARB(sampler1D, vec4, float, float);"            // GL_ARB_shader_texture_lod
-            "vec4 texture2DGradARB(sampler2D, vec2, vec2, vec2);"                  // GL_ARB_shader_texture_lod
-            "vec4 texture2DProjGradARB(sampler2D, vec3, vec2, vec2);"              // GL_ARB_shader_texture_lod
-            "vec4 texture2DProjGradARB(sampler2D, vec4, vec2, vec2);"              // GL_ARB_shader_texture_lod
-            "vec4 texture3DGradARB(sampler3D, vec3, vec3, vec3);"                  // GL_ARB_shader_texture_lod
-            "vec4 texture3DProjGradARB(sampler3D, vec4, vec3, vec3);"              // GL_ARB_shader_texture_lod
-            "vec4 textureCubeGradARB(samplerCube, vec3, vec3, vec3);"              // GL_ARB_shader_texture_lod
-            "vec4 shadow1DGradARB(sampler1DShadow, vec3, float, float);"           // GL_ARB_shader_texture_lod
-            "vec4 shadow1DProjGradARB( sampler1DShadow, vec4, float, float);"      // GL_ARB_shader_texture_lod
-            "vec4 shadow2DGradARB(sampler2DShadow, vec3, vec2, vec2);"             // GL_ARB_shader_texture_lod
-            "vec4 shadow2DProjGradARB( sampler2DShadow, vec4, vec2, vec2);"        // GL_ARB_shader_texture_lod
-            "vec4 texture2DRectGradARB(sampler2DRect, vec2, vec2, vec2);"          // GL_ARB_shader_texture_lod
-            "vec4 texture2DRectProjGradARB( sampler2DRect, vec3, vec2, vec2);"     // GL_ARB_shader_texture_lod
-            "vec4 texture2DRectProjGradARB( sampler2DRect, vec4, vec2, vec2);"     // GL_ARB_shader_texture_lod
-            "vec4 shadow2DRectGradARB( sampler2DRectShadow, vec3, vec2, vec2);"    // GL_ARB_shader_texture_lod
-            "vec4 shadow2DRectProjGradARB(sampler2DRectShadow, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod
+                "vec4 texture1DGradARB(sampler1D, float, float, float);"               // GL_ARB_shader_texture_lod
+                "vec4 texture1DProjGradARB(sampler1D, vec2, float, float);"            // GL_ARB_shader_texture_lod
+                "vec4 texture1DProjGradARB(sampler1D, vec4, float, float);"            // GL_ARB_shader_texture_lod
+                "vec4 texture2DGradARB(sampler2D, vec2, vec2, vec2);"                  // GL_ARB_shader_texture_lod
+                "vec4 texture2DProjGradARB(sampler2D, vec3, vec2, vec2);"              // GL_ARB_shader_texture_lod
+                "vec4 texture2DProjGradARB(sampler2D, vec4, vec2, vec2);"              // GL_ARB_shader_texture_lod
+                "vec4 texture3DGradARB(sampler3D, vec3, vec3, vec3);"                  // GL_ARB_shader_texture_lod
+                "vec4 texture3DProjGradARB(sampler3D, vec4, vec3, vec3);"              // GL_ARB_shader_texture_lod
+                "vec4 textureCubeGradARB(samplerCube, vec3, vec3, vec3);"              // GL_ARB_shader_texture_lod
+                "vec4 shadow1DGradARB(sampler1DShadow, vec3, float, float);"           // GL_ARB_shader_texture_lod
+                "vec4 shadow1DProjGradARB( sampler1DShadow, vec4, float, float);"      // GL_ARB_shader_texture_lod
+                "vec4 shadow2DGradARB(sampler2DShadow, vec3, vec2, vec2);"             // GL_ARB_shader_texture_lod
+                "vec4 shadow2DProjGradARB( sampler2DShadow, vec4, vec2, vec2);"        // GL_ARB_shader_texture_lod
+                "vec4 texture2DRectGradARB(sampler2DRect, vec2, vec2, vec2);"          // GL_ARB_shader_texture_lod
+                "vec4 texture2DRectProjGradARB( sampler2DRect, vec3, vec2, vec2);"     // GL_ARB_shader_texture_lod
+                "vec4 texture2DRectProjGradARB( sampler2DRect, vec4, vec2, vec2);"     // GL_ARB_shader_texture_lod
+                "vec4 shadow2DRectGradARB( sampler2DRectShadow, vec3, vec2, vec2);"    // GL_ARB_shader_texture_lod
+                "vec4 shadow2DRectProjGradARB(sampler2DRectShadow, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod
 
-            "\n");
+                "\n");
+        }
     }
 
     if ((profile != EEsProfile && version >= 150) ||
@@ -1095,7 +1105,7 @@
     //
     // Original-style texture Functions with bias.
     //
-    if (profile != EEsProfile || version == 100) {
+    if (spv == 0 && (profile != EEsProfile || version == 100)) {
         stageBuiltins[EShLangFragment].append(
             "vec4 texture2D(sampler2D, vec2, float);"
             "vec4 texture2DProj(sampler2D, vec3, float);"
@@ -1106,7 +1116,7 @@
 
             "\n");
     }
-    if (profile != EEsProfile && version > 100) {
+    if (spv == 0 && (profile != EEsProfile && version > 100)) {
         stageBuiltins[EShLangFragment].append(
             "vec4 texture1D(sampler1D, float, float);"
             "vec4 texture1DProj(sampler1D, vec2, float);"
@@ -1118,7 +1128,7 @@
 
             "\n");
     }
-    if (profile == EEsProfile) {
+    if (spv == 0 && profile == EEsProfile) {
         stageBuiltins[EShLangFragment].append(
             "vec4 texture2DLodEXT(sampler2D, vec2, float);"      // GL_EXT_shader_texture_lod
             "vec4 texture2DProjLodEXT(sampler2D, vec3, float);"  // GL_EXT_shader_texture_lod
@@ -1237,7 +1247,7 @@
         "uniform gl_DepthRangeParameters gl_DepthRange;"            
         "\n");
 
-    if (IncludeLegacy(version, profile)) {
+    if (IncludeLegacy(version, profile, spv)) {
         //
         // Matrix state. p. 31, 32, 37, 39, 40.
         //
@@ -1400,7 +1410,7 @@
                 "attribute vec4  gl_MultiTexCoord7;"
                 "attribute float gl_FogCoord;"
                 "\n");
-        } else if (IncludeLegacy(version, profile)) {
+        } else if (IncludeLegacy(version, profile, spv)) {
             stageBuiltins[EShLangVertex].append(
                 "in vec4  gl_Color;"
                 "in vec4  gl_SecondaryColor;"
@@ -1429,7 +1439,7 @@
                     "varying vec4  gl_TexCoord[];"
                     "varying float gl_FogFragCoord;"
                     "\n");
-            } else if (IncludeLegacy(version, profile)) {
+            } else if (IncludeLegacy(version, profile, spv)) {
                 stageBuiltins[EShLangVertex].append(
                     "    vec4  gl_ClipVertex;"       // needs qualifier fixed later
                     "out vec4  gl_FrontColor;"
@@ -1457,7 +1467,7 @@
                     "float gl_PointSize;"   // needs qualifier fixed later
                     "float gl_ClipDistance[];"
                     );            
-            if (IncludeLegacy(version, profile))
+            if (IncludeLegacy(version, profile, spv))
                 stageBuiltins[EShLangVertex].append(
                     "vec4 gl_ClipVertex;"   // needs qualifier fixed later
                     "vec4 gl_FrontColor;"
@@ -1750,7 +1760,7 @@
             stageBuiltins[EShLangFragment].append(
                 "vec2 gl_PointCoord;"  // needs qualifier fixed later
                 );
-        if (IncludeLegacy(version, profile) || (! ForwardCompatibility && version < 420))
+        if (IncludeLegacy(version, profile, spv) || (! ForwardCompatibility && version < 420))
             stageBuiltins[EShLangFragment].append(
                 "vec4 gl_FragColor;"   // needs qualifier fixed later
                 );
@@ -1767,7 +1777,7 @@
                 "in float gl_ClipDistance[];"
                 );
 
-            if (IncludeLegacy(version, profile)) {
+            if (IncludeLegacy(version, profile, spv)) {
                 if (version < 150)
                     stageBuiltins[EShLangFragment].append(
                         "in float gl_FogFragCoord;"
@@ -1853,7 +1863,7 @@
     stageBuiltins[EShLangFragment].append("\n");
 
     if (version >= 130)
-        add2ndGenerationSamplingImaging(version, profile);
+        add2ndGenerationSamplingImaging(version, profile, spv);
 
     //printf("%s\n", commonBuiltins.c_str());
     //printf("%s\n", stageBuiltins[EShLangFragment].c_str());
@@ -1863,7 +1873,7 @@
 // Helper function for initialize(), to add the second set of names for texturing, 
 // when adding context-independent built-in functions.
 //
-void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile)
+void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, int spv)
 {
     //
     // In this function proper, enumerate the types, then calls the next set of functions
@@ -1879,7 +1889,6 @@
 
         for (int shadow = 0; shadow <= 1; ++shadow) { // loop over "bool" shadow or not
             for (int ms = 0; ms <=1; ++ms) {
-
                 if ((ms || image) && shadow)
                     continue;
                 if (ms && profile != EEsProfile && version < 150)
@@ -1891,7 +1900,6 @@
 
                 for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
                     for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, 2D, ..., buffer
-
                         if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
                             continue;
                         if (dim != Esd2D && ms)
@@ -1922,11 +1930,15 @@
                             //
 
                             TSampler sampler;
-                            sampler.set(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
-                                                                         shadow  ? true : false,
-                                                                         ms      ? true : false);
-                            if (image)
-                                sampler.image = true;
+                            if (image) {
+                                sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
+                                                                                  shadow  ? true : false,
+                                                                                  ms      ? true : false);
+                            } else {
+                                sampler.set(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
+                                                                             shadow  ? true : false,
+                                                                             ms      ? true : false);
+                            }
 
                             TString typeName = sampler.getString();
 
@@ -2374,7 +2386,7 @@
 // add stage-specific entries to the commonBuiltins, and only if that stage
 // was requested.
 //
-void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, EShLanguage language)
+void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, int spv, EShLanguage language)
 {
     //
     // Initialize the context-dependent (resource-dependent) built-in strings for parsing.
@@ -2537,7 +2549,7 @@
         snprintf(builtInConstant, maxSize, "const int  gl_MaxFragmentUniformComponents = %d;", resources.maxFragmentUniformComponents);
         s.append(builtInConstant);
 
-        if (IncludeLegacy(version, profile)) {
+        if (IncludeLegacy(version, profile, spv)) {
             //
             // OpenGL'uniform' state.  Page numbers are in reference to version
             // 1.4 of the OpenGL specification.
@@ -2881,7 +2893,7 @@
 // 3) Tag extension-related symbols added to their base version with their extensions, so
 //    that if an early version has the extension turned off, there is an error reported on use.
 //
-void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymbolTable& symbolTable)
+void IdentifyBuiltIns(int version, EProfile profile, int spv, EShLanguage language, TSymbolTable& symbolTable)
 {
     //
     // Tag built-in variables and functions with additional qualifier and extension information
@@ -2908,25 +2920,29 @@
         }
 
         // Compatibility variables, vertex only
-        BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
-        BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable);
-        BuiltInVariable("gl_Normal",         EbvNormal,         symbolTable);
-        BuiltInVariable("gl_Vertex",         EbvVertex,         symbolTable);
-        BuiltInVariable("gl_MultiTexCoord0", EbvMultiTexCoord0, symbolTable);
-        BuiltInVariable("gl_MultiTexCoord1", EbvMultiTexCoord1, symbolTable);
-        BuiltInVariable("gl_MultiTexCoord2", EbvMultiTexCoord2, symbolTable);
-        BuiltInVariable("gl_MultiTexCoord3", EbvMultiTexCoord3, symbolTable);
-        BuiltInVariable("gl_MultiTexCoord4", EbvMultiTexCoord4, symbolTable);
-        BuiltInVariable("gl_MultiTexCoord5", EbvMultiTexCoord5, symbolTable);
-        BuiltInVariable("gl_MultiTexCoord6", EbvMultiTexCoord6, symbolTable);
-        BuiltInVariable("gl_MultiTexCoord7", EbvMultiTexCoord7, symbolTable);
-        BuiltInVariable("gl_FogCoord",       EbvFogFragCoord,   symbolTable);
+        if (spv == 0) {
+            BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
+            BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable);
+            BuiltInVariable("gl_Normal",         EbvNormal,         symbolTable);
+            BuiltInVariable("gl_Vertex",         EbvVertex,         symbolTable);
+            BuiltInVariable("gl_MultiTexCoord0", EbvMultiTexCoord0, symbolTable);
+            BuiltInVariable("gl_MultiTexCoord1", EbvMultiTexCoord1, symbolTable);
+            BuiltInVariable("gl_MultiTexCoord2", EbvMultiTexCoord2, symbolTable);
+            BuiltInVariable("gl_MultiTexCoord3", EbvMultiTexCoord3, symbolTable);
+            BuiltInVariable("gl_MultiTexCoord4", EbvMultiTexCoord4, symbolTable);
+            BuiltInVariable("gl_MultiTexCoord5", EbvMultiTexCoord5, symbolTable);
+            BuiltInVariable("gl_MultiTexCoord6", EbvMultiTexCoord6, symbolTable);
+            BuiltInVariable("gl_MultiTexCoord7", EbvMultiTexCoord7, symbolTable);
+            BuiltInVariable("gl_FogCoord",       EbvFogFragCoord,   symbolTable);
+        }
 
         if (profile == EEsProfile) {
-            symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
+            if (spv == 0) {
+                symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
+            }
             if (version >= 310)
                 symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
         }
@@ -3071,13 +3087,15 @@
         // built-in functions
 
         if (profile == EEsProfile) {
-            symbolTable.setFunctionExtensions("texture2DLodEXT",      1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture2DProjLodEXT",  1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("textureCubeLodEXT",    1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
-            symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
+            if (spv == 0) {
+                symbolTable.setFunctionExtensions("texture2DLodEXT",      1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture2DProjLodEXT",  1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("textureCubeLodEXT",    1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
+                symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
+            }
             if (version == 100) {
                 symbolTable.setFunctionExtensions("dFdx",   1, &E_GL_OES_standard_derivatives);
                 symbolTable.setFunctionExtensions("dFdy",   1, &E_GL_OES_standard_derivatives);
@@ -3090,21 +3108,23 @@
                 symbolTable.setFunctionExtensions("interpolateAtOffset",   1, &E_GL_OES_shader_multisample_interpolation);
             }
         } else if (version < 130) {
-            symbolTable.setFunctionExtensions("texture1DLod",        1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture2DLod",        1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture3DLod",        1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("textureCubeLod",      1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture1DProjLod",    1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture2DProjLod",    1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("texture3DProjLod",    1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("shadow1DLod",         1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("shadow2DLod",         1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("shadow1DProjLod",     1, &E_GL_ARB_shader_texture_lod);
-            symbolTable.setFunctionExtensions("shadow2DProjLod",     1, &E_GL_ARB_shader_texture_lod);
+            if (spv == 0) {
+                symbolTable.setFunctionExtensions("texture1DLod",        1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture2DLod",        1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture3DLod",        1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("textureCubeLod",      1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture1DProjLod",    1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture2DProjLod",    1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("texture3DProjLod",    1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("shadow1DLod",         1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("shadow2DLod",         1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("shadow1DProjLod",     1, &E_GL_ARB_shader_texture_lod);
+                symbolTable.setFunctionExtensions("shadow2DProjLod",     1, &E_GL_ARB_shader_texture_lod);
+            }
         }
 
         // E_GL_ARB_shader_texture_lod functions usable only with the extension enabled
-        if (profile != EEsProfile) {
+        if (profile != EEsProfile && spv == 0) {
             symbolTable.setFunctionExtensions("texture1DGradARB",         1, &E_GL_ARB_shader_texture_lod);
             symbolTable.setFunctionExtensions("texture1DProjGradARB",     1, &E_GL_ARB_shader_texture_lod);
             symbolTable.setFunctionExtensions("texture2DGradARB",         1, &E_GL_ARB_shader_texture_lod);
@@ -3346,7 +3366,7 @@
         symbolTable.relateToOperator("textureGatherOffset",     EOpTextureGatherOffset);
         symbolTable.relateToOperator("textureGatherOffsets",    EOpTextureGatherOffsets);
 
-        if (IncludeLegacy(version, profile) || (profile == EEsProfile && version == 100)) {
+        if (spv == 0 && (IncludeLegacy(version, profile, spv) || (profile == EEsProfile && version == 100))) {
             symbolTable.relateToOperator("ftransform",               EOpFtransform);
 
             symbolTable.relateToOperator("texture1D",                EOpTexture);
@@ -3453,7 +3473,7 @@
 // 2) Tag extension-related symbols added to their base version with their extensions, so
 //    that if an early version has the extension turned off, there is an error reported on use.
 //
-void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
+void IdentifyBuiltIns(int version, EProfile profile, int spv, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
 {
     if (profile != EEsProfile && version >= 430 && version < 440) {
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
@@ -3469,7 +3489,7 @@
     switch(language) {
     case EShLangFragment:
         // Set up gl_FragData based on current array size.
-        if (version == 100 || IncludeLegacy(version, profile) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) {
+        if (version == 100 || IncludeLegacy(version, profile, spv) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) {
             TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone;
             TType fragData(EbtFloat, EvqFragColor, pq, 4);
             TArraySizes& arraySizes = *new TArraySizes;
diff --git a/glslang/MachineIndependent/Initialize.h b/glslang/MachineIndependent/Initialize.h
index a45f425..156db7d 100644
--- a/glslang/MachineIndependent/Initialize.h
+++ b/glslang/MachineIndependent/Initialize.h
@@ -59,13 +59,13 @@
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
     TBuiltIns();
     virtual ~TBuiltIns();
-    void initialize(int version, EProfile);
-	void initialize(const TBuiltInResource& resources, int version, EProfile, EShLanguage);
+    void initialize(int version, EProfile, int spv);
+	void initialize(const TBuiltInResource& resources, int version, EProfile, int spv, EShLanguage);
     const TString& getCommonString() const { return commonBuiltins; }
     const TString& getStageString(EShLanguage language) const { return stageBuiltins[language]; }
 
 protected:
-    void add2ndGenerationSamplingImaging(int version, EProfile profile);
+    void add2ndGenerationSamplingImaging(int version, EProfile profile, int spv);
     void addQueryFunctions(TSampler, TString& typeName, int version, EProfile profile);
     void addImageFunctions(TSampler, TString& typeName, int version, EProfile profile);
     void addSamplingFunctions(TSampler, TString& typeName, int version, EProfile profile);
@@ -81,8 +81,8 @@
     int dimMap[EsdNumDims];
 };
 
-void IdentifyBuiltIns(int version, EProfile profile, EShLanguage, TSymbolTable&);
-void IdentifyBuiltIns(int version, EProfile profile, EShLanguage, TSymbolTable&, const TBuiltInResource &resources);
+void IdentifyBuiltIns(int version, EProfile profile, int spv, EShLanguage, TSymbolTable&);
+void IdentifyBuiltIns(int version, EProfile profile, int spv, EShLanguage, TSymbolTable&, const TBuiltInResource &resources);
 
 } // end namespace glslang
 
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index b5d245c..8a9b269 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -47,10 +47,10 @@
 
 namespace glslang {
 
-TParseContext::TParseContext(TSymbolTable& symt, TIntermediate& interm, bool pb, int v, EProfile p, EShLanguage L, TInfoSink& is,
+TParseContext::TParseContext(TSymbolTable& symt, TIntermediate& interm, bool pb, int v, EProfile p, int spv, EShLanguage L, TInfoSink& is,
                              bool fc, EShMessages m) :
             intermediate(interm), symbolTable(symt), infoSink(is), language(L),
-            version(v), profile(p), forwardCompatible(fc), 
+            version(v), profile(p), spv(spv), forwardCompatible(fc), 
             contextPragma(true, false), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), statementNestingLevel(0),
             postMainReturn(false),
             tokensBeforeEOF(false), limits(resources.limits), messages(m), currentScanner(nullptr),
@@ -1674,11 +1674,14 @@
 //
 TOperator TParseContext::mapTypeToConstructorOp(const TType& type) const
 {
-    if (type.isStruct())
-        return EOpConstructStruct;
-
     TOperator op = EOpNull;
+ 
     switch (type.getBasicType()) {
+    case EbtStruct:
+        op = EOpConstructStruct;
+        break;
+    case EbtSampler:
+        break;
     case EbtFloat:
         if (type.isMatrix()) {
             switch (type.getMatrixCols()) {
@@ -2325,8 +2328,9 @@
 
     if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtSampler))
         error(loc, "non-uniform struct contains a sampler or image:", type.getBasicTypeString().c_str(), identifier.c_str());
-    else if (type.getBasicType() == EbtSampler && type.getQualifier().storage != EvqUniform)
+    else if (type.getBasicType() == EbtSampler && type.getQualifier().storage != EvqUniform) {
         error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
+    }
 }
 
 void TParseContext::atomicUintCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
@@ -3598,6 +3602,7 @@
         publicType.qualifier.layoutPacking = ElpStd430;
         return;
     }
+    // TODO: compile-time performance: may need to stop doing linear searches
     for (TLayoutFormat format = (TLayoutFormat)(ElfNone + 1); format < ElfCount; format = (TLayoutFormat)(format + 1)) {
         if (id == TQualifier::getLayoutFormatString(format)) {
             if ((format > ElfEsFloatGuard && format < ElfFloatGuard) ||
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 3766bff..19a8a24 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -65,7 +65,7 @@
 //
 class TParseContext {
 public:
-    TParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, int version, EProfile, EShLanguage, TInfoSink&,
+    TParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, int version, EProfile, int spv, EShLanguage, TInfoSink&,
                   bool forwardCompatible = false, EShMessages messages = EShMsgDefault);
     virtual ~TParseContext();
 
@@ -85,8 +85,6 @@
 
     bool relaxedErrors()    const { return (messages & EShMsgRelaxedErrors)    != 0; }
     bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
-    bool vulkanRules()      const { return (messages & EShMsgVulkanRules)      != 0; }
-    bool spirvRules()       const { return (messages & EShMsgSpvRules)         != 0; }
 
     void reservedErrorCheck(const TSourceLoc&, const TString&);
     void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op);
@@ -282,6 +280,7 @@
     EShLanguage language;        // vertex or fragment language
     int version;                 // version, updated by #version in the shader
     EProfile profile;            // the declared profile in the shader (core by default)
+    int spv;                     // SPIR-V version; 0 means not SPIR-V
     bool forwardCompatible;      // true if errors are to be given for use of deprecated features
 
     // Current state of parsing
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index 23e5191..806f735 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -345,8 +345,6 @@
     (*KeywordMap)["mat2"] =                    MAT2;
     (*KeywordMap)["mat3"] =                    MAT3;
     (*KeywordMap)["mat4"] =                    MAT4;
-    (*KeywordMap)["sampler2D"] =               SAMPLER2D;
-    (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
     (*KeywordMap)["true"] =                    BOOLCONSTANT;
     (*KeywordMap)["false"] =                   BOOLCONSTANT;
     (*KeywordMap)["attribute"] =               ATTRIBUTE;
@@ -425,6 +423,13 @@
     (*KeywordMap)["dvec2"] =                   DVEC2;
     (*KeywordMap)["dvec3"] =                   DVEC3;
     (*KeywordMap)["dvec4"] =                   DVEC4;
+    (*KeywordMap)["uint"] =                    UINT;
+    (*KeywordMap)["uvec2"] =                   UVEC2;
+    (*KeywordMap)["uvec3"] =                   UVEC3;
+    (*KeywordMap)["uvec4"] =                   UVEC4;
+
+    (*KeywordMap)["sampler2D"] =               SAMPLER2D;
+    (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
     (*KeywordMap)["samplerCubeArray"] =        SAMPLERCUBEARRAY;
     (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
     (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
@@ -435,10 +440,6 @@
     (*KeywordMap)["isampler1D"] =              ISAMPLER1D;
     (*KeywordMap)["usampler1DArray"] =         USAMPLER1DARRAY;
     (*KeywordMap)["samplerBuffer"] =           SAMPLERBUFFER;
-    (*KeywordMap)["uint"] =                    UINT;
-    (*KeywordMap)["uvec2"] =                   UVEC2;
-    (*KeywordMap)["uvec3"] =                   UVEC3;
-    (*KeywordMap)["uvec4"] =                   UVEC4;
     (*KeywordMap)["samplerCubeShadow"] =       SAMPLERCUBESHADOW;
     (*KeywordMap)["sampler2DArray"] =          SAMPLER2DARRAY;
     (*KeywordMap)["sampler2DArrayShadow"] =    SAMPLER2DARRAYSHADOW;
@@ -467,7 +468,9 @@
     (*KeywordMap)["sampler2DRect"] =           SAMPLER2DRECT;
     (*KeywordMap)["sampler2DRectShadow"] =     SAMPLER2DRECTSHADOW;
     (*KeywordMap)["sampler1DArray"] =          SAMPLER1DARRAY;
+
     (*KeywordMap)["samplerExternalOES"] =      SAMPLEREXTERNALOES; // GL_OES_EGL_image_external
+
     (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
     (*KeywordMap)["smooth"] =                  SMOOTH;
     (*KeywordMap)["flat"] =                    FLAT;
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index ecf888c..8167e3c 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -124,12 +124,12 @@
 //
 // Parse and add to the given symbol table the content of the given shader string.
 //
-bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, EShLanguage language, TInfoSink& infoSink, 
+bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, int spv, EShLanguage language, TInfoSink& infoSink, 
                            TSymbolTable& symbolTable)
 {
     TIntermediate intermediate(language, version, profile);
     
-    TParseContext parseContext(symbolTable, intermediate, true, version, profile, language, infoSink);
+    TParseContext parseContext(symbolTable, intermediate, true, version, profile, spv, language, infoSink);
     TPpContext ppContext(parseContext, TShader::ForbidInclude());
     TScanContext scanContext(parseContext);
     parseContext.setScanContext(&scanContext);
@@ -152,6 +152,7 @@
     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]);
 
         return false;
     }
@@ -167,11 +168,11 @@
 //
 // To initialize per-stage shared tables, with the common table already complete.
 //
-void InitializeStageSymbolTable(TBuiltIns& builtIns, int version, EProfile profile, EShLanguage language, TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables)
+void InitializeStageSymbolTable(TBuiltIns& builtIns, int version, EProfile profile, int spv, EShLanguage language, TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables)
 {
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
-    InitializeSymbolTable(builtIns.getStageString(language), version, profile, language, infoSink, *symbolTables[language]);
-    IdentifyBuiltIns(version, profile, language, *symbolTables[language]);
+    InitializeSymbolTable(builtIns.getStageString(language), version, profile, spv, language, infoSink, *symbolTables[language]);
+    IdentifyBuiltIns(version, profile, spv, language, *symbolTables[language]);
     if (profile == EEsProfile && version >= 300)
         (*symbolTables[language]).setNoBuiltInRedeclarations();
     if (version == 110)
@@ -182,49 +183,49 @@
 // Initialize the full set of shareable symbol tables;
 // The common (cross-stage) and those shareable per-stage.
 //
-bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TSymbolTable** symbolTables, int version, EProfile profile)
+bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TSymbolTable** symbolTables, int version, EProfile profile, int spv)
 {
     TBuiltIns builtIns;
-    builtIns.initialize(version, profile);
+    builtIns.initialize(version, profile, spv);
 
     // do the common tables
-    InitializeSymbolTable(builtIns.getCommonString(), version, profile, EShLangVertex, infoSink, *commonTable[EPcGeneral]);
+    InitializeSymbolTable(builtIns.getCommonString(), version, profile, spv, EShLangVertex, infoSink, *commonTable[EPcGeneral]);
     if (profile == EEsProfile)
-        InitializeSymbolTable(builtIns.getCommonString(), version, profile, EShLangFragment, infoSink, *commonTable[EPcFragment]);
+        InitializeSymbolTable(builtIns.getCommonString(), version, profile, spv, EShLangFragment, infoSink, *commonTable[EPcFragment]);
 
     // do the per-stage tables
 
     // always have vertex and fragment
-    InitializeStageSymbolTable(builtIns, version, profile, EShLangVertex, infoSink, commonTable, symbolTables);
-    InitializeStageSymbolTable(builtIns, version, profile, EShLangFragment, infoSink, commonTable, symbolTables);
+    InitializeStageSymbolTable(builtIns, version, profile, spv, EShLangVertex, infoSink, commonTable, symbolTables);
+    InitializeStageSymbolTable(builtIns, version, profile, spv, EShLangFragment, infoSink, commonTable, symbolTables);
 
     // check for tessellation
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
-        InitializeStageSymbolTable(builtIns, version, profile, EShLangTessControl, infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(builtIns, version, profile, EShLangTessEvaluation, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(builtIns, version, profile, spv, EShLangTessControl, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(builtIns, version, profile, spv, EShLangTessEvaluation, infoSink, commonTable, symbolTables);
     }
 
     // check for geometry
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310))
-        InitializeStageSymbolTable(builtIns, version, profile, EShLangGeometry, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(builtIns, version, profile, spv, EShLangGeometry, infoSink, commonTable, symbolTables);
 
     // check for compute
     if ((profile != EEsProfile && version >= 430) ||
         (profile == EEsProfile && version >= 310))
-        InitializeStageSymbolTable(builtIns, version, profile, EShLangCompute, infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(builtIns, version, profile, spv, EShLangCompute, infoSink, commonTable, symbolTables);
 
     return true;
 }
 
-bool AddContextSpecificSymbols(const TBuiltInResource* resources, TInfoSink& infoSink, TSymbolTable& symbolTable, int version, EProfile profile, EShLanguage language)
+bool AddContextSpecificSymbols(const TBuiltInResource* resources, TInfoSink& infoSink, TSymbolTable& symbolTable, int version, EProfile profile, int spv, EShLanguage language)
 {
     TBuiltIns builtIns;
     
-    builtIns.initialize(*resources, version, profile, language);
-    InitializeSymbolTable(builtIns.getCommonString(), version, profile, language, infoSink, symbolTable);
-    IdentifyBuiltIns(version, profile, language, symbolTable, *resources);
+    builtIns.initialize(*resources, version, profile, spv, language);
+    InitializeSymbolTable(builtIns.getCommonString(), version, profile, spv, language, infoSink, symbolTable);
+    IdentifyBuiltIns(version, profile, spv, language, symbolTable, *resources);
 
     return true;
 }
@@ -241,7 +242,7 @@
 // This only gets done the first time any thread needs a particular symbol table
 // (lazy evaluation).
 //
-void SetupBuiltinSymbolTable(int version, EProfile profile)
+void SetupBuiltinSymbolTable(int version, EProfile profile, int spv)
 {
     TInfoSink infoSink;
 
@@ -271,7 +272,7 @@
         stageTables[stage] = new TSymbolTable;
 
     // Generate the local symbol tables using the new pool
-    InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile);
+    InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spv);
 
     // Switch to the process-global pool
     SetThreadPoolAllocator(*PerProcessGPA);
@@ -542,9 +543,11 @@
             versionWillBeError = true;
     }
 
+    int spv = (messages & EShMsgSpvRules) ? 100 : 0;
     intermediate.setVersion(version);
     intermediate.setProfile(profile);
-    SetupBuiltinSymbolTable(version, profile);
+    intermediate.setSpv(spv);
+    SetupBuiltinSymbolTable(version, profile, spv);
     
     TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)]
                                                   [MapProfileToIndex(profile)]
@@ -558,13 +561,13 @@
     
     // Add built-in symbols that are potentially context dependent;
     // they get popped again further down.
-    AddContextSpecificSymbols(resources, compiler->infoSink, symbolTable, version, profile, compiler->getLanguage());
+    AddContextSpecificSymbols(resources, compiler->infoSink, symbolTable, version, profile, spv, compiler->getLanguage());
     
     //
     // Now we can process the full shader under proper symbols and rules.
     //
 
-    TParseContext parseContext(symbolTable, intermediate, false, version, profile, compiler->getLanguage(), compiler->infoSink, forwardCompatible, messages);
+    TParseContext parseContext(symbolTable, intermediate, false, version, profile, spv, compiler->getLanguage(), compiler->infoSink, forwardCompatible, messages);
     glslang::TScanContext scanContext(parseContext);
     TPpContext ppContext(parseContext, includer);
     parseContext.setScanContext(&scanContext);
@@ -1271,6 +1274,11 @@
     return "4.20 glslang LunarG Khronos." GLSLANG_REVISION " " GLSLANG_DATE;
 }
 
+int GetKhronosToolId()
+{
+    return 8;
+}
+
 bool InitializeProcess()
 {
     return ShInitialize() != 0;
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 0e0fca2..7380594 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -134,6 +134,7 @@
 %token <lex> DMAT4X2 DMAT4X3 DMAT4X4
 %token <lex> ATOMIC_UINT
 
+// combined image/sampler
 %token <lex> SAMPLER1D SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER1DSHADOW SAMPLER2DSHADOW
 %token <lex> SAMPLERCUBESHADOW SAMPLER1DARRAY SAMPLER2DARRAY SAMPLER1DARRAYSHADOW
 %token <lex> SAMPLER2DARRAYSHADOW ISAMPLER1D ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 015f91e..d319c6f 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -381,7 +381,7 @@
     case EOpConstructDMat3x4: out.debug << "Construct dmat3x4"; break;
     case EOpConstructDMat4x2: out.debug << "Construct dmat4x2"; break;
     case EOpConstructDMat4x3: out.debug << "Construct dmat4x3"; break;
-    case EOpConstructDMat4x4: out.debug << "Construct dmat4";  break;
+    case EOpConstructDMat4x4: out.debug << "Construct dmat4";   break;
     case EOpConstructStruct:  out.debug << "Construct structure";  break;
 
     case EOpLessThan:         out.debug << "Compare Less Than";             break;
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 5212abe..17f8bc4 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -124,7 +124,7 @@
 //
 class TIntermediate {
 public:
-    explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : language(l), treeRoot(0), profile(p), version(v), 
+    explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : language(l), treeRoot(0), profile(p), version(v), spv(0),
         numMains(0), numErrors(0), recursive(false),
         invocations(0), vertices(0), inputPrimitive(ElgNone), outputPrimitive(ElgNone), pixelCenterInteger(false), originUpperLeft(false),
         vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false), depthLayout(EldNone), depthReplacing(false), blendEquations(0), xfbMode(false)
@@ -144,6 +144,8 @@
     int getVersion() const { return version; }
     void setProfile(EProfile p) { profile = p; }
     EProfile getProfile() const { return profile; }
+    void setSpv(int s) { spv = s; }
+    int getSpv() const { return spv; }
     EShLanguage getStage() const { return language; }
     void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); }
     const std::set<std::string>& getRequestedExtensions() const { return requestedExtensions; }
@@ -320,6 +322,7 @@
     TIntermNode* treeRoot;
     EProfile profile;
     int version;
+    int spv;
     std::set<std::string> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
     TBuiltInResource resources;
     int numMains;
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 3fbfe35..0c97e39 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -242,7 +242,7 @@
 // The below is further designed to handle multiple compilation units per stage, where
 // the intermediate results, including the parse tree, are preserved until link time,
 // rather than the above interface which is designed to have each compilation unit
-// lowered at compile time.  In above model, linking occurs on the lowered results,
+// lowered at compile time.  In the above model, linking occurs on the lowered results,
 // whereas in this model intra-stage linking can occur at the parse tree
 // (treeRoot in TIntermediate) level, and then a full stage can be lowered.
 //
@@ -258,6 +258,7 @@
 
 const char* GetEsslVersionString();
 const char* GetGlslVersionString();
+int GetKhronosToolId();
 
 class TIntermediate;
 class TProgram;