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

Includes:
b5b08462 Merge pull request #1124 from xorgy/check-inner-implicit-atomic-uint
60209951 Merge pull request #1127 from xorgy/preprocessor-int-min-mod-negative-one
9d4a1b24 Preprocessor: Evaluate INT_MIN % -1 to 0.
047b65f9 Merge pull request #1125 from greg-lunarg/kg1
cc80d80d Update spirv-tools known-good
437911af GLSL: Check for implicit inner dimension in array of atomic_uint.
9cfc1551 Merge pull request #1118 from xorgy/only-swizzle-numbers-and-bools
016e47f7 Merge branch 'only-parse-inf-constant-in-hlsl' of https://github.com/xorgy/glslang into xorgy-only-parse-inf-constant-in-hlsl
6e33b787 Tests: Add test for GLSL +-#INF.
79a40740 Merge pull request #1120 from xorgy/overlong-hex-literal
60312662 GLSL: Only parse [-]1.#INF in HLSL mode.
9028ed20 Check for hexadecimal literals exceeding MaxTokenLength.
07c0bcea Only try swizzles on vectors, numbers, and booleans.
b1eaf82c Merge pull request #1115 from LoopDawg/stdarray-binding-set
2915da30 Nonfunctional: minor: use std::array for per-set shifts, fix warning.
573cc9e9 Merge pull request #1111 from LoopDawg/per-set-binding-offsets
7a9db71f SPV: Don't emit StorageImageMultisample capability for subpass images.
6cfeced8 Non-functional: missing comments from missed git add.
1b46f137 HLSL: Fix #1106. Support shader setting of binding/set for $Global.
08a14422 Add per-descriptor-set IO mapping shift values.
fe4e572c GLSL->SPIR-V: Put precision decorations on imageLoad().
f0e35bf0 GLSL: Make sampling operations have agnostic precision qualifiers for desktop.
3112b568 Merge pull request #1113 from xorgy/preprocessor-int-min-over-negative-one
0b55e0f2 Merge pull request #1102 from KhronosGroup/partially-flatten
dc756a61 Preprocessor: Evaluate INT_MIN / -1 to 0.
a50b107e Build: Fix build warning.
8b555f74 Merge pull request #1109 from xorgy/never-try-to-swizzle-void
5313613d Don't try to swizzle void.
856502cb Update spirv-tools known-good
7d67c6cb PP: Fix #1104: Missing check for #if overflow.
1a4bbc4a HLSL: More clip fix: It is more involved than previous commit. Complete.
4ce5b562 Fix #1103: clip() works on int/uint.
5889fa03 Tests: Add clip(int) tests.
cf571f73 Infrastructure: Add a TShader method to publicly expose the intermediate.
41aa1995 HLSL: Partially flatten hierarchies, instead of all or nothing.
60e91611 Merge pull request #1098 from LoopDawg/attribute-gets
0d1f63ec Merge pull request #1097 from SWIFTingAround/master
ad2bc097 Merge pull request #1094 from LoopDawg/split-shadow-tx
ddb45f8d Merge pull request #1080 from hedejing/master
52c087ff HLSL: add helper access methods to TAttributeMap
aab00012 Set cmake-policy CMP0048 to NEW
fdbd0eba Add getAsLoopNode() method for Loop node
028c5a8d HLSL: nonfunctional: rename setId -> switchId, add comment
bb79abcc HLSL: Validate implicit initializer assignment to opaque members.
07ed11f9 SPV: GeneratorVersion: bump version number because of atomic decrement change.
b27de028 Merge pull request #1090 from tafuri/#1084-fix-segfault
48d6e798 SPV: Correct semantics of atomic-counter decrement.
592e8f04 HLSL: Tests: Add subset of flattened opaque test to legalize results.
4f6865f4 Added test for local structured buffer variable
5133b108 Fixed formatting
908813c2 Merge pull request #1089 from LoopDawg/split-shadow-tx
0a826111 Only track variables in the global scope
73c57bbe HLSL: split textures used for both shadow and non-shadow modes
263986eb Readme: Update with additional Windows build information for SPIRV-tools build.
2c9c2af6 Merge pull request #1085 from KhronosGroup/flatten-assign-subset
700bdeb7 HLSL: Fix #954: Track/access subsets of flattened multi-level aggregates.
86a82bb9 Merge pull request #1081 from xxxbxxx/for-upstream-1
a6085875 HLSL: Fix crash when flattening both side of assignement simultaneously.
24919659 Merge pull request #1075 from LoopDawg/subpass-input
7f93d56e HLSL: add subpass input types and methods
092b7d2e Build: Fix a couple build issues.
77ea30bd HLSL: Additional attribute support: [[]], namespace, parameters:
3693e631 Fix #1060: Could crash if using --source-entry-point with -e; fixed.
5a57ca68 Merge pull request #1078 from greg-lunarg/addopt14
354a54c6 Legalization: Fix tests after workarounds removed
d41993d9 SPV: rationalize parameter handling for "original" and "writable" parameters.
bed4e4f7 HLSL: Pass opaques by local copy, instead of by interface original.
15fa7ef5 HLSL: Remove workarounds for assigning to opaques.
dabd1bf2 Merge pull request #1076 from LoopDawg/shadow-tx-types
195f584e HLSL: force textures to shadow modes from combined samplers
fc7aeaee Merge pull request #1077 from greg-lunarg/addopt12
52fe3d59 Legalization: Fix warnings and disable tests when spirv-tools not present
3ddcd3f1 Merge pull request #1070 from greg-lunarg/addopt8
e2b36163 Advance spirv-opt known-good to hopefully fix travis multithread failure
b56366ab Legalization: Skip spirv-tools tests
741d1f20 Pick up latest spirv-tools in attempt to fix travis failures
87fd7429 Try Python interpreter on update_glslang_sources.py in appveyor
f451756d Fix travis and appveyor calls to update_glslang_sources.py
cd1f169c Enable HLSL legalization
44dd6a00 Merge pull request #1072 from amdrexu/feature
e8fe8b0d Implement extension GL_NV_shader_atomic_int64
f21c173a Merge pull request #1071 from antiagainst/ninja-make
afa128a8 Travis: use make instead of ninja and limit concurrent jobs
9cf5dfbd Merge pull request #1063 from LoopDawg/remapper-error-cleanup
ea5204d1 Build: Merge pull request #1068 from greg-lunarg/addopt4
fd34f0e6 CMake changes for HLSL legalization
8004d365 Remapper: make remapper robust against non-exiting error handlers
5f77d864 HLSL: Fix #1064: Don't include empty structures on OpEntryPoint
31365afa Merge pull request #1044 from dsrbecky/image_external_essl3
ae8af5d3 HLSL: fix array[1] of vec4 constant declaration.
c64a9dd6 Test: Make another test legal HLSL, and rationalize GLSL vs HLSL addConstructor().
bdbbc68e HLSL: Add bounds checking, shared with GLSL. Partially address #1032.
346dd7c7 Merge pull request #1051 from LoopDawg/bug-1049
4a145dbf HLSL: handle split InputPatch templat type in patch constant functions
a5d86164 HLSL: allow mixed user & builtin members in hull shader output structure
ba6a3c29 GLSL: Make gl_Layer and gl_ViewportIndex always be outside blocks.
aab3bcff Merge pull request #1056 from KhronosGroup/glsl-entrypoint-rename
9855bdad GLSL: Promote HLSL entry-point renaming code to be used by GLSL as well.
4f4683d2 Merge pull request #1050 from amdrexu/feature
30ac0525 Merge pull request #1055 from KhronosGroup/strdup
d9bd97d0 Build: Fix strdup -> _strdup warnings.
b3ca4045 Build: Fix build warnings.
5002c26b Fix #1043: set all scan string-locations to have bias, not just the first one.
a25530cc Non-functional: Make usage for entry points more consistent.
e22c11fd Merge pull request #1053 from mchock-nv/mchock-nv-fix-lambda
ea1ea974 Address #1052: Have language-level exits of case statements.
933c10cd Delete unused 'this' capture
05506bb8 Implement the extension GL_AMD_shader_fragment_mask
d004e5ca Merge pull request #1047 from svenstaro/add-stdin-option
0dd1285c Add --stdin
8688e3fb Merge pull request #1048 from LoopDawg/opaque-type-fix
76117921 Fix lvalue check in SPIR-V generation
2c5b3d64 Add support for GL_OES_EGL_image_external_essl3

Test: checkbuild.py on Linux; unit tests on Windows
Change-Id: I58d37c7e7a7fb77751c6a848d43e4957d18e7e84
diff --git a/.appveyor.yml b/.appveyor.yml
index 64e7ae6..d5c7225 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -25,6 +25,7 @@
 # scripts that run after cloning repository
 install:
   - git clone https://github.com/google/googletest.git External/googletest
+  - C:/Python27/python.exe update_glslang_sources.py
 
 build:
   parallel: true  # enable MSBuild parallel builds
diff --git a/.gitignore b/.gitignore
index 3e6cc14..a1fe394 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
 build/
 Test/localResults/
 External/googletest
+External/spirv-tools
diff --git a/.travis.yml b/.travis.yml
index 40e3fc7..0237d25 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -39,11 +39,8 @@
   apt:
     packages:
       - clang-3.6
-      - ninja-build
 
 install:
-  # Install ninja on Mac OS X.
-  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update && brew install ninja; fi
   # Make sure that clang-3.6 is selected on Linux.
   - if [[ "$TRAVIS_OS_NAME" == "linux" && "$CC" == "clang" ]]; then
       export CC=clang-3.6 CXX=clang++-3.6;
@@ -57,7 +54,8 @@
     fi
 
 before_script:
-  - git clone https://github.com/google/googletest.git External/googletest
+  - git clone --depth=1 https://github.com/google/googletest.git External/googletest
+  - ./update_glslang_sources.py
 
 script:
   - mkdir build && cd build
@@ -68,14 +66,12 @@
             -DANDROID_NATIVE_API_LEVEL=android-12
             -DCMAKE_BUILD_TYPE=Release
             -DANDROID_ABI="armeabi-v7a with NEON"
-            -DBUILD_TESTING=OFF
-            -GNinja ..;
-      ninja;
+            -DBUILD_TESTING=OFF ..;
+      make -j4;
     else
       cmake -DCMAKE_BUILD_TYPE=${GLSLANG_BUILD_TYPE}
-            -DCMAKE_INSTALL_PREFIX=`pwd`/install
-            -GNinja ..;
-      ninja install;
+            -DCMAKE_INSTALL_PREFIX=`pwd`/install ..;
+      make -j4 install;
       ctest --output-on-failure &&
       cd ../Test && ./runtests;
     fi
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9bc94b0..0d453cc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,9 @@
 # increase to 3.1 once all major distributions
 # include a version of CMake >= 3.1
 cmake_minimum_required(VERSION 2.8.12)
+if (POLICY CMP0048)
+  cmake_policy(SET CMP0048 NEW)
+endif()
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
 # Adhere to GNU filesystem layout conventions
@@ -18,6 +21,8 @@
 
 option(ENABLE_HLSL "Enables HLSL input support" ON)
 
+option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
+
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
     set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
 endif()
@@ -52,7 +57,7 @@
 
 if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
     add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
-                        -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable)
+                        -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions)
     add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
     add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
@@ -83,6 +88,17 @@
 # We depend on these for later projects, so they should come first.
 add_subdirectory(External)
 
+if(NOT TARGET SPIRV-Tools-opt)
+    set(ENABLE_OPT OFF)
+endif()
+
+if(ENABLE_OPT)
+    message(STATUS "optimizer enabled")
+    add_definitions(-DENABLE_OPT)
+elseif(ENABLE_HLSL)
+    message(STATUS "spirv-tools not linked - illegal SPIRV may be generated for HLSL")
+endif()
+
 add_subdirectory(glslang)
 add_subdirectory(OGLCompilersDLL)
 if(ENABLE_GLSLANG_BINARIES)
diff --git a/External/CMakeLists.txt b/External/CMakeLists.txt
index 4f694ee..4d96901 100644
--- a/External/CMakeLists.txt
+++ b/External/CMakeLists.txt
@@ -33,3 +33,11 @@
             "Google Mock was not found - tests based on that will not build")
     endif()
 endif()
+
+if(ENABLE_OPT AND NOT TARGET SPIRV-Tools-opt)
+    if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools)
+        set(SPIRV_SKIP_TESTS ON CACHE BOOL "Skip building SPIRV-Tools tests")
+        add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools spirv-tools)
+    endif()
+endif()
+
diff --git a/README.md b/README.md
index 193e38d..9d5efb5 100644
--- a/README.md
+++ b/README.md
@@ -52,6 +52,7 @@
 ### Dependencies
 
 * [CMake][cmake]: for generating compilation targets.
+* [Python 2.7][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools.)
 * [bison][bison]: _optional_, but needed when changing the grammar (glslang.y).
 * [googletest][googletest]: _optional_, but should use if making any changes to glslang.
 
@@ -74,6 +75,18 @@
 git clone https://github.com/google/googletest.git External/googletest
 ```
 
+If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan,
+or wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, install
+spirv-tools with this:
+
+```bash
+./update_glslang_sources.py
+```
+
+For running the CMake GUI or Visual Studio with python dependencies, you will,
+in addition to python within the cygwin environment, need a Windows [python][python]
+installation, including selecting the `PATH` update.
+
 #### 3) Configure
 
 Assume the source directory is `$SOURCE_DIR` and
@@ -301,6 +314,7 @@
 
 
 [cmake]: https://cmake.org/
+[python]: https://www.python.org/
 [bison]: https://www.gnu.org/software/bison/
 [googletest]: https://github.com/google/googletest
 [bison-gnu-win32]: http://gnuwin32.sourceforge.net/packages/bison.htm
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 3c5ebab..b1c0277 100755
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -42,12 +42,21 @@
 add_library(SPIRV STATIC ${SOURCES} ${HEADERS})
 set_property(TARGET SPIRV PROPERTY FOLDER glslang)
 set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
-target_link_libraries(SPIRV glslang)
 
 add_library(SPVRemapper STATIC ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
 set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
 set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON)
 
+if(ENABLE_OPT)
+    target_include_directories(SPIRV
+        PRIVATE ${spirv-tools_SOURCE_DIR}/include
+        PRIVATE ${spirv-tools_SOURCE_DIR}/source
+    )
+    target_link_libraries(SPIRV glslang SPIRV-Tools-opt SPVRemapper)
+else()
+    target_link_libraries(SPIRV glslang)
+endif(ENABLE_OPT)
+
 if(WIN32)
     source_group("Source" FILES ${SOURCES} ${HEADERS})
     source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
diff --git a/SPIRV/GLSL.ext.AMD.h b/SPIRV/GLSL.ext.AMD.h
index 5121ed9..7e97be3 100644
--- a/SPIRV/GLSL.ext.AMD.h
+++ b/SPIRV/GLSL.ext.AMD.h
@@ -33,7 +33,7 @@
 enum Op;
 
 static const int GLSLextAMDVersion = 100;
-static const int GLSLextAMDRevision = 5;
+static const int GLSLextAMDRevision = 6;
 
 // SPV_AMD_shader_ballot
 static const char* const E_SPV_AMD_shader_ballot = "SPV_AMD_shader_ballot";
@@ -106,4 +106,12 @@
 
 static const Capability CapabilityImageReadWriteLodAMD = static_cast<Capability>(5015);
 
+// SPV_AMD_shader_fragment_mask
+static const char* const E_SPV_AMD_shader_fragment_mask = "SPV_AMD_shader_fragment_mask";
+
+static const Capability CapabilityFragmentMaskAMD = static_cast<Capability>(5010);
+
+static const Op OpFragmentMaskFetchAMD = static_cast<Op>(5011);
+static const Op OpFragmentFetchAMD     = static_cast<Op>(5012);
+
 #endif  // #ifndef GLSLextAMD_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index b6c9705..b0e51df 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -52,6 +52,16 @@
 #endif
 }
 
+#ifdef ENABLE_OPT
+    #include "spirv-tools/optimizer.hpp"
+    #include "message.h"
+    #include "SPVRemapper.h"
+#endif
+
+#ifdef ENABLE_OPT
+using namespace spvtools;
+#endif
+
 // Glslang includes
 #include "../glslang/MachineIndependent/localintermediate.h"
 #include "../glslang/MachineIndependent/SymbolTable.h"
@@ -71,7 +81,7 @@
 // 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;
+const int GeneratorVersion = 2;
 
 namespace {
 class SpecConstantOpModeGuard {
@@ -148,6 +158,8 @@
     void declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember);
 
     bool isShaderEntryPoint(const glslang::TIntermAggregate* node);
+    bool writableParam(glslang::TStorageQualifier);
+    bool originalParam(glslang::TStorageQualifier, const glslang::TType&, bool implicitThisParam);
     void makeFunctions(const glslang::TIntermSequence&);
     void makeGlobalInitializers(const glslang::TIntermSequence&);
     void visitFunctions(const glslang::TIntermSequence&);
@@ -453,15 +465,13 @@
         return spv::BuiltInCullDistance;
 
     case glslang::EbvViewportIndex:
-        if (!memberDeclaration) {
-            builder.addCapability(spv::CapabilityMultiViewport);
-            if (glslangIntermediate->getStage() == EShLangVertex ||
-                glslangIntermediate->getStage() == EShLangTessControl ||
-                glslangIntermediate->getStage() == EShLangTessEvaluation) {
+        builder.addCapability(spv::CapabilityMultiViewport);
+        if (glslangIntermediate->getStage() == EShLangVertex ||
+            glslangIntermediate->getStage() == EShLangTessControl ||
+            glslangIntermediate->getStage() == EShLangTessEvaluation) {
 
-                builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
-                builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
-            }
+            builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
+            builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
         }
         return spv::BuiltInViewportIndex;
 
@@ -478,17 +488,14 @@
         return spv::BuiltInSampleMask;
 
     case glslang::EbvLayer:
-        if (!memberDeclaration) {
-            builder.addCapability(spv::CapabilityGeometry);
-            if (glslangIntermediate->getStage() == EShLangVertex ||
-                glslangIntermediate->getStage() == EShLangTessControl ||
-                glslangIntermediate->getStage() == EShLangTessEvaluation) {
+        builder.addCapability(spv::CapabilityGeometry);
+        if (glslangIntermediate->getStage() == EShLangVertex ||
+            glslangIntermediate->getStage() == EShLangTessControl ||
+            glslangIntermediate->getStage() == EShLangTessEvaluation) {
 
-                builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
-                builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
-            }
+            builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
+            builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
         }
-
         return spv::BuiltInLayer;
 
     case glslang::EbvPosition:             return spv::BuiltInPosition;
@@ -766,33 +773,41 @@
 {
     if (type.getQualifier().isPipeInput())
         return spv::StorageClassInput;
-    else if (type.getQualifier().isPipeOutput())
+    if (type.getQualifier().isPipeOutput())
         return spv::StorageClassOutput;
-    else if (type.getBasicType() == glslang::EbtAtomicUint)
-        return spv::StorageClassAtomicCounter;
-    else if (type.containsOpaque())
-        return spv::StorageClassUniformConstant;
-    else if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
+
+    if (glslangIntermediate->getSource() != glslang::EShSourceHlsl ||
+        type.getQualifier().storage == glslang::EvqUniform) {
+        if (type.getBasicType() == glslang::EbtAtomicUint)
+            return spv::StorageClassAtomicCounter;
+        if (type.containsOpaque())
+            return spv::StorageClassUniformConstant;
+    }
+
+    if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
         builder.addExtension(spv::E_SPV_KHR_storage_buffer_storage_class);
         return spv::StorageClassStorageBuffer;
-    } else if (type.getQualifier().isUniformOrBuffer()) {
+    }
+
+    if (type.getQualifier().isUniformOrBuffer()) {
         if (type.getQualifier().layoutPushConstant)
             return spv::StorageClassPushConstant;
         if (type.getBasicType() == glslang::EbtBlock)
             return spv::StorageClassUniform;
-        else
-            return spv::StorageClassUniformConstant;
-    } else {
-        switch (type.getQualifier().storage) {
-        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:
-            assert(0);
-            return spv::StorageClassFunction;
-        }
+        return spv::StorageClassUniformConstant;
     }
+
+    switch (type.getQualifier().storage) {
+    case glslang::EvqShared:        return spv::StorageClassWorkgroup;
+    case glslang::EvqGlobal:        return spv::StorageClassPrivate;
+    case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
+    case glslang::EvqTemporary:     return spv::StorageClassFunction;
+    default:
+        assert(0);
+        break;
+    }
+
+    return spv::StorageClassFunction;
 }
 
 // Return whether or not the given type is something that should be tied to a
@@ -1086,8 +1101,10 @@
     // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
     if (builder.isPointer(id)) {
         spv::StorageClass sc = builder.getStorageClass(id);
-        if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)
-            iOSet.insert(id);
+        if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput) {
+            if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0)
+                iOSet.insert(id);
+        }
     }
 
     // Only process non-linkage-only nodes for generating actual static uses
@@ -2485,10 +2502,6 @@
     if (member.getFieldName() == "gl_ViewportMaskPerViewNV" &&
         extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end())
         return true;
-    if ((member.getFieldName() == "gl_ViewportIndex" || member.getFieldName() == "gl_Layer") &&
-        extensions.find(glslang::E_GL_ARB_shader_viewport_layer_array) == extensions.end() &&
-        extensions.find("GL_NV_viewport_array2") == extensions.end())
-        return true;
 
     return false;
 };
@@ -2936,8 +2949,6 @@
     case glslang::EbvCullDistance:
     case glslang::EbvPointSize:
 #ifdef NV_EXTENSIONS
-    case glslang::EbvLayer:
-    case glslang::EbvViewportIndex:
     case glslang::EbvViewportMaskNV:
     case glslang::EbvSecondaryPositionNV:
     case glslang::EbvSecondaryViewportMaskNV:
@@ -2960,6 +2971,24 @@
     return node->getName().compare(glslangIntermediate->getEntryPointMangledName().c_str()) == 0;
 }
 
+// Does parameter need a place to keep writes, separate from the original?
+bool TGlslangToSpvTraverser::writableParam(glslang::TStorageQualifier qualifier)
+{
+    return qualifier != glslang::EvqConstReadOnly;
+}
+
+// Is parameter pass-by-original?
+bool TGlslangToSpvTraverser::originalParam(glslang::TStorageQualifier qualifier, const glslang::TType& paramType,
+                                           bool implicitThisParam)
+{
+    if (implicitThisParam)                                                                     // implicit this
+        return true;
+    if (glslangIntermediate->getSource() == glslang::EShSourceHlsl)
+        return false;
+    return paramType.containsOpaque() ||                                                       // sampler, etc.
+           (paramType.getBasicType() == glslang::EbtBlock && qualifier == glslang::EvqBuffer); // SSBO
+}
+
 // Make all the functions, skeletally, without actually visiting their bodies.
 void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslFunctions)
 {
@@ -3000,13 +3029,9 @@
         for (int p = 0; p < (int)parameters.size(); ++p) {
             const glslang::TType& paramType = parameters[p]->getAsTyped()->getType();
             spv::Id typeId = convertGlslangToSpvType(paramType);
-            // can we pass by reference?
-            if (paramType.containsOpaque() ||                                // sampler, etc.
-                (paramType.getBasicType() == glslang::EbtBlock &&
-                 paramType.getQualifier().storage == glslang::EvqBuffer) ||  // SSBO
-                (p == 0 && implicitThis))                                    // implicit 'this'
+            if (originalParam(paramType.getQualifier().storage, paramType, implicitThis && p == 0))
                 typeId = builder.makePointer(TranslateStorageClass(paramType), typeId);
-            else if (paramType.getQualifier().storage != glslang::EvqConstReadOnly)
+            else if (writableParam(paramType.getQualifier().storage))
                 typeId = builder.makePointer(spv::StorageClassFunction, typeId);
             else
                 rValueParameters.insert(parameters[p]->getAsSymbolNode()->getId());
@@ -3204,9 +3229,7 @@
     glslang::TCrackedTextureOp cracked;
     node->crackTexture(sampler, cracked);
 
-    const bool isUnsignedResult =
-        node->getType().getBasicType() == glslang::EbtUint64 ||
-        node->getType().getBasicType() == glslang::EbtUint;
+    const bool isUnsignedResult = node->getType().getBasicType() == glslang::EbtUint;
 
     // Check for queries
     if (cracked.query) {
@@ -3258,7 +3281,9 @@
                 operands.push_back(spv::ImageOperandsSampleMask);
                 operands.push_back(*(opIt++));
             }
-            return builder.createOp(spv::OpImageRead, resultType(), operands);
+            spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands);
+            builder.setPrecision(result, precision);
+            return result;
         }
 
         operands.push_back(*(opIt++));
@@ -3281,7 +3306,10 @@
             }
             if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
                 builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
-            return builder.createOp(spv::OpImageRead, resultType(), operands);
+
+            spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands);
+            builder.setPrecision(result, precision);
+            return result;
 #ifdef AMD_EXTENSIONS
         } else if (node->getOp() == glslang::EOpImageStore || node->getOp() == glslang::EOpImageStoreLod) {
 #else
@@ -3358,6 +3386,45 @@
         }
     }
 
+#ifdef AMD_EXTENSIONS
+    // Check for fragment mask functions other than queries
+    if (cracked.fragMask) {
+        assert(sampler.ms);
+
+        auto opIt = arguments.begin();
+        std::vector<spv::Id> operands;
+
+        // Extract the image if necessary
+        if (builder.isSampledImage(params.sampler))
+            params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
+
+        operands.push_back(params.sampler);
+        ++opIt;
+
+        if (sampler.isSubpass()) {
+            // add on the (0,0) coordinate
+            spv::Id zero = builder.makeIntConstant(0);
+            std::vector<spv::Id> comps;
+            comps.push_back(zero);
+            comps.push_back(zero);
+            operands.push_back(builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps));
+        }
+
+        for (; opIt != arguments.end(); ++opIt)
+            operands.push_back(*opIt);
+
+        spv::Op fragMaskOp = spv::OpNop;
+        if (node->getOp() == glslang::EOpFragmentMaskFetch)
+            fragMaskOp = spv::OpFragmentMaskFetchAMD;
+        else if (node->getOp() == glslang::EOpFragmentFetch)
+            fragMaskOp = spv::OpFragmentFetchAMD;
+
+        builder.addExtension(spv::E_SPV_AMD_shader_fragment_mask);
+        builder.addCapability(spv::CapabilityFragmentMaskAMD);
+        return builder.createOp(fragMaskOp, resultType(), operands);
+    }
+#endif
+
     // Check for texture functions other than queries
     bool sparse = node->isSparseTexture();
     bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
@@ -3547,8 +3614,9 @@
         builder.clearAccessChain();
         glslangArgs[a]->traverse(this);
         argTypes.push_back(&paramType);
-        // keep outputs and opaque objects as l-values, evaluate input-only as r-values
-        if (qualifiers[a] != glslang::EvqConstReadOnly || paramType.containsOpaque()) {
+        // keep outputs and pass-by-originals as l-values, evaluate others as r-values
+        if (writableParam(qualifiers[a]) ||
+            originalParam(qualifiers[a], paramType, function->hasImplicitThis() && a == 0)) {
             // save l-value
             lValues.push_back(builder.getAccessChain());
         } else {
@@ -3567,13 +3635,11 @@
     for (int a = 0; a < (int)glslangArgs.size(); ++a) {
         const glslang::TType& paramType = glslangArgs[a]->getAsTyped()->getType();
         spv::Id arg;
-        if (paramType.containsOpaque() ||
-            (paramType.getBasicType() == glslang::EbtBlock && qualifiers[a] == glslang::EvqBuffer) ||
-            (a == 0 && function->hasImplicitThis())) {
+        if (originalParam(qualifiers[a], paramType, function->hasImplicitThis() && a == 0)) {
             builder.setAccessChain(lValues[lValueCount]);
             arg = builder.accessChainGetLValue();
             ++lValueCount;
-        } else if (qualifiers[a] != glslang::EvqConstReadOnly) {
+        } else if (writableParam(qualifiers[a])) {
             // need space to hold the copy
             arg = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(paramType), "param");
             if (qualifiers[a] == glslang::EvqIn || qualifiers[a] == glslang::EvqInOut) {
@@ -3600,7 +3666,9 @@
     lValueCount = 0;
     for (int a = 0; a < (int)glslangArgs.size(); ++a) {
         const glslang::TType& paramType = glslangArgs[a]->getAsTyped()->getType();
-        if (qualifiers[a] != glslang::EvqConstReadOnly) {
+        if (originalParam(qualifiers[a], paramType, function->hasImplicitThis() && a == 0))
+            ++lValueCount;
+        else if (writableParam(qualifiers[a])) {
             if (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) {
                 spv::Id copy = builder.createLoad(spvArgs[a]);
                 builder.setAccessChain(lValues[lValueCount]);
@@ -4716,12 +4784,12 @@
     case glslang::EOpAtomicMin:
     case glslang::EOpImageAtomicMin:
     case glslang::EOpAtomicCounterMin:
-        opCode = typeProxy == glslang::EbtUint ? spv::OpAtomicUMin : spv::OpAtomicSMin;
+        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? spv::OpAtomicUMin : spv::OpAtomicSMin;
         break;
     case glslang::EOpAtomicMax:
     case glslang::EOpImageAtomicMax:
     case glslang::EOpAtomicCounterMax:
-        opCode = typeProxy == glslang::EbtUint ? spv::OpAtomicUMax : spv::OpAtomicSMax;
+        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? spv::OpAtomicUMax : spv::OpAtomicSMax;
         break;
     case glslang::EOpAtomicAnd:
     case glslang::EOpImageAtomicAnd:
@@ -4762,11 +4830,15 @@
         break;
     }
 
+    if (typeProxy == glslang::EbtInt64 || typeProxy == glslang::EbtUint64)
+        builder.addCapability(spv::CapabilityInt64Atomics);
+
     // Sort out the operands
     //  - mapping from glslang -> SPV
     //  - there are extra SPV operands with no glslang source
     //  - compare-exchange swaps the value and comparator
     //  - compare-exchange has an extra memory semantics
+    //  - EOpAtomicCounterDecrement needs a post decrement
     std::vector<spv::Id> spvAtomicOperands;  // hold the spv operands
     auto opIt = operands.begin();            // walk the glslang operands
     spvAtomicOperands.push_back(*(opIt++));
@@ -4785,7 +4857,14 @@
     for (; opIt != operands.end(); ++opIt)
         spvAtomicOperands.push_back(*opIt);
 
-    return builder.createOp(opCode, typeId, spvAtomicOperands);
+    spv::Id resultId = builder.createOp(opCode, typeId, spvAtomicOperands);
+
+    // GLSL and HLSL atomic-counter decrement return post-decrement value,
+    // while SPIR-V returns pre-decrement value. Translate between these semantics.
+    if (op == glslang::EOpAtomicCounterDecrement)
+        resultId = builder.createBinOp(spv::OpISub, typeId, resultId, builder.makeIntConstant(1));
+
+    return resultId;
 }
 
 // Create group invocation operations.
@@ -5924,6 +6003,12 @@
     out.close();
 }
 
+#ifdef ENABLE_OPT
+void errHandler(const std::string& str) {
+    std::cerr << str << std::endl;
+}
+#endif
+
 //
 // Set up the glslang traversal
 //
@@ -5952,6 +6037,50 @@
     it.finishSpv();
     it.dumpSpv(spirv);
 
+#ifdef ENABLE_OPT
+    // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan
+    // eg. forward and remove memory writes of opaque types.
+    if ((intermediate.getSource() == EShSourceHlsl ||
+                options->optimizeSize) &&
+            !options->disableOptimizer) {
+        spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2;
+
+        spvtools::Optimizer optimizer(target_env);
+        optimizer.SetMessageConsumer([](spv_message_level_t level,
+                                         const char* source,
+                                         const spv_position_t& position,
+                                         const char* message) {
+            std::cerr << StringifyMessage(level, source, position, message)
+                      << std::endl;
+        });
+
+        optimizer.RegisterPass(CreateInlineExhaustivePass());
+        optimizer.RegisterPass(CreateLocalAccessChainConvertPass());
+        optimizer.RegisterPass(CreateLocalSingleBlockLoadStoreElimPass());
+        optimizer.RegisterPass(CreateLocalSingleStoreElimPass());
+        optimizer.RegisterPass(CreateInsertExtractElimPass());
+        optimizer.RegisterPass(CreateAggressiveDCEPass());
+        optimizer.RegisterPass(CreateDeadBranchElimPass());
+        optimizer.RegisterPass(CreateCFGCleanupPass());
+        optimizer.RegisterPass(CreateBlockMergePass());
+        optimizer.RegisterPass(CreateLocalMultiStoreElimPass());
+        optimizer.RegisterPass(CreateInsertExtractElimPass());
+        optimizer.RegisterPass(CreateAggressiveDCEPass());
+        // TODO(greg-lunarg): Add this when AMD driver issues are resolved
+        // if (options->optimizeSize)
+        //     optimizer.RegisterPass(CreateCommonUniformElimPass());
+
+        if (!optimizer.Run(spirv.data(), spirv.size(), &spirv))
+            return;
+
+        // Remove dead module-level objects: functions, types, vars
+        // TODO(greg-lunarg): Switch to spirv-opt versions when available
+        spv::spirvbin_t Remapper(0);
+        Remapper.registerErrorHandler(errHandler);
+        Remapper.remap(spirv, spv::spirvbin_t::DCE_ALL);
+    }
+#endif
+
     glslang::GetThreadPoolAllocator().pop();
 }
 
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
index 0dad4d2..0398501 100644
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -48,8 +48,11 @@
 namespace glslang {
 
 struct SpvOptions {
-    SpvOptions() : generateDebugInfo(false) { }
+    SpvOptions() : generateDebugInfo(false), disableOptimizer(true),
+        optimizeSize(false) { }
     bool generateDebugInfo;
+    bool disableOptimizer;
+    bool optimizeSize;
 };
 
 void GetSpirvVersion(std::string&);
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index e8031d0..4d96df6 100755
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -135,6 +135,9 @@
         const unsigned typeStart = idPos(id);
         const spv::Op  opCode    = asOpCode(typeStart);
 
+        if (errorLatch)
+            return 0;
+
         switch (opCode) {
         case spv::OpTypeInt:   // fall through...
         case spv::OpTypeFloat: return (spv[typeStart+2]+31)/32;
@@ -148,8 +151,10 @@
     unsigned spirvbin_t::idTypeSizeInWords(spv::Id id) const
     {
         const auto tid_it = idTypeSizeMap.find(id);
-        if (tid_it == idTypeSizeMap.end())
+        if (tid_it == idTypeSizeMap.end()) {
             error("type size for ID not found");
+            return 0;
+        }
 
         return tid_it->second;
     }
@@ -215,14 +220,19 @@
     bool spirvbin_t::isConstOp(spv::Op opCode) const
     {
         switch (opCode) {
-        case spv::OpConstantNull:       error("unimplemented constant type");
-        case spv::OpConstantSampler:    error("unimplemented constant type");
+        case spv::OpConstantNull:
+        case spv::OpConstantSampler:
+            error("unimplemented constant type");
+            return true;
 
         case spv::OpConstantTrue:
         case spv::OpConstantFalse:
         case spv::OpConstantComposite:
-        case spv::OpConstant:         return true;
-        default:                      return false;
+        case spv::OpConstant:
+            return true;
+
+        default:
+            return false;
         }
     }
 
@@ -248,19 +258,31 @@
     {
         assert(id != spv::NoResult && newId != spv::NoResult);
 
+        if (id > bound()) {
+            error(std::string("ID out of range: ") + std::to_string(id));
+            return spirvbin_t::unused;
+        }
+
         if (id >= idMapL.size())
             idMapL.resize(id+1, unused);
 
         if (newId != unmapped && newId != unused) {
-            if (isOldIdUnused(id))
+            if (isOldIdUnused(id)) {
                 error(std::string("ID unused in module: ") + std::to_string(id));
+                return spirvbin_t::unused;
+            }
 
-            if (!isOldIdUnmapped(id))
+            if (!isOldIdUnmapped(id)) {
                 error(std::string("ID already mapped: ") + std::to_string(id) + " -> "
-                + std::to_string(localId(id)));
+                        + std::to_string(localId(id)));
 
-            if (isNewIdMapped(newId))
+                return spirvbin_t::unused;
+            }
+
+            if (isNewIdMapped(newId)) {
                 error(std::string("ID already used in module: ") + std::to_string(newId));
+                return spirvbin_t::unused;
+            }
 
             msg(4, 4, std::string("map: ") + std::to_string(id) + " -> " + std::to_string(newId));
             setMapped(newId);
@@ -294,6 +316,10 @@
         process(inst_fn_nop, // ignore instructions
             [this](spv::Id& id) {
                 id = localId(id);
+
+                if (errorLatch)
+                    return;
+
                 assert(id != unused && id != unmapped);
             }
         );
@@ -312,14 +338,22 @@
                 continue;
 
             // Find a new mapping for any used but unmapped IDs
-            if (isOldIdUnmapped(id))
+            if (isOldIdUnmapped(id)) {
                 localId(id, unusedId = nextUnusedId(unusedId));
+                if (errorLatch)
+                    return;
+            }
 
-            if (isOldIdUnmapped(id))
+            if (isOldIdUnmapped(id)) {
                 error(std::string("old ID not mapped: ") + std::to_string(id));
+                return;
+            }
 
             // Track max bound
             maxBound = std::max(maxBound, localId(id) + 1);
+
+            if (errorLatch)
+                return;
         }
 
         bound(maxBound); // reset header ID bound to as big as it now needs to be
@@ -401,6 +435,9 @@
                     if (typeId != spv::NoResult) {
                         const unsigned idTypeSize = typeSizeInWords(typeId);
 
+                        if (errorLatch)
+                            return false;
+
                         if (idTypeSize != 0)
                             idTypeSizeMap[resultId] = idTypeSize;
                     }
@@ -416,17 +453,26 @@
                 } else if (opCode == spv::Op::OpEntryPoint) {
                     entryPoint = asId(start + 2);
                 } else if (opCode == spv::Op::OpFunction) {
-                    if (fnStart != 0)
+                    if (fnStart != 0) {
                         error("nested function found");
+                        return false;
+                    }
+
                     fnStart = start;
                     fnRes   = asId(start + 2);
                 } else if (opCode == spv::Op::OpFunctionEnd) {
                     assert(fnRes != spv::NoResult);
-                    if (fnStart == 0)
+                    if (fnStart == 0) {
                         error("function end without function start");
+                        return false;
+                    }
+
                     fnPos[fnRes] = range_t(fnStart, start + asWordCount(start));
                     fnStart = 0;
                 } else if (isConstOp(opCode)) {
+                    if (errorLatch)
+                        return false;
+
                     assert(asId(start + 2) != spv::NoResult);
                     typeConstPos.insert(start);
                 } else if (isTypeOp(opCode)) {
@@ -446,18 +492,24 @@
     {
         msg(2, 2, std::string("validating: "));
 
-        if (spv.size() < header_size)
+        if (spv.size() < header_size) {
             error("file too short: ");
+            return;
+        }
 
-        if (magic() != spv::MagicNumber)
+        if (magic() != spv::MagicNumber) {
             error("bad magic number");
+            return;
+        }
 
         // field 1 = version
         // field 2 = generator magic
         // field 3 = result <id> bound
 
-        if (schemaNum() != 0)
+        if (schemaNum() != 0) {
             error("bad schema, must be 0");
+            return;
+        }
     }
 
     int spirvbin_t::processInstruction(unsigned word, instfn_t instFn, idfn_t idFn)
@@ -467,8 +519,10 @@
         const int      nextInst  = word++ + wordCount;
         spv::Op  opCode    = asOpCode(instructionStart);
 
-        if (nextInst > int(spv.size()))
+        if (nextInst > int(spv.size())) {
             error("spir instruction terminated too early");
+            return -1;
+        }
 
         // Base for computing number of operands; will be updated as more is learned
         unsigned numOperands = wordCount - 1;
@@ -550,6 +604,9 @@
                     const unsigned literalSize = idTypeSizeInWords(idBuffer[literalSizePos]);
                     const unsigned numLiteralIdPairs = (nextInst-word) / (1+literalSize);
 
+                    if (errorLatch)
+                        return -1;
+
                     for (unsigned arg=0; arg<numLiteralIdPairs; ++arg) {
                         word += literalSize;  // literal
                         idFn(asId(word++));   // label
@@ -626,9 +683,13 @@
         // basic parsing and InstructionDesc table borrowed from SpvDisassemble.cpp...
         unsigned nextInst = unsigned(spv.size());
 
-        for (unsigned word = begin; word < end; word = nextInst)
+        for (unsigned word = begin; word < end; word = nextInst) {
             nextInst = processInstruction(word, instFn, idFn);
 
+            if (errorLatch)
+                return *this;
+        }
+
         return *this;
     }
 
@@ -643,8 +704,11 @@
             for (const char c : name.first)
                 hashval = hashval * 1009 + c;
 
-            if (isOldIdUnmapped(name.second))
+            if (isOldIdUnmapped(name.second)) {
                 localId(name.second, nextUnusedId(hashval % softTypeIdLimit + firstMappedID));
+                if (errorLatch)
+                    return;
+            }
         }
     }
 
@@ -666,6 +730,9 @@
             [&](spv::Op, unsigned start) { instPos.push_back(start); return true; },
             op_fn_nop);
 
+        if (errorLatch)
+            return;
+
         // Window size for context-sensitive canonicalization values
         // Empirical best size from a single data set.  TODO: Would be a good tunable.
         // We essentially perform a little convolution around each instruction,
@@ -701,8 +768,12 @@
                         hashval = hashval * 30103 + asOpCodeHash(instPos[i]); // 30103 = semiarbitrary prime
                     }
 
-                    if (isOldIdUnmapped(resId))
+                    if (isOldIdUnmapped(resId)) {
                         localId(resId, nextUnusedId(hashval % softTypeIdLimit + firstMappedID));
+                        if (errorLatch)
+                            return;
+                    }
+
                 }
             }
         }
@@ -795,6 +866,9 @@
             [&](spv::Id& id) { if (idMap.find(id) != idMap.end()) id = idMap[id]; }
         );
 
+        if (errorLatch)
+            return;
+
         // EXPERIMENTAL: Implicit output stores
         fnLocalVars.clear();
         idMap.clear();
@@ -815,11 +889,17 @@
             },
             op_fn_nop);
 
+        if (errorLatch)
+            return;
+
         process(
             inst_fn_nop,
             [&](spv::Id& id) { if (idMap.find(id) != idMap.end()) id = idMap[id]; }
         );
 
+        if (errorLatch)
+            return;
+
         strip();          // strip out data we decided to eliminate
     }
 
@@ -919,6 +999,9 @@
             }
         );
 
+        if (errorLatch)
+            return;
+
         process(
             [&](spv::Op opCode, unsigned start) {
                 if (opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0)
@@ -927,6 +1010,9 @@
             },
             op_fn_nop);
 
+        if (errorLatch)
+            return;
+
         // Chase replacements to their origins, in case there is a chain such as:
         //   2 = store 1
         //   3 = load 2
@@ -960,6 +1046,9 @@
             }
         );
 
+        if (errorLatch)
+            return;
+
         strip();          // strip out data we decided to eliminate
     }
 
@@ -1003,6 +1092,9 @@
                         fn->second.first,
                         fn->second.second);
 
+                    if (errorLatch)
+                        return;
+
                     fn = fnPos.erase(fn);
                 } else ++fn;
             }
@@ -1035,6 +1127,9 @@
             [&](spv::Id& id) { if (varUseCount[id]) ++varUseCount[id]; }
         );
 
+        if (errorLatch)
+            return;
+
         // Remove single-use function variables + associated decorations and names
         process(
             [&](spv::Op opCode, unsigned start) {
@@ -1076,6 +1171,9 @@
                     [&](spv::Id& id) { if (isType[id]) ++typeUseCount[id]; }
                     );
 
+            if (errorLatch)
+                return;
+
             // Remove single reference types
             for (const auto typeStart : typeConstPos) {
                 const spv::Id typeId = asTypeConstId(typeStart);
@@ -1085,6 +1183,9 @@
                     stripInst(typeStart);
                 }
             }
+
+            if (errorLatch)
+                return;
         }
     }
 
@@ -1163,8 +1264,10 @@
     unsigned spirvbin_t::idPos(spv::Id id) const
     {
         const auto tid_it = idPosR.find(id);
-        if (tid_it == idPosR.end())
+        if (tid_it == idPosR.end()) {
             error("ID not found");
+            return 0;
+        }
 
         return tid_it->second;
     }
@@ -1263,8 +1366,14 @@
             const spv::Id       resId     = asTypeConstId(typeStart);
             const std::uint32_t hashval   = hashType(typeStart);
 
-            if (isOldIdUnmapped(resId))
+            if (errorLatch)
+                return;
+
+            if (isOldIdUnmapped(resId)) {
                 localId(resId, nextUnusedId(hashval % softTypeIdLimit + firstMappedID));
+                if (errorLatch)
+                    return;
+            }
         }
     }
 
@@ -1310,24 +1419,49 @@
         msg(3, 4, std::string("ID bound: ") + std::to_string(bound()));
 
         if (options & STRIP)         stripDebug();
+        if (errorLatch) return;
+
         strip();        // strip out data we decided to eliminate
+        if (errorLatch) return;
+
         if (options & OPT_LOADSTORE) optLoadStore();
+        if (errorLatch) return;
+
         if (options & OPT_FWD_LS)    forwardLoadStores();
+        if (errorLatch) return;
+
         if (options & DCE_FUNCS)     dceFuncs();
+        if (errorLatch) return;
+
         if (options & DCE_VARS)      dceVars();
+        if (errorLatch) return;
+
         if (options & DCE_TYPES)     dceTypes();
+        if (errorLatch) return;
 
         strip();         // strip out data we decided to eliminate
+        if (errorLatch) return;
+
         stripDeadRefs(); // remove references to things we DCEed
+        if (errorLatch) return;
+
         // after the last strip, we must clean any debug info referring to now-deleted data
 
         if (options & MAP_TYPES)     mapTypeConst();
+        if (errorLatch) return;
+
         if (options & MAP_NAMES)     mapNames();
+        if (errorLatch) return;
+
         if (options & MAP_FUNCS)     mapFnBodies();
+        if (errorLatch) return;
 
         if (options & MAP_ALL) {
             mapRemainder(); // map any unmapped IDs
+            if (errorLatch) return;
+
             applyMap();     // Now remap each shader to the new IDs we've come up with
+            if (errorLatch) return;
         }
     }
 
diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h
index f9f369a..97e3f31 100755
--- a/SPIRV/SPVRemapper.h
+++ b/SPIRV/SPVRemapper.h
@@ -39,6 +39,7 @@
 #include <string>
 #include <vector>
 #include <cstdlib>
+#include <exception>
 
 namespace spv {
 
@@ -111,7 +112,9 @@
 class spirvbin_t : public spirvbin_base_t
 {
 public:
-   spirvbin_t(int verbose = 0) : entryPoint(spv::NoResult), largestNewId(0), verbose(verbose) { }
+   spirvbin_t(int verbose = 0) : entryPoint(spv::NoResult), largestNewId(0), verbose(verbose), errorLatch(false)
+   { }
+
    virtual ~spirvbin_t() { }
 
    // remap on an existing binary in memory
@@ -165,7 +168,7 @@
    typedef std::unordered_map<spv::Id, unsigned> typesize_map_t;
 
    // handle error
-   void error(const std::string& txt) const { errorHandler(txt); }
+   void error(const std::string& txt) const { errorLatch = true; errorHandler(txt); }
 
    bool     isConstOp(spv::Op opCode)      const;
    bool     isTypeOp(spv::Op opCode)       const;
@@ -286,6 +289,11 @@
    std::uint32_t options;
    int           verbose;     // verbosity level
 
+   // Error latch: this is set if the error handler is ever executed.  It would be better to
+   // use a try/catch block and throw, but that's not desired for certain environments, so
+   // this is the alternative.
+   mutable bool errorLatch;
+
    static errorfn_t errorHandler;
    static logfn_t   logHandler;
 };
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 289d59a..c795ca8 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -469,7 +469,10 @@
 
     if (ms) {
         if (sampled == 2) {
-            addCapability(CapabilityStorageImageMultisample);
+            // Images used with subpass data are not storage
+            // images, so don't require the capability for them.
+            if (dim != Dim::DimSubpassData)
+                addCapability(CapabilityStorageImageMultisample);
             if (arrayed)
                 addCapability(CapabilityImageMSArray);
         }
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index 2fe5d9c..f9d5254 100755
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -847,6 +847,7 @@
 
 #ifdef AMD_EXTENSIONS
     case 5009: return "ImageGatherBiasLodAMD";
+    case 5010: return "FragmentMaskAMD";
     case 5015: return "ImageReadWriteLodAMD";
 #endif
 
@@ -1207,6 +1208,9 @@
     case 5005: return "OpGroupFMaxNonUniformAMD";
     case 5006: return "OpGroupUMaxNonUniformAMD";
     case 5007: return "OpGroupSMaxNonUniformAMD";
+
+    case 5011: return "OpFragmentMaskFetchAMD";
+    case 5012: return "OpFragmentFetchAMD";
 #endif
 
     case OpcodeCeiling:
@@ -2869,6 +2873,15 @@
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
+
+    InstructionDesc[OpFragmentMaskFetchAMD].capabilities.push_back(CapabilityFragmentMaskAMD);
+    InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'");
+    InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'");
+
+    InstructionDesc[OpFragmentFetchAMD].capabilities.push_back(CapabilityFragmentMaskAMD);
+    InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
+    InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
 #endif
 }
 
diff --git a/StandAlone/DirStackFileIncluder.h b/StandAlone/DirStackFileIncluder.h
index 8d6543a..1873413 100644
--- a/StandAlone/DirStackFileIncluder.h
+++ b/StandAlone/DirStackFileIncluder.h
@@ -54,7 +54,7 @@
                                         const char* includerName,
                                         size_t inclusionDepth) override
     {
-        return readLocalPath(headerName, includerName, inclusionDepth);
+        return readLocalPath(headerName, includerName, (int)inclusionDepth);
     }
 
     virtual IncludeResult* includeSystem(const char* headerName,
@@ -73,7 +73,7 @@
     virtual void pushExternalLocalDirectory(const std::string& dir)
     {
         directoryStack.push_back(dir);
-        externalLocalDirectoryCount = directoryStack.size();
+        externalLocalDirectoryCount = (int)directoryStack.size();
     }
 
     virtual void releaseInclude(IncludeResult* result) override
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 53a33b8..19302cb 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -55,6 +55,7 @@
 #include <cctype>
 #include <cmath>
 #include <array>
+#include <map>
 #include <memory>
 #include <thread>
 
@@ -94,6 +95,9 @@
     EOptionHlslIoMapping        = (1 << 24),
     EOptionAutoMapLocations     = (1 << 25),
     EOptionDebug                = (1 << 26),
+    EOptionStdin                = (1 << 27),
+    EOptionOptimizeDisable      = (1 << 28),
+    EOptionOptimizeSize         = (1 << 29),
 };
 
 //
@@ -154,12 +158,11 @@
 unsigned int TargetVersion = 0x00001000; // maps to, say, SPIR-V 1.0
 std::vector<std::string> Processes;      // what should be recorded by OpModuleProcessed, or equivalent
 
-std::array<unsigned int, EShLangCount> baseSamplerBinding;
-std::array<unsigned int, EShLangCount> baseTextureBinding;
-std::array<unsigned int, EShLangCount> baseImageBinding;
-std::array<unsigned int, EShLangCount> baseUboBinding;
-std::array<unsigned int, EShLangCount> baseSsboBinding;
-std::array<unsigned int, EShLangCount> baseUavBinding;
+// Per descriptor-set binding base data
+typedef std::map<unsigned int, unsigned int> TPerSetBaseBinding;
+
+std::array<std::array<unsigned int, EShLangCount>, glslang::EResCount> baseBinding;
+std::array<std::array<TPerSetBaseBinding, EShLangCount>, glslang::EResCount> baseBindingForSet;
 std::array<std::vector<std::string>, EShLangCount> baseResourceSetBinding;
 
 // Add things like "#define ..." to a preamble to use in the beginning of the shader.
@@ -263,31 +266,54 @@
 }
 
 //
-// Process an optional binding base of the form:
-//   --argname [stage] base
+// Process an optional binding base of one the forms:
+//   --argname [stage] base            // base for stage (if given) or all stages (if not)
+//   --argname [stage] [set base]...   // set/base pairs: set the base for given binding set.
+
 // Where stage is one of the forms accepted by FindLanguage, and base is an integer
 //
-void ProcessBindingBase(int& argc, char**& argv, std::array<unsigned int, EShLangCount>& base)
+void ProcessBindingBase(int& argc, char**& argv, glslang::TResourceType res)
 {
     if (argc < 2)
         usage();
 
-    if (!isdigit(argv[1][0])) {
+    EShLanguage lang = EShLangCount;
+    int singleBase = 0;
+    TPerSetBaseBinding perSetBase;
+    int arg = 1;
+
+    // Parse stage, if given
+    if (!isdigit(argv[arg][0])) {
         if (argc < 3) // this form needs one more argument
             usage();
 
-        // Parse form: --argname stage base
-        const EShLanguage lang = FindLanguage(argv[1], false);
-        base[lang] = atoi(argv[2]);
-        argc-= 2;
-        argv+= 2;
-    } else {
-        // Parse form: --argname base
-        for (int lang=0; lang<EShLangCount; ++lang)
-            base[lang] = atoi(argv[1]);
+        lang = FindLanguage(argv[arg++], false);
+    }
 
-        argc--;
-        argv++;
+    if ((argc - arg) > 2 && isdigit(argv[arg+0][0]) && isdigit(argv[arg+1][0])) {
+        // Parse a per-set binding base
+        while ((argc - arg) > 2 && isdigit(argv[arg+0][0]) && isdigit(argv[arg+1][0])) {
+            const int setNum = atoi(argv[arg++]);
+            const int baseNum = atoi(argv[arg++]);
+            perSetBase[setNum] = baseNum;
+        }
+    } else {
+        // Parse single binding base
+        singleBase = atoi(argv[arg++]);
+    }
+
+    argc -= (arg-1);
+    argv += (arg-1);
+
+    // Set one or all languages
+    const int langMin = (lang < EShLangCount) ? lang+0 : 0;
+    const int langMax = (lang < EShLangCount) ? lang+1 : EShLangCount;
+
+    for (int lang = langMin; lang < langMax; ++lang) {
+        if (!perSetBase.empty())
+            baseBindingForSet[res][lang] = perSetBase;
+        else
+            baseBinding[res][lang] = singleBase;
     }
 }
 
@@ -336,12 +362,8 @@
 //
 void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItems, int argc, char* argv[])
 {
-    baseSamplerBinding.fill(0);
-    baseTextureBinding.fill(0);
-    baseImageBinding.fill(0);
-    baseUboBinding.fill(0);
-    baseSsboBinding.fill(0);
-    baseUavBinding.fill(0);
+    for (int res = 0; res < glslang::EResCount; ++res)
+        baseBinding[res].fill(0);
 
     ExecutableName = argv[0];
     workItems.reserve(argc);
@@ -438,30 +460,30 @@
                     } else if (lowerword == "shift-image-bindings" ||  // synonyms
                                lowerword == "shift-image-binding"  ||
                                lowerword == "sib") {
-                        ProcessBindingBase(argc, argv, baseImageBinding);
+                        ProcessBindingBase(argc, argv, glslang::EResImage);
                     } else if (lowerword == "shift-sampler-bindings" || // synonyms
                         lowerword == "shift-sampler-binding"  ||
                         lowerword == "ssb") {
-                        ProcessBindingBase(argc, argv, baseSamplerBinding);
+                        ProcessBindingBase(argc, argv, glslang::EResSampler);
                     } else if (lowerword == "shift-uav-bindings" ||  // synonyms
                                lowerword == "shift-uav-binding"  ||
                                lowerword == "suavb") {
-                        ProcessBindingBase(argc, argv, baseUavBinding);
+                        ProcessBindingBase(argc, argv, glslang::EResUav);
                     } else if (lowerword == "shift-texture-bindings" ||  // synonyms
                                lowerword == "shift-texture-binding"  ||
                                lowerword == "stb") {
-                        ProcessBindingBase(argc, argv, baseTextureBinding);
+                        ProcessBindingBase(argc, argv, glslang::EResTexture);
                     } else if (lowerword == "shift-ubo-bindings" ||  // synonyms
                                lowerword == "shift-ubo-binding"  ||
                                lowerword == "shift-cbuffer-bindings" ||
                                lowerword == "shift-cbuffer-binding"  ||
                                lowerword == "sub" ||
                                lowerword == "scb") {
-                        ProcessBindingBase(argc, argv, baseUboBinding);
+                        ProcessBindingBase(argc, argv, glslang::EResUbo);
                     } else if (lowerword == "shift-ssbo-bindings" ||  // synonyms
                                lowerword == "shift-ssbo-binding"  ||
                                lowerword == "sbb") {
-                        ProcessBindingBase(argc, argv, baseSsboBinding);
+                        ProcessBindingBase(argc, argv, glslang::EResSsbo);
                     } else if (lowerword == "source-entrypoint" || // synonyms
                                lowerword == "sep") {
                         if (argc <= 1)
@@ -469,6 +491,9 @@
                         sourceEntryPointName = argv[1];
                         bumpArg();
                         break;
+                    } else if (lowerword == "stdin") {
+                        Options |= EOptionStdin;
+                        shaderStageName = argv[1];
                     } else if (lowerword == "suppress-warnings") {
                         Options |= EOptionSuppressWarnings;
                     } else if (lowerword == "target-env") {
@@ -524,6 +549,18 @@
             case 'I':
                 IncludeDirectoryList.push_back(getStringOperand("-I<dir> include path"));
                 break;
+            case 'O':
+                if (argv[0][2] == 'd')
+                    Options |= EOptionOptimizeDisable;
+                else if (argv[0][2] == 's')
+#ifdef ENABLE_OPT
+                    Options |= EOptionOptimizeSize;
+#else
+                    Error("-Os not available; optimizer not linked");
+#endif
+                else
+                    Error("unknown -O option");
+                break;
             case 'S':
                 if (argc <= 1)
                     Error("no <stage> specified for -S");
@@ -549,7 +586,7 @@
                 // This is okay for one compilation unit with one entry point.
                 entryPointName = argv[1];
                 if (argc <= 1)
-                    Error("no <entry-point> provided for -e");
+                    Error("no <name> provided for -e");
                 bumpArg();
                 break;
             case 'g':
@@ -606,6 +643,10 @@
         }
     }
 
+    // Make sure that -S is always specified if --stdin is specified
+    if ((Options & EOptionStdin) && shaderStageName == nullptr)
+        Error("must provide -S when --stdin is given");
+
     // Make sure that -E is not specified alongside linking (which includes SPV generation)
     if ((Options & EOptionOutputPreprocessed) && (Options & EOptionLinkProgram))
         Error("can't use -E when linking is selected");
@@ -654,17 +695,31 @@
 void CompileShaders(glslang::TWorklist& worklist)
 {
     glslang::TWorkItem* workItem;
-    while (worklist.remove(workItem)) {
-        ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), Options);
+    if (Options & EOptionStdin) {
+        worklist.remove(workItem);
+        ShHandle compiler = ShConstructCompiler(FindLanguage("stdin"), Options);
         if (compiler == 0)
             return;
 
-        CompileFile(workItem->name.c_str(), compiler);
+        CompileFile("stdin", compiler);
 
-        if (! (Options & EOptionSuppressInfolog))
-            workItem->results = ShGetInfoLog(compiler);
+            if (! (Options & EOptionSuppressInfolog))
+                workItem->results = ShGetInfoLog(compiler);
 
         ShDestruct(compiler);
+    } else {
+        while (worklist.remove(workItem)) {
+            ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), Options);
+            if (compiler == 0)
+                return;
+
+            CompileFile(workItem->name.c_str(), compiler);
+
+            if (! (Options & EOptionSuppressInfolog))
+                workItem->results = ShGetInfoLog(compiler);
+
+            ShDestruct(compiler);
+        }
     }
 }
 
@@ -745,18 +800,30 @@
         shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, compUnit.count);
         if (entryPointName) // HLSL todo: this needs to be tracked per compUnits
             shader->setEntryPoint(entryPointName);
-        if (sourceEntryPointName)
+        if (sourceEntryPointName) {
+            if (entryPointName == nullptr)
+                printf("Warning: Changing source entry point name without setting an entry-point name.\n"
+                       "Use '-e <name>'.\n");
             shader->setSourceEntryPoint(sourceEntryPointName);
+        }
         if (UserPreamble.isSet())
             shader->setPreamble(UserPreamble.get());
         shader->addProcesses(Processes);
 
-        shader->setShiftSamplerBinding(baseSamplerBinding[compUnit.stage]);
-        shader->setShiftTextureBinding(baseTextureBinding[compUnit.stage]);
-        shader->setShiftImageBinding(baseImageBinding[compUnit.stage]);
-        shader->setShiftUboBinding(baseUboBinding[compUnit.stage]);
-        shader->setShiftSsboBinding(baseSsboBinding[compUnit.stage]);
-        shader->setShiftUavBinding(baseUavBinding[compUnit.stage]);
+        // Set IO mapper binding shift values
+        for (int r = 0; r < glslang::EResCount; ++r) {
+            const glslang::TResourceType res = glslang::TResourceType(r);
+
+            // Set base bindings
+            shader->setShiftBinding(res, baseBinding[res][compUnit.stage]);
+            
+            // Set bindings for particular resource sets
+            // TODO: use a range based for loop here, when available in all environments.
+            for (auto i = baseBindingForSet[res][compUnit.stage].begin();
+                 i != baseBindingForSet[res][compUnit.stage].end(); ++i)
+                shader->setShiftBindingForSet(res, i->first, i->second);
+        }
+
         shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
         shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0);
         shader->setResourceSetBinding(baseResourceSetBinding[compUnit.stage]);
@@ -860,6 +927,8 @@
                     glslang::SpvOptions spvOptions;
                     if (Options & EOptionDebug)
                         spvOptions.generateDebugInfo = true;
+                    spvOptions.disableOptimizer = (Options & EOptionOptimizeDisable) != 0;
+                    spvOptions.optimizeSize = (Options & EOptionOptimizeSize) != 0;
                     glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), spirv, &logger, &spvOptions);
 
                     // Dump the spv to a file or stdout, etc., but only if not doing
@@ -908,19 +977,32 @@
 {
     std::vector<ShaderCompUnit> compUnits;
 
-    // Transfer all the work items from to a simple list of
-    // of compilation units.  (We don't care about the thread
-    // work-item distribution properties in this path, which
-    // is okay due to the limited number of shaders, know since
-    // they are all getting linked together.)
-    glslang::TWorkItem* workItem;
-    while (Worklist.remove(workItem)) {
-        ShaderCompUnit compUnit(FindLanguage(workItem->name));
-        char* fileText = ReadFileData(workItem->name.c_str());
-        if (fileText == nullptr)
-            usage();
-        compUnit.addString(workItem->name, fileText);
+    // If this is using stdin, we can't really detect multiple different file
+    // units by input type. We need to assume that we're just being given one
+    // file of a certain type.
+    if ((Options & EOptionStdin) != 0) {
+        ShaderCompUnit compUnit(FindLanguage("stdin"));
+        std::istreambuf_iterator<char> begin(std::cin), end;
+        std::string tempString(begin, end);
+        char* fileText = strdup(tempString.c_str());
+        std::string fileName = "stdin";
+        compUnit.addString(fileName, fileText);
         compUnits.push_back(compUnit);
+    } else {
+        // Transfer all the work items from to a simple list of
+        // of compilation units.  (We don't care about the thread
+        // work-item distribution properties in this path, which
+        // is okay due to the limited number of shaders, know since
+        // they are all getting linked together.)
+        glslang::TWorkItem* workItem;
+        while (Worklist.remove(workItem)) {
+            ShaderCompUnit compUnit(FindLanguage(workItem->name));
+            char* fileText = ReadFileData(workItem->name.c_str());
+            if (fileText == nullptr)
+                usage();
+            compUnit.addString(workItem->name, fileText);
+            compUnits.push_back(compUnit);
+        }
     }
 
     // Actual call to programmatic processing of compile and link,
@@ -973,10 +1055,15 @@
             return ESuccess;
     }
 
-    if (workList.empty()) {
+    if (workList.empty() && ((Options & EOptionStdin) == 0)) {
         usage();
     }
 
+    if (Options & EOptionStdin) {
+        workItems.push_back(std::unique_ptr<glslang::TWorkItem>{new glslang::TWorkItem("stdin")});
+        workList.add(workItems.back().get());
+    }
+
     ProcessConfigFile();
 
     //
@@ -1087,7 +1174,14 @@
 void CompileFile(const char* fileName, ShHandle compiler)
 {
     int ret = 0;
-    char* shaderString = ReadFileData(fileName);
+    char* shaderString;
+    if ((Options & EOptionStdin) != 0) {
+        std::istreambuf_iterator<char> begin(std::cin), end;
+        std::string tempString(begin, end);
+        shaderString = strdup(tempString.c_str());
+    } else {
+        shaderString = ReadFileData(fileName);
+    }
 
     // move to length-based strings, rather than null-terminated strings
     int* lengths = new int[1];
@@ -1154,6 +1248,8 @@
            "  -H          print human readable form of SPIR-V; turns on -V\n"
            "  -I<dir>     add dir to the include search path; includer's directory\n"
            "              is searched first, followed by left-to-right order of -I\n"
+           "  -Od         disables optimization. May cause illegal SPIR-V for HLSL.\n"
+           "  -Os         optimizes SPIR-V to minimize size.\n"
            "  -S <stage>  uses specified stage rather than parsing the file extension\n"
            "              choices for <stage> are vert, tesc, tese, geom, frag, or comp\n"
            "  -U<macro>   undefine a pre-processor macro\n"
@@ -1167,13 +1263,13 @@
            "              creates the default configuration file (redirect to a .conf file)\n"
            "  -d          default to desktop (#version 110) when there is no shader #version\n"
            "              (default is ES version 100)\n"
-           "  -e          specify entry-point name\n"
+           "  -e <name>   specify <name> as the entry-point name\n"
            "  -g          generate debug information\n"
            "  -h          print this usage message\n"
            "  -i          intermediate tree (glslang AST) is printed out\n"
            "  -l          link all input files together to form a single module\n"
            "  -m          memory leak mode\n"
-           "  -o  <file>  save binary to <file>, requires a binary option (e.g., -V)\n"
+           "  -o <file>   save binary to <file>, requires a binary option (e.g., -V)\n"
            "  -q          dump reflection query database\n"
            "  -r          synonym for --relaxed-errors\n"
            "  -s          silent mode\n"
@@ -1205,21 +1301,31 @@
            "              Set descriptor set for all resources\n"
            "  --rsb [stage] type set binding       synonym for --resource-set-binding\n"
            "  --shift-image-binding [stage] num    base binding number for images (uav)\n"
+           "  --shift-image-binding [stage] [set num]... per-descriptor-set shift values\n"
            "  --sib [stage] num                    synonym for --shift-image-binding\n"
            "  --shift-sampler-binding [stage] num  base binding number for samplers\n"
+           "  --shift-sampler-binding [stage] [set num]... per-descriptor-set shift values\n"
            "  --ssb [stage] num                    synonym for --shift-sampler-binding\n"
            "  --shift-ssbo-binding [stage] num     base binding number for SSBOs\n"
+           "  --shift-ssbo-binding [stage] [set num]... per-descriptor-set shift values\n"
            "  --sbb [stage] num                    synonym for --shift-ssbo-binding\n"
            "  --shift-texture-binding [stage] num  base binding number for textures\n"
+           "  --shift-texture-binding [stage] [set num]... per-descriptor-set shift values\n"
            "  --stb [stage] num                    synonym for --shift-texture-binding\n"
            "  --shift-uav-binding [stage] num      base binding number for UAVs\n"
+           "  --shift-uav-binding [stage] [set num]... per-descriptor-set shift values\n"
            "  --suavb [stage] num                  synonym for --shift-uav-binding\n"
            "  --shift-UBO-binding [stage] num      base binding number for UBOs\n"
+           "  --shift-UBO-binding [stage] [set num]... per-descriptor-set shift values\n"
            "  --shift-cbuffer-binding [stage] num  synonym for --shift-UBO-binding\n"
+           "  --shift-cbuffer-binding [stage] [set num]... per-descriptor-set shift values\n"
            "  --sub [stage] num                    synonym for --shift-UBO-binding\n"
-           "  --source-entrypoint name             the given shader source function is\n"
-           "                                       renamed to be the entry point given in -e\n"
+           "  --source-entrypoint <name>           the given shader source function is\n"
+           "                                       renamed to be the <name> given in -e\n"
            "  --sep                                synonym for --source-entrypoint\n"
+           "  --stdin                              Read from stdin instead of from a file.\n"
+           "                                       You'll have to provide the shader stage\n"
+           "                                       using -S.\n"
            "  --suppress-warnings                  suppress GLSL warnings\n"
            "                                       (except as required by #extension : warn)\n"
            "  --target-env {vulkan1.0|opengl}      set the execution environment code will\n"
diff --git a/Test/100samplerExternal.frag b/Test/100samplerExternal.frag
new file mode 100644
index 0000000..9f6f397
--- /dev/null
+++ b/Test/100samplerExternal.frag
@@ -0,0 +1,41 @@
+#version 100

+

+#extension GL_OES_EGL_image_external : enable

+

+uniform samplerExternalOES sExt;

+precision mediump samplerExternalOES;

+uniform samplerExternalOES mediumExt;

+uniform highp samplerExternalOES highExt;

+

+void main()

+{

+    texture2D(sExt, vec2(0.2));

+    texture2D(mediumExt, vec2(0.2));

+    texture2D(highExt, vec2(0.2));

+    texture2DProj(sExt, vec3(0.3));

+    texture2DProj(sExt, vec4(0.3));

+

+    int lod = 0;

+    highp float bias = 0.01;

+    textureSize(sExt, lod);  // ERROR

+    texture(sExt, vec2(0.2));  // ERROR

+    texture(sExt, vec2(0.2), bias);  // ERROR

+    textureProj(sExt, vec3(0.2));  // ERROR

+    textureProj(sExt, vec3(0.2), bias);  // ERROR

+    textureProj(sExt, vec4(0.2));  // ERROR

+    textureProj(sExt, vec4(0.2), bias);  // ERROR

+    texelFetch(sExt, ivec2(4), lod);  // ERROR

+

+    texture3D(sExt, vec3(0.3));  // ERROR

+    texture2DProjLod(sExt, vec3(0.3), 0.3);  // ERROR

+    texture(sExt, vec3(0.3));  // ERROR

+    textureProjLod(sExt, vec3(0.3), 0.3);  // ERROR

+}

+

+#extension GL_OES_EGL_image_external : disable

+

+#extension GL_OES_EGL_image_external_essl3 : enable

+uniform samplerExternalOES badExt;  // ERROR

+#extension GL_OES_EGL_image_external_essl3 : disable

+

+uniform samplerExternalOES badExt;  // ERROR

diff --git a/Test/300samplerExternal.frag b/Test/300samplerExternal.frag
new file mode 100644
index 0000000..3724f8e
--- /dev/null
+++ b/Test/300samplerExternal.frag
@@ -0,0 +1,41 @@
+#version 300 es

+

+#extension GL_OES_EGL_image_external_essl3 : enable

+

+uniform samplerExternalOES sExt;

+precision mediump samplerExternalOES;

+uniform samplerExternalOES mediumExt;

+uniform highp samplerExternalOES highExt;

+

+void main()

+{

+    texture2D(sExt, vec2(0.2));  // ERROR

+    texture2D(mediumExt, vec2(0.2));  // ERROR

+    texture2D(highExt, vec2(0.2));  // ERROR

+    texture2DProj(sExt, vec3(0.3));  // ERROR

+    texture2DProj(sExt, vec4(0.3));  // ERROR

+

+    int lod = 0;

+    highp float bias = 0.01;

+    textureSize(sExt, lod);

+    texture(sExt, vec2(0.2));

+    texture(sExt, vec2(0.2), bias);

+    textureProj(sExt, vec3(0.2));

+    textureProj(sExt, vec3(0.2), bias);

+    textureProj(sExt, vec4(0.2));

+    textureProj(sExt, vec4(0.2), bias);

+    texelFetch(sExt, ivec2(4), lod);

+

+    texture3D(sExt, vec3(0.3));  // ERROR

+    texture2DProjLod(sExt, vec3(0.3), 0.3);  // ERROR

+    texture(sExt, vec3(0.3));  // ERROR

+    textureProjLod(sExt, vec3(0.3), 0.3);  // ERROR

+}

+

+#extension GL_OES_EGL_image_external_essl3 : disable

+

+#extension GL_OES_EGL_image_external : enable

+uniform samplerExternalOES badExt;  // ERROR

+#extension GL_OES_EGL_image_external : disable

+

+uniform samplerExternalOES badExt;  // ERROR

diff --git a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
new file mode 100644
index 0000000..779d5e1
--- /dev/null
+++ b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
@@ -0,0 +1,50 @@
+hlsl.aliasOpaque.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 81
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 57
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 37  "gss2"
+                              Name 39  "gss"
+                              Name 43  "gtex"
+                              Name 57  "@entryPointOutput"
+                              Decorate 37(gss2) DescriptorSet 0
+                              Decorate 39(gss) DescriptorSet 0
+                              Decorate 43(gtex) DescriptorSet 0
+                              Decorate 57(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeSampler
+               8:             TypeFloat 32
+              10:             TypeImage 8(float) 2D sampled format:Unknown
+              12:             TypeVector 8(float) 4
+              25:             TypeSampledImage 10
+              27:             TypeVector 8(float) 2
+              28:    8(float) Constant 1045220557
+              29:    8(float) Constant 1050253722
+              30:   27(fvec2) ConstantComposite 28 29
+              36:             TypePointer UniformConstant 6
+        37(gss2):     36(ptr) Variable UniformConstant
+         39(gss):     36(ptr) Variable UniformConstant
+              42:             TypePointer UniformConstant 10
+        43(gtex):     42(ptr) Variable UniformConstant
+              46:    8(float) Constant 1077936128
+              56:             TypePointer Output 12(fvec4)
+57(@entryPointOutput):     56(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              68:           6 Load 39(gss)
+              69:          10 Load 43(gtex)
+              78:          25 SampledImage 69 68
+              79:   12(fvec4) ImageSampleImplicitLod 78 30
+              80:   12(fvec4) VectorTimesScalar 79 46
+                              Store 57(@entryPointOutput) 80
+                              Return
+                              FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
new file mode 100644
index 0000000..3c7d198
--- /dev/null
+++ b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
@@ -0,0 +1,65 @@
+hlsl.flattenOpaque.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 144
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 97
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 38  "tex"
+                              Name 70  "s.s2D"
+                              Name 79  "s2.s2D"
+                              Name 80  "s2.tex"
+                              Name 97  "@entryPointOutput"
+                              Decorate 38(tex) DescriptorSet 0
+                              Decorate 70(s.s2D) DescriptorSet 0
+                              Decorate 79(s2.s2D) DescriptorSet 0
+                              Decorate 80(s2.tex) DescriptorSet 0
+                              Decorate 97(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeSampler
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              14:             TypeVector 8(float) 2
+              21:             TypeImage 8(float) 2D sampled format:Unknown
+              37:             TypePointer UniformConstant 21
+         38(tex):     37(ptr) Variable UniformConstant
+              41:             TypeSampledImage 21
+              43:    8(float) Constant 1045220557
+              44:    8(float) Constant 1050253722
+              45:   14(fvec2) ConstantComposite 43 44
+              69:             TypePointer UniformConstant 6
+       70(s.s2D):     69(ptr) Variable UniformConstant
+      79(s2.s2D):     69(ptr) Variable UniformConstant
+      80(s2.tex):     37(ptr) Variable UniformConstant
+              96:             TypePointer Output 9(fvec4)
+97(@entryPointOutput):     96(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+             109:           6 Load 70(s.s2D)
+             123:          21 Load 38(tex)
+             125:          41 SampledImage 123 109
+             126:    9(fvec4) ImageSampleImplicitLod 125 45
+             111:           6 Load 70(s.s2D)
+             128:          21 Load 38(tex)
+             130:          41 SampledImage 128 111
+             132:    9(fvec4) ImageSampleImplicitLod 130 45
+             113:    9(fvec4) FAdd 126 132
+             114:           6 Load 79(s2.s2D)
+             115:          21 Load 80(s2.tex)
+             136:          41 SampledImage 115 114
+             137:    9(fvec4) ImageSampleImplicitLod 136 45
+             117:    9(fvec4) FAdd 113 137
+             118:           6 Load 79(s2.s2D)
+             119:          21 Load 80(s2.tex)
+             141:          41 SampledImage 119 118
+             143:    9(fvec4) ImageSampleImplicitLod 141 45
+             121:    9(fvec4) FAdd 117 143
+                              Store 97(@entryPointOutput) 121
+                              Return
+                              FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
new file mode 100644
index 0000000..4aef874
--- /dev/null
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
@@ -0,0 +1,49 @@
+hlsl.flattenOpaqueInit.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 125
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 82
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 17  "FxaaTex"
+                              MemberName 17(FxaaTex) 0  "smpl"
+                              MemberName 17(FxaaTex) 1  "tex"
+                              Name 38  "g_tInputTexture_sampler"
+                              Name 42  "g_tInputTexture"
+                              Name 82  "@entryPointOutput"
+                              Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
+                              Decorate 42(g_tInputTexture) DescriptorSet 0
+                              Decorate 82(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeSampler
+               8:             TypeFloat 32
+               9:             TypeImage 8(float) 2D sampled format:Unknown
+              11:             TypeVector 8(float) 4
+     17(FxaaTex):             TypeStruct 6 9
+              26:             TypeSampledImage 9
+              28:             TypeVector 8(float) 2
+              29:    8(float) Constant 1050253722
+              30:    8(float) Constant 1053609165
+              31:   28(fvec2) ConstantComposite 29 30
+              32:    8(float) Constant 0
+              37:             TypePointer UniformConstant 6
+38(g_tInputTexture_sampler):     37(ptr) Variable UniformConstant
+              41:             TypePointer UniformConstant 9
+42(g_tInputTexture):     41(ptr) Variable UniformConstant
+              81:             TypePointer Output 11(fvec4)
+82(@entryPointOutput):     81(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              96:           6 Load 38(g_tInputTexture_sampler)
+              97:           9 Load 42(g_tInputTexture)
+             123:          26 SampledImage 97 96
+             124:   11(fvec4) ImageSampleExplicitLod 123 31 Lod 32
+                              Store 82(@entryPointOutput) 124
+                              Return
+                              FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
new file mode 100644
index 0000000..0b05615
--- /dev/null
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -0,0 +1,49 @@
+hlsl.flattenOpaqueInitMix.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 100
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 68
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 34  "FxaaTex"
+                              MemberName 34(FxaaTex) 0  "smpl"
+                              MemberName 34(FxaaTex) 1  "tex"
+                              MemberName 34(FxaaTex) 2  "f"
+                              Name 38  "g_tInputTexture_sampler"
+                              Name 41  "g_tInputTexture"
+                              Name 68  "@entryPointOutput"
+                              Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
+                              Decorate 41(g_tInputTexture) DescriptorSet 0
+                              Decorate 68(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeSampler
+               8:             TypeFloat 32
+               9:             TypeImage 8(float) 2D sampled format:Unknown
+              12:             TypeVector 8(float) 4
+              24:             TypeSampledImage 9
+              28:             TypeVector 8(float) 2
+              30:    8(float) Constant 0
+     34(FxaaTex):             TypeStruct 6 9 8(float)
+              37:             TypePointer UniformConstant 6
+38(g_tInputTexture_sampler):     37(ptr) Variable UniformConstant
+              40:             TypePointer UniformConstant 9
+41(g_tInputTexture):     40(ptr) Variable UniformConstant
+              43:    8(float) Constant 1056964608
+              67:             TypePointer Output 12(fvec4)
+68(@entryPointOutput):     67(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              79:           6 Load 38(g_tInputTexture_sampler)
+              80:           9 Load 41(g_tInputTexture)
+              95:          24 SampledImage 80 79
+              98:   28(fvec2) CompositeConstruct 43 43
+              99:   12(fvec4) ImageSampleExplicitLod 95 98 Lod 30
+                              Store 68(@entryPointOutput) 99
+                              Return
+                              FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
new file mode 100755
index 0000000..20aedec
--- /dev/null
+++ b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
@@ -0,0 +1,48 @@
+hlsl.flattenSubset.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 85
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 54 57
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 17  "samp"
+                              Name 41  "tex"
+                              Name 54  "vpos"
+                              Name 57  "@entryPointOutput"
+                              Decorate 17(samp) DescriptorSet 0
+                              Decorate 41(tex) DescriptorSet 0
+                              Decorate 54(vpos) Location 0
+                              Decorate 57(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+              13:             TypeSampler
+              16:             TypePointer UniformConstant 13
+        17(samp):     16(ptr) Variable UniformConstant
+              39:             TypeImage 6(float) 2D sampled format:Unknown
+              40:             TypePointer UniformConstant 39
+         41(tex):     40(ptr) Variable UniformConstant
+              44:             TypeSampledImage 39
+              46:             TypeVector 6(float) 2
+              47:    6(float) Constant 1056964608
+              48:   46(fvec2) ConstantComposite 47 47
+              53:             TypePointer Input 7(fvec4)
+        54(vpos):     53(ptr) Variable Input
+              56:             TypePointer Output 7(fvec4)
+57(@entryPointOutput):     56(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              74:          13 Load 17(samp)
+              81:          39 Load 41(tex)
+              83:          44 SampledImage 81 74
+              84:    7(fvec4) ImageSampleImplicitLod 83 48
+                              Store 57(@entryPointOutput) 84
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/100samplerExternal.frag.out b/Test/baseResults/100samplerExternal.frag.out
new file mode 100644
index 0000000..8b689c7
--- /dev/null
+++ b/Test/baseResults/100samplerExternal.frag.out
@@ -0,0 +1,172 @@
+100samplerExternal.frag
+ERROR: 0:20: 'textureSize' : no matching overloaded function found 
+ERROR: 0:21: 'texture' : no matching overloaded function found 
+ERROR: 0:22: 'texture' : no matching overloaded function found 
+ERROR: 0:23: 'textureProj' : no matching overloaded function found 
+ERROR: 0:24: 'textureProj' : no matching overloaded function found 
+ERROR: 0:25: 'textureProj' : no matching overloaded function found 
+ERROR: 0:26: 'textureProj' : no matching overloaded function found 
+ERROR: 0:27: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:29: 'texture3D' : no matching overloaded function found 
+ERROR: 0:30: 'texture2DProjLod' : no matching overloaded function found 
+ERROR: 0:31: 'texture' : no matching overloaded function found 
+ERROR: 0:32: 'textureProjLod' : no matching overloaded function found 
+ERROR: 0:38: 'samplerExternalOES' : required extension not requested: GL_OES_EGL_image_external
+ERROR: 0:41: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 14 compilation errors.  No code generated.
+
+
+Shader version: 100
+Requested GL_OES_EGL_image_external
+Requested GL_OES_EGL_image_external_essl3
+ERROR: node is still EOpNull!
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      texture ( global lowp 4-component vector of float)
+0:12        'sExt' ( uniform lowp samplerExternalOES)
+0:12        Constant:
+0:12          0.200000
+0:12          0.200000
+0:13      texture ( global mediump 4-component vector of float)
+0:13        'mediumExt' ( uniform mediump samplerExternalOES)
+0:13        Constant:
+0:13          0.200000
+0:13          0.200000
+0:14      texture ( global highp 4-component vector of float)
+0:14        'highExt' ( uniform highp samplerExternalOES)
+0:14        Constant:
+0:14          0.200000
+0:14          0.200000
+0:15      textureProj ( global lowp 4-component vector of float)
+0:15        'sExt' ( uniform lowp samplerExternalOES)
+0:15        Constant:
+0:15          0.300000
+0:15          0.300000
+0:15          0.300000
+0:16      textureProj ( global lowp 4-component vector of float)
+0:16        'sExt' ( uniform lowp samplerExternalOES)
+0:16        Constant:
+0:16          0.300000
+0:16          0.300000
+0:16          0.300000
+0:16          0.300000
+0:18      Sequence
+0:18        move second child to first child ( temp mediump int)
+0:18          'lod' ( temp mediump int)
+0:18          Constant:
+0:18            0 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp highp float)
+0:19          'bias' ( temp highp float)
+0:19          Constant:
+0:19            0.010000
+0:20      Constant:
+0:20        0.000000
+0:21      Constant:
+0:21        0.000000
+0:22      Constant:
+0:22        0.000000
+0:23      Constant:
+0:23        0.000000
+0:24      Constant:
+0:24        0.000000
+0:25      Constant:
+0:25        0.000000
+0:26      Constant:
+0:26        0.000000
+0:27      Constant:
+0:27        0.000000
+0:29      Constant:
+0:29        0.000000
+0:30      Constant:
+0:30        0.000000
+0:31      Constant:
+0:31        0.000000
+0:32      Constant:
+0:32        0.000000
+0:?   Linker Objects
+0:?     'sExt' ( uniform lowp samplerExternalOES)
+0:?     'mediumExt' ( uniform mediump samplerExternalOES)
+0:?     'highExt' ( uniform highp samplerExternalOES)
+0:?     'badExt' ( uniform mediump samplerExternalOES)
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+Requested GL_OES_EGL_image_external
+Requested GL_OES_EGL_image_external_essl3
+ERROR: node is still EOpNull!
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      texture ( global lowp 4-component vector of float)
+0:12        'sExt' ( uniform lowp samplerExternalOES)
+0:12        Constant:
+0:12          0.200000
+0:12          0.200000
+0:13      texture ( global mediump 4-component vector of float)
+0:13        'mediumExt' ( uniform mediump samplerExternalOES)
+0:13        Constant:
+0:13          0.200000
+0:13          0.200000
+0:14      texture ( global highp 4-component vector of float)
+0:14        'highExt' ( uniform highp samplerExternalOES)
+0:14        Constant:
+0:14          0.200000
+0:14          0.200000
+0:15      textureProj ( global lowp 4-component vector of float)
+0:15        'sExt' ( uniform lowp samplerExternalOES)
+0:15        Constant:
+0:15          0.300000
+0:15          0.300000
+0:15          0.300000
+0:16      textureProj ( global lowp 4-component vector of float)
+0:16        'sExt' ( uniform lowp samplerExternalOES)
+0:16        Constant:
+0:16          0.300000
+0:16          0.300000
+0:16          0.300000
+0:16          0.300000
+0:18      Sequence
+0:18        move second child to first child ( temp mediump int)
+0:18          'lod' ( temp mediump int)
+0:18          Constant:
+0:18            0 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp highp float)
+0:19          'bias' ( temp highp float)
+0:19          Constant:
+0:19            0.010000
+0:20      Constant:
+0:20        0.000000
+0:21      Constant:
+0:21        0.000000
+0:22      Constant:
+0:22        0.000000
+0:23      Constant:
+0:23        0.000000
+0:24      Constant:
+0:24        0.000000
+0:25      Constant:
+0:25        0.000000
+0:26      Constant:
+0:26        0.000000
+0:27      Constant:
+0:27        0.000000
+0:29      Constant:
+0:29        0.000000
+0:30      Constant:
+0:30        0.000000
+0:31      Constant:
+0:31        0.000000
+0:32      Constant:
+0:32        0.000000
+0:?   Linker Objects
+0:?     'sExt' ( uniform lowp samplerExternalOES)
+0:?     'mediumExt' ( uniform mediump samplerExternalOES)
+0:?     'highExt' ( uniform highp samplerExternalOES)
+0:?     'badExt' ( uniform mediump samplerExternalOES)
+
diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out
index 5cc9e80..25e44ed 100644
--- a/Test/baseResults/150.tesc.out
+++ b/Test/baseResults/150.tesc.out
@@ -754,7 +754,7 @@
 ERROR: 0:29: ' const 2-element array of 4-component vector of float' : cannot construct with these arguments 
 ERROR: 0:29: '=' :  cannot convert from ' const float' to ' global 2-element array of 4-component vector of float'
 ERROR: 0:30: 'initializer list' : wrong number of matrix columns:  temp 4X2 matrix of float
-ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from ' temp float' to ' temp structure{ global float s,  global float t}'
+ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from ' const structure{ global 4-component vector of float a,  global 4-component vector of float b}' to ' temp structure{ global float s,  global float t}'
 ERROR: 0:70: 'initializer list' : wrong number of structure members 
 ERROR: 13 compilation errors.  No code generated.
 
diff --git a/Test/baseResults/300samplerExternal.frag.out b/Test/baseResults/300samplerExternal.frag.out
new file mode 100644
index 0000000..9074552
--- /dev/null
+++ b/Test/baseResults/300samplerExternal.frag.out
@@ -0,0 +1,197 @@
+300samplerExternal.frag
+ERROR: 0:12: 'texture2D' : no matching overloaded function found 
+ERROR: 0:13: 'texture2D' : no matching overloaded function found 
+ERROR: 0:14: 'texture2D' : no matching overloaded function found 
+ERROR: 0:15: 'texture2DProj' : no matching overloaded function found 
+ERROR: 0:16: 'texture2DProj' : no matching overloaded function found 
+ERROR: 0:29: 'texture3D' : no matching overloaded function found 
+ERROR: 0:30: 'texture2DProjLod' : no matching overloaded function found 
+ERROR: 0:31: 'texture' : no matching overloaded function found 
+ERROR: 0:32: 'textureProjLod' : no matching overloaded function found 
+ERROR: 0:38: 'samplerExternalOES' : required extension not requested: GL_OES_EGL_image_external_essl3
+ERROR: 0:41: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 11 compilation errors.  No code generated.
+
+
+Shader version: 300
+Requested GL_OES_EGL_image_external
+Requested GL_OES_EGL_image_external_essl3
+ERROR: node is still EOpNull!
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Constant:
+0:12        0.000000
+0:13      Constant:
+0:13        0.000000
+0:14      Constant:
+0:14        0.000000
+0:15      Constant:
+0:15        0.000000
+0:16      Constant:
+0:16        0.000000
+0:18      Sequence
+0:18        move second child to first child ( temp mediump int)
+0:18          'lod' ( temp mediump int)
+0:18          Constant:
+0:18            0 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp highp float)
+0:19          'bias' ( temp highp float)
+0:19          Constant:
+0:19            0.010000
+0:20      textureSize ( global highp 2-component vector of int, operation at mediump)
+0:20        'sExt' ( uniform lowp samplerExternalOES)
+0:20        'lod' ( temp mediump int)
+0:21      texture ( global lowp 4-component vector of float)
+0:21        'sExt' ( uniform lowp samplerExternalOES)
+0:21        Constant:
+0:21          0.200000
+0:21          0.200000
+0:22      texture ( global lowp 4-component vector of float, operation at highp)
+0:22        'sExt' ( uniform lowp samplerExternalOES)
+0:22        Constant:
+0:22          0.200000
+0:22          0.200000
+0:22        'bias' ( temp highp float)
+0:23      textureProj ( global lowp 4-component vector of float)
+0:23        'sExt' ( uniform lowp samplerExternalOES)
+0:23        Constant:
+0:23          0.200000
+0:23          0.200000
+0:23          0.200000
+0:24      textureProj ( global lowp 4-component vector of float, operation at highp)
+0:24        'sExt' ( uniform lowp samplerExternalOES)
+0:24        Constant:
+0:24          0.200000
+0:24          0.200000
+0:24          0.200000
+0:24        'bias' ( temp highp float)
+0:25      textureProj ( global lowp 4-component vector of float)
+0:25        'sExt' ( uniform lowp samplerExternalOES)
+0:25        Constant:
+0:25          0.200000
+0:25          0.200000
+0:25          0.200000
+0:25          0.200000
+0:26      textureProj ( global lowp 4-component vector of float, operation at highp)
+0:26        'sExt' ( uniform lowp samplerExternalOES)
+0:26        Constant:
+0:26          0.200000
+0:26          0.200000
+0:26          0.200000
+0:26          0.200000
+0:26        'bias' ( temp highp float)
+0:27      textureFetch ( global lowp 4-component vector of float, operation at mediump)
+0:27        'sExt' ( uniform lowp samplerExternalOES)
+0:27        Constant:
+0:27          4 (const int)
+0:27          4 (const int)
+0:27        'lod' ( temp mediump int)
+0:29      Constant:
+0:29        0.000000
+0:30      Constant:
+0:30        0.000000
+0:31      Constant:
+0:31        0.000000
+0:32      Constant:
+0:32        0.000000
+0:?   Linker Objects
+0:?     'sExt' ( uniform lowp samplerExternalOES)
+0:?     'mediumExt' ( uniform mediump samplerExternalOES)
+0:?     'highExt' ( uniform highp samplerExternalOES)
+0:?     'badExt' ( uniform mediump samplerExternalOES)
+
+
+Linked fragment stage:
+
+
+Shader version: 300
+Requested GL_OES_EGL_image_external
+Requested GL_OES_EGL_image_external_essl3
+ERROR: node is still EOpNull!
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Constant:
+0:12        0.000000
+0:13      Constant:
+0:13        0.000000
+0:14      Constant:
+0:14        0.000000
+0:15      Constant:
+0:15        0.000000
+0:16      Constant:
+0:16        0.000000
+0:18      Sequence
+0:18        move second child to first child ( temp mediump int)
+0:18          'lod' ( temp mediump int)
+0:18          Constant:
+0:18            0 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp highp float)
+0:19          'bias' ( temp highp float)
+0:19          Constant:
+0:19            0.010000
+0:20      textureSize ( global highp 2-component vector of int, operation at mediump)
+0:20        'sExt' ( uniform lowp samplerExternalOES)
+0:20        'lod' ( temp mediump int)
+0:21      texture ( global lowp 4-component vector of float)
+0:21        'sExt' ( uniform lowp samplerExternalOES)
+0:21        Constant:
+0:21          0.200000
+0:21          0.200000
+0:22      texture ( global lowp 4-component vector of float, operation at highp)
+0:22        'sExt' ( uniform lowp samplerExternalOES)
+0:22        Constant:
+0:22          0.200000
+0:22          0.200000
+0:22        'bias' ( temp highp float)
+0:23      textureProj ( global lowp 4-component vector of float)
+0:23        'sExt' ( uniform lowp samplerExternalOES)
+0:23        Constant:
+0:23          0.200000
+0:23          0.200000
+0:23          0.200000
+0:24      textureProj ( global lowp 4-component vector of float, operation at highp)
+0:24        'sExt' ( uniform lowp samplerExternalOES)
+0:24        Constant:
+0:24          0.200000
+0:24          0.200000
+0:24          0.200000
+0:24        'bias' ( temp highp float)
+0:25      textureProj ( global lowp 4-component vector of float)
+0:25        'sExt' ( uniform lowp samplerExternalOES)
+0:25        Constant:
+0:25          0.200000
+0:25          0.200000
+0:25          0.200000
+0:25          0.200000
+0:26      textureProj ( global lowp 4-component vector of float, operation at highp)
+0:26        'sExt' ( uniform lowp samplerExternalOES)
+0:26        Constant:
+0:26          0.200000
+0:26          0.200000
+0:26          0.200000
+0:26          0.200000
+0:26        'bias' ( temp highp float)
+0:27      textureFetch ( global lowp 4-component vector of float, operation at mediump)
+0:27        'sExt' ( uniform lowp samplerExternalOES)
+0:27        Constant:
+0:27          4 (const int)
+0:27          4 (const int)
+0:27        'lod' ( temp mediump int)
+0:29      Constant:
+0:29        0.000000
+0:30      Constant:
+0:30        0.000000
+0:31      Constant:
+0:31        0.000000
+0:32      Constant:
+0:32        0.000000
+0:?   Linker Objects
+0:?     'sExt' ( uniform lowp samplerExternalOES)
+0:?     'mediumExt' ( uniform mediump samplerExternalOES)
+0:?     'highExt' ( uniform highp samplerExternalOES)
+0:?     'badExt' ( uniform mediump samplerExternalOES)
+
diff --git a/Test/baseResults/420.tese.out b/Test/baseResults/420.tese.out
index 66d41e5..f14e1c0 100644
--- a/Test/baseResults/420.tese.out
+++ b/Test/baseResults/420.tese.out
@@ -10,7 +10,7 @@
 ERROR: 0:29: ' const 2-element array of 4-component vector of float' : cannot construct with these arguments 
 ERROR: 0:29: '=' :  cannot convert from ' const float' to ' global 2-element array of 4-component vector of float'
 ERROR: 0:30: 'initializer list' : wrong number of matrix columns:  temp 4X2 matrix of float
-ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from ' temp float' to ' temp structure{ global float s,  global float t}'
+ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from ' const structure{ global 4-component vector of float a,  global 4-component vector of float b}' to ' temp structure{ global float s,  global float t}'
 ERROR: 0:70: 'initializer list' : wrong number of structure members 
 ERROR: 13 compilation errors.  No code generated.
 
diff --git a/Test/baseResults/cppDeepNest.frag.out b/Test/baseResults/cppDeepNest.frag.out
new file mode 100755
index 0000000..969a256
--- /dev/null
+++ b/Test/baseResults/cppDeepNest.frag.out
@@ -0,0 +1,20 @@
+cppDeepNest.frag
+ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded 
+ERROR: 0:66: '' : missing #endif 
+ERROR: 0:66: '' :  syntax error, unexpected $end
+ERROR: 3 compilation errors.  No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
diff --git a/Test/baseResults/cppIntMinOverNegativeOne.frag.out b/Test/baseResults/cppIntMinOverNegativeOne.frag.out
new file mode 100644
index 0000000..5dce7c3
--- /dev/null
+++ b/Test/baseResults/cppIntMinOverNegativeOne.frag.out
@@ -0,0 +1,14 @@
+cppIntMinOverNegativeOne.frag
+Shader version: 100
+0:? Sequence
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+0:? Sequence
+0:?   Linker Objects
+
diff --git a/Test/baseResults/glsl.entryPointRename.vert.bad.out b/Test/baseResults/glsl.entryPointRename.vert.bad.out
new file mode 100644
index 0000000..6f4c9ae
--- /dev/null
+++ b/Test/baseResults/glsl.entryPointRename.vert.bad.out
@@ -0,0 +1,45 @@
+glsl.entryPointRename.vert
+ERROR: Source entry point must be "main"
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 20
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "foo" 13
+                              Source GLSL 460
+                              Name 4  "foo"
+                              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"
+                              MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 13  ""
+                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 11(gl_PerVertex) Block
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 0
+               9:      8(int) Constant 1
+              10:             TypeArray 6(float) 9
+11(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 10 10
+              12:             TypePointer Output 11(gl_PerVertex)
+              13:     12(ptr) Variable Output
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:    6(float) Constant 1065353216
+              17:    7(fvec4) ConstantComposite 16 16 16 16
+              18:             TypePointer Output 7(fvec4)
+          4(foo):           2 Function None 3
+               5:             Label
+              19:     18(ptr) AccessChain 13 15
+                              Store 19 17
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/glsl.entryPointRename.vert.out b/Test/baseResults/glsl.entryPointRename.vert.out
new file mode 100644
index 0000000..7cc825b
--- /dev/null
+++ b/Test/baseResults/glsl.entryPointRename.vert.out
@@ -0,0 +1,43 @@
+glsl.entryPointRename.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 20
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "foo" 13
+                              Source GLSL 460
+                              Name 4  "foo"
+                              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"
+                              MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 13  ""
+                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 11(gl_PerVertex) Block
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 0
+               9:      8(int) Constant 1
+              10:             TypeArray 6(float) 9
+11(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 10 10
+              12:             TypePointer Output 11(gl_PerVertex)
+              13:     12(ptr) Variable Output
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:    6(float) Constant 1065353216
+              17:    7(fvec4) ConstantComposite 16 16 16 16
+              18:             TypePointer Output 7(fvec4)
+          4(foo):           2 Function None 3
+               5:             Label
+              19:     18(ptr) AccessChain 13 15
+                              Store 19 17
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/glsl.entryPointRename2.vert.out b/Test/baseResults/glsl.entryPointRename2.vert.out
new file mode 100644
index 0000000..aebd86b
--- /dev/null
+++ b/Test/baseResults/glsl.entryPointRename2.vert.out
@@ -0,0 +1,4 @@
+glsl.entryPointRename2.vert
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out
index 3e8e8c4..30eb445 100755
--- a/Test/baseResults/glspv.version.frag.out
+++ b/Test/baseResults/glspv.version.frag.out
@@ -2,7 +2,7 @@
 ERROR: #version: compilation for SPIR-V does not support the compatibility profile
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out
index 222322e..694d404 100755
--- a/Test/baseResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseResults/hlsl.aliasOpaque.frag.out
@@ -1,4 +1,5 @@
 hlsl.aliasOpaque.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
@@ -21,18 +22,24 @@
 0:17  Function Definition: @main( ( temp 4-component vector of float)
 0:17    Function Parameters: 
 0:?     Sequence
-0:19      'gss2' ( uniform sampler)
-0:20      'gss' ( uniform sampler)
-0:21      'gtex' ( uniform texture2D)
+0:19      move second child to first child ( temp sampler)
+0:?         'os.ss' ( temp sampler)
+0:19        'gss2' ( uniform sampler)
+0:20      move second child to first child ( temp sampler)
+0:?         'os.ss' ( temp sampler)
+0:20        'gss' ( uniform sampler)
+0:21      move second child to first child ( temp texture2D)
+0:?         'os.tex' ( temp texture2D)
+0:21        'gtex' ( uniform texture2D)
 0:22      move second child to first child ( temp float)
 0:?         'os.a' ( temp float)
 0:22        Constant:
 0:22          3.000000
 0:28      Branch: Return with expression
 0:28        Function Call: osCall(struct-OS-p1-f1-t211; ( temp 4-component vector of float)
-0:?           'gss' ( uniform sampler)
+0:?           'os.ss' ( temp sampler)
 0:?           'os.a' ( temp float)
-0:?           'gtex' ( uniform texture2D)
+0:?           'os.tex' ( temp texture2D)
 0:17  Function Definition: main( ( temp void)
 0:17    Function Parameters: 
 0:?     Sequence
@@ -71,18 +78,24 @@
 0:17  Function Definition: @main( ( temp 4-component vector of float)
 0:17    Function Parameters: 
 0:?     Sequence
-0:19      'gss2' ( uniform sampler)
-0:20      'gss' ( uniform sampler)
-0:21      'gtex' ( uniform texture2D)
+0:19      move second child to first child ( temp sampler)
+0:?         'os.ss' ( temp sampler)
+0:19        'gss2' ( uniform sampler)
+0:20      move second child to first child ( temp sampler)
+0:?         'os.ss' ( temp sampler)
+0:20        'gss' ( uniform sampler)
+0:21      move second child to first child ( temp texture2D)
+0:?         'os.tex' ( temp texture2D)
+0:21        'gtex' ( uniform texture2D)
 0:22      move second child to first child ( temp float)
 0:?         'os.a' ( temp float)
 0:22        Constant:
 0:22          3.000000
 0:28      Branch: Return with expression
 0:28        Function Call: osCall(struct-OS-p1-f1-t211; ( temp 4-component vector of float)
-0:?           'gss' ( uniform sampler)
+0:?           'os.ss' ( temp sampler)
 0:?           'os.a' ( temp float)
-0:?           'gtex' ( uniform texture2D)
+0:?           'os.tex' ( temp texture2D)
 0:17  Function Definition: main( ( temp void)
 0:17    Function Parameters: 
 0:?     Sequence
@@ -96,13 +109,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 48
+// Generated by (magic number): 80002
+// Id's are bound by 59
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 46
+                              EntryPoint Fragment 4  "main" 57
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -111,24 +124,28 @@
                               Name 15  "s.a"
                               Name 16  "s.tex"
                               Name 20  "@main("
-                              Name 35  "gss2"
-                              Name 36  "gss"
-                              Name 37  "gtex"
-                              Name 38  "os.a"
-                              Name 40  "param"
-                              Name 46  "@entryPointOutput"
-                              Decorate 35(gss2) DescriptorSet 0
-                              Decorate 36(gss) DescriptorSet 0
-                              Decorate 37(gtex) DescriptorSet 0
-                              Decorate 46(@entryPointOutput) Location 0
+                              Name 35  "os.ss"
+                              Name 37  "gss2"
+                              Name 39  "gss"
+                              Name 41  "os.tex"
+                              Name 43  "gtex"
+                              Name 45  "os.a"
+                              Name 47  "param"
+                              Name 49  "param"
+                              Name 51  "param"
+                              Name 57  "@entryPointOutput"
+                              Decorate 37(gss2) DescriptorSet 0
+                              Decorate 39(gss) DescriptorSet 0
+                              Decorate 43(gtex) DescriptorSet 0
+                              Decorate 57(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
-               7:             TypePointer UniformConstant 6
+               7:             TypePointer Function 6
                8:             TypeFloat 32
                9:             TypePointer Function 8(float)
               10:             TypeImage 8(float) 2D sampled format:Unknown
-              11:             TypePointer UniformConstant 10
+              11:             TypePointer Function 10
               12:             TypeVector 8(float) 4
               13:             TypeFunction 12(fvec4) 7(ptr) 9(ptr) 11(ptr)
               19:             TypeFunction 12(fvec4)
@@ -137,16 +154,18 @@
               28:    8(float) Constant 1045220557
               29:    8(float) Constant 1050253722
               30:   27(fvec2) ConstantComposite 28 29
-        35(gss2):      7(ptr) Variable UniformConstant
-         36(gss):      7(ptr) Variable UniformConstant
-        37(gtex):     11(ptr) Variable UniformConstant
-              39:    8(float) Constant 1077936128
-              45:             TypePointer Output 12(fvec4)
-46(@entryPointOutput):     45(ptr) Variable Output
+              36:             TypePointer UniformConstant 6
+        37(gss2):     36(ptr) Variable UniformConstant
+         39(gss):     36(ptr) Variable UniformConstant
+              42:             TypePointer UniformConstant 10
+        43(gtex):     42(ptr) Variable UniformConstant
+              46:    8(float) Constant 1077936128
+              56:             TypePointer Output 12(fvec4)
+57(@entryPointOutput):     56(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              47:   12(fvec4) FunctionCall 20(@main()
-                              Store 46(@entryPointOutput) 47
+              58:   12(fvec4) FunctionCall 20(@main()
+                              Store 57(@entryPointOutput) 58
                               Return
                               FunctionEnd
 17(osCall(struct-OS-p1-f1-t211;):   12(fvec4) Function None 13
@@ -164,11 +183,25 @@
                               FunctionEnd
       20(@main():   12(fvec4) Function None 19
               21:             Label
-        38(os.a):      9(ptr) Variable Function
-       40(param):      9(ptr) Variable Function
-                              Store 38(os.a) 39
-              41:    8(float) Load 38(os.a)
-                              Store 40(param) 41
-              42:   12(fvec4) FunctionCall 17(osCall(struct-OS-p1-f1-t211;) 36(gss) 40(param) 37(gtex)
-                              ReturnValue 42
+       35(os.ss):      7(ptr) Variable Function
+      41(os.tex):     11(ptr) Variable Function
+        45(os.a):      9(ptr) Variable Function
+       47(param):      7(ptr) Variable Function
+       49(param):      9(ptr) Variable Function
+       51(param):     11(ptr) Variable Function
+              38:           6 Load 37(gss2)
+                              Store 35(os.ss) 38
+              40:           6 Load 39(gss)
+                              Store 35(os.ss) 40
+              44:          10 Load 43(gtex)
+                              Store 41(os.tex) 44
+                              Store 45(os.a) 46
+              48:           6 Load 35(os.ss)
+                              Store 47(param) 48
+              50:    8(float) Load 45(os.a)
+                              Store 49(param) 50
+              52:          10 Load 41(os.tex)
+                              Store 51(param) 52
+              53:   12(fvec4) FunctionCall 17(osCall(struct-OS-p1-f1-t211;) 47(param) 49(param) 51(param)
+                              ReturnValue 53
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
index 388d346..9830385 100755
--- a/Test/baseResults/hlsl.amend.frag.out
+++ b/Test/baseResults/hlsl.amend.frag.out
@@ -160,7 +160,7 @@
 0:?     'm' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.flatten.frag.out b/Test/baseResults/hlsl.array.flatten.frag.out
index 0129ede..e32eb15 100644
--- a/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/Test/baseResults/hlsl.array.flatten.frag.out
@@ -1,4 +1,5 @@
 hlsl.array.flatten.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
@@ -344,14 +345,14 @@
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 137
+// Generated by (magic number): 80002
+// Id's are bound by 143
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 128
+                              EntryPoint Fragment 4  "main" 134
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -366,60 +367,62 @@
                               Name 34  "not_flattened_a"
                               Name 42  "g_tex[1]"
                               Name 45  "g_samp[1]"
-                              Name 61  "local_sampler_array"
-                              Name 63  "g_samp[0]"
-                              Name 68  "g_samp[2]"
-                              Name 71  "local_texture_array"
-                              Name 72  "g_tex[0]"
-                              Name 77  "g_tex[2]"
-                              Name 83  "local_float_array"
-                              Name 89  "$Global"
-                              MemberName 89($Global) 0  "g_mats"
-                              MemberName 89($Global) 1  "g_mats_explicit"
-                              MemberName 89($Global) 2  "g_floats"
-                              Name 91  ""
-                              Name 105  "aggShadow"
-                              Name 112  "aggShadow"
-                              Name 123  "ps_output"
-                              Name 124  "param"
-                              Name 128  "ps_output.color"
-                              Name 131  "g_tex_explicit[0]"
-                              Name 132  "g_tex_explicit[1]"
-                              Name 133  "g_tex_explicit[2]"
-                              Name 134  "g_samp_explicit[0]"
-                              Name 135  "g_samp_explicit[1]"
-                              Name 136  "g_samp_explicit[2]"
+                              Name 63  "local_sampler_array"
+                              Name 65  "g_samp[0]"
+                              Name 70  "g_samp[2]"
+                              Name 73  "local_texture_array"
+                              Name 74  "g_tex[0]"
+                              Name 79  "g_tex[2]"
+                              Name 85  "local_float_array"
+                              Name 91  "$Global"
+                              MemberName 91($Global) 0  "g_mats"
+                              MemberName 91($Global) 1  "g_mats_explicit"
+                              MemberName 91($Global) 2  "g_floats"
+                              Name 93  ""
+                              Name 107  "aggShadow"
+                              Name 114  "aggShadow"
+                              Name 121  "param"
+                              Name 123  "param"
+                              Name 129  "ps_output"
+                              Name 130  "param"
+                              Name 134  "ps_output.color"
+                              Name 137  "g_tex_explicit[0]"
+                              Name 138  "g_tex_explicit[1]"
+                              Name 139  "g_tex_explicit[2]"
+                              Name 140  "g_samp_explicit[0]"
+                              Name 141  "g_samp_explicit[1]"
+                              Name 142  "g_samp_explicit[2]"
                               Decorate 42(g_tex[1]) DescriptorSet 0
                               Decorate 45(g_samp[1]) DescriptorSet 0
-                              Decorate 63(g_samp[0]) DescriptorSet 0
-                              Decorate 68(g_samp[2]) DescriptorSet 0
-                              Decorate 72(g_tex[0]) DescriptorSet 0
-                              Decorate 77(g_tex[2]) DescriptorSet 0
-                              Decorate 86 ArrayStride 48
-                              Decorate 87 ArrayStride 48
-                              Decorate 88 ArrayStride 16
-                              MemberDecorate 89($Global) 0 RowMajor
-                              MemberDecorate 89($Global) 0 Offset 0
-                              MemberDecorate 89($Global) 0 MatrixStride 16
-                              MemberDecorate 89($Global) 1 RowMajor
-                              MemberDecorate 89($Global) 1 Offset 192
-                              MemberDecorate 89($Global) 1 MatrixStride 16
-                              MemberDecorate 89($Global) 2 Offset 384
-                              Decorate 89($Global) Block
-                              Decorate 91 DescriptorSet 0
-                              Decorate 128(ps_output.color) Location 0
-                              Decorate 131(g_tex_explicit[0]) DescriptorSet 0
-                              Decorate 131(g_tex_explicit[0]) Binding 1
-                              Decorate 132(g_tex_explicit[1]) DescriptorSet 0
-                              Decorate 132(g_tex_explicit[1]) Binding 2
-                              Decorate 133(g_tex_explicit[2]) DescriptorSet 0
-                              Decorate 133(g_tex_explicit[2]) Binding 3
-                              Decorate 134(g_samp_explicit[0]) DescriptorSet 0
-                              Decorate 134(g_samp_explicit[0]) Binding 5
-                              Decorate 135(g_samp_explicit[1]) DescriptorSet 0
-                              Decorate 135(g_samp_explicit[1]) Binding 6
-                              Decorate 136(g_samp_explicit[2]) DescriptorSet 0
-                              Decorate 136(g_samp_explicit[2]) Binding 7
+                              Decorate 65(g_samp[0]) DescriptorSet 0
+                              Decorate 70(g_samp[2]) DescriptorSet 0
+                              Decorate 74(g_tex[0]) DescriptorSet 0
+                              Decorate 79(g_tex[2]) DescriptorSet 0
+                              Decorate 88 ArrayStride 48
+                              Decorate 89 ArrayStride 48
+                              Decorate 90 ArrayStride 16
+                              MemberDecorate 91($Global) 0 RowMajor
+                              MemberDecorate 91($Global) 0 Offset 0
+                              MemberDecorate 91($Global) 0 MatrixStride 16
+                              MemberDecorate 91($Global) 1 RowMajor
+                              MemberDecorate 91($Global) 1 Offset 192
+                              MemberDecorate 91($Global) 1 MatrixStride 16
+                              MemberDecorate 91($Global) 2 Offset 384
+                              Decorate 91($Global) Block
+                              Decorate 93 DescriptorSet 0
+                              Decorate 134(ps_output.color) Location 0
+                              Decorate 137(g_tex_explicit[0]) DescriptorSet 0
+                              Decorate 137(g_tex_explicit[0]) Binding 1
+                              Decorate 138(g_tex_explicit[1]) DescriptorSet 0
+                              Decorate 138(g_tex_explicit[1]) Binding 2
+                              Decorate 139(g_tex_explicit[2]) DescriptorSet 0
+                              Decorate 139(g_tex_explicit[2]) Binding 3
+                              Decorate 140(g_samp_explicit[0]) DescriptorSet 0
+                              Decorate 140(g_samp_explicit[0]) Binding 5
+                              Decorate 141(g_samp_explicit[1]) DescriptorSet 0
+                              Decorate 141(g_samp_explicit[1]) Binding 6
+                              Decorate 142(g_samp_explicit[2]) DescriptorSet 0
+                              Decorate 142(g_samp_explicit[2]) Binding 7
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -429,10 +432,10 @@
               12:             TypeInt 32 0
               13:     12(int) Constant 3
               14:             TypeArray 11 13
-              15:             TypePointer UniformConstant 14
+              15:             TypePointer Function 14
               16:             TypeSampler
               17:             TypeArray 16 13
-              18:             TypePointer UniformConstant 17
+              18:             TypePointer Function 17
               19:             TypeFunction 7(fvec4) 15(ptr) 18(ptr)
    24(PS_OUTPUT):             TypeStruct 7(fvec4)
               25:             TypePointer Function 24(PS_OUTPUT)
@@ -454,48 +457,46 @@
    45(g_samp[1]):     44(ptr) Variable UniformConstant
               47:             TypeSampledImage 11
               49:    6(float) Constant 1045220557
-61(local_sampler_array):     18(ptr) Variable UniformConstant
-              62:     30(int) Constant 0
-   63(g_samp[0]):     44(ptr) Variable UniformConstant
-   68(g_samp[2]):     44(ptr) Variable UniformConstant
-71(local_texture_array):     15(ptr) Variable UniformConstant
-    72(g_tex[0]):     41(ptr) Variable UniformConstant
-    77(g_tex[2]):     41(ptr) Variable UniformConstant
-              80:     12(int) Constant 4
-              81:             TypeArray 6(float) 80
-              82:             TypePointer Function 81
-              84:             TypeVector 6(float) 3
-              85:             TypeMatrix 84(fvec3) 3
-              86:             TypeArray 85 80
-              87:             TypeArray 85 80
-              88:             TypeArray 6(float) 80
-     89($Global):             TypeStruct 86 87 88
-              90:             TypePointer Uniform 89($Global)
-              91:     90(ptr) Variable Uniform
-              92:             TypePointer Uniform 88
-              96:             TypePointer Function 6(float)
-  105(aggShadow):     15(ptr) Variable UniformConstant
-  112(aggShadow):     18(ptr) Variable UniformConstant
-             121:             TypePointer Function 7(fvec4)
-             127:             TypePointer Output 7(fvec4)
-128(ps_output.color):    127(ptr) Variable Output
-131(g_tex_explicit[0]):     41(ptr) Variable UniformConstant
-132(g_tex_explicit[1]):     41(ptr) Variable UniformConstant
-133(g_tex_explicit[2]):     41(ptr) Variable UniformConstant
-134(g_samp_explicit[0]):     44(ptr) Variable UniformConstant
-135(g_samp_explicit[1]):     44(ptr) Variable UniformConstant
-136(g_samp_explicit[2]):     44(ptr) Variable UniformConstant
+              53:             TypePointer Function 11
+              56:             TypePointer Function 16
+              64:     30(int) Constant 0
+   65(g_samp[0]):     44(ptr) Variable UniformConstant
+   70(g_samp[2]):     44(ptr) Variable UniformConstant
+    74(g_tex[0]):     41(ptr) Variable UniformConstant
+    79(g_tex[2]):     41(ptr) Variable UniformConstant
+              82:     12(int) Constant 4
+              83:             TypeArray 6(float) 82
+              84:             TypePointer Function 83
+              86:             TypeVector 6(float) 3
+              87:             TypeMatrix 86(fvec3) 3
+              88:             TypeArray 87 82
+              89:             TypeArray 87 82
+              90:             TypeArray 6(float) 82
+     91($Global):             TypeStruct 88 89 90
+              92:             TypePointer Uniform 91($Global)
+              93:     92(ptr) Variable Uniform
+              94:             TypePointer Uniform 90
+              98:             TypePointer Function 6(float)
+             127:             TypePointer Function 7(fvec4)
+             133:             TypePointer Output 7(fvec4)
+134(ps_output.color):    133(ptr) Variable Output
+137(g_tex_explicit[0]):     41(ptr) Variable UniformConstant
+138(g_tex_explicit[1]):     41(ptr) Variable UniformConstant
+139(g_tex_explicit[2]):     41(ptr) Variable UniformConstant
+140(g_samp_explicit[0]):     44(ptr) Variable UniformConstant
+141(g_samp_explicit[1]):     44(ptr) Variable UniformConstant
+142(g_samp_explicit[2]):     44(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-  123(ps_output):     25(ptr) Variable Function
-      124(param):     25(ptr) Variable Function
+  129(ps_output):     25(ptr) Variable Function
+      130(param):     25(ptr) Variable Function
                               Store 34(not_flattened_a) 40
-             125:           2 FunctionCall 28(@main(struct-PS_OUTPUT-vf41;) 124(param)
-             126:24(PS_OUTPUT) Load 124(param)
-                              Store 123(ps_output) 126
-             129:    121(ptr) AccessChain 123(ps_output) 62
-             130:    7(fvec4) Load 129
-                              Store 128(ps_output.color) 130
+             131:           2 FunctionCall 28(@main(struct-PS_OUTPUT-vf41;) 130(param)
+             132:24(PS_OUTPUT) Load 130(param)
+                              Store 129(ps_output) 132
+             135:    127(ptr) AccessChain 129(ps_output) 64
+             136:    7(fvec4) Load 135
+                              Store 134(ps_output.color) 136
                               Return
                               FunctionEnd
      9(TestFn1():    7(fvec4) Function None 8
@@ -510,72 +511,82 @@
        20(l_tex):     15(ptr) FunctionParameter
       21(l_samp):     18(ptr) FunctionParameter
               23:             Label
-              53:     41(ptr) AccessChain 20(l_tex) 36
-              54:          11 Load 53
-              55:     44(ptr) AccessChain 21(l_samp) 36
-              56:          16 Load 55
-              57:          47 SampledImage 54 56
-              58:    7(fvec4) ImageSampleImplicitLod 57 49
-                              ReturnValue 58
+              54:     53(ptr) AccessChain 20(l_tex) 36
+              55:          11 Load 54
+              57:     56(ptr) AccessChain 21(l_samp) 36
+              58:          16 Load 57
+              59:          47 SampledImage 55 58
+              60:    7(fvec4) ImageSampleImplicitLod 59 49
+                              ReturnValue 60
                               FunctionEnd
 28(@main(struct-PS_OUTPUT-vf41;):           2 Function None 26
    27(ps_output):     25(ptr) FunctionParameter
               29:             Label
-83(local_float_array):     82(ptr) Variable Function
-              64:          16 Load 63(g_samp[0])
-              65:     44(ptr) AccessChain 61(local_sampler_array) 62
-                              Store 65 64
-              66:          16 Load 45(g_samp[1])
-              67:     44(ptr) AccessChain 61(local_sampler_array) 35
+63(local_sampler_array):     18(ptr) Variable Function
+73(local_texture_array):     15(ptr) Variable Function
+85(local_float_array):     84(ptr) Variable Function
+  107(aggShadow):     15(ptr) Variable Function
+  114(aggShadow):     18(ptr) Variable Function
+      121(param):     15(ptr) Variable Function
+      123(param):     18(ptr) Variable Function
+              66:          16 Load 65(g_samp[0])
+              67:     56(ptr) AccessChain 63(local_sampler_array) 64
                               Store 67 66
-              69:          16 Load 68(g_samp[2])
-              70:     44(ptr) AccessChain 61(local_sampler_array) 36
-                              Store 70 69
-              73:          11 Load 72(g_tex[0])
-              74:     41(ptr) AccessChain 71(local_texture_array) 62
-                              Store 74 73
-              75:          11 Load 42(g_tex[1])
-              76:     41(ptr) AccessChain 71(local_texture_array) 35
+              68:          16 Load 45(g_samp[1])
+              69:     56(ptr) AccessChain 63(local_sampler_array) 35
+                              Store 69 68
+              71:          16 Load 70(g_samp[2])
+              72:     56(ptr) AccessChain 63(local_sampler_array) 36
+                              Store 72 71
+              75:          11 Load 74(g_tex[0])
+              76:     53(ptr) AccessChain 73(local_texture_array) 64
                               Store 76 75
-              78:          11 Load 77(g_tex[2])
-              79:     41(ptr) AccessChain 71(local_texture_array) 36
-                              Store 79 78
-              93:     92(ptr) AccessChain 91 36
-              94:          88 Load 93
-              95:    6(float) CompositeExtract 94 0
-              97:     96(ptr) AccessChain 83(local_float_array) 62
-                              Store 97 95
-              98:    6(float) CompositeExtract 94 1
-              99:     96(ptr) AccessChain 83(local_float_array) 35
-                              Store 99 98
-             100:    6(float) CompositeExtract 94 2
-             101:     96(ptr) AccessChain 83(local_float_array) 36
+              77:          11 Load 42(g_tex[1])
+              78:     53(ptr) AccessChain 73(local_texture_array) 35
+                              Store 78 77
+              80:          11 Load 79(g_tex[2])
+              81:     53(ptr) AccessChain 73(local_texture_array) 36
+                              Store 81 80
+              95:     94(ptr) AccessChain 93 36
+              96:          90 Load 95
+              97:    6(float) CompositeExtract 96 0
+              99:     98(ptr) AccessChain 85(local_float_array) 64
+                              Store 99 97
+             100:    6(float) CompositeExtract 96 1
+             101:     98(ptr) AccessChain 85(local_float_array) 35
                               Store 101 100
-             102:    6(float) CompositeExtract 94 3
-             103:     96(ptr) AccessChain 83(local_float_array) 37
+             102:    6(float) CompositeExtract 96 2
+             103:     98(ptr) AccessChain 85(local_float_array) 36
                               Store 103 102
-             104:    7(fvec4) FunctionCall 9(TestFn1()
-             106:          11 Load 72(g_tex[0])
-             107:     41(ptr) AccessChain 105(aggShadow) 62
-                              Store 107 106
-             108:          11 Load 42(g_tex[1])
-             109:     41(ptr) AccessChain 105(aggShadow) 35
+             104:    6(float) CompositeExtract 96 3
+             105:     98(ptr) AccessChain 85(local_float_array) 37
+                              Store 105 104
+             106:    7(fvec4) FunctionCall 9(TestFn1()
+             108:          11 Load 74(g_tex[0])
+             109:     53(ptr) AccessChain 107(aggShadow) 64
                               Store 109 108
-             110:          11 Load 77(g_tex[2])
-             111:     41(ptr) AccessChain 105(aggShadow) 36
+             110:          11 Load 42(g_tex[1])
+             111:     53(ptr) AccessChain 107(aggShadow) 35
                               Store 111 110
-             113:          16 Load 63(g_samp[0])
-             114:     44(ptr) AccessChain 112(aggShadow) 62
-                              Store 114 113
-             115:          16 Load 45(g_samp[1])
-             116:     44(ptr) AccessChain 112(aggShadow) 35
+             112:          11 Load 79(g_tex[2])
+             113:     53(ptr) AccessChain 107(aggShadow) 36
+                              Store 113 112
+             115:          16 Load 65(g_samp[0])
+             116:     56(ptr) AccessChain 114(aggShadow) 64
                               Store 116 115
-             117:          16 Load 68(g_samp[2])
-             118:     44(ptr) AccessChain 112(aggShadow) 36
+             117:          16 Load 45(g_samp[1])
+             118:     56(ptr) AccessChain 114(aggShadow) 35
                               Store 118 117
-             119:    7(fvec4) FunctionCall 22(TestFn2(t11[3];p1[3];) 105(aggShadow) 112(aggShadow)
-             120:    7(fvec4) FAdd 104 119
-             122:    121(ptr) AccessChain 27(ps_output) 62
-                              Store 122 120
+             119:          16 Load 70(g_samp[2])
+             120:     56(ptr) AccessChain 114(aggShadow) 36
+                              Store 120 119
+             122:          14 Load 107(aggShadow)
+                              Store 121(param) 122
+             124:          17 Load 114(aggShadow)
+                              Store 123(param) 124
+             125:    7(fvec4) FunctionCall 22(TestFn2(t11[3];p1[3];) 121(param) 123(param)
+             126:    7(fvec4) FAdd 106 125
+             128:    127(ptr) AccessChain 27(ps_output) 64
+                              Store 128 126
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 52008e3..dc48f6f 100755
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -2,72 +2,142 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
-0:8    Function Parameters: 
-0:8      'i' ( in int)
-0:8      'input' ( in 3-element array of 4-component vector of float)
+0:7  Sequence
+0:7    move second child to first child ( temp 4-component vector of float)
+0:7      'C' ( global 4-component vector of float)
+0:?       Constant:
+0:?         1.000000
+0:?         2.000000
+0:?         3.000000
+0:?         4.000000
+0:11  Sequence
+0:11    move second child to first child ( temp 2-element array of 4-component vector of float)
+0:11      'c2' ( global 2-element array of 4-component vector of float)
+0:11      Construct vec4 ( temp 2-element array of 4-component vector of float)
+0:11        'C' ( global 4-component vector of float)
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:14  Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14    Function Parameters: 
+0:14      'i' ( in int)
+0:14      'input' ( in 3-element array of 4-component vector of float)
 0:?     Sequence
-0:10      Branch: Return with expression
-0:10        add ( temp 4-component vector of float)
-0:10          add ( temp 4-component vector of float)
-0:10            add ( temp 4-component vector of float)
-0:10              add ( temp 4-component vector of float)
-0:10                add ( temp 4-component vector of float)
-0:10                  add ( temp 4-component vector of float)
-0:10                    direct index ( temp 4-component vector of float)
-0:10                      a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:10                        'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10                        Constant:
-0:10                          0 (const uint)
-0:10                      Constant:
-0:10                        1 (const int)
-0:10                    indirect index ( temp 4-component vector of float)
-0:10                      a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:10                        'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10                        Constant:
-0:10                          0 (const uint)
-0:10                      'i' ( in int)
-0:10                  direct index ( temp 4-component vector of float)
-0:10                    'input' ( in 3-element array of 4-component vector of float)
-0:10                    Constant:
-0:10                      2 (const int)
-0:10                indirect index ( temp 4-component vector of float)
-0:10                  'input' ( in 3-element array of 4-component vector of float)
-0:10                  'i' ( in int)
-0:10              direct index ( temp 4-component vector of float)
-0:10                'b' ( temp 10-element array of 4-component vector of float)
-0:10                Constant:
-0:10                  5 (const int)
-0:10            indirect index ( temp 4-component vector of float)
-0:10              'b' ( temp 10-element array of 4-component vector of float)
-0:10              'i' ( in int)
-0:10          indirect index ( temp 4-component vector of float)
-0:10            m: direct index for structure ( temp 7-element array of 4-component vector of float)
-0:10              indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
-0:10                s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
-0:10                  'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10                  Constant:
-0:10                    1 (const uint)
-0:10                'i' ( in int)
-0:10              Constant:
-0:10                0 (const int)
-0:10            'i' ( in int)
-0:8  Function Definition: PixelShaderFunction( ( temp void)
-0:8    Function Parameters: 
+0:15      Sequence
+0:15        move second child to first child ( temp 10-element array of 4-component vector of float)
+0:15          'b' ( temp 10-element array of 4-component vector of float)
+0:15          Construct vec4 ( temp 10-element array of 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child ( temp 4-component vector of float)
+0:16          'tmp' ( temp 4-component vector of float)
+0:16          add ( temp 4-component vector of float)
+0:16            add ( temp 4-component vector of float)
+0:16              add ( temp 4-component vector of float)
+0:16                add ( temp 4-component vector of float)
+0:16                  'C' ( global 4-component vector of float)
+0:16                  direct index ( temp 4-component vector of float)
+0:16                    a1: direct index for structure ( uniform 1-element array of 4-component vector of float)
+0:16                      'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:16                      Constant:
+0:16                        2 (const uint)
+0:16                    Constant:
+0:16                      0 (const int)
+0:16                Constant:
+0:16                  1.000000
+0:16                  2.000000
+0:16                  3.000000
+0:16                  4.000000
+0:16              indirect index ( temp 4-component vector of float)
+0:16                a2: direct index for structure ( uniform 2-element array of 4-component vector of float)
+0:16                  'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:16                  Constant:
+0:16                    3 (const uint)
+0:16                'i' ( in int)
+0:16            indirect index ( temp 4-component vector of float)
+0:16              'c2' ( global 2-element array of 4-component vector of float)
+0:16              'i' ( in int)
+0:17      Branch: Return with expression
+0:17        add ( temp 4-component vector of float)
+0:17          add ( temp 4-component vector of float)
+0:17            add ( temp 4-component vector of float)
+0:17              add ( temp 4-component vector of float)
+0:17                add ( temp 4-component vector of float)
+0:17                  add ( temp 4-component vector of float)
+0:17                    add ( temp 4-component vector of float)
+0:17                      direct index ( temp 4-component vector of float)
+0:17                        a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17                          'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                          Constant:
+0:17                            0 (const uint)
+0:17                        Constant:
+0:17                          1 (const int)
+0:17                      indirect index ( temp 4-component vector of float)
+0:17                        a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17                          'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                          Constant:
+0:17                            0 (const uint)
+0:17                        'i' ( in int)
+0:17                    direct index ( temp 4-component vector of float)
+0:17                      'input' ( in 3-element array of 4-component vector of float)
+0:17                      Constant:
+0:17                        2 (const int)
+0:17                  indirect index ( temp 4-component vector of float)
+0:17                    'input' ( in 3-element array of 4-component vector of float)
+0:17                    'i' ( in int)
+0:17                direct index ( temp 4-component vector of float)
+0:17                  'b' ( temp 10-element array of 4-component vector of float)
+0:17                  Constant:
+0:17                    5 (const int)
+0:17              indirect index ( temp 4-component vector of float)
+0:17                'b' ( temp 10-element array of 4-component vector of float)
+0:17                'i' ( in int)
+0:17            indirect index ( temp 4-component vector of float)
+0:17              m: direct index for structure ( temp 7-element array of 4-component vector of float)
+0:17                indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
+0:17                  s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
+0:17                    'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                    Constant:
+0:17                      1 (const uint)
+0:17                  'i' ( in int)
+0:17                Constant:
+0:17                  0 (const int)
+0:17              'i' ( in int)
+0:17          'tmp' ( temp 4-component vector of float)
+0:14  Function Definition: PixelShaderFunction( ( temp void)
+0:14    Function Parameters: 
 0:?     Sequence
-0:8      move second child to first child ( temp int)
+0:14      move second child to first child ( temp int)
 0:?         'i' ( temp int)
 0:?         'i' (layout( location=0) flat in int)
-0:8      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:14      move second child to first child ( temp 3-element array of 4-component vector of float)
 0:?         'input' ( temp 3-element array of 4-component vector of float)
 0:?         'input' (layout( location=1) in 3-element array of 4-component vector of float)
-0:8      move second child to first child ( temp 4-component vector of float)
+0:14      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:8        Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14        Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
 0:?           'i' ( temp int)
 0:?           'input' ( temp 3-element array of 4-component vector of float)
 0:?   Linker Objects
-0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:?     'C' ( global 4-component vector of float)
+0:?     'c1' ( const 1-element array of 4-component vector of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
+0:?     'c2' ( global 2-element array of 4-component vector of float)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'i' (layout( location=0) flat in int)
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
@@ -79,116 +149,195 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
-0:8    Function Parameters: 
-0:8      'i' ( in int)
-0:8      'input' ( in 3-element array of 4-component vector of float)
+0:7  Sequence
+0:7    move second child to first child ( temp 4-component vector of float)
+0:7      'C' ( global 4-component vector of float)
+0:?       Constant:
+0:?         1.000000
+0:?         2.000000
+0:?         3.000000
+0:?         4.000000
+0:11  Sequence
+0:11    move second child to first child ( temp 2-element array of 4-component vector of float)
+0:11      'c2' ( global 2-element array of 4-component vector of float)
+0:11      Construct vec4 ( temp 2-element array of 4-component vector of float)
+0:11        'C' ( global 4-component vector of float)
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:14  Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14    Function Parameters: 
+0:14      'i' ( in int)
+0:14      'input' ( in 3-element array of 4-component vector of float)
 0:?     Sequence
-0:10      Branch: Return with expression
-0:10        add ( temp 4-component vector of float)
-0:10          add ( temp 4-component vector of float)
-0:10            add ( temp 4-component vector of float)
-0:10              add ( temp 4-component vector of float)
-0:10                add ( temp 4-component vector of float)
-0:10                  add ( temp 4-component vector of float)
-0:10                    direct index ( temp 4-component vector of float)
-0:10                      a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:10                        'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10                        Constant:
-0:10                          0 (const uint)
-0:10                      Constant:
-0:10                        1 (const int)
-0:10                    indirect index ( temp 4-component vector of float)
-0:10                      a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:10                        'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10                        Constant:
-0:10                          0 (const uint)
-0:10                      'i' ( in int)
-0:10                  direct index ( temp 4-component vector of float)
-0:10                    'input' ( in 3-element array of 4-component vector of float)
-0:10                    Constant:
-0:10                      2 (const int)
-0:10                indirect index ( temp 4-component vector of float)
-0:10                  'input' ( in 3-element array of 4-component vector of float)
-0:10                  'i' ( in int)
-0:10              direct index ( temp 4-component vector of float)
-0:10                'b' ( temp 10-element array of 4-component vector of float)
-0:10                Constant:
-0:10                  5 (const int)
-0:10            indirect index ( temp 4-component vector of float)
-0:10              'b' ( temp 10-element array of 4-component vector of float)
-0:10              'i' ( in int)
-0:10          indirect index ( temp 4-component vector of float)
-0:10            m: direct index for structure ( temp 7-element array of 4-component vector of float)
-0:10              indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
-0:10                s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
-0:10                  'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:10                  Constant:
-0:10                    1 (const uint)
-0:10                'i' ( in int)
-0:10              Constant:
-0:10                0 (const int)
-0:10            'i' ( in int)
-0:8  Function Definition: PixelShaderFunction( ( temp void)
-0:8    Function Parameters: 
+0:15      Sequence
+0:15        move second child to first child ( temp 10-element array of 4-component vector of float)
+0:15          'b' ( temp 10-element array of 4-component vector of float)
+0:15          Construct vec4 ( temp 10-element array of 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child ( temp 4-component vector of float)
+0:16          'tmp' ( temp 4-component vector of float)
+0:16          add ( temp 4-component vector of float)
+0:16            add ( temp 4-component vector of float)
+0:16              add ( temp 4-component vector of float)
+0:16                add ( temp 4-component vector of float)
+0:16                  'C' ( global 4-component vector of float)
+0:16                  direct index ( temp 4-component vector of float)
+0:16                    a1: direct index for structure ( uniform 1-element array of 4-component vector of float)
+0:16                      'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:16                      Constant:
+0:16                        2 (const uint)
+0:16                    Constant:
+0:16                      0 (const int)
+0:16                Constant:
+0:16                  1.000000
+0:16                  2.000000
+0:16                  3.000000
+0:16                  4.000000
+0:16              indirect index ( temp 4-component vector of float)
+0:16                a2: direct index for structure ( uniform 2-element array of 4-component vector of float)
+0:16                  'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:16                  Constant:
+0:16                    3 (const uint)
+0:16                'i' ( in int)
+0:16            indirect index ( temp 4-component vector of float)
+0:16              'c2' ( global 2-element array of 4-component vector of float)
+0:16              'i' ( in int)
+0:17      Branch: Return with expression
+0:17        add ( temp 4-component vector of float)
+0:17          add ( temp 4-component vector of float)
+0:17            add ( temp 4-component vector of float)
+0:17              add ( temp 4-component vector of float)
+0:17                add ( temp 4-component vector of float)
+0:17                  add ( temp 4-component vector of float)
+0:17                    add ( temp 4-component vector of float)
+0:17                      direct index ( temp 4-component vector of float)
+0:17                        a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17                          'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                          Constant:
+0:17                            0 (const uint)
+0:17                        Constant:
+0:17                          1 (const int)
+0:17                      indirect index ( temp 4-component vector of float)
+0:17                        a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17                          'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                          Constant:
+0:17                            0 (const uint)
+0:17                        'i' ( in int)
+0:17                    direct index ( temp 4-component vector of float)
+0:17                      'input' ( in 3-element array of 4-component vector of float)
+0:17                      Constant:
+0:17                        2 (const int)
+0:17                  indirect index ( temp 4-component vector of float)
+0:17                    'input' ( in 3-element array of 4-component vector of float)
+0:17                    'i' ( in int)
+0:17                direct index ( temp 4-component vector of float)
+0:17                  'b' ( temp 10-element array of 4-component vector of float)
+0:17                  Constant:
+0:17                    5 (const int)
+0:17              indirect index ( temp 4-component vector of float)
+0:17                'b' ( temp 10-element array of 4-component vector of float)
+0:17                'i' ( in int)
+0:17            indirect index ( temp 4-component vector of float)
+0:17              m: direct index for structure ( temp 7-element array of 4-component vector of float)
+0:17                indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
+0:17                  s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
+0:17                    'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                    Constant:
+0:17                      1 (const uint)
+0:17                  'i' ( in int)
+0:17                Constant:
+0:17                  0 (const int)
+0:17              'i' ( in int)
+0:17          'tmp' ( temp 4-component vector of float)
+0:14  Function Definition: PixelShaderFunction( ( temp void)
+0:14    Function Parameters: 
 0:?     Sequence
-0:8      move second child to first child ( temp int)
+0:14      move second child to first child ( temp int)
 0:?         'i' ( temp int)
 0:?         'i' (layout( location=0) flat in int)
-0:8      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:14      move second child to first child ( temp 3-element array of 4-component vector of float)
 0:?         'input' ( temp 3-element array of 4-component vector of float)
 0:?         'input' (layout( location=1) in 3-element array of 4-component vector of float)
-0:8      move second child to first child ( temp 4-component vector of float)
+0:14      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:8        Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14        Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
 0:?           'i' ( temp int)
 0:?           'input' ( temp 3-element array of 4-component vector of float)
 0:?   Linker Objects
-0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:?     'C' ( global 4-component vector of float)
+0:?     'c1' ( const 1-element array of 4-component vector of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
+0:?     'c2' ( global 2-element array of 4-component vector of float)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'i' (layout( location=0) flat in int)
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 81
+// Generated by (magic number): 80002
+// Id's are bound by 126
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 68 72 75
+                              EntryPoint Fragment 4  "PixelShaderFunction" 112 116 119
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
                               Name 17  "@PixelShaderFunction(i1;vf4[3];"
                               Name 15  "i"
                               Name 16  "input"
-                              Name 23  ""
-                              MemberName 23 0  "m"
-                              Name 26  "$Global"
-                              MemberName 26($Global) 0  "a"
-                              MemberName 26($Global) 1  "s"
-                              Name 28  ""
-                              Name 50  "b"
-                              Name 66  "i"
-                              Name 68  "i"
-                              Name 70  "input"
-                              Name 72  "input"
-                              Name 75  "@entryPointOutput"
-                              Name 76  "param"
-                              Name 78  "param"
-                              Decorate 20 ArrayStride 16
-                              Decorate 22 ArrayStride 16
-                              MemberDecorate 23 0 Offset 0
-                              Decorate 25 ArrayStride 112
-                              MemberDecorate 26($Global) 0 Offset 0
-                              MemberDecorate 26($Global) 1 Offset 64
-                              Decorate 26($Global) Block
-                              Decorate 28 DescriptorSet 0
-                              Decorate 68(i) Flat
-                              Decorate 68(i) Location 0
-                              Decorate 72(input) Location 1
-                              Decorate 75(@entryPointOutput) Location 0
+                              Name 20  "C"
+                              Name 29  "c2"
+                              Name 35  "b"
+                              Name 48  "tmp"
+                              Name 54  ""
+                              MemberName 54 0  "m"
+                              Name 60  "$Global"
+                              MemberName 60($Global) 0  "a"
+                              MemberName 60($Global) 1  "s"
+                              MemberName 60($Global) 2  "a1"
+                              MemberName 60($Global) 3  "a2"
+                              Name 62  ""
+                              Name 110  "i"
+                              Name 112  "i"
+                              Name 114  "input"
+                              Name 116  "input"
+                              Name 119  "@entryPointOutput"
+                              Name 120  "param"
+                              Name 122  "param"
+                              Decorate 51 ArrayStride 16
+                              Decorate 53 ArrayStride 16
+                              MemberDecorate 54 0 Offset 0
+                              Decorate 56 ArrayStride 112
+                              Decorate 58 ArrayStride 16
+                              Decorate 59 ArrayStride 16
+                              MemberDecorate 60($Global) 0 Offset 0
+                              MemberDecorate 60($Global) 1 Offset 64
+                              MemberDecorate 60($Global) 2 Offset 1296
+                              MemberDecorate 60($Global) 3 Offset 1312
+                              Decorate 60($Global) Block
+                              Decorate 62 DescriptorSet 0
+                              Decorate 112(i) Flat
+                              Decorate 112(i) Location 0
+                              Decorate 116(input) Location 1
+                              Decorate 119(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -200,78 +349,127 @@
               12:             TypeArray 9(fvec4) 11
               13:             TypePointer Function 12
               14:             TypeFunction 9(fvec4) 7(ptr) 13(ptr)
-              19:     10(int) Constant 4
-              20:             TypeArray 9(fvec4) 19
-              21:     10(int) Constant 7
-              22:             TypeArray 9(fvec4) 21
-              23:             TypeStruct 22
-              24:     10(int) Constant 11
-              25:             TypeArray 23(struct) 24
-     26($Global):             TypeStruct 20 25
-              27:             TypePointer Uniform 26($Global)
-              28:     27(ptr) Variable Uniform
-              29:      6(int) Constant 0
-              30:      6(int) Constant 1
-              31:             TypePointer Uniform 9(fvec4)
-              38:      6(int) Constant 2
-              39:             TypePointer Function 9(fvec4)
-              47:     10(int) Constant 10
-              48:             TypeArray 9(fvec4) 47
-              49:             TypePointer Function 48
-              51:      6(int) Constant 5
-              67:             TypePointer Input 6(int)
-           68(i):     67(ptr) Variable Input
-              71:             TypePointer Input 12
-       72(input):     71(ptr) Variable Input
-              74:             TypePointer Output 9(fvec4)
-75(@entryPointOutput):     74(ptr) Variable Output
+              19:             TypePointer Private 9(fvec4)
+           20(C):     19(ptr) Variable Private
+              21:    8(float) Constant 1065353216
+              22:    8(float) Constant 1073741824
+              23:    8(float) Constant 1077936128
+              24:    8(float) Constant 1082130432
+              25:    9(fvec4) ConstantComposite 21 22 23 24
+              26:     10(int) Constant 2
+              27:             TypeArray 9(fvec4) 26
+              28:             TypePointer Private 27
+          29(c2):     28(ptr) Variable Private
+              32:     10(int) Constant 10
+              33:             TypeArray 9(fvec4) 32
+              34:             TypePointer Function 33
+              47:             TypePointer Function 9(fvec4)
+              50:     10(int) Constant 4
+              51:             TypeArray 9(fvec4) 50
+              52:     10(int) Constant 7
+              53:             TypeArray 9(fvec4) 52
+              54:             TypeStruct 53
+              55:     10(int) Constant 11
+              56:             TypeArray 54(struct) 55
+              57:     10(int) Constant 1
+              58:             TypeArray 9(fvec4) 57
+              59:             TypeArray 9(fvec4) 26
+     60($Global):             TypeStruct 51 56 58 59
+              61:             TypePointer Uniform 60($Global)
+              62:     61(ptr) Variable Uniform
+              63:      6(int) Constant 2
+              64:      6(int) Constant 0
+              65:             TypePointer Uniform 9(fvec4)
+              70:      6(int) Constant 3
+              79:      6(int) Constant 1
+              93:      6(int) Constant 5
+             111:             TypePointer Input 6(int)
+          112(i):    111(ptr) Variable Input
+             115:             TypePointer Input 12
+      116(input):    115(ptr) Variable Input
+             118:             TypePointer Output 9(fvec4)
+119(@entryPointOutput):    118(ptr) Variable Output
+             125:          58 ConstantComposite 25
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-           66(i):      7(ptr) Variable Function
-       70(input):     13(ptr) Variable Function
-       76(param):      7(ptr) Variable Function
-       78(param):     13(ptr) Variable Function
-              69:      6(int) Load 68(i)
-                              Store 66(i) 69
-              73:          12 Load 72(input)
-                              Store 70(input) 73
-              77:      6(int) Load 66(i)
-                              Store 76(param) 77
-              79:          12 Load 70(input)
-                              Store 78(param) 79
-              80:    9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 76(param) 78(param)
-                              Store 75(@entryPointOutput) 80
+          110(i):      7(ptr) Variable Function
+      114(input):     13(ptr) Variable Function
+      120(param):      7(ptr) Variable Function
+      122(param):     13(ptr) Variable Function
+                              Store 20(C) 25
+              30:    9(fvec4) Load 20(C)
+              31:          27 CompositeConstruct 30 25
+                              Store 29(c2) 31
+             113:      6(int) Load 112(i)
+                              Store 110(i) 113
+             117:          12 Load 116(input)
+                              Store 114(input) 117
+             121:      6(int) Load 110(i)
+                              Store 120(param) 121
+             123:          12 Load 114(input)
+                              Store 122(param) 123
+             124:    9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 120(param) 122(param)
+                              Store 119(@entryPointOutput) 124
                               Return
                               FunctionEnd
 17(@PixelShaderFunction(i1;vf4[3];):    9(fvec4) Function None 14
            15(i):      7(ptr) FunctionParameter
        16(input):     13(ptr) FunctionParameter
               18:             Label
-           50(b):     49(ptr) Variable Function
-              32:     31(ptr) AccessChain 28 29 30
-              33:    9(fvec4) Load 32
-              34:      6(int) Load 15(i)
-              35:     31(ptr) AccessChain 28 29 34
-              36:    9(fvec4) Load 35
-              37:    9(fvec4) FAdd 33 36
-              40:     39(ptr) AccessChain 16(input) 38
-              41:    9(fvec4) Load 40
-              42:    9(fvec4) FAdd 37 41
-              43:      6(int) Load 15(i)
-              44:     39(ptr) AccessChain 16(input) 43
-              45:    9(fvec4) Load 44
-              46:    9(fvec4) FAdd 42 45
-              52:     39(ptr) AccessChain 50(b) 51
-              53:    9(fvec4) Load 52
-              54:    9(fvec4) FAdd 46 53
-              55:      6(int) Load 15(i)
-              56:     39(ptr) AccessChain 50(b) 55
-              57:    9(fvec4) Load 56
-              58:    9(fvec4) FAdd 54 57
-              59:      6(int) Load 15(i)
-              60:      6(int) Load 15(i)
-              61:     31(ptr) AccessChain 28 30 59 29 60
-              62:    9(fvec4) Load 61
-              63:    9(fvec4) FAdd 58 62
-                              ReturnValue 63
+           35(b):     34(ptr) Variable Function
+         48(tmp):     47(ptr) Variable Function
+              36:    9(fvec4) Load 20(C)
+              37:    9(fvec4) Load 20(C)
+              38:    9(fvec4) Load 20(C)
+              39:    9(fvec4) Load 20(C)
+              40:    9(fvec4) Load 20(C)
+              41:    9(fvec4) Load 20(C)
+              42:    9(fvec4) Load 20(C)
+              43:    9(fvec4) Load 20(C)
+              44:    9(fvec4) Load 20(C)
+              45:    9(fvec4) Load 20(C)
+              46:          33 CompositeConstruct 36 37 38 39 40 41 42 43 44 45
+                              Store 35(b) 46
+              49:    9(fvec4) Load 20(C)
+              66:     65(ptr) AccessChain 62 63 64
+              67:    9(fvec4) Load 66
+              68:    9(fvec4) FAdd 49 67
+              69:    9(fvec4) FAdd 68 25
+              71:      6(int) Load 15(i)
+              72:     65(ptr) AccessChain 62 70 71
+              73:    9(fvec4) Load 72
+              74:    9(fvec4) FAdd 69 73
+              75:      6(int) Load 15(i)
+              76:     19(ptr) AccessChain 29(c2) 75
+              77:    9(fvec4) Load 76
+              78:    9(fvec4) FAdd 74 77
+                              Store 48(tmp) 78
+              80:     65(ptr) AccessChain 62 64 79
+              81:    9(fvec4) Load 80
+              82:      6(int) Load 15(i)
+              83:     65(ptr) AccessChain 62 64 82
+              84:    9(fvec4) Load 83
+              85:    9(fvec4) FAdd 81 84
+              86:     47(ptr) AccessChain 16(input) 63
+              87:    9(fvec4) Load 86
+              88:    9(fvec4) FAdd 85 87
+              89:      6(int) Load 15(i)
+              90:     47(ptr) AccessChain 16(input) 89
+              91:    9(fvec4) Load 90
+              92:    9(fvec4) FAdd 88 91
+              94:     47(ptr) AccessChain 35(b) 93
+              95:    9(fvec4) Load 94
+              96:    9(fvec4) FAdd 92 95
+              97:      6(int) Load 15(i)
+              98:     47(ptr) AccessChain 35(b) 97
+              99:    9(fvec4) Load 98
+             100:    9(fvec4) FAdd 96 99
+             101:      6(int) Load 15(i)
+             102:      6(int) Load 15(i)
+             103:     65(ptr) AccessChain 62 79 101 64 102
+             104:    9(fvec4) Load 103
+             105:    9(fvec4) FAdd 100 104
+             106:    9(fvec4) Load 48(tmp)
+             107:    9(fvec4) FAdd 105 106
+                              ReturnValue 107
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out
index e4854db..cfd6562 100644
--- a/Test/baseResults/hlsl.array.implicit-size.frag.out
+++ b/Test/baseResults/hlsl.array.implicit-size.frag.out
@@ -163,7 +163,7 @@
 0:?     'g_mystruct' ( global 2-element array of structure{ temp int i,  temp float f})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.multidim.frag.out b/Test/baseResults/hlsl.array.multidim.frag.out
index c62fd7d..133c71f 100644
--- a/Test/baseResults/hlsl.array.multidim.frag.out
+++ b/Test/baseResults/hlsl.array.multidim.frag.out
@@ -134,7 +134,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out
index dcefa9c..7f071e4 100755
--- a/Test/baseResults/hlsl.assoc.frag.out
+++ b/Test/baseResults/hlsl.assoc.frag.out
@@ -132,7 +132,7 @@
 0:?     'a5' (layout( location=4) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out
index 701511e..5fcf10d 100644
--- a/Test/baseResults/hlsl.attribute.expression.comp.out
+++ b/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -82,7 +82,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attribute.frag.out b/Test/baseResults/hlsl.attribute.frag.out
index 47fb677..99471c4 100755
--- a/Test/baseResults/hlsl.attribute.frag.out
+++ b/Test/baseResults/hlsl.attribute.frag.out
@@ -50,7 +50,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attributeC11.frag.out b/Test/baseResults/hlsl.attributeC11.frag.out
new file mode 100755
index 0000000..02b0ede
--- /dev/null
+++ b/Test/baseResults/hlsl.attributeC11.frag.out
@@ -0,0 +1,176 @@
+hlsl.attributeC11.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:16  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:16    Function Parameters: 
+0:16      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:17      Branch: Return with expression
+0:17        add ( temp 4-component vector of float)
+0:17          'input' ( in 4-component vector of float)
+0:17          textureFetch ( temp 4-component vector of float)
+0:17            'attach' ( uniform texture2D)
+0:17            vector swizzle ( temp int)
+0:17              Constant:
+0:17                0 (const int)
+0:17                0 (const int)
+0:17              Sequence
+0:17                Constant:
+0:17                  0 (const int)
+0:17            direct index ( temp int)
+0:17              Constant:
+0:17                0 (const int)
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:16  Function Definition: main( ( temp void)
+0:16    Function Parameters: 
+0:?     Sequence
+0:16      move second child to first child ( temp 4-component vector of float)
+0:?         'input' ( temp 4-component vector of float)
+0:?         'input' (layout( location=8) in 4-component vector of float)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=7) out 4-component vector of float)
+0:16        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'input' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:?     'buffer3' (layout( set=2 binding=3 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:?     'attach' ( uniform texture2D)
+0:?     '@entryPointOutput' (layout( location=7) out 4-component vector of float)
+0:?     'input' (layout( location=8) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:16  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:16    Function Parameters: 
+0:16      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:17      Branch: Return with expression
+0:17        add ( temp 4-component vector of float)
+0:17          'input' ( in 4-component vector of float)
+0:17          textureFetch ( temp 4-component vector of float)
+0:17            'attach' ( uniform texture2D)
+0:17            vector swizzle ( temp int)
+0:17              Constant:
+0:17                0 (const int)
+0:17                0 (const int)
+0:17              Sequence
+0:17                Constant:
+0:17                  0 (const int)
+0:17            direct index ( temp int)
+0:17              Constant:
+0:17                0 (const int)
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:16  Function Definition: main( ( temp void)
+0:16    Function Parameters: 
+0:?     Sequence
+0:16      move second child to first child ( temp 4-component vector of float)
+0:?         'input' ( temp 4-component vector of float)
+0:?         'input' (layout( location=8) in 4-component vector of float)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=7) out 4-component vector of float)
+0:16        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'input' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:?     'buffer3' (layout( set=2 binding=3 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:?     'attach' ( uniform texture2D)
+0:?     '@entryPointOutput' (layout( location=7) out 4-component vector of float)
+0:?     'input' (layout( location=8) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 47
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 33 36
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "input"
+                              Name 16  "attach"
+                              Name 31  "input"
+                              Name 33  "input"
+                              Name 36  "@entryPointOutput"
+                              Name 37  "param"
+                              Name 41  "S"
+                              MemberName 41(S) 0  "f"
+                              Name 43  "buffer1"
+                              MemberName 43(buffer1) 0  "@data"
+                              Name 45  "buffer1"
+                              Name 46  "buffer3"
+                              Decorate 16(attach) DescriptorSet 0
+                              Decorate 16(attach) InputAttachmentIndex 4
+                              Decorate 33(input) Location 8
+                              Decorate 36(@entryPointOutput) Location 7
+                              MemberDecorate 41(S) 0 Offset 0
+                              Decorate 42 ArrayStride 8
+                              MemberDecorate 43(buffer1) 0 NonWritable
+                              MemberDecorate 43(buffer1) 0 Offset 0
+                              Decorate 43(buffer1) BufferBlock
+                              Decorate 45(buffer1) DescriptorSet 0
+                              Decorate 45(buffer1) Binding 1
+                              Decorate 46(buffer3) DescriptorSet 2
+                              Decorate 46(buffer3) Binding 3
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              14:             TypeImage 6(float) 2D sampled format:Unknown
+              15:             TypePointer UniformConstant 14
+      16(attach):     15(ptr) Variable UniformConstant
+              18:             TypeInt 32 1
+              19:             TypeVector 18(int) 2
+              20:     18(int) Constant 0
+              21:   19(ivec2) ConstantComposite 20 20
+              22:             TypeInt 32 0
+              23:     22(int) Constant 0
+              25:     22(int) Constant 1
+              32:             TypePointer Input 7(fvec4)
+       33(input):     32(ptr) Variable Input
+              35:             TypePointer Output 7(fvec4)
+36(@entryPointOutput):     35(ptr) Variable Output
+              40:             TypeVector 6(float) 2
+           41(S):             TypeStruct 40(fvec2)
+              42:             TypeRuntimeArray 41(S)
+     43(buffer1):             TypeStruct 42
+              44:             TypePointer Uniform 43(buffer1)
+     45(buffer1):     44(ptr) Variable Uniform
+     46(buffer3):     44(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+       31(input):      8(ptr) Variable Function
+       37(param):      8(ptr) Variable Function
+              34:    7(fvec4) Load 33(input)
+                              Store 31(input) 34
+              38:    7(fvec4) Load 31(input)
+                              Store 37(param) 38
+              39:    7(fvec4) FunctionCall 11(@main(vf4;) 37(param)
+                              Store 36(@entryPointOutput) 39
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+              13:    7(fvec4) Load 10(input)
+              17:          14 Load 16(attach)
+              24:     18(int) CompositeExtract 21 0
+              26:     18(int) CompositeExtract 21 1
+              27:    7(fvec4) ImageFetch 17 24 Lod 26
+              28:    7(fvec4) FAdd 13 27
+                              ReturnValue 28
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
new file mode 100755
index 0000000..e00ae52
--- /dev/null
+++ b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
@@ -0,0 +1,109 @@
+hlsl.attributeGlobalBuffer.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6  Function Definition: @main( ( temp 4-component vector of float)
+0:6    Function Parameters: 
+0:?     Sequence
+0:7      Branch: Return with expression
+0:7        add ( temp 4-component vector of float)
+0:7          u1: direct index for structure ( uniform 4-component vector of float)
+0:7            'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          u2: direct index for structure ( uniform 4-component vector of float)
+0:7            'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
+0:7            Constant:
+0:7              1 (const uint)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6  Function Definition: @main( ( temp 4-component vector of float)
+0:6    Function Parameters: 
+0:?     Sequence
+0:7      Branch: Return with expression
+0:7        add ( temp 4-component vector of float)
+0:7          u1: direct index for structure ( uniform 4-component vector of float)
+0:7            'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          u2: direct index for structure ( uniform 4-component vector of float)
+0:7            'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
+0:7            Constant:
+0:7              1 (const uint)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 28
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 26
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 11  "$Global"
+                              MemberName 11($Global) 0  "u1"
+                              MemberName 11($Global) 1  "u2"
+                              Name 13  ""
+                              Name 26  "@entryPointOutput"
+                              MemberDecorate 11($Global) 0 Offset 0
+                              MemberDecorate 11($Global) 1 Offset 16
+                              Decorate 11($Global) Block
+                              Decorate 13 DescriptorSet 2
+                              Decorate 13 Binding 5
+                              Decorate 26(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+     11($Global):             TypeStruct 7(fvec4) 7(fvec4)
+              12:             TypePointer Uniform 11($Global)
+              13:     12(ptr) Variable Uniform
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:             TypePointer Uniform 7(fvec4)
+              19:     14(int) Constant 1
+              25:             TypePointer Output 7(fvec4)
+26(@entryPointOutput):     25(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              27:    7(fvec4) FunctionCall 9(@main()
+                              Store 26(@entryPointOutput) 27
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+              17:     16(ptr) AccessChain 13 15
+              18:    7(fvec4) Load 17
+              20:     16(ptr) AccessChain 13 19
+              21:    7(fvec4) Load 20
+              22:    7(fvec4) FAdd 18 21
+                              ReturnValue 22
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
index 9842506..b72c848 100755
--- a/Test/baseResults/hlsl.basic.comp.out
+++ b/Test/baseResults/hlsl.basic.comp.out
@@ -60,7 +60,7 @@
 0:?     'gti' ( in int LocalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.basic.geom.out b/Test/baseResults/hlsl.basic.geom.out
index 220180c..9d9aaa7 100644
--- a/Test/baseResults/hlsl.basic.geom.out
+++ b/Test/baseResults/hlsl.basic.geom.out
@@ -188,7 +188,7 @@
 0:?     'OutputStream.something' (layout( location=1) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 68
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.boolConv.vert.out b/Test/baseResults/hlsl.boolConv.vert.out
index 32c6eb2..5d94fe9 100755
--- a/Test/baseResults/hlsl.boolConv.vert.out
+++ b/Test/baseResults/hlsl.boolConv.vert.out
@@ -224,7 +224,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 109
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index c0d251c..0b73f8d 100755
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -114,7 +114,7 @@
 0:?     'input' ( in 4-component vector of float FragCoord)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index 217edf0..bbdd216 100644
--- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -356,7 +356,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 148
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out
index 854c94e..5d7cd71 100755
--- a/Test/baseResults/hlsl.cast.frag.out
+++ b/Test/baseResults/hlsl.cast.frag.out
@@ -72,7 +72,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.charLit.vert.out b/Test/baseResults/hlsl.charLit.vert.out
index cc8388a..4555ba6 100755
--- a/Test/baseResults/hlsl.charLit.vert.out
+++ b/Test/baseResults/hlsl.charLit.vert.out
@@ -146,7 +146,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clip.frag.out b/Test/baseResults/hlsl.clip.frag.out
index 9b2de87..e2e1a0a 100644
--- a/Test/baseResults/hlsl.clip.frag.out
+++ b/Test/baseResults/hlsl.clip.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-1.frag.out b/Test/baseResults/hlsl.clipdistance-1.frag.out
index b3cdb61..8327898 100644
--- a/Test/baseResults/hlsl.clipdistance-1.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-1.frag.out
@@ -98,7 +98,7 @@
 0:?     'cull' ( in 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-1.geom.out b/Test/baseResults/hlsl.clipdistance-1.geom.out
index bde7822..5fd9aec 100644
--- a/Test/baseResults/hlsl.clipdistance-1.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-1.geom.out
@@ -550,7 +550,7 @@
 0:?     'OutputStream.clip' ( out 2-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 118
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-1.vert.out b/Test/baseResults/hlsl.clipdistance-1.vert.out
index b11c1cf..94b1c7f 100644
--- a/Test/baseResults/hlsl.clipdistance-1.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-1.vert.out
@@ -108,7 +108,7 @@
 0:?     'cull' ( out 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-2.frag.out b/Test/baseResults/hlsl.clipdistance-2.frag.out
index f39295e..cbda87c 100644
--- a/Test/baseResults/hlsl.clipdistance-2.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-2.frag.out
@@ -290,7 +290,7 @@
 0:?     'cull' ( in 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-2.geom.out b/Test/baseResults/hlsl.clipdistance-2.geom.out
index 158cb2c..1b9f020 100644
--- a/Test/baseResults/hlsl.clipdistance-2.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-2.geom.out
@@ -724,7 +724,7 @@
 0:?     'OutputStream.clip' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 128
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-2.vert.out b/Test/baseResults/hlsl.clipdistance-2.vert.out
index bdab064..9afe2ed 100644
--- a/Test/baseResults/hlsl.clipdistance-2.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-2.vert.out
@@ -420,7 +420,7 @@
 0:?     'cull' ( out 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-3.frag.out b/Test/baseResults/hlsl.clipdistance-3.frag.out
index 8515cd7..1faa87e 100644
--- a/Test/baseResults/hlsl.clipdistance-3.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-3.frag.out
@@ -98,7 +98,7 @@
 0:?     'cull' ( in 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-3.geom.out b/Test/baseResults/hlsl.clipdistance-3.geom.out
index d48c73a..c99a957 100644
--- a/Test/baseResults/hlsl.clipdistance-3.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-3.geom.out
@@ -630,7 +630,7 @@
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 127
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-3.vert.out b/Test/baseResults/hlsl.clipdistance-3.vert.out
index a301b34..25ca231 100644
--- a/Test/baseResults/hlsl.clipdistance-3.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-3.vert.out
@@ -136,7 +136,7 @@
 0:?     'cull' ( out 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-4.frag.out b/Test/baseResults/hlsl.clipdistance-4.frag.out
index b5fa6c5..b52d917 100644
--- a/Test/baseResults/hlsl.clipdistance-4.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-4.frag.out
@@ -174,7 +174,7 @@
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-4.geom.out b/Test/baseResults/hlsl.clipdistance-4.geom.out
index 82d0c0a..9518823 100644
--- a/Test/baseResults/hlsl.clipdistance-4.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-4.geom.out
@@ -612,7 +612,7 @@
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 130
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-4.vert.out b/Test/baseResults/hlsl.clipdistance-4.vert.out
index ac99334..575f7d1 100644
--- a/Test/baseResults/hlsl.clipdistance-4.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-4.vert.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-5.frag.out b/Test/baseResults/hlsl.clipdistance-5.frag.out
index 7c1bac5..7a7f985 100644
--- a/Test/baseResults/hlsl.clipdistance-5.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-5.frag.out
@@ -232,7 +232,7 @@
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-5.vert.out b/Test/baseResults/hlsl.clipdistance-5.vert.out
index 7a50973..5e40f88 100644
--- a/Test/baseResults/hlsl.clipdistance-5.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-5.vert.out
@@ -318,7 +318,7 @@
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-6.frag.out b/Test/baseResults/hlsl.clipdistance-6.frag.out
index c249b0e..907122d 100644
--- a/Test/baseResults/hlsl.clipdistance-6.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-6.frag.out
@@ -282,7 +282,7 @@
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 79
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-6.vert.out b/Test/baseResults/hlsl.clipdistance-6.vert.out
index 6449482..15c987c 100644
--- a/Test/baseResults/hlsl.clipdistance-6.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-6.vert.out
@@ -428,7 +428,7 @@
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 86
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-7.frag.out b/Test/baseResults/hlsl.clipdistance-7.frag.out
index e6e5c00..03c329f 100644
--- a/Test/baseResults/hlsl.clipdistance-7.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-7.frag.out
@@ -270,7 +270,7 @@
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-7.vert.out b/Test/baseResults/hlsl.clipdistance-7.vert.out
index 5a93c2c..468ea66 100644
--- a/Test/baseResults/hlsl.clipdistance-7.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-7.vert.out
@@ -384,7 +384,7 @@
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 81
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-8.frag.out b/Test/baseResults/hlsl.clipdistance-8.frag.out
index 6777efa..6abc4b1 100644
--- a/Test/baseResults/hlsl.clipdistance-8.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-8.frag.out
@@ -186,7 +186,7 @@
 0:?     'v.clip1' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-8.vert.out b/Test/baseResults/hlsl.clipdistance-8.vert.out
index 1705f2b..6188f6e 100644
--- a/Test/baseResults/hlsl.clipdistance-8.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-8.vert.out
@@ -240,7 +240,7 @@
 0:?     '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-9.frag.out b/Test/baseResults/hlsl.clipdistance-9.frag.out
index b5c0926..57a722b 100644
--- a/Test/baseResults/hlsl.clipdistance-9.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-9.frag.out
@@ -144,7 +144,7 @@
 0:?     'clip0' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 68
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-9.vert.out b/Test/baseResults/hlsl.clipdistance-9.vert.out
index f984be0..1dc8355 100644
--- a/Test/baseResults/hlsl.clipdistance-9.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-9.vert.out
@@ -194,7 +194,7 @@
 0:?     'clip0' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
index 2e57170..e2d4637 100644
--- a/Test/baseResults/hlsl.comparison.vec.frag.out
+++ b/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -262,7 +262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
index 7397c6f..bbcfd55 100755
--- a/Test/baseResults/hlsl.conditional.frag.out
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -522,7 +522,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 220
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out
index 2c7dafe..58e9ed8 100644
--- a/Test/baseResults/hlsl.constantbuffer.frag.out
+++ b/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -45,7 +45,7 @@
 0:24                direct index (layout( row_major std140) temp 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
 0:24                  'cb3' (layout( row_major std140) uniform 2-element array of 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
 0:24                  Constant:
-0:24                    2 (const int)
+0:24                    1 (const int)
 0:24                Constant:
 0:24                  3 (const int)
 0:24              Constant:
@@ -113,7 +113,7 @@
 0:24                direct index (layout( row_major std140) temp 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
 0:24                  'cb3' (layout( row_major std140) uniform 2-element array of 4-element array of block{layout( row_major std140) uniform bool x, layout( row_major std140) uniform float y})
 0:24                  Constant:
-0:24                    2 (const int)
+0:24                    1 (const int)
 0:24                Constant:
 0:24                  3 (const int)
 0:24              Constant:
@@ -132,7 +132,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 66
 
                               Capability Shader
@@ -231,7 +231,7 @@
               54:    7(fvec4)   FAdd 45 53
                                 ReturnValue 54
               56:               Label
-              58:     41(ptr)   AccessChain 18(cb3) 21 57 20
+              58:     41(ptr)   AccessChain 18(cb3) 20 57 20
               59:    6(float)   Load 58
               60:    7(fvec4)   CompositeConstruct 59 59 59 59
                                 ReturnValue 60
diff --git a/Test/baseResults/hlsl.constructArray.vert.out b/Test/baseResults/hlsl.constructArray.vert.out
index dd2c243..7140bea 100755
--- a/Test/baseResults/hlsl.constructArray.vert.out
+++ b/Test/baseResults/hlsl.constructArray.vert.out
@@ -268,7 +268,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructexpr.frag.out b/Test/baseResults/hlsl.constructexpr.frag.out
index ecaf95a..1321bfe 100644
--- a/Test/baseResults/hlsl.constructexpr.frag.out
+++ b/Test/baseResults/hlsl.constructexpr.frag.out
@@ -104,7 +104,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructimat.frag.out b/Test/baseResults/hlsl.constructimat.frag.out
index adabb80..f54945a 100644
--- a/Test/baseResults/hlsl.constructimat.frag.out
+++ b/Test/baseResults/hlsl.constructimat.frag.out
@@ -544,7 +544,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.dashI.vert.out b/Test/baseResults/hlsl.dashI.vert.out
index 27e9129..e8c1dc6 100644
--- a/Test/baseResults/hlsl.dashI.vert.out
+++ b/Test/baseResults/hlsl.dashI.vert.out
@@ -1,6 +1,6 @@
 hlsl.dashI.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
index 3d493f7..a54c98d 100644
--- a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
+++ b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
@@ -1,6 +1,6 @@
 hlsl.deadFunctionMissingBody.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.depthGreater.frag.out b/Test/baseResults/hlsl.depthGreater.frag.out
index f1bbb5b..44c414c 100755
--- a/Test/baseResults/hlsl.depthGreater.frag.out
+++ b/Test/baseResults/hlsl.depthGreater.frag.out
@@ -50,7 +50,7 @@
 0:?     'depth' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.depthLess.frag.out b/Test/baseResults/hlsl.depthLess.frag.out
index 7a3e926..f97f1be 100755
--- a/Test/baseResults/hlsl.depthLess.frag.out
+++ b/Test/baseResults/hlsl.depthLess.frag.out
@@ -42,7 +42,7 @@
 0:?     '@entryPointOutput' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out
index 508ac5a..7a6ed45 100755
--- a/Test/baseResults/hlsl.discard.frag.out
+++ b/Test/baseResults/hlsl.discard.frag.out
@@ -108,7 +108,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out
index bdd9338..bee6c29 100755
--- a/Test/baseResults/hlsl.doLoop.frag.out
+++ b/Test/baseResults/hlsl.doLoop.frag.out
@@ -144,7 +144,7 @@
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 71
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.domain.1.tese.out b/Test/baseResults/hlsl.domain.1.tese.out
index e8a1955..e0fa528 100644
--- a/Test/baseResults/hlsl.domain.1.tese.out
+++ b/Test/baseResults/hlsl.domain.1.tese.out
@@ -286,7 +286,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 103
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.2.tese.out b/Test/baseResults/hlsl.domain.2.tese.out
index 0f42131..02c86ae 100644
--- a/Test/baseResults/hlsl.domain.2.tese.out
+++ b/Test/baseResults/hlsl.domain.2.tese.out
@@ -284,7 +284,7 @@
 0:?     'pcf_data.foo' (layout( location=2) patch in float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 98
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.3.tese.out b/Test/baseResults/hlsl.domain.3.tese.out
index 254afe6..6330d08 100644
--- a/Test/baseResults/hlsl.domain.3.tese.out
+++ b/Test/baseResults/hlsl.domain.3.tese.out
@@ -264,7 +264,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 100
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.emptystruct.init.vert.out b/Test/baseResults/hlsl.emptystruct.init.vert.out
index 202e2c0..295fb04 100644
--- a/Test/baseResults/hlsl.emptystruct.init.vert.out
+++ b/Test/baseResults/hlsl.emptystruct.init.vert.out
@@ -60,7 +60,7 @@
 0:?     'vertexIndex' (layout( location=0) in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystructreturn.frag.out b/Test/baseResults/hlsl.emptystructreturn.frag.out
index 5440045..ee20b7d 100644
--- a/Test/baseResults/hlsl.emptystructreturn.frag.out
+++ b/Test/baseResults/hlsl.emptystructreturn.frag.out
@@ -50,13 +50,13 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 27
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 20 23
+                              EntryPoint Fragment 4  "main"
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
diff --git a/Test/baseResults/hlsl.emptystructreturn.vert.out b/Test/baseResults/hlsl.emptystructreturn.vert.out
index c8cea5d..7ff09dd 100644
--- a/Test/baseResults/hlsl.emptystructreturn.vert.out
+++ b/Test/baseResults/hlsl.emptystructreturn.vert.out
@@ -48,13 +48,13 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 27
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 20 23
+                              EntryPoint Vertex 4  "main"
                               Source HLSL 500
                               Name 4  "main"
                               Name 6  "vs_in"
diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out
index f274793..10d8544 100755
--- a/Test/baseResults/hlsl.entry-in.frag.out
+++ b/Test/baseResults/hlsl.entry-in.frag.out
@@ -166,7 +166,7 @@
 0:?     'i.i2' (layout( location=1) flat in 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 74
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry-out.frag.out b/Test/baseResults/hlsl.entry-out.frag.out
index 9ff7d33..40fc164 100755
--- a/Test/baseResults/hlsl.entry-out.frag.out
+++ b/Test/baseResults/hlsl.entry-out.frag.out
@@ -244,7 +244,7 @@
 0:?     'out3.i' (layout( location=5) out 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry.rename.frag.out b/Test/baseResults/hlsl.entry.rename.frag.out
index a85123d..9972ec0 100644
--- a/Test/baseResults/hlsl.entry.rename.frag.out
+++ b/Test/baseResults/hlsl.entry.rename.frag.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
index 4ff69a4..6b05ef2 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
index e33f9d6..2f09280 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flatten.return.frag.out b/Test/baseResults/hlsl.flatten.return.frag.out
index fd344c9..730a989 100644
--- a/Test/baseResults/hlsl.flatten.return.frag.out
+++ b/Test/baseResults/hlsl.flatten.return.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaque.frag.out b/Test/baseResults/hlsl.flattenOpaque.frag.out
index aa72124..8eafba8 100755
--- a/Test/baseResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseResults/hlsl.flattenOpaque.frag.out
@@ -178,13 +178,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 85
+// Generated by (magic number): 80002
+// Id's are bound by 99
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 83
+                              EntryPoint Fragment 4  "main" 97
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -201,22 +201,28 @@
                               Name 30  "s.tex"
                               Name 31  "f2"
                               Name 35  "@main("
-                              Name 37  "tex"
-                              Name 68  "s.s2D"
-                              Name 70  "param"
-                              Name 73  "s2.s2D"
-                              Name 74  "s2.tex"
-                              Name 77  "param"
-                              Name 83  "@entryPointOutput"
-                              Decorate 37(tex) DescriptorSet 0
-                              Decorate 68(s.s2D) DescriptorSet 0
-                              Decorate 73(s2.s2D) DescriptorSet 0
-                              Decorate 74(s2.tex) DescriptorSet 0
-                              Decorate 83(@entryPointOutput) Location 0
+                              Name 38  "tex"
+                              Name 70  "s.s2D"
+                              Name 71  "param"
+                              Name 74  "param"
+                              Name 76  "param"
+                              Name 79  "s2.s2D"
+                              Name 80  "s2.tex"
+                              Name 81  "param"
+                              Name 83  "param"
+                              Name 87  "param"
+                              Name 89  "param"
+                              Name 91  "param"
+                              Name 97  "@entryPointOutput"
+                              Decorate 38(tex) DescriptorSet 0
+                              Decorate 70(s.s2D) DescriptorSet 0
+                              Decorate 79(s2.s2D) DescriptorSet 0
+                              Decorate 80(s2.tex) DescriptorSet 0
+                              Decorate 97(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
-               7:             TypePointer UniformConstant 6
+               7:             TypePointer Function 6
                8:             TypeFloat 32
                9:             TypeVector 8(float) 4
               10:             TypeFunction 9(fvec4) 7(ptr)
@@ -224,80 +230,100 @@
               15:             TypePointer Function 14(fvec2)
               16:             TypeFunction 9(fvec4) 7(ptr) 15(ptr)
               21:             TypeImage 8(float) 2D sampled format:Unknown
-              22:             TypePointer UniformConstant 21
+              22:             TypePointer Function 21
               23:             TypeFunction 9(fvec4) 7(ptr) 22(ptr)
               28:             TypeFunction 9(fvec4) 7(ptr) 22(ptr) 15(ptr)
               34:             TypeFunction 9(fvec4)
-         37(tex):     22(ptr) Variable UniformConstant
-              40:             TypeSampledImage 21
-              42:    8(float) Constant 1045220557
-              43:    8(float) Constant 1050253722
-              44:   14(fvec2) ConstantComposite 42 43
-       68(s.s2D):      7(ptr) Variable UniformConstant
-      73(s2.s2D):      7(ptr) Variable UniformConstant
-      74(s2.tex):     22(ptr) Variable UniformConstant
-              82:             TypePointer Output 9(fvec4)
-83(@entryPointOutput):     82(ptr) Variable Output
+              37:             TypePointer UniformConstant 21
+         38(tex):     37(ptr) Variable UniformConstant
+              41:             TypeSampledImage 21
+              43:    8(float) Constant 1045220557
+              44:    8(float) Constant 1050253722
+              45:   14(fvec2) ConstantComposite 43 44
+              69:             TypePointer UniformConstant 6
+       70(s.s2D):     69(ptr) Variable UniformConstant
+      79(s2.s2D):     69(ptr) Variable UniformConstant
+      80(s2.tex):     37(ptr) Variable UniformConstant
+              96:             TypePointer Output 9(fvec4)
+97(@entryPointOutput):     96(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              84:    9(fvec4) FunctionCall 35(@main()
-                              Store 83(@entryPointOutput) 84
+              98:    9(fvec4) FunctionCall 35(@main()
+                              Store 97(@entryPointOutput) 98
                               Return
                               FunctionEnd
 12(osCall1(struct-os-p11;):    9(fvec4) Function None 10
        11(s.s2D):      7(ptr) FunctionParameter
               13:             Label
-              38:          21 Load 37(tex)
-              39:           6 Load 11(s.s2D)
-              41:          40 SampledImage 38 39
-              45:    9(fvec4) ImageSampleImplicitLod 41 44
-                              ReturnValue 45
+              39:          21 Load 38(tex)
+              40:           6 Load 11(s.s2D)
+              42:          41 SampledImage 39 40
+              46:    9(fvec4) ImageSampleImplicitLod 42 45
+                              ReturnValue 46
                               FunctionEnd
 19(osCall2(struct-os-p11;vf2;):    9(fvec4) Function None 16
        17(s.s2D):      7(ptr) FunctionParameter
           18(f2):     15(ptr) FunctionParameter
               20:             Label
-              48:          21 Load 37(tex)
-              49:           6 Load 17(s.s2D)
-              50:          40 SampledImage 48 49
-              51:   14(fvec2) Load 18(f2)
-              52:    9(fvec4) ImageSampleImplicitLod 50 51
-                              ReturnValue 52
+              49:          21 Load 38(tex)
+              50:           6 Load 17(s.s2D)
+              51:          41 SampledImage 49 50
+              52:   14(fvec2) Load 18(f2)
+              53:    9(fvec4) ImageSampleImplicitLod 51 52
+                              ReturnValue 53
                               FunctionEnd
 26(os2Call1(struct-os2-p1-t211;):    9(fvec4) Function None 23
        24(s.s2D):      7(ptr) FunctionParameter
        25(s.tex):     22(ptr) FunctionParameter
               27:             Label
-              55:          21 Load 25(s.tex)
-              56:           6 Load 24(s.s2D)
-              57:          40 SampledImage 55 56
-              58:    9(fvec4) ImageSampleImplicitLod 57 44
-                              ReturnValue 58
+              56:          21 Load 25(s.tex)
+              57:           6 Load 24(s.s2D)
+              58:          41 SampledImage 56 57
+              59:    9(fvec4) ImageSampleImplicitLod 58 45
+                              ReturnValue 59
                               FunctionEnd
 32(os2Call2(struct-os2-p1-t211;vf2;):    9(fvec4) Function None 28
        29(s.s2D):      7(ptr) FunctionParameter
        30(s.tex):     22(ptr) FunctionParameter
           31(f2):     15(ptr) FunctionParameter
               33:             Label
-              61:          21 Load 30(s.tex)
-              62:           6 Load 29(s.s2D)
-              63:          40 SampledImage 61 62
-              64:   14(fvec2) Load 31(f2)
-              65:    9(fvec4) ImageSampleImplicitLod 63 64
-                              ReturnValue 65
+              62:          21 Load 30(s.tex)
+              63:           6 Load 29(s.s2D)
+              64:          41 SampledImage 62 63
+              65:   14(fvec2) Load 31(f2)
+              66:    9(fvec4) ImageSampleImplicitLod 64 65
+                              ReturnValue 66
                               FunctionEnd
       35(@main():    9(fvec4) Function None 34
               36:             Label
-       70(param):     15(ptr) Variable Function
-       77(param):     15(ptr) Variable Function
-              69:    9(fvec4) FunctionCall 12(osCall1(struct-os-p11;) 68(s.s2D)
-                              Store 70(param) 44
-              71:    9(fvec4) FunctionCall 19(osCall2(struct-os-p11;vf2;) 68(s.s2D) 70(param)
-              72:    9(fvec4) FAdd 69 71
-              75:    9(fvec4) FunctionCall 26(os2Call1(struct-os2-p1-t211;) 73(s2.s2D) 74(s2.tex)
-              76:    9(fvec4) FAdd 72 75
-                              Store 77(param) 44
-              78:    9(fvec4) FunctionCall 32(os2Call2(struct-os2-p1-t211;vf2;) 73(s2.s2D) 74(s2.tex) 77(param)
-              79:    9(fvec4) FAdd 76 78
-                              ReturnValue 79
+       71(param):      7(ptr) Variable Function
+       74(param):      7(ptr) Variable Function
+       76(param):     15(ptr) Variable Function
+       81(param):      7(ptr) Variable Function
+       83(param):     22(ptr) Variable Function
+       87(param):      7(ptr) Variable Function
+       89(param):     22(ptr) Variable Function
+       91(param):     15(ptr) Variable Function
+              72:           6 Load 70(s.s2D)
+                              Store 71(param) 72
+              73:    9(fvec4) FunctionCall 12(osCall1(struct-os-p11;) 71(param)
+              75:           6 Load 70(s.s2D)
+                              Store 74(param) 75
+                              Store 76(param) 45
+              77:    9(fvec4) FunctionCall 19(osCall2(struct-os-p11;vf2;) 74(param) 76(param)
+              78:    9(fvec4) FAdd 73 77
+              82:           6 Load 79(s2.s2D)
+                              Store 81(param) 82
+              84:          21 Load 80(s2.tex)
+                              Store 83(param) 84
+              85:    9(fvec4) FunctionCall 26(os2Call1(struct-os2-p1-t211;) 81(param) 83(param)
+              86:    9(fvec4) FAdd 78 85
+              88:           6 Load 79(s2.s2D)
+                              Store 87(param) 88
+              90:          21 Load 80(s2.tex)
+                              Store 89(param) 90
+                              Store 91(param) 45
+              92:    9(fvec4) FunctionCall 32(os2Call2(struct-os2-p1-t211;vf2;) 87(param) 89(param) 91(param)
+              93:    9(fvec4) FAdd 86 92
+                              ReturnValue 93
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
index 4bd3161..b82cfff 100755
--- a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
@@ -1,6 +1,5 @@
 hlsl.flattenOpaqueInit.vert
-WARNING: 0:20: '=' : cannot do member-wise aliasing for opaque members with this initializer 
-
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
 Shader version: 500
 0:? Sequence
 0:5  Function Definition: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
@@ -19,13 +18,36 @@
 0:10  Function Definition: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
 0:10    Function Parameters: 
 0:?     Sequence
-0:12      'g_tInputTexture_sampler' ( uniform sampler)
-0:13      'g_tInputTexture' ( uniform texture2D)
+0:12      move second child to first child ( temp sampler)
+0:?         't.smpl' ( temp sampler)
+0:12        'g_tInputTexture_sampler' ( uniform sampler)
+0:13      move second child to first child ( temp texture2D)
+0:?         't.tex' ( temp texture2D)
+0:13        'g_tInputTexture' ( uniform texture2D)
 0:14      Branch: Return with expression
 0:14        't' ( temp structure{ temp sampler smpl,  temp texture2D tex})
 0:18  Function Definition: @main( ( temp 4-component vector of float)
 0:18    Function Parameters: 
 0:?     Sequence
+0:19      Sequence
+0:19        Sequence
+0:19          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19            Construct structure ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19              'g_tInputTexture_sampler' ( uniform sampler)
+0:19              'g_tInputTexture' ( uniform texture2D)
+0:19          move second child to first child ( temp sampler)
+0:?             'tex1.smpl' ( temp sampler)
+0:19            smpl: direct index for structure ( temp sampler)
+0:19              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19              Constant:
+0:19                0 (const int)
+0:19          move second child to first child ( temp texture2D)
+0:?             'tex1.tex' ( temp texture2D)
+0:19            tex: direct index for structure ( temp texture2D)
+0:19              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19              Constant:
+0:19                1 (const int)
 0:20      Sequence
 0:20        Sequence
 0:20          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
@@ -43,10 +65,18 @@
 0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
 0:20              Constant:
 0:20                1 (const int)
-0:21      Branch: Return with expression
-0:21        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
-0:?           'g_tInputTexture_sampler' ( uniform sampler)
-0:?           'g_tInputTexture' ( uniform texture2D)
+0:21      Sequence
+0:21        Sequence
+0:21          move second child to first child ( temp sampler)
+0:?             'tex3.smpl' ( temp sampler)
+0:?             'tex1.smpl' ( temp sampler)
+0:21          move second child to first child ( temp texture2D)
+0:?             'tex3.tex' ( temp texture2D)
+0:?             'tex1.tex' ( temp texture2D)
+0:22      Branch: Return with expression
+0:22        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:?           'tex3.smpl' ( temp sampler)
+0:?           'tex3.tex' ( temp texture2D)
 0:18  Function Definition: main( ( temp void)
 0:18    Function Parameters: 
 0:?     Sequence
@@ -80,13 +110,36 @@
 0:10  Function Definition: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
 0:10    Function Parameters: 
 0:?     Sequence
-0:12      'g_tInputTexture_sampler' ( uniform sampler)
-0:13      'g_tInputTexture' ( uniform texture2D)
+0:12      move second child to first child ( temp sampler)
+0:?         't.smpl' ( temp sampler)
+0:12        'g_tInputTexture_sampler' ( uniform sampler)
+0:13      move second child to first child ( temp texture2D)
+0:?         't.tex' ( temp texture2D)
+0:13        'g_tInputTexture' ( uniform texture2D)
 0:14      Branch: Return with expression
 0:14        't' ( temp structure{ temp sampler smpl,  temp texture2D tex})
 0:18  Function Definition: @main( ( temp 4-component vector of float)
 0:18    Function Parameters: 
 0:?     Sequence
+0:19      Sequence
+0:19        Sequence
+0:19          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19            Construct structure ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19              'g_tInputTexture_sampler' ( uniform sampler)
+0:19              'g_tInputTexture' ( uniform texture2D)
+0:19          move second child to first child ( temp sampler)
+0:?             'tex1.smpl' ( temp sampler)
+0:19            smpl: direct index for structure ( temp sampler)
+0:19              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19              Constant:
+0:19                0 (const int)
+0:19          move second child to first child ( temp texture2D)
+0:?             'tex1.tex' ( temp texture2D)
+0:19            tex: direct index for structure ( temp texture2D)
+0:19              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19              Constant:
+0:19                1 (const int)
 0:20      Sequence
 0:20        Sequence
 0:20          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
@@ -104,10 +157,18 @@
 0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
 0:20              Constant:
 0:20                1 (const int)
-0:21      Branch: Return with expression
-0:21        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
-0:?           'g_tInputTexture_sampler' ( uniform sampler)
-0:?           'g_tInputTexture' ( uniform texture2D)
+0:21      Sequence
+0:21        Sequence
+0:21          move second child to first child ( temp sampler)
+0:?             'tex3.smpl' ( temp sampler)
+0:?             'tex1.smpl' ( temp sampler)
+0:21          move second child to first child ( temp texture2D)
+0:?             'tex3.tex' ( temp texture2D)
+0:?             'tex1.tex' ( temp texture2D)
+0:22      Branch: Return with expression
+0:22        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:?           'tex3.smpl' ( temp sampler)
+0:?           'tex3.tex' ( temp texture2D)
 0:18  Function Definition: main( ( temp void)
 0:18    Function Parameters: 
 0:?     Sequence
@@ -120,13 +181,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 60
+// Generated by (magic number): 80002
+// Id's are bound by 84
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 58
+                              EntryPoint Vertex 4  "main" 82
                               Source HLSL 500
                               Name 4  "main"
                               Name 15  "lookUp(struct-FxaaTex-p1-t211;"
@@ -137,23 +198,32 @@
                               MemberName 17(FxaaTex) 1  "tex"
                               Name 19  "fillOpaque("
                               Name 22  "@main("
-                              Name 36  "g_tInputTexture_sampler"
-                              Name 37  "g_tInputTexture"
-                              Name 39  "t"
-                              Name 43  "flattenTemp"
-                              Name 45  "tex2.smpl"
-                              Name 50  "tex2.tex"
-                              Name 58  "@entryPointOutput"
-                              Decorate 36(g_tInputTexture_sampler) DescriptorSet 0
-                              Decorate 37(g_tInputTexture) DescriptorSet 0
-                              Decorate 58(@entryPointOutput) Location 0
+                              Name 36  "t.smpl"
+                              Name 38  "g_tInputTexture_sampler"
+                              Name 40  "t.tex"
+                              Name 42  "g_tInputTexture"
+                              Name 45  "t"
+                              Name 49  "flattenTemp"
+                              Name 53  "tex1.smpl"
+                              Name 58  "tex1.tex"
+                              Name 62  "flattenTemp"
+                              Name 64  "tex2.smpl"
+                              Name 67  "tex2.tex"
+                              Name 70  "tex3.smpl"
+                              Name 72  "tex3.tex"
+                              Name 74  "param"
+                              Name 76  "param"
+                              Name 82  "@entryPointOutput"
+                              Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
+                              Decorate 42(g_tInputTexture) DescriptorSet 0
+                              Decorate 82(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
-               7:             TypePointer UniformConstant 6
+               7:             TypePointer Function 6
                8:             TypeFloat 32
                9:             TypeImage 8(float) 2D sampled format:Unknown
-              10:             TypePointer UniformConstant 9
+              10:             TypePointer Function 9
               11:             TypeVector 8(float) 4
               12:             TypeFunction 11(fvec4) 7(ptr) 10(ptr)
      17(FxaaTex):             TypeStruct 6 9
@@ -165,22 +235,20 @@
               30:    8(float) Constant 1053609165
               31:   28(fvec2) ConstantComposite 29 30
               32:    8(float) Constant 0
-36(g_tInputTexture_sampler):      7(ptr) Variable UniformConstant
-37(g_tInputTexture):     10(ptr) Variable UniformConstant
-              38:             TypePointer UniformConstant 17(FxaaTex)
-           39(t):     38(ptr) Variable UniformConstant
- 43(flattenTemp):     38(ptr) Variable UniformConstant
-   45(tex2.smpl):      7(ptr) Variable UniformConstant
-              46:             TypeInt 32 1
-              47:     46(int) Constant 0
-    50(tex2.tex):     10(ptr) Variable UniformConstant
-              51:     46(int) Constant 1
-              57:             TypePointer Output 11(fvec4)
-58(@entryPointOutput):     57(ptr) Variable Output
+              37:             TypePointer UniformConstant 6
+38(g_tInputTexture_sampler):     37(ptr) Variable UniformConstant
+              41:             TypePointer UniformConstant 9
+42(g_tInputTexture):     41(ptr) Variable UniformConstant
+              44:             TypePointer Function 17(FxaaTex)
+              54:             TypeInt 32 1
+              55:     54(int) Constant 0
+              59:     54(int) Constant 1
+              81:             TypePointer Output 11(fvec4)
+82(@entryPointOutput):     81(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              59:   11(fvec4) FunctionCall 22(@main()
-                              Store 58(@entryPointOutput) 59
+              83:   11(fvec4) FunctionCall 22(@main()
+                              Store 82(@entryPointOutput) 83
                               Return
                               FunctionEnd
 15(lookUp(struct-FxaaTex-p1-t211;):   11(fvec4) Function None 12
@@ -195,19 +263,54 @@
                               FunctionEnd
  19(fillOpaque(): 17(FxaaTex) Function None 18
               20:             Label
-              40: 17(FxaaTex) Load 39(t)
-                              ReturnValue 40
+      36(t.smpl):      7(ptr) Variable Function
+       40(t.tex):     10(ptr) Variable Function
+           45(t):     44(ptr) Variable Function
+              39:           6 Load 38(g_tInputTexture_sampler)
+                              Store 36(t.smpl) 39
+              43:           9 Load 42(g_tInputTexture)
+                              Store 40(t.tex) 43
+              46: 17(FxaaTex) Load 45(t)
+                              ReturnValue 46
                               FunctionEnd
       22(@main():   11(fvec4) Function None 21
               23:             Label
-              44: 17(FxaaTex) FunctionCall 19(fillOpaque()
-                              Store 43(flattenTemp) 44
-              48:      7(ptr) AccessChain 43(flattenTemp) 47
-              49:           6 Load 48
-                              Store 45(tex2.smpl) 49
-              52:     10(ptr) AccessChain 43(flattenTemp) 51
-              53:           9 Load 52
-                              Store 50(tex2.tex) 53
-              54:   11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 36(g_tInputTexture_sampler) 37(g_tInputTexture)
-                              ReturnValue 54
+ 49(flattenTemp):     44(ptr) Variable Function
+   53(tex1.smpl):      7(ptr) Variable Function
+    58(tex1.tex):     10(ptr) Variable Function
+ 62(flattenTemp):     44(ptr) Variable Function
+   64(tex2.smpl):      7(ptr) Variable Function
+    67(tex2.tex):     10(ptr) Variable Function
+   70(tex3.smpl):      7(ptr) Variable Function
+    72(tex3.tex):     10(ptr) Variable Function
+       74(param):      7(ptr) Variable Function
+       76(param):     10(ptr) Variable Function
+              50:           6 Load 38(g_tInputTexture_sampler)
+              51:           9 Load 42(g_tInputTexture)
+              52: 17(FxaaTex) CompositeConstruct 50 51
+                              Store 49(flattenTemp) 52
+              56:      7(ptr) AccessChain 49(flattenTemp) 55
+              57:           6 Load 56
+                              Store 53(tex1.smpl) 57
+              60:     10(ptr) AccessChain 49(flattenTemp) 59
+              61:           9 Load 60
+                              Store 58(tex1.tex) 61
+              63: 17(FxaaTex) FunctionCall 19(fillOpaque()
+                              Store 62(flattenTemp) 63
+              65:      7(ptr) AccessChain 62(flattenTemp) 55
+              66:           6 Load 65
+                              Store 64(tex2.smpl) 66
+              68:     10(ptr) AccessChain 62(flattenTemp) 59
+              69:           9 Load 68
+                              Store 67(tex2.tex) 69
+              71:           6 Load 53(tex1.smpl)
+                              Store 70(tex3.smpl) 71
+              73:           9 Load 58(tex1.tex)
+                              Store 72(tex3.tex) 73
+              75:           6 Load 70(tex3.smpl)
+                              Store 74(param) 75
+              77:           9 Load 72(tex3.tex)
+                              Store 76(param) 77
+              78:   11(fvec4) FunctionCall 15(lookUp(struct-FxaaTex-p1-t211;) 74(param) 76(param)
+                              ReturnValue 78
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
index 1dbc3c3..2de3483 100755
--- a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -1,4 +1,5 @@
 hlsl.flattenOpaqueInitMix.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
 Shader version: 500
 0:? Sequence
 0:5  Function Definition: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
@@ -19,15 +20,36 @@
 0:10    Function Parameters: 
 0:?     Sequence
 0:11      Sequence
-0:?         Sequence
+0:11        Sequence
+0:11          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11            Construct structure ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11              'g_tInputTexture_sampler' ( uniform sampler)
+0:11              'g_tInputTexture' ( uniform texture2D)
+0:11              Constant:
+0:11                0.500000
+0:11          move second child to first child ( temp sampler)
+0:?             'tex.smpl' ( temp sampler)
+0:11            smpl: direct index for structure ( temp sampler)
+0:11              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11              Constant:
+0:11                0 (const int)
+0:11          move second child to first child ( temp texture2D)
+0:?             'tex.tex' ( temp texture2D)
+0:11            tex: direct index for structure ( temp texture2D)
+0:11              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11              Constant:
+0:11                1 (const int)
 0:11          move second child to first child ( temp float)
 0:?             'tex.f' ( temp float)
-0:11            Constant:
-0:11              0.500000
+0:11            f: direct index for structure ( temp float)
+0:11              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11              Constant:
+0:11                2 (const int)
 0:12      Branch: Return with expression
 0:12        Function Call: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
-0:?           'g_tInputTexture_sampler' ( uniform sampler)
-0:?           'g_tInputTexture' ( uniform texture2D)
+0:?           'tex.smpl' ( temp sampler)
+0:?           'tex.tex' ( temp texture2D)
 0:?           'tex.f' ( temp float)
 0:10  Function Definition: main( ( temp void)
 0:10    Function Parameters: 
@@ -64,15 +86,36 @@
 0:10    Function Parameters: 
 0:?     Sequence
 0:11      Sequence
-0:?         Sequence
+0:11        Sequence
+0:11          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11            Construct structure ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11              'g_tInputTexture_sampler' ( uniform sampler)
+0:11              'g_tInputTexture' ( uniform texture2D)
+0:11              Constant:
+0:11                0.500000
+0:11          move second child to first child ( temp sampler)
+0:?             'tex.smpl' ( temp sampler)
+0:11            smpl: direct index for structure ( temp sampler)
+0:11              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11              Constant:
+0:11                0 (const int)
+0:11          move second child to first child ( temp texture2D)
+0:?             'tex.tex' ( temp texture2D)
+0:11            tex: direct index for structure ( temp texture2D)
+0:11              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11              Constant:
+0:11                1 (const int)
 0:11          move second child to first child ( temp float)
 0:?             'tex.f' ( temp float)
-0:11            Constant:
-0:11              0.500000
+0:11            f: direct index for structure ( temp float)
+0:11              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11              Constant:
+0:11                2 (const int)
 0:12      Branch: Return with expression
 0:12        Function Call: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
-0:?           'g_tInputTexture_sampler' ( uniform sampler)
-0:?           'g_tInputTexture' ( uniform texture2D)
+0:?           'tex.smpl' ( temp sampler)
+0:?           'tex.tex' ( temp texture2D)
 0:?           'tex.f' ( temp float)
 0:10  Function Definition: main( ( temp void)
 0:10    Function Parameters: 
@@ -86,13 +129,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 46
+// Generated by (magic number): 80002
+// Id's are bound by 70
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 44
+                              EntryPoint Vertex 4  "main" 68
                               Source HLSL 500
                               Name 4  "main"
                               Name 17  "lookUp(struct-FxaaTex-p1-t21-f11;"
@@ -100,21 +143,30 @@
                               Name 15  "tex.tex"
                               Name 16  "tex.f"
                               Name 20  "@main("
-                              Name 34  "tex.f"
-                              Name 36  "g_tInputTexture_sampler"
-                              Name 37  "g_tInputTexture"
-                              Name 38  "param"
-                              Name 44  "@entryPointOutput"
-                              Decorate 36(g_tInputTexture_sampler) DescriptorSet 0
-                              Decorate 37(g_tInputTexture) DescriptorSet 0
-                              Decorate 44(@entryPointOutput) Location 0
+                              Name 34  "FxaaTex"
+                              MemberName 34(FxaaTex) 0  "smpl"
+                              MemberName 34(FxaaTex) 1  "tex"
+                              MemberName 34(FxaaTex) 2  "f"
+                              Name 36  "flattenTemp"
+                              Name 38  "g_tInputTexture_sampler"
+                              Name 41  "g_tInputTexture"
+                              Name 45  "tex.smpl"
+                              Name 50  "tex.tex"
+                              Name 54  "tex.f"
+                              Name 58  "param"
+                              Name 60  "param"
+                              Name 62  "param"
+                              Name 68  "@entryPointOutput"
+                              Decorate 38(g_tInputTexture_sampler) DescriptorSet 0
+                              Decorate 41(g_tInputTexture) DescriptorSet 0
+                              Decorate 68(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
-               7:             TypePointer UniformConstant 6
+               7:             TypePointer Function 6
                8:             TypeFloat 32
                9:             TypeImage 8(float) 2D sampled format:Unknown
-              10:             TypePointer UniformConstant 9
+              10:             TypePointer Function 9
               11:             TypePointer Function 8(float)
               12:             TypeVector 8(float) 4
               13:             TypeFunction 12(fvec4) 7(ptr) 10(ptr) 11(ptr)
@@ -122,15 +174,23 @@
               24:             TypeSampledImage 9
               28:             TypeVector 8(float) 2
               30:    8(float) Constant 0
-              35:    8(float) Constant 1056964608
-36(g_tInputTexture_sampler):      7(ptr) Variable UniformConstant
-37(g_tInputTexture):     10(ptr) Variable UniformConstant
-              43:             TypePointer Output 12(fvec4)
-44(@entryPointOutput):     43(ptr) Variable Output
+     34(FxaaTex):             TypeStruct 6 9 8(float)
+              35:             TypePointer Function 34(FxaaTex)
+              37:             TypePointer UniformConstant 6
+38(g_tInputTexture_sampler):     37(ptr) Variable UniformConstant
+              40:             TypePointer UniformConstant 9
+41(g_tInputTexture):     40(ptr) Variable UniformConstant
+              43:    8(float) Constant 1056964608
+              46:             TypeInt 32 1
+              47:     46(int) Constant 0
+              51:     46(int) Constant 1
+              55:     46(int) Constant 2
+              67:             TypePointer Output 12(fvec4)
+68(@entryPointOutput):     67(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              45:   12(fvec4) FunctionCall 20(@main()
-                              Store 44(@entryPointOutput) 45
+              69:   12(fvec4) FunctionCall 20(@main()
+                              Store 68(@entryPointOutput) 69
                               Return
                               FunctionEnd
 17(lookUp(struct-FxaaTex-p1-t21-f11;):   12(fvec4) Function None 13
@@ -149,11 +209,32 @@
                               FunctionEnd
       20(@main():   12(fvec4) Function None 19
               21:             Label
-       34(tex.f):     11(ptr) Variable Function
-       38(param):     11(ptr) Variable Function
-                              Store 34(tex.f) 35
-              39:    8(float) Load 34(tex.f)
-                              Store 38(param) 39
-              40:   12(fvec4) FunctionCall 17(lookUp(struct-FxaaTex-p1-t21-f11;) 36(g_tInputTexture_sampler) 37(g_tInputTexture) 38(param)
-                              ReturnValue 40
+ 36(flattenTemp):     35(ptr) Variable Function
+    45(tex.smpl):      7(ptr) Variable Function
+     50(tex.tex):     10(ptr) Variable Function
+       54(tex.f):     11(ptr) Variable Function
+       58(param):      7(ptr) Variable Function
+       60(param):     10(ptr) Variable Function
+       62(param):     11(ptr) Variable Function
+              39:           6 Load 38(g_tInputTexture_sampler)
+              42:           9 Load 41(g_tInputTexture)
+              44: 34(FxaaTex) CompositeConstruct 39 42 43
+                              Store 36(flattenTemp) 44
+              48:      7(ptr) AccessChain 36(flattenTemp) 47
+              49:           6 Load 48
+                              Store 45(tex.smpl) 49
+              52:     10(ptr) AccessChain 36(flattenTemp) 51
+              53:           9 Load 52
+                              Store 50(tex.tex) 53
+              56:     11(ptr) AccessChain 36(flattenTemp) 55
+              57:    8(float) Load 56
+                              Store 54(tex.f) 57
+              59:           6 Load 45(tex.smpl)
+                              Store 58(param) 59
+              61:           9 Load 50(tex.tex)
+                              Store 60(param) 61
+              63:    8(float) Load 54(tex.f)
+                              Store 62(param) 63
+              64:   12(fvec4) FunctionCall 17(lookUp(struct-FxaaTex-p1-t21-f11;) 58(param) 60(param) 62(param)
+                              ReturnValue 64
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out
new file mode 100755
index 0000000..f6d867f
--- /dev/null
+++ b/Test/baseResults/hlsl.flattenSubset.frag.out
@@ -0,0 +1,218 @@
+hlsl.flattenSubset.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:30  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:30    Function Parameters: 
+0:30      'vpos' ( in 4-component vector of float)
+0:?     Sequence
+0:33      move second child to first child ( temp sampler)
+0:?         's1.s0.ss' ( temp sampler)
+0:33        'samp' ( uniform sampler)
+0:34      Sequence
+0:34        move second child to first child ( temp float)
+0:?           's2.resources.b' ( temp float)
+0:?           's1.b' ( temp float)
+0:34        move second child to first child ( temp sampler)
+0:?           's2.resources.samplerState' ( temp sampler)
+0:?           's1.samplerState' ( temp sampler)
+0:34        move second child to first child ( temp int)
+0:?           's2.resources.s0.x' ( temp int)
+0:?           's1.s0.x' ( temp int)
+0:34        move second child to first child ( temp int)
+0:?           's2.resources.s0.y' ( temp int)
+0:?           's1.s0.y' ( temp int)
+0:34        move second child to first child ( temp sampler)
+0:?           's2.resources.s0.ss' ( temp sampler)
+0:?           's1.s0.ss' ( temp sampler)
+0:34        move second child to first child ( temp int)
+0:?           's2.resources.a' ( temp int)
+0:?           's1.a' ( temp int)
+0:35      Branch: Return with expression
+0:35        texture ( temp 4-component vector of float)
+0:35          Construct combined texture-sampler ( temp sampler2D)
+0:35            'tex' ( uniform texture2D)
+0:?             's2.resources.s0.ss' ( temp sampler)
+0:35          Constant:
+0:35            0.500000
+0:35            0.500000
+0:30  Function Definition: main( ( temp void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:30      move second child to first child ( temp 4-component vector of float)
+0:?         'vpos' ( temp 4-component vector of float)
+0:?         'vpos' (layout( location=0) in 4-component vector of float)
+0:30      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:30        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'vpos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'samp' ( uniform sampler)
+0:?     'tex' ( uniform texture2D)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'vpos' (layout( location=0) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:30  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:30    Function Parameters: 
+0:30      'vpos' ( in 4-component vector of float)
+0:?     Sequence
+0:33      move second child to first child ( temp sampler)
+0:?         's1.s0.ss' ( temp sampler)
+0:33        'samp' ( uniform sampler)
+0:34      Sequence
+0:34        move second child to first child ( temp float)
+0:?           's2.resources.b' ( temp float)
+0:?           's1.b' ( temp float)
+0:34        move second child to first child ( temp sampler)
+0:?           's2.resources.samplerState' ( temp sampler)
+0:?           's1.samplerState' ( temp sampler)
+0:34        move second child to first child ( temp int)
+0:?           's2.resources.s0.x' ( temp int)
+0:?           's1.s0.x' ( temp int)
+0:34        move second child to first child ( temp int)
+0:?           's2.resources.s0.y' ( temp int)
+0:?           's1.s0.y' ( temp int)
+0:34        move second child to first child ( temp sampler)
+0:?           's2.resources.s0.ss' ( temp sampler)
+0:?           's1.s0.ss' ( temp sampler)
+0:34        move second child to first child ( temp int)
+0:?           's2.resources.a' ( temp int)
+0:?           's1.a' ( temp int)
+0:35      Branch: Return with expression
+0:35        texture ( temp 4-component vector of float)
+0:35          Construct combined texture-sampler ( temp sampler2D)
+0:35            'tex' ( uniform texture2D)
+0:?             's2.resources.s0.ss' ( temp sampler)
+0:35          Constant:
+0:35            0.500000
+0:35            0.500000
+0:30  Function Definition: main( ( temp void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:30      move second child to first child ( temp 4-component vector of float)
+0:?         'vpos' ( temp 4-component vector of float)
+0:?         'vpos' (layout( location=0) in 4-component vector of float)
+0:30      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:30        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'vpos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'samp' ( uniform sampler)
+0:?     'tex' ( uniform texture2D)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'vpos' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 61
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 54 57
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "vpos"
+                              Name 15  "s1.s0.ss"
+                              Name 17  "samp"
+                              Name 20  "s2.resources.b"
+                              Name 21  "s1.b"
+                              Name 23  "s2.resources.samplerState"
+                              Name 24  "s1.samplerState"
+                              Name 28  "s2.resources.s0.x"
+                              Name 29  "s1.s0.x"
+                              Name 31  "s2.resources.s0.y"
+                              Name 32  "s1.s0.y"
+                              Name 34  "s2.resources.s0.ss"
+                              Name 36  "s2.resources.a"
+                              Name 37  "s1.a"
+                              Name 41  "tex"
+                              Name 52  "vpos"
+                              Name 54  "vpos"
+                              Name 57  "@entryPointOutput"
+                              Name 58  "param"
+                              Decorate 17(samp) DescriptorSet 0
+                              Decorate 41(tex) DescriptorSet 0
+                              Decorate 54(vpos) Location 0
+                              Decorate 57(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              13:             TypeSampler
+              14:             TypePointer Function 13
+              16:             TypePointer UniformConstant 13
+        17(samp):     16(ptr) Variable UniformConstant
+              19:             TypePointer Function 6(float)
+              26:             TypeInt 32 1
+              27:             TypePointer Function 26(int)
+              39:             TypeImage 6(float) 2D sampled format:Unknown
+              40:             TypePointer UniformConstant 39
+         41(tex):     40(ptr) Variable UniformConstant
+              44:             TypeSampledImage 39
+              46:             TypeVector 6(float) 2
+              47:    6(float) Constant 1056964608
+              48:   46(fvec2) ConstantComposite 47 47
+              53:             TypePointer Input 7(fvec4)
+        54(vpos):     53(ptr) Variable Input
+              56:             TypePointer Output 7(fvec4)
+57(@entryPointOutput):     56(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+        52(vpos):      8(ptr) Variable Function
+       58(param):      8(ptr) Variable Function
+              55:    7(fvec4) Load 54(vpos)
+                              Store 52(vpos) 55
+              59:    7(fvec4) Load 52(vpos)
+                              Store 58(param) 59
+              60:    7(fvec4) FunctionCall 11(@main(vf4;) 58(param)
+                              Store 57(@entryPointOutput) 60
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):    7(fvec4) Function None 9
+        10(vpos):      8(ptr) FunctionParameter
+              12:             Label
+    15(s1.s0.ss):     14(ptr) Variable Function
+20(s2.resources.b):     19(ptr) Variable Function
+        21(s1.b):     19(ptr) Variable Function
+23(s2.resources.samplerState):     14(ptr) Variable Function
+24(s1.samplerState):     14(ptr) Variable Function
+28(s2.resources.s0.x):     27(ptr) Variable Function
+     29(s1.s0.x):     27(ptr) Variable Function
+31(s2.resources.s0.y):     27(ptr) Variable Function
+     32(s1.s0.y):     27(ptr) Variable Function
+34(s2.resources.s0.ss):     14(ptr) Variable Function
+36(s2.resources.a):     27(ptr) Variable Function
+        37(s1.a):     27(ptr) Variable Function
+              18:          13 Load 17(samp)
+                              Store 15(s1.s0.ss) 18
+              22:    6(float) Load 21(s1.b)
+                              Store 20(s2.resources.b) 22
+              25:          13 Load 24(s1.samplerState)
+                              Store 23(s2.resources.samplerState) 25
+              30:     26(int) Load 29(s1.s0.x)
+                              Store 28(s2.resources.s0.x) 30
+              33:     26(int) Load 32(s1.s0.y)
+                              Store 31(s2.resources.s0.y) 33
+              35:          13 Load 15(s1.s0.ss)
+                              Store 34(s2.resources.s0.ss) 35
+              38:     26(int) Load 37(s1.a)
+                              Store 36(s2.resources.a) 38
+              42:          39 Load 41(tex)
+              43:          13 Load 34(s2.resources.s0.ss)
+              45:          44 SampledImage 42 43
+              49:    7(fvec4) ImageSampleImplicitLod 45 48
+                              ReturnValue 49
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out
new file mode 100755
index 0000000..4983834
--- /dev/null
+++ b/Test/baseResults/hlsl.flattenSubset2.frag.out
@@ -0,0 +1,207 @@
+hlsl.flattenSubset2.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'vpos' ( in 4-component vector of float)
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child ( temp float)
+0:?           'a1.n.y' ( temp float)
+0:?           'a2.n.y' ( temp float)
+0:13        move second child to first child ( temp texture2D)
+0:?           'a1.n.texNested' ( temp texture2D)
+0:?           'a2.n.texNested' ( temp texture2D)
+0:14      Sequence
+0:14        move second child to first child ( temp float)
+0:?           'b.n.y' ( temp float)
+0:?           'a1.n.y' ( temp float)
+0:14        move second child to first child ( temp texture2D)
+0:?           'b.n.texNested' ( temp texture2D)
+0:?           'a1.n.texNested' ( temp texture2D)
+0:17      Sequence
+0:17        Sequence
+0:17          move second child to first child ( temp float)
+0:?             'n.y' ( temp float)
+0:?             'b.n.y' ( temp float)
+0:17          move second child to first child ( temp texture2D)
+0:?             'n.texNested' ( temp texture2D)
+0:?             'b.n.texNested' ( temp texture2D)
+0:20      move second child to first child ( temp texture2D)
+0:?         'a2.n.texNested' ( temp texture2D)
+0:20        'someTex' ( uniform texture2D)
+0:21      move second child to first child ( temp float)
+0:?         'a1.n.y' ( temp float)
+0:21        Constant:
+0:21          1.000000
+0:23      Branch: Return with expression
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:?         'vpos' ( temp 4-component vector of float)
+0:?         'vpos' (layout( location=0) in 4-component vector of float)
+0:8      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'vpos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'someTex' ( uniform texture2D)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'vpos' (layout( location=0) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:8  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'vpos' ( in 4-component vector of float)
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child ( temp float)
+0:?           'a1.n.y' ( temp float)
+0:?           'a2.n.y' ( temp float)
+0:13        move second child to first child ( temp texture2D)
+0:?           'a1.n.texNested' ( temp texture2D)
+0:?           'a2.n.texNested' ( temp texture2D)
+0:14      Sequence
+0:14        move second child to first child ( temp float)
+0:?           'b.n.y' ( temp float)
+0:?           'a1.n.y' ( temp float)
+0:14        move second child to first child ( temp texture2D)
+0:?           'b.n.texNested' ( temp texture2D)
+0:?           'a1.n.texNested' ( temp texture2D)
+0:17      Sequence
+0:17        Sequence
+0:17          move second child to first child ( temp float)
+0:?             'n.y' ( temp float)
+0:?             'b.n.y' ( temp float)
+0:17          move second child to first child ( temp texture2D)
+0:?             'n.texNested' ( temp texture2D)
+0:?             'b.n.texNested' ( temp texture2D)
+0:20      move second child to first child ( temp texture2D)
+0:?         'a2.n.texNested' ( temp texture2D)
+0:20        'someTex' ( uniform texture2D)
+0:21      move second child to first child ( temp float)
+0:?         'a1.n.y' ( temp float)
+0:21        Constant:
+0:21          1.000000
+0:23      Branch: Return with expression
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child ( temp 4-component vector of float)
+0:?         'vpos' ( temp 4-component vector of float)
+0:?         'vpos' (layout( location=0) in 4-component vector of float)
+0:8      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:8        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'vpos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'someTex' ( uniform texture2D)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'vpos' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 47
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 40 43
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "vpos"
+                              Name 14  "a1.n.y"
+                              Name 15  "a2.n.y"
+                              Name 19  "a1.n.texNested"
+                              Name 20  "a2.n.texNested"
+                              Name 22  "b.n.y"
+                              Name 24  "b.n.texNested"
+                              Name 26  "n.y"
+                              Name 28  "n.texNested"
+                              Name 31  "someTex"
+                              Name 38  "vpos"
+                              Name 40  "vpos"
+                              Name 43  "@entryPointOutput"
+                              Name 44  "param"
+                              Decorate 31(someTex) DescriptorSet 0
+                              Decorate 40(vpos) Location 0
+                              Decorate 43(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              13:             TypePointer Function 6(float)
+              17:             TypeImage 6(float) 2D sampled format:Unknown
+              18:             TypePointer Function 17
+              30:             TypePointer UniformConstant 17
+     31(someTex):     30(ptr) Variable UniformConstant
+              33:    6(float) Constant 1065353216
+              34:    6(float) Constant 0
+              35:    7(fvec4) ConstantComposite 34 34 34 34
+              39:             TypePointer Input 7(fvec4)
+        40(vpos):     39(ptr) Variable Input
+              42:             TypePointer Output 7(fvec4)
+43(@entryPointOutput):     42(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+        38(vpos):      8(ptr) Variable Function
+       44(param):      8(ptr) Variable Function
+              41:    7(fvec4) Load 40(vpos)
+                              Store 38(vpos) 41
+              45:    7(fvec4) Load 38(vpos)
+                              Store 44(param) 45
+              46:    7(fvec4) FunctionCall 11(@main(vf4;) 44(param)
+                              Store 43(@entryPointOutput) 46
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):    7(fvec4) Function None 9
+        10(vpos):      8(ptr) FunctionParameter
+              12:             Label
+      14(a1.n.y):     13(ptr) Variable Function
+      15(a2.n.y):     13(ptr) Variable Function
+19(a1.n.texNested):     18(ptr) Variable Function
+20(a2.n.texNested):     18(ptr) Variable Function
+       22(b.n.y):     13(ptr) Variable Function
+24(b.n.texNested):     18(ptr) Variable Function
+         26(n.y):     13(ptr) Variable Function
+ 28(n.texNested):     18(ptr) Variable Function
+              16:    6(float) Load 15(a2.n.y)
+                              Store 14(a1.n.y) 16
+              21:          17 Load 20(a2.n.texNested)
+                              Store 19(a1.n.texNested) 21
+              23:    6(float) Load 14(a1.n.y)
+                              Store 22(b.n.y) 23
+              25:          17 Load 19(a1.n.texNested)
+                              Store 24(b.n.texNested) 25
+              27:    6(float) Load 22(b.n.y)
+                              Store 26(n.y) 27
+              29:          17 Load 24(b.n.texNested)
+                              Store 28(n.texNested) 29
+              32:          17 Load 31(someTex)
+                              Store 20(a2.n.texNested) 32
+                              Store 14(a1.n.y) 33
+                              ReturnValue 35
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out
index 21b1c19..ed2b6c9 100755
--- a/Test/baseResults/hlsl.float1.frag.out
+++ b/Test/baseResults/hlsl.float1.frag.out
@@ -65,7 +65,7 @@
 0:?     'scalar' ( global float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
index 4da2a16..84213ce 100755
--- a/Test/baseResults/hlsl.float4.frag.out
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -42,7 +42,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform bool ff1, layout( offset=20) uniform float ff2, layout( binding=0 offset=32) uniform 4-component vector of float ff3, layout( binding=1 offset=48) uniform 4-component vector of float ff4})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out
index eaca9fd..c9efc33 100755
--- a/Test/baseResults/hlsl.forLoop.frag.out
+++ b/Test/baseResults/hlsl.forLoop.frag.out
@@ -402,7 +402,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 183
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.fraggeom.frag.out b/Test/baseResults/hlsl.fraggeom.frag.out
index 7cb85cd..a010b6e 100644
--- a/Test/baseResults/hlsl.fraggeom.frag.out
+++ b/Test/baseResults/hlsl.fraggeom.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
index 1f5164c..c2e25ce 100644
--- a/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -260,7 +260,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 124
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 73bd6e1..a41c03a 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -256,7 +256,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 135
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index 51154ca..432da7b 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -220,7 +220,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index 1e633e8..77410b0 100644
--- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -206,7 +206,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 114
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index 85ea585..a6e50ff 100644
--- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -200,7 +200,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index d80e59d..2191553 100644
--- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -748,7 +748,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 255
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index ab1d45b..6dbdfaa 100644
--- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -756,7 +756,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 265
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index 8b8a610..ddbe283 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1260,7 +1260,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 399
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index f7bd523..360f75c 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1252,7 +1252,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 389
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index 996e070..7bfed63 100644
--- a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
@@ -10,7 +10,7 @@
 0:45          'txval001' ( temp 4-component vector of float)
 0:45          textureGatherOffset ( temp 4-component vector of float)
 0:45            Construct combined texture-sampler ( temp sampler2DShadow)
-0:45              'g_tTex2df4' ( uniform texture2D)
+0:45              'g_tTex2df4' ( uniform texture2DShadow)
 0:45              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:45            c2: direct index for structure ( uniform 2-component vector of float)
 0:45              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -26,7 +26,7 @@
 0:46          'txval011' ( temp 4-component vector of int)
 0:46          textureGatherOffset ( temp 4-component vector of int)
 0:46            Construct combined texture-sampler ( temp isampler2DShadow)
-0:46              'g_tTex2di4' ( uniform itexture2D)
+0:46              'g_tTex2di4' ( uniform itexture2DShadow)
 0:46              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:46            c2: direct index for structure ( uniform 2-component vector of float)
 0:46              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -42,7 +42,7 @@
 0:47          'txval021' ( temp 4-component vector of uint)
 0:47          textureGatherOffset ( temp 4-component vector of uint)
 0:47            Construct combined texture-sampler ( temp usampler2DShadow)
-0:47              'g_tTex2du4' ( uniform utexture2D)
+0:47              'g_tTex2du4' ( uniform utexture2DShadow)
 0:47              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:47            c2: direct index for structure ( uniform 2-component vector of float)
 0:47              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -58,7 +58,7 @@
 0:49          'txval004' ( temp 4-component vector of float)
 0:49          textureGatherOffsets ( temp 4-component vector of float)
 0:49            Construct combined texture-sampler ( temp sampler2DShadow)
-0:49              'g_tTex2df4' ( uniform texture2D)
+0:49              'g_tTex2df4' ( uniform texture2DShadow)
 0:49              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:49            c2: direct index for structure ( uniform 2-component vector of float)
 0:49              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -80,7 +80,7 @@
 0:50          'txval014' ( temp 4-component vector of int)
 0:50          textureGatherOffsets ( temp 4-component vector of int)
 0:50            Construct combined texture-sampler ( temp isampler2DShadow)
-0:50              'g_tTex2di4' ( uniform itexture2D)
+0:50              'g_tTex2di4' ( uniform itexture2DShadow)
 0:50              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:50            c2: direct index for structure ( uniform 2-component vector of float)
 0:50              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -102,7 +102,7 @@
 0:51          'txval024' ( temp 4-component vector of uint)
 0:51          textureGatherOffsets ( temp 4-component vector of uint)
 0:51            Construct combined texture-sampler ( temp usampler2DShadow)
-0:51              'g_tTex2du4' ( uniform utexture2D)
+0:51              'g_tTex2du4' ( uniform utexture2DShadow)
 0:51              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:51            c2: direct index for structure ( uniform 2-component vector of float)
 0:51              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -124,7 +124,7 @@
 0:53          'txval401' ( temp 4-component vector of float)
 0:53          textureGatherOffset ( temp 4-component vector of float)
 0:53            Construct combined texture-sampler ( temp sampler2DShadow)
-0:53              'g_tTex2df4' ( uniform texture2D)
+0:53              'g_tTex2df4' ( uniform texture2DShadow)
 0:53              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:53            c2: direct index for structure ( uniform 2-component vector of float)
 0:53              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -140,7 +140,7 @@
 0:54          'txval411' ( temp 4-component vector of int)
 0:54          textureGatherOffset ( temp 4-component vector of int)
 0:54            Construct combined texture-sampler ( temp isampler2DShadow)
-0:54              'g_tTex2di4' ( uniform itexture2D)
+0:54              'g_tTex2di4' ( uniform itexture2DShadow)
 0:54              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:54            c2: direct index for structure ( uniform 2-component vector of float)
 0:54              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -156,7 +156,7 @@
 0:55          'txval421' ( temp 4-component vector of uint)
 0:55          textureGatherOffset ( temp 4-component vector of uint)
 0:55            Construct combined texture-sampler ( temp usampler2DShadow)
-0:55              'g_tTex2du4' ( uniform utexture2D)
+0:55              'g_tTex2du4' ( uniform utexture2DShadow)
 0:55              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:55            c2: direct index for structure ( uniform 2-component vector of float)
 0:55              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -211,9 +211,9 @@
 0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
 0:?     'g_tTex1di4' ( uniform itexture1D)
 0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
@@ -239,7 +239,7 @@
 0:45          'txval001' ( temp 4-component vector of float)
 0:45          textureGatherOffset ( temp 4-component vector of float)
 0:45            Construct combined texture-sampler ( temp sampler2DShadow)
-0:45              'g_tTex2df4' ( uniform texture2D)
+0:45              'g_tTex2df4' ( uniform texture2DShadow)
 0:45              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:45            c2: direct index for structure ( uniform 2-component vector of float)
 0:45              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -255,7 +255,7 @@
 0:46          'txval011' ( temp 4-component vector of int)
 0:46          textureGatherOffset ( temp 4-component vector of int)
 0:46            Construct combined texture-sampler ( temp isampler2DShadow)
-0:46              'g_tTex2di4' ( uniform itexture2D)
+0:46              'g_tTex2di4' ( uniform itexture2DShadow)
 0:46              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:46            c2: direct index for structure ( uniform 2-component vector of float)
 0:46              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -271,7 +271,7 @@
 0:47          'txval021' ( temp 4-component vector of uint)
 0:47          textureGatherOffset ( temp 4-component vector of uint)
 0:47            Construct combined texture-sampler ( temp usampler2DShadow)
-0:47              'g_tTex2du4' ( uniform utexture2D)
+0:47              'g_tTex2du4' ( uniform utexture2DShadow)
 0:47              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:47            c2: direct index for structure ( uniform 2-component vector of float)
 0:47              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -287,7 +287,7 @@
 0:49          'txval004' ( temp 4-component vector of float)
 0:49          textureGatherOffsets ( temp 4-component vector of float)
 0:49            Construct combined texture-sampler ( temp sampler2DShadow)
-0:49              'g_tTex2df4' ( uniform texture2D)
+0:49              'g_tTex2df4' ( uniform texture2DShadow)
 0:49              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:49            c2: direct index for structure ( uniform 2-component vector of float)
 0:49              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -309,7 +309,7 @@
 0:50          'txval014' ( temp 4-component vector of int)
 0:50          textureGatherOffsets ( temp 4-component vector of int)
 0:50            Construct combined texture-sampler ( temp isampler2DShadow)
-0:50              'g_tTex2di4' ( uniform itexture2D)
+0:50              'g_tTex2di4' ( uniform itexture2DShadow)
 0:50              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:50            c2: direct index for structure ( uniform 2-component vector of float)
 0:50              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -331,7 +331,7 @@
 0:51          'txval024' ( temp 4-component vector of uint)
 0:51          textureGatherOffsets ( temp 4-component vector of uint)
 0:51            Construct combined texture-sampler ( temp usampler2DShadow)
-0:51              'g_tTex2du4' ( uniform utexture2D)
+0:51              'g_tTex2du4' ( uniform utexture2DShadow)
 0:51              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:51            c2: direct index for structure ( uniform 2-component vector of float)
 0:51              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -353,7 +353,7 @@
 0:53          'txval401' ( temp 4-component vector of float)
 0:53          textureGatherOffset ( temp 4-component vector of float)
 0:53            Construct combined texture-sampler ( temp sampler2DShadow)
-0:53              'g_tTex2df4' ( uniform texture2D)
+0:53              'g_tTex2df4' ( uniform texture2DShadow)
 0:53              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:53            c2: direct index for structure ( uniform 2-component vector of float)
 0:53              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -369,7 +369,7 @@
 0:54          'txval411' ( temp 4-component vector of int)
 0:54          textureGatherOffset ( temp 4-component vector of int)
 0:54            Construct combined texture-sampler ( temp isampler2DShadow)
-0:54              'g_tTex2di4' ( uniform itexture2D)
+0:54              'g_tTex2di4' ( uniform itexture2DShadow)
 0:54              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:54            c2: direct index for structure ( uniform 2-component vector of float)
 0:54              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -385,7 +385,7 @@
 0:55          'txval421' ( temp 4-component vector of uint)
 0:55          textureGatherOffset ( temp 4-component vector of uint)
 0:55            Construct combined texture-sampler ( temp usampler2DShadow)
-0:55              'g_tTex2du4' ( uniform utexture2D)
+0:55              'g_tTex2du4' ( uniform utexture2DShadow)
 0:55              'g_sSampCmp' (layout( binding=0) uniform sampler)
 0:55            c2: direct index for structure ( uniform 2-component vector of float)
 0:55              'anon@0' (layout( row_major std140) uniform block{ uniform float c1,  uniform 2-component vector of float c2,  uniform 3-component vector of float c3,  uniform 4-component vector of float c4})
@@ -440,9 +440,9 @@
 0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
 0:?     'g_tTex1di4' ( uniform itexture1D)
 0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
@@ -454,14 +454,14 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 167
+// Generated by (magic number): 80002
+// Id's are bound by 164
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 132 136
+                              EntryPoint Fragment 4  "main" 129 133
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -472,61 +472,61 @@
                               Name 13  "txval001"
                               Name 16  "g_tTex2df4"
                               Name 20  "g_sSampCmp"
-                              Name 27  "$Global"
-                              MemberName 27($Global) 0  "c1"
-                              MemberName 27($Global) 1  "c2"
-                              MemberName 27($Global) 2  "c3"
-                              MemberName 27($Global) 3  "c4"
-                              Name 29  ""
-                              Name 42  "txval011"
-                              Name 45  "g_tTex2di4"
-                              Name 59  "txval021"
-                              Name 62  "g_tTex2du4"
-                              Name 72  "txval004"
-                              Name 82  "txval014"
-                              Name 90  "txval024"
-                              Name 98  "txval401"
-                              Name 105  "txval411"
-                              Name 112  "txval421"
-                              Name 120  "psout"
-                              Name 129  "flattenTemp"
-                              Name 132  "@entryPointOutput.Color"
-                              Name 136  "@entryPointOutput.Depth"
-                              Name 141  "g_tTex1df4a"
-                              Name 142  "g_tTex1df4"
-                              Name 145  "g_tTex1di4"
-                              Name 148  "g_tTex1du4"
-                              Name 151  "g_tTex3df4"
-                              Name 154  "g_tTex3di4"
-                              Name 157  "g_tTex3du4"
-                              Name 160  "g_tTexcdf4"
-                              Name 163  "g_tTexcdi4"
-                              Name 166  "g_tTexcdu4"
+                              Name 26  "$Global"
+                              MemberName 26($Global) 0  "c1"
+                              MemberName 26($Global) 1  "c2"
+                              MemberName 26($Global) 2  "c3"
+                              MemberName 26($Global) 3  "c4"
+                              Name 28  ""
+                              Name 41  "txval011"
+                              Name 44  "g_tTex2di4"
+                              Name 57  "txval021"
+                              Name 60  "g_tTex2du4"
+                              Name 69  "txval004"
+                              Name 79  "txval014"
+                              Name 87  "txval024"
+                              Name 95  "txval401"
+                              Name 102  "txval411"
+                              Name 109  "txval421"
+                              Name 117  "psout"
+                              Name 126  "flattenTemp"
+                              Name 129  "@entryPointOutput.Color"
+                              Name 133  "@entryPointOutput.Depth"
+                              Name 138  "g_tTex1df4a"
+                              Name 139  "g_tTex1df4"
+                              Name 142  "g_tTex1di4"
+                              Name 145  "g_tTex1du4"
+                              Name 148  "g_tTex3df4"
+                              Name 151  "g_tTex3di4"
+                              Name 154  "g_tTex3du4"
+                              Name 157  "g_tTexcdf4"
+                              Name 160  "g_tTexcdi4"
+                              Name 163  "g_tTexcdu4"
                               Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 20(g_sSampCmp) DescriptorSet 0
                               Decorate 20(g_sSampCmp) Binding 0
-                              MemberDecorate 27($Global) 0 Offset 0
-                              MemberDecorate 27($Global) 1 Offset 8
-                              MemberDecorate 27($Global) 2 Offset 16
-                              MemberDecorate 27($Global) 3 Offset 32
-                              Decorate 27($Global) Block
-                              Decorate 29 DescriptorSet 0
-                              Decorate 45(g_tTex2di4) DescriptorSet 0
-                              Decorate 62(g_tTex2du4) DescriptorSet 0
-                              Decorate 132(@entryPointOutput.Color) Location 0
-                              Decorate 136(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 141(g_tTex1df4a) DescriptorSet 0
-                              Decorate 141(g_tTex1df4a) Binding 1
-                              Decorate 142(g_tTex1df4) DescriptorSet 0
-                              Decorate 142(g_tTex1df4) Binding 0
-                              Decorate 145(g_tTex1di4) DescriptorSet 0
-                              Decorate 148(g_tTex1du4) DescriptorSet 0
-                              Decorate 151(g_tTex3df4) DescriptorSet 0
-                              Decorate 154(g_tTex3di4) DescriptorSet 0
-                              Decorate 157(g_tTex3du4) DescriptorSet 0
-                              Decorate 160(g_tTexcdf4) DescriptorSet 0
-                              Decorate 163(g_tTexcdi4) DescriptorSet 0
-                              Decorate 166(g_tTexcdu4) DescriptorSet 0
+                              MemberDecorate 26($Global) 0 Offset 0
+                              MemberDecorate 26($Global) 1 Offset 8
+                              MemberDecorate 26($Global) 2 Offset 16
+                              MemberDecorate 26($Global) 3 Offset 32
+                              Decorate 26($Global) Block
+                              Decorate 28 DescriptorSet 0
+                              Decorate 44(g_tTex2di4) DescriptorSet 0
+                              Decorate 60(g_tTex2du4) DescriptorSet 0
+                              Decorate 129(@entryPointOutput.Color) Location 0
+                              Decorate 133(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 138(g_tTex1df4a) DescriptorSet 0
+                              Decorate 138(g_tTex1df4a) Binding 1
+                              Decorate 139(g_tTex1df4) DescriptorSet 0
+                              Decorate 139(g_tTex1df4) Binding 0
+                              Decorate 142(g_tTex1di4) DescriptorSet 0
+                              Decorate 145(g_tTex1du4) DescriptorSet 0
+                              Decorate 148(g_tTex3df4) DescriptorSet 0
+                              Decorate 151(g_tTex3di4) DescriptorSet 0
+                              Decorate 154(g_tTex3du4) DescriptorSet 0
+                              Decorate 157(g_tTexcdf4) DescriptorSet 0
+                              Decorate 160(g_tTexcdi4) DescriptorSet 0
+                              Decorate 163(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -534,177 +534,174 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 7(fvec4)
-              14:             TypeImage 6(float) 2D sampled format:Unknown
+              14:             TypeImage 6(float) 2D depth sampled format:Unknown
               15:             TypePointer UniformConstant 14
   16(g_tTex2df4):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
   20(g_sSampCmp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 2D depth sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:             TypeVector 6(float) 2
-              26:             TypeVector 6(float) 3
-     27($Global):             TypeStruct 6(float) 25(fvec2) 26(fvec3) 7(fvec4)
-              28:             TypePointer Uniform 27($Global)
-              29:     28(ptr) Variable Uniform
-              30:             TypeInt 32 1
-              31:     30(int) Constant 1
-              32:             TypePointer Uniform 25(fvec2)
-              35:    6(float) Constant 1061158912
-              36:             TypeVector 30(int) 2
-              37:     30(int) Constant 0
-              38:   36(ivec2) ConstantComposite 31 37
-              40:             TypeVector 30(int) 4
-              41:             TypePointer Function 40(ivec4)
-              43:             TypeImage 30(int) 2D sampled format:Unknown
-              44:             TypePointer UniformConstant 43
-  45(g_tTex2di4):     44(ptr) Variable UniformConstant
-              48:             TypeImage 30(int) 2D depth sampled format:Unknown
-              49:             TypeSampledImage 48
-              53:     30(int) Constant 4294967295
-              54:   36(ivec2) ConstantComposite 31 53
-              56:             TypeInt 32 0
-              57:             TypeVector 56(int) 4
-              58:             TypePointer Function 57(ivec4)
-              60:             TypeImage 56(int) 2D sampled format:Unknown
-              61:             TypePointer UniformConstant 60
-  62(g_tTex2du4):     61(ptr) Variable UniformConstant
-              65:             TypeImage 56(int) 2D depth sampled format:Unknown
-              66:             TypeSampledImage 65
-              70:   36(ivec2) ConstantComposite 31 31
-              78:     56(int) Constant 4
-              79:             TypeArray 36(ivec2) 78
-              80:          79 ConstantComposite 38 38 38 38
-              88:          79 ConstantComposite 54 54 54 54
-              96:          79 ConstantComposite 70 70 70 70
-             119:             TypePointer Function 8(PS_OUTPUT)
-             121:    6(float) Constant 1065353216
-             122:    7(fvec4) ConstantComposite 121 121 121 121
-             124:             TypePointer Function 6(float)
-             131:             TypePointer Output 7(fvec4)
-132(@entryPointOutput.Color):    131(ptr) Variable Output
-             135:             TypePointer Output 6(float)
-136(@entryPointOutput.Depth):    135(ptr) Variable Output
-             139:             TypeImage 6(float) 1D sampled format:Unknown
-             140:             TypePointer UniformConstant 139
-141(g_tTex1df4a):    140(ptr) Variable UniformConstant
- 142(g_tTex1df4):    140(ptr) Variable UniformConstant
-             143:             TypeImage 30(int) 1D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:             TypeVector 6(float) 3
+     26($Global):             TypeStruct 6(float) 24(fvec2) 25(fvec3) 7(fvec4)
+              27:             TypePointer Uniform 26($Global)
+              28:     27(ptr) Variable Uniform
+              29:             TypeInt 32 1
+              30:     29(int) Constant 1
+              31:             TypePointer Uniform 24(fvec2)
+              34:    6(float) Constant 1061158912
+              35:             TypeVector 29(int) 2
+              36:     29(int) Constant 0
+              37:   35(ivec2) ConstantComposite 30 36
+              39:             TypeVector 29(int) 4
+              40:             TypePointer Function 39(ivec4)
+              42:             TypeImage 29(int) 2D depth sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(g_tTex2di4):     43(ptr) Variable UniformConstant
+              47:             TypeSampledImage 42
+              51:     29(int) Constant 4294967295
+              52:   35(ivec2) ConstantComposite 30 51
+              54:             TypeInt 32 0
+              55:             TypeVector 54(int) 4
+              56:             TypePointer Function 55(ivec4)
+              58:             TypeImage 54(int) 2D depth sampled format:Unknown
+              59:             TypePointer UniformConstant 58
+  60(g_tTex2du4):     59(ptr) Variable UniformConstant
+              63:             TypeSampledImage 58
+              67:   35(ivec2) ConstantComposite 30 30
+              75:     54(int) Constant 4
+              76:             TypeArray 35(ivec2) 75
+              77:          76 ConstantComposite 37 37 37 37
+              85:          76 ConstantComposite 52 52 52 52
+              93:          76 ConstantComposite 67 67 67 67
+             116:             TypePointer Function 8(PS_OUTPUT)
+             118:    6(float) Constant 1065353216
+             119:    7(fvec4) ConstantComposite 118 118 118 118
+             121:             TypePointer Function 6(float)
+             128:             TypePointer Output 7(fvec4)
+129(@entryPointOutput.Color):    128(ptr) Variable Output
+             132:             TypePointer Output 6(float)
+133(@entryPointOutput.Depth):    132(ptr) Variable Output
+             136:             TypeImage 6(float) 1D sampled format:Unknown
+             137:             TypePointer UniformConstant 136
+138(g_tTex1df4a):    137(ptr) Variable UniformConstant
+ 139(g_tTex1df4):    137(ptr) Variable UniformConstant
+             140:             TypeImage 29(int) 1D sampled format:Unknown
+             141:             TypePointer UniformConstant 140
+ 142(g_tTex1di4):    141(ptr) Variable UniformConstant
+             143:             TypeImage 54(int) 1D sampled format:Unknown
              144:             TypePointer UniformConstant 143
- 145(g_tTex1di4):    144(ptr) Variable UniformConstant
-             146:             TypeImage 56(int) 1D sampled format:Unknown
+ 145(g_tTex1du4):    144(ptr) Variable UniformConstant
+             146:             TypeImage 6(float) 3D sampled format:Unknown
              147:             TypePointer UniformConstant 146
- 148(g_tTex1du4):    147(ptr) Variable UniformConstant
-             149:             TypeImage 6(float) 3D sampled format:Unknown
+ 148(g_tTex3df4):    147(ptr) Variable UniformConstant
+             149:             TypeImage 29(int) 3D sampled format:Unknown
              150:             TypePointer UniformConstant 149
- 151(g_tTex3df4):    150(ptr) Variable UniformConstant
-             152:             TypeImage 30(int) 3D sampled format:Unknown
+ 151(g_tTex3di4):    150(ptr) Variable UniformConstant
+             152:             TypeImage 54(int) 3D sampled format:Unknown
              153:             TypePointer UniformConstant 152
- 154(g_tTex3di4):    153(ptr) Variable UniformConstant
-             155:             TypeImage 56(int) 3D sampled format:Unknown
+ 154(g_tTex3du4):    153(ptr) Variable UniformConstant
+             155:             TypeImage 6(float) Cube sampled format:Unknown
              156:             TypePointer UniformConstant 155
- 157(g_tTex3du4):    156(ptr) Variable UniformConstant
-             158:             TypeImage 6(float) Cube sampled format:Unknown
+ 157(g_tTexcdf4):    156(ptr) Variable UniformConstant
+             158:             TypeImage 29(int) Cube sampled format:Unknown
              159:             TypePointer UniformConstant 158
- 160(g_tTexcdf4):    159(ptr) Variable UniformConstant
-             161:             TypeImage 30(int) Cube sampled format:Unknown
+ 160(g_tTexcdi4):    159(ptr) Variable UniformConstant
+             161:             TypeImage 54(int) Cube sampled format:Unknown
              162:             TypePointer UniformConstant 161
- 163(g_tTexcdi4):    162(ptr) Variable UniformConstant
-             164:             TypeImage 56(int) Cube sampled format:Unknown
-             165:             TypePointer UniformConstant 164
- 166(g_tTexcdu4):    165(ptr) Variable UniformConstant
+ 163(g_tTexcdu4):    162(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-129(flattenTemp):    119(ptr) Variable Function
-             130:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 129(flattenTemp) 130
-             133:     12(ptr) AccessChain 129(flattenTemp) 37
-             134:    7(fvec4) Load 133
-                              Store 132(@entryPointOutput.Color) 134
-             137:    124(ptr) AccessChain 129(flattenTemp) 31
-             138:    6(float) Load 137
-                              Store 136(@entryPointOutput.Depth) 138
+126(flattenTemp):    116(ptr) Variable Function
+             127:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 126(flattenTemp) 127
+             130:     12(ptr) AccessChain 126(flattenTemp) 36
+             131:    7(fvec4) Load 130
+                              Store 129(@entryPointOutput.Color) 131
+             134:    121(ptr) AccessChain 126(flattenTemp) 30
+             135:    6(float) Load 134
+                              Store 133(@entryPointOutput.Depth) 135
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
     13(txval001):     12(ptr) Variable Function
-    42(txval011):     41(ptr) Variable Function
-    59(txval021):     58(ptr) Variable Function
-    72(txval004):     12(ptr) Variable Function
-    82(txval014):     41(ptr) Variable Function
-    90(txval024):     58(ptr) Variable Function
-    98(txval401):     12(ptr) Variable Function
-   105(txval411):     41(ptr) Variable Function
-   112(txval421):     58(ptr) Variable Function
-      120(psout):    119(ptr) Variable Function
+    41(txval011):     40(ptr) Variable Function
+    57(txval021):     56(ptr) Variable Function
+    69(txval004):     12(ptr) Variable Function
+    79(txval014):     40(ptr) Variable Function
+    87(txval024):     56(ptr) Variable Function
+    95(txval401):     12(ptr) Variable Function
+   102(txval411):     40(ptr) Variable Function
+   109(txval421):     56(ptr) Variable Function
+      117(psout):    116(ptr) Variable Function
               17:          14 Load 16(g_tTex2df4)
               21:          18 Load 20(g_sSampCmp)
-              24:          23 SampledImage 17 21
-              33:     32(ptr) AccessChain 29 31
-              34:   25(fvec2) Load 33
-              39:    7(fvec4) ImageDrefGather 24 34 35 ConstOffset 38
-                              Store 13(txval001) 39
-              46:          43 Load 45(g_tTex2di4)
-              47:          18 Load 20(g_sSampCmp)
-              50:          49 SampledImage 46 47
-              51:     32(ptr) AccessChain 29 31
-              52:   25(fvec2) Load 51
-              55:   40(ivec4) ImageDrefGather 50 52 35 ConstOffset 54
-                              Store 42(txval011) 55
-              63:          60 Load 62(g_tTex2du4)
-              64:          18 Load 20(g_sSampCmp)
-              67:          66 SampledImage 63 64
-              68:     32(ptr) AccessChain 29 31
-              69:   25(fvec2) Load 68
-              71:   57(ivec4) ImageDrefGather 67 69 35 ConstOffset 70
-                              Store 59(txval021) 71
-              73:          14 Load 16(g_tTex2df4)
-              74:          18 Load 20(g_sSampCmp)
-              75:          23 SampledImage 73 74
-              76:     32(ptr) AccessChain 29 31
-              77:   25(fvec2) Load 76
-              81:    7(fvec4) ImageDrefGather 75 77 35 ConstOffsets 80
-                              Store 72(txval004) 81
-              83:          43 Load 45(g_tTex2di4)
-              84:          18 Load 20(g_sSampCmp)
-              85:          49 SampledImage 83 84
-              86:     32(ptr) AccessChain 29 31
-              87:   25(fvec2) Load 86
-              89:   40(ivec4) ImageDrefGather 85 87 35 ConstOffsets 88
-                              Store 82(txval014) 89
-              91:          60 Load 62(g_tTex2du4)
-              92:          18 Load 20(g_sSampCmp)
-              93:          66 SampledImage 91 92
-              94:     32(ptr) AccessChain 29 31
-              95:   25(fvec2) Load 94
-              97:   57(ivec4) ImageDrefGather 93 95 35 ConstOffsets 96
-                              Store 90(txval024) 97
-              99:          14 Load 16(g_tTex2df4)
-             100:          18 Load 20(g_sSampCmp)
-             101:          23 SampledImage 99 100
-             102:     32(ptr) AccessChain 29 31
-             103:   25(fvec2) Load 102
-             104:    7(fvec4) ImageDrefGather 101 103 35 ConstOffset 38
-                              Store 98(txval401) 104
-             106:          43 Load 45(g_tTex2di4)
-             107:          18 Load 20(g_sSampCmp)
-             108:          49 SampledImage 106 107
-             109:     32(ptr) AccessChain 29 31
-             110:   25(fvec2) Load 109
-             111:   40(ivec4) ImageDrefGather 108 110 35 ConstOffset 54
-                              Store 105(txval411) 111
-             113:          60 Load 62(g_tTex2du4)
-             114:          18 Load 20(g_sSampCmp)
-             115:          66 SampledImage 113 114
-             116:     32(ptr) AccessChain 29 31
-             117:   25(fvec2) Load 116
-             118:   57(ivec4) ImageDrefGather 115 117 35 ConstOffset 70
-                              Store 112(txval421) 118
-             123:     12(ptr) AccessChain 120(psout) 37
-                              Store 123 122
-             125:    124(ptr) AccessChain 120(psout) 31
-                              Store 125 121
-             126:8(PS_OUTPUT) Load 120(psout)
-                              ReturnValue 126
+              23:          22 SampledImage 17 21
+              32:     31(ptr) AccessChain 28 30
+              33:   24(fvec2) Load 32
+              38:    7(fvec4) ImageDrefGather 23 33 34 ConstOffset 37
+                              Store 13(txval001) 38
+              45:          42 Load 44(g_tTex2di4)
+              46:          18 Load 20(g_sSampCmp)
+              48:          47 SampledImage 45 46
+              49:     31(ptr) AccessChain 28 30
+              50:   24(fvec2) Load 49
+              53:   39(ivec4) ImageDrefGather 48 50 34 ConstOffset 52
+                              Store 41(txval011) 53
+              61:          58 Load 60(g_tTex2du4)
+              62:          18 Load 20(g_sSampCmp)
+              64:          63 SampledImage 61 62
+              65:     31(ptr) AccessChain 28 30
+              66:   24(fvec2) Load 65
+              68:   55(ivec4) ImageDrefGather 64 66 34 ConstOffset 67
+                              Store 57(txval021) 68
+              70:          14 Load 16(g_tTex2df4)
+              71:          18 Load 20(g_sSampCmp)
+              72:          22 SampledImage 70 71
+              73:     31(ptr) AccessChain 28 30
+              74:   24(fvec2) Load 73
+              78:    7(fvec4) ImageDrefGather 72 74 34 ConstOffsets 77
+                              Store 69(txval004) 78
+              80:          42 Load 44(g_tTex2di4)
+              81:          18 Load 20(g_sSampCmp)
+              82:          47 SampledImage 80 81
+              83:     31(ptr) AccessChain 28 30
+              84:   24(fvec2) Load 83
+              86:   39(ivec4) ImageDrefGather 82 84 34 ConstOffsets 85
+                              Store 79(txval014) 86
+              88:          58 Load 60(g_tTex2du4)
+              89:          18 Load 20(g_sSampCmp)
+              90:          63 SampledImage 88 89
+              91:     31(ptr) AccessChain 28 30
+              92:   24(fvec2) Load 91
+              94:   55(ivec4) ImageDrefGather 90 92 34 ConstOffsets 93
+                              Store 87(txval024) 94
+              96:          14 Load 16(g_tTex2df4)
+              97:          18 Load 20(g_sSampCmp)
+              98:          22 SampledImage 96 97
+              99:     31(ptr) AccessChain 28 30
+             100:   24(fvec2) Load 99
+             101:    7(fvec4) ImageDrefGather 98 100 34 ConstOffset 37
+                              Store 95(txval401) 101
+             103:          42 Load 44(g_tTex2di4)
+             104:          18 Load 20(g_sSampCmp)
+             105:          47 SampledImage 103 104
+             106:     31(ptr) AccessChain 28 30
+             107:   24(fvec2) Load 106
+             108:   39(ivec4) ImageDrefGather 105 107 34 ConstOffset 52
+                              Store 102(txval411) 108
+             110:          58 Load 60(g_tTex2du4)
+             111:          18 Load 20(g_sSampCmp)
+             112:          63 SampledImage 110 111
+             113:     31(ptr) AccessChain 28 30
+             114:   24(fvec2) Load 113
+             115:   55(ivec4) ImageDrefGather 112 114 34 ConstOffset 67
+                              Store 109(txval421) 115
+             120:     12(ptr) AccessChain 117(psout) 36
+                              Store 120 119
+             122:    121(ptr) AccessChain 117(psout) 30
+                              Store 122 118
+             123:8(PS_OUTPUT) Load 117(psout)
+                              ReturnValue 123
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index 3780bd3..2fdf4f1 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -2316,7 +2316,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 550
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index 275cece..8c940fe 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -116,7 +116,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
index b301a61..b3d3ce0d 100644
--- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -716,7 +716,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index 12fe30c..22d601d 100644
--- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -578,7 +578,7 @@
 0:?     'sample' (layout( location=0) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 221
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.global-const-init.frag.out b/Test/baseResults/hlsl.global-const-init.frag.out
index 659ad53..c76f54a 100644
--- a/Test/baseResults/hlsl.global-const-init.frag.out
+++ b/Test/baseResults/hlsl.global-const-init.frag.out
@@ -102,7 +102,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.hlslOffset.vert.out b/Test/baseResults/hlsl.hlslOffset.vert.out
index dcd8027..4840e61 100644
--- a/Test/baseResults/hlsl.hlslOffset.vert.out
+++ b/Test/baseResults/hlsl.hlslOffset.vert.out
@@ -26,7 +26,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.hull.1.tesc.out b/Test/baseResults/hlsl.hull.1.tesc.out
index 151a0b3..57020ee 100644
--- a/Test/baseResults/hlsl.hull.1.tesc.out
+++ b/Test/baseResults/hlsl.hull.1.tesc.out
@@ -32,7 +32,7 @@
 0:?         'm_cpid' ( temp uint)
 0:?         'm_cpid' ( in uint InvocationID)
 0:26      move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:26        indirect index ( temp structure{ temp 3-component vector of float cpoint})
+0:26        indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
 0:?           '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?           'm_cpid' ( in uint InvocationID)
 0:26        Function Call: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
@@ -146,7 +146,7 @@
 0:?         'm_cpid' ( temp uint)
 0:?         'm_cpid' ( in uint InvocationID)
 0:26      move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:26        indirect index ( temp structure{ temp 3-component vector of float cpoint})
+0:26        indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
 0:?           '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?           'm_cpid' ( in uint InvocationID)
 0:26        Function Call: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
@@ -224,7 +224,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 90
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out
index 11342ea..8d0708d 100644
--- a/Test/baseResults/hlsl.hull.2.tesc.out
+++ b/Test/baseResults/hlsl.hull.2.tesc.out
@@ -28,7 +28,7 @@
 0:?         'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?         'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
 0:26      move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:26        indirect index ( temp structure{ temp 3-component vector of float cpoint})
+0:26        indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
 0:?           '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?           'InvocationId' ( in uint InvocationID)
 0:26        Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
@@ -140,7 +140,7 @@
 0:?         'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?         'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
 0:26      move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:26        indirect index ( temp structure{ temp 3-component vector of float cpoint})
+0:26        indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
 0:?           '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?           'InvocationId' ( in uint InvocationID)
 0:26        Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
@@ -220,7 +220,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 92
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out
index 39d9236..59eed0d 100755
--- a/Test/baseResults/hlsl.hull.3.tesc.out
+++ b/Test/baseResults/hlsl.hull.3.tesc.out
@@ -28,7 +28,7 @@
 0:?         'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?         'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
 0:26      move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:26        indirect index ( temp structure{ temp 3-component vector of float cpoint})
+0:26        indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
 0:?           '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?           'InvocationId' ( in uint InvocationID)
 0:26        Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
@@ -140,7 +140,7 @@
 0:?         'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?         'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
 0:26      move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:26        indirect index ( temp structure{ temp 3-component vector of float cpoint})
+0:26        indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
 0:?           '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
 0:?           'InvocationId' ( in uint InvocationID)
 0:26        Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
@@ -220,7 +220,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 92
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out
new file mode 100644
index 0000000..139d7d4
--- /dev/null
+++ b/Test/baseResults/hlsl.hull.4.tesc.out
@@ -0,0 +1,681 @@
+hlsl.hull.4.tesc
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+0:? Sequence
+0:25  Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:25    Function Parameters: 
+0:25      'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?     Sequence
+0:26      Sequence
+0:26        move second child to first child ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:26          'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:26          Constant:
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:28      move second child to first child ( temp float)
+0:28        fInsideTessFactor: direct index for structure ( temp float)
+0:28          'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:28          Constant:
+0:28            1 (const int)
+0:28        add ( temp float)
+0:28          direct index ( temp float)
+0:28            m_Position: direct index for structure ( temp 4-component vector of float)
+0:28              direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              3 (const int)
+0:28          direct index ( temp float)
+0:28            m_Normal: direct index for structure ( temp 4-component vector of float)
+0:28              direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              3 (const int)
+0:30      Branch: Return with expression
+0:30        'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:39  Function Definition: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:39    Function Parameters: 
+0:39      'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39      'cpid' ( in uint)
+0:?     Sequence
+0:40      Sequence
+0:40        move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
+0:40          'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:40          Constant:
+0:40            0.000000
+0:40            0.000000
+0:40            0.000000
+0:40            0.000000
+0:41      move second child to first child ( temp 4-component vector of float)
+0:41        m_Position: direct index for structure ( temp 4-component vector of float)
+0:41          'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:41          Constant:
+0:41            0 (const int)
+0:41        Constant:
+0:41          0.000000
+0:41          0.000000
+0:41          0.000000
+0:41          0.000000
+0:42      Branch: Return with expression
+0:42        'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:39  Function Definition: main( ( temp void)
+0:39    Function Parameters: 
+0:?     Sequence
+0:39      Sequence
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          direct index ( in 4-component vector of float Position)
+0:?             'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              0 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39              'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          direct index ( in 4-component vector of float Position)
+0:?             'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              1 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39              'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          direct index ( in 4-component vector of float Position)
+0:?             'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              2 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39              'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39      move second child to first child ( temp uint)
+0:?         'cpid' ( temp uint)
+0:?         'cpid' ( in uint InvocationID)
+0:39      Sequence
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          direct index ( out 4-component vector of float Position)
+0:?             '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              0 (const int)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            Function Call: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'cpid' ( temp uint)
+0:39            Constant:
+0:39              0 (const int)
+0:?       Barrier ( temp void)
+0:?       Test condition and select ( temp void)
+0:?         Condition
+0:?         Compare Equal ( temp bool)
+0:?           'cpid' ( in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Sequence
+0:?           move second child to first child ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?             Function Call: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?           Sequence
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index ( temp float)
+0:?                 fTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index ( temp float)
+0:?                 fTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?               direct index ( temp float)
+0:?                 fTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelInner)
+0:?                 '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               fInsideTessFactor: direct index for structure ( temp float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?                 Constant:
+0:?                   1 (const int)
+0:?   Linker Objects
+0:?     '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:?     'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:?     'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:?     'cpid' ( in uint InvocationID)
+0:?     '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?     '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+0:? Sequence
+0:25  Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:25    Function Parameters: 
+0:25      'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?     Sequence
+0:26      Sequence
+0:26        move second child to first child ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:26          'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:26          Constant:
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:28      move second child to first child ( temp float)
+0:28        fInsideTessFactor: direct index for structure ( temp float)
+0:28          'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:28          Constant:
+0:28            1 (const int)
+0:28        add ( temp float)
+0:28          direct index ( temp float)
+0:28            m_Position: direct index for structure ( temp 4-component vector of float)
+0:28              direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              3 (const int)
+0:28          direct index ( temp float)
+0:28            m_Normal: direct index for structure ( temp 4-component vector of float)
+0:28              direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              3 (const int)
+0:30      Branch: Return with expression
+0:30        'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:39  Function Definition: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:39    Function Parameters: 
+0:39      'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39      'cpid' ( in uint)
+0:?     Sequence
+0:40      Sequence
+0:40        move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
+0:40          'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:40          Constant:
+0:40            0.000000
+0:40            0.000000
+0:40            0.000000
+0:40            0.000000
+0:41      move second child to first child ( temp 4-component vector of float)
+0:41        m_Position: direct index for structure ( temp 4-component vector of float)
+0:41          'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:41          Constant:
+0:41            0 (const int)
+0:41        Constant:
+0:41          0.000000
+0:41          0.000000
+0:41          0.000000
+0:41          0.000000
+0:42      Branch: Return with expression
+0:42        'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:39  Function Definition: main( ( temp void)
+0:39    Function Parameters: 
+0:?     Sequence
+0:39      Sequence
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          direct index ( in 4-component vector of float Position)
+0:?             'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              0 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39              'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                0 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          direct index ( in 4-component vector of float Position)
+0:?             'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              1 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39              'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          direct index ( in 4-component vector of float Position)
+0:?             'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              2 (const int)
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          m_Normal: direct index for structure ( temp 4-component vector of float)
+0:39            direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
+0:39              'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:39              Constant:
+0:39                2 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39      move second child to first child ( temp uint)
+0:?         'cpid' ( temp uint)
+0:?         'cpid' ( in uint InvocationID)
+0:39      Sequence
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          direct index ( out 4-component vector of float Position)
+0:?             '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              0 (const int)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            Function Call: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?               'cpid' ( temp uint)
+0:39            Constant:
+0:39              0 (const int)
+0:?       Barrier ( temp void)
+0:?       Test condition and select ( temp void)
+0:?         Condition
+0:?         Compare Equal ( temp bool)
+0:?           'cpid' ( in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Sequence
+0:?           move second child to first child ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?             Function Call: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?               'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?           Sequence
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index ( temp float)
+0:?                 fTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index ( temp float)
+0:?                 fTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?               direct index ( temp float)
+0:?                 fTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelInner)
+0:?                 '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               fInsideTessFactor: direct index for structure ( temp float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:?                 Constant:
+0:?                   1 (const int)
+0:?   Linker Objects
+0:?     '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:?     'I.m_Position' ( in 3-element array of 4-component vector of float Position)
+0:?     'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
+0:?     'cpid' ( in uint InvocationID)
+0:?     '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?     '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 127
+
+                              Capability Tessellation
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 56 64 83 86 110 123
+                              ExecutionMode 4 OutputVertices 3
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 SpacingFractionalOdd
+                              ExecutionMode 4 VertexOrderCw
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "HS_Input"
+                              MemberName 8(HS_Input) 0  "m_Position"
+                              MemberName 8(HS_Input) 1  "m_Normal"
+                              Name 14  "HS_Output"
+                              MemberName 14(HS_Output) 0  "fTessFactor"
+                              MemberName 14(HS_Output) 1  "fInsideTessFactor"
+                              Name 17  "HS_ConstFunc(struct-HS_Input-vf4-vf41[3];"
+                              Name 16  "I"
+                              Name 20  "HS_Main_Output"
+                              MemberName 20(HS_Main_Output) 0  "m_Position"
+                              Name 24  "@main(struct-HS_Input-vf4-vf41[3];u1;"
+                              Name 22  "I"
+                              Name 23  "cpid"
+                              Name 27  "O"
+                              Name 45  "output"
+                              Name 53  "I"
+                              Name 56  "I.m_Position"
+                              Name 61  "HS_Input"
+                              MemberName 61(HS_Input) 0  "m_Normal"
+                              Name 64  "I"
+                              Name 81  "cpid"
+                              Name 83  "cpid"
+                              Name 86  "@entryPointOutput.m_Position"
+                              Name 87  "param"
+                              Name 89  "param"
+                              Name 103  "@patchConstantResult"
+                              Name 104  "param"
+                              Name 110  "@patchConstantOutput.fTessFactor"
+                              Name 123  "@patchConstantOutput.fInsideTessFactor"
+                              Decorate 56(I.m_Position) BuiltIn Position
+                              Decorate 64(I) Location 0
+                              Decorate 83(cpid) BuiltIn InvocationId
+                              Decorate 86(@entryPointOutput.m_Position) BuiltIn Position
+                              Decorate 110(@patchConstantOutput.fTessFactor) Patch
+                              Decorate 110(@patchConstantOutput.fTessFactor) BuiltIn TessLevelOuter
+                              Decorate 123(@patchConstantOutput.fInsideTessFactor) Patch
+                              Decorate 123(@patchConstantOutput.fInsideTessFactor) BuiltIn TessLevelInner
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+     8(HS_Input):             TypeStruct 7(fvec4) 7(fvec4)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 3
+              11:             TypeArray 8(HS_Input) 10
+              12:             TypePointer Function 11
+              13:             TypeArray 6(float) 10
+   14(HS_Output):             TypeStruct 13 6(float)
+              15:             TypeFunction 14(HS_Output) 12(ptr)
+              19:             TypePointer Function 9(int)
+20(HS_Main_Output):             TypeStruct 7(fvec4)
+              21:             TypeFunction 20(HS_Main_Output) 12(ptr) 19(ptr)
+              26:             TypePointer Function 14(HS_Output)
+              28:    6(float) Constant 0
+              29:          13 ConstantComposite 28 28 28
+              30:14(HS_Output) ConstantComposite 29 28
+              31:             TypeInt 32 1
+              32:     31(int) Constant 1
+              33:     31(int) Constant 0
+              34:             TypePointer Function 6(float)
+              44:             TypePointer Function 20(HS_Main_Output)
+              46:    7(fvec4) ConstantComposite 28 28 28 28
+              47:20(HS_Main_Output) ConstantComposite 46
+              48:             TypePointer Function 7(fvec4)
+              54:             TypeArray 7(fvec4) 10
+              55:             TypePointer Input 54
+56(I.m_Position):     55(ptr) Variable Input
+              57:             TypePointer Input 7(fvec4)
+    61(HS_Input):             TypeStruct 7(fvec4)
+              62:             TypeArray 61(HS_Input) 10
+              63:             TypePointer Input 62
+           64(I):     63(ptr) Variable Input
+              74:     31(int) Constant 2
+              82:             TypePointer Input 9(int)
+        83(cpid):     82(ptr) Variable Input
+              85:             TypePointer Output 54
+86(@entryPointOutput.m_Position):     85(ptr) Variable Output
+              93:             TypePointer Output 7(fvec4)
+              95:      9(int) Constant 2
+              96:      9(int) Constant 1
+              97:      9(int) Constant 0
+              99:             TypeBool
+             107:      9(int) Constant 4
+             108:             TypeArray 6(float) 107
+             109:             TypePointer Output 108
+110(@patchConstantOutput.fTessFactor):    109(ptr) Variable Output
+             113:             TypePointer Output 6(float)
+             121:             TypeArray 6(float) 95
+             122:             TypePointer Output 121
+123(@patchConstantOutput.fInsideTessFactor):    122(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+           53(I):     12(ptr) Variable Function
+        81(cpid):     19(ptr) Variable Function
+       87(param):     12(ptr) Variable Function
+       89(param):     19(ptr) Variable Function
+103(@patchConstantResult):     26(ptr) Variable Function
+      104(param):     12(ptr) Variable Function
+              58:     57(ptr) AccessChain 56(I.m_Position) 33
+              59:    7(fvec4) Load 58
+              60:     48(ptr) AccessChain 53(I) 33 33
+                              Store 60 59
+              65:     57(ptr) AccessChain 64(I) 33 33
+              66:    7(fvec4) Load 65
+              67:     48(ptr) AccessChain 53(I) 33 32
+                              Store 67 66
+              68:     57(ptr) AccessChain 56(I.m_Position) 32
+              69:    7(fvec4) Load 68
+              70:     48(ptr) AccessChain 53(I) 32 33
+                              Store 70 69
+              71:     57(ptr) AccessChain 64(I) 32 33
+              72:    7(fvec4) Load 71
+              73:     48(ptr) AccessChain 53(I) 32 32
+                              Store 73 72
+              75:     57(ptr) AccessChain 56(I.m_Position) 74
+              76:    7(fvec4) Load 75
+              77:     48(ptr) AccessChain 53(I) 74 33
+                              Store 77 76
+              78:     57(ptr) AccessChain 64(I) 74 33
+              79:    7(fvec4) Load 78
+              80:     48(ptr) AccessChain 53(I) 74 32
+                              Store 80 79
+              84:      9(int) Load 83(cpid)
+                              Store 81(cpid) 84
+              88:          11 Load 53(I)
+                              Store 87(param) 88
+              90:      9(int) Load 81(cpid)
+                              Store 89(param) 90
+              91:20(HS_Main_Output) FunctionCall 24(@main(struct-HS_Input-vf4-vf41[3];u1;) 87(param) 89(param)
+              92:    7(fvec4) CompositeExtract 91 0
+              94:     93(ptr) AccessChain 86(@entryPointOutput.m_Position) 33
+                              Store 94 92
+                              ControlBarrier 95 96 97
+              98:      9(int) Load 83(cpid)
+             100:    99(bool) IEqual 98 33
+                              SelectionMerge 102 None
+                              BranchConditional 100 101 102
+             101:               Label
+             105:          11   Load 53(I)
+                                Store 104(param) 105
+             106:14(HS_Output)   FunctionCall 17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];) 104(param)
+                                Store 103(@patchConstantResult) 106
+             111:     34(ptr)   AccessChain 103(@patchConstantResult) 33 33
+             112:    6(float)   Load 111
+             114:    113(ptr)   AccessChain 110(@patchConstantOutput.fTessFactor) 33
+                                Store 114 112
+             115:     34(ptr)   AccessChain 103(@patchConstantResult) 33 32
+             116:    6(float)   Load 115
+             117:    113(ptr)   AccessChain 110(@patchConstantOutput.fTessFactor) 32
+                                Store 117 116
+             118:     34(ptr)   AccessChain 103(@patchConstantResult) 33 74
+             119:    6(float)   Load 118
+             120:    113(ptr)   AccessChain 110(@patchConstantOutput.fTessFactor) 74
+                                Store 120 119
+             124:     34(ptr)   AccessChain 103(@patchConstantResult) 32
+             125:    6(float)   Load 124
+             126:    113(ptr)   AccessChain 123(@patchConstantOutput.fInsideTessFactor) 33
+                                Store 126 125
+                                Branch 102
+             102:             Label
+                              Return
+                              FunctionEnd
+17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];):14(HS_Output) Function None 15
+           16(I):     12(ptr) FunctionParameter
+              18:             Label
+           27(O):     26(ptr) Variable Function
+                              Store 27(O) 30
+              35:     34(ptr) AccessChain 16(I) 33 33 10
+              36:    6(float) Load 35
+              37:     34(ptr) AccessChain 16(I) 33 32 10
+              38:    6(float) Load 37
+              39:    6(float) FAdd 36 38
+              40:     34(ptr) AccessChain 27(O) 32
+                              Store 40 39
+              41:14(HS_Output) Load 27(O)
+                              ReturnValue 41
+                              FunctionEnd
+24(@main(struct-HS_Input-vf4-vf41[3];u1;):20(HS_Main_Output) Function None 21
+           22(I):     12(ptr) FunctionParameter
+        23(cpid):     19(ptr) FunctionParameter
+              25:             Label
+      45(output):     44(ptr) Variable Function
+                              Store 45(output) 47
+              49:     48(ptr) AccessChain 45(output) 33
+                              Store 49 46
+              50:20(HS_Main_Output) Load 45(output)
+                              ReturnValue 50
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.hull.5.tesc.out b/Test/baseResults/hlsl.hull.5.tesc.out
new file mode 100644
index 0000000..3a42b52
--- /dev/null
+++ b/Test/baseResults/hlsl.hull.5.tesc.out
@@ -0,0 +1,190 @@
+hlsl.hull.5.tesc
+ERROR: 0:0: '' : unimplemented: PCF input patch without entry point input patch parameter 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+ERROR: node is still EOpNull!
+0:25  Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:25    Function Parameters: 
+0:25      'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?     Sequence
+0:26      Sequence
+0:26        move second child to first child ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:26          'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:26          Constant:
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:28      move second child to first child ( temp float)
+0:28        fInsideTessFactor: direct index for structure ( temp float)
+0:28          'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:28          Constant:
+0:28            1 (const int)
+0:28        add ( temp float)
+0:28          direct index ( temp float)
+0:28            m_Position: direct index for structure ( temp 4-component vector of float)
+0:28              direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              3 (const int)
+0:28          direct index ( temp float)
+0:28            m_Normal: direct index for structure ( temp 4-component vector of float)
+0:28              direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              3 (const int)
+0:30      Branch: Return with expression
+0:30        'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:39  Function Definition: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:39    Function Parameters: 
+0:39      'cpid' ( in uint)
+0:?     Sequence
+0:40      Sequence
+0:40        move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
+0:40          'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:40          Constant:
+0:40            0.000000
+0:40            0.000000
+0:40            0.000000
+0:40            0.000000
+0:41      move second child to first child ( temp 4-component vector of float)
+0:41        m_Position: direct index for structure ( temp 4-component vector of float)
+0:41          'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:41          Constant:
+0:41            0 (const int)
+0:41        Constant:
+0:41          0.000000
+0:41          0.000000
+0:41          0.000000
+0:41          0.000000
+0:42      Branch: Return with expression
+0:42        'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:39  Function Definition: main( ( temp void)
+0:39    Function Parameters: 
+0:?     Sequence
+0:39      move second child to first child ( temp uint)
+0:?         'cpid' ( temp uint)
+0:?         'cpid' ( in uint InvocationID)
+0:39      Sequence
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          direct index ( out 4-component vector of float Position)
+0:?             '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              0 (const int)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            Function Call: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:?               'cpid' ( temp uint)
+0:39            Constant:
+0:39              0 (const int)
+0:?   Linker Objects
+0:?     '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:?     'cpid' ( in uint InvocationID)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = fractional_odd_spacing
+triangle order = cw
+ERROR: node is still EOpNull!
+0:25  Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:25    Function Parameters: 
+0:25      'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:?     Sequence
+0:26      Sequence
+0:26        move second child to first child ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:26          'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:26          Constant:
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:26            0.000000
+0:28      move second child to first child ( temp float)
+0:28        fInsideTessFactor: direct index for structure ( temp float)
+0:28          'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:28          Constant:
+0:28            1 (const int)
+0:28        add ( temp float)
+0:28          direct index ( temp float)
+0:28            m_Position: direct index for structure ( temp 4-component vector of float)
+0:28              direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              3 (const int)
+0:28          direct index ( temp float)
+0:28            m_Normal: direct index for structure ( temp 4-component vector of float)
+0:28              direct index ( temp structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position,  temp 4-component vector of float m_Normal})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              3 (const int)
+0:30      Branch: Return with expression
+0:30        'O' ( temp structure{ temp 3-element array of float fTessFactor,  temp float fInsideTessFactor})
+0:39  Function Definition: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:39    Function Parameters: 
+0:39      'cpid' ( in uint)
+0:?     Sequence
+0:40      Sequence
+0:40        move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
+0:40          'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:40          Constant:
+0:40            0.000000
+0:40            0.000000
+0:40            0.000000
+0:40            0.000000
+0:41      move second child to first child ( temp 4-component vector of float)
+0:41        m_Position: direct index for structure ( temp 4-component vector of float)
+0:41          'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:41          Constant:
+0:41            0 (const int)
+0:41        Constant:
+0:41          0.000000
+0:41          0.000000
+0:41          0.000000
+0:41          0.000000
+0:42      Branch: Return with expression
+0:42        'output' ( temp structure{ temp 4-component vector of float m_Position})
+0:39  Function Definition: main( ( temp void)
+0:39    Function Parameters: 
+0:?     Sequence
+0:39      move second child to first child ( temp uint)
+0:?         'cpid' ( temp uint)
+0:?         'cpid' ( in uint InvocationID)
+0:39      Sequence
+0:39        move second child to first child ( temp 4-component vector of float)
+0:39          direct index ( out 4-component vector of float Position)
+0:?             '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:39            Constant:
+0:39              0 (const int)
+0:39          m_Position: direct index for structure ( temp 4-component vector of float)
+0:39            Function Call: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
+0:?               'cpid' ( temp uint)
+0:39            Constant:
+0:39              0 (const int)
+0:?   Linker Objects
+0:?     '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
+0:?     'cpid' ( in uint InvocationID)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
index 7fbe0cb..24e4aa7 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
@@ -29,7 +29,7 @@
 0:?         'cpid' ( temp uint)
 0:?         'cpid' ( in uint InvocationID)
 0:27      move second child to first child ( temp structure{ temp 3-component vector of float val})
-0:27        indirect index ( temp structure{ temp 3-component vector of float val})
+0:27        indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
 0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
 0:?           'cpid' ( in uint InvocationID)
 0:27        Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
@@ -229,7 +229,7 @@
 0:?         'cpid' ( temp uint)
 0:?         'cpid' ( in uint InvocationID)
 0:27      move second child to first child ( temp structure{ temp 3-component vector of float val})
-0:27        indirect index ( temp structure{ temp 3-component vector of float val})
+0:27        indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
 0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
 0:?           'cpid' ( in uint InvocationID)
 0:27        Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
@@ -396,7 +396,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 124
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
index 32764f3..89582b7 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
@@ -36,7 +36,7 @@
 0:?         'cpid' ( temp uint)
 0:?         'cpid' ( in uint InvocationID)
 0:28      move second child to first child ( temp structure{ temp 3-component vector of float val})
-0:28        indirect index ( temp structure{ temp 3-component vector of float val})
+0:28        indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
 0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
 0:?           'cpid' ( in uint InvocationID)
 0:28        Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
@@ -82,7 +82,7 @@
 0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor,  temp float flInFactor})
 0:?             Function Call: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor,  temp float flInFactor})
 0:?               'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
-0:?               'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:?               'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
 0:?           Sequence
 0:?             move second child to first child ( temp float)
 0:?               direct index ( patch out float TessLevelOuter)
@@ -245,7 +245,7 @@
 0:?         'cpid' ( temp uint)
 0:?         'cpid' ( in uint InvocationID)
 0:28      move second child to first child ( temp structure{ temp 3-component vector of float val})
-0:28        indirect index ( temp structure{ temp 3-component vector of float val})
+0:28        indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
 0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
 0:?           'cpid' ( in uint InvocationID)
 0:28        Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
@@ -291,7 +291,7 @@
 0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor,  temp float flInFactor})
 0:?             Function Call: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor,  temp float flInFactor})
 0:?               'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
-0:?               'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
+0:?               'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
 0:?           Sequence
 0:?             move second child to first child ( temp float)
 0:?               direct index ( patch out float TessLevelOuter)
@@ -414,7 +414,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 126
 
                               Capability Tessellation
@@ -568,7 +568,7 @@
               87:     30(ptr)   AccessChain 67(pcf_out) 81
                                 Store 87 86
               90:          20   Load 67(pcf_out)
-              91:          11   Load 42(i)
+              91:          11   Load 40(i)
               92:22(hs_pcf_t)   FunctionCall 26(PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];) 90 91
                                 Store 89(@patchConstantResult) 92
               98:     97(ptr)   AccessChain 89(@patchConstantResult) 29 29
diff --git a/Test/baseResults/hlsl.hull.void.tesc.out b/Test/baseResults/hlsl.hull.void.tesc.out
index 8dc38fc..68524d9 100644
--- a/Test/baseResults/hlsl.hull.void.tesc.out
+++ b/Test/baseResults/hlsl.hull.void.tesc.out
@@ -29,7 +29,7 @@
 0:?         'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
 0:?         'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
 0:26      move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:26        indirect index ( temp structure{ temp 3-component vector of float cpoint})
+0:26        indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
 0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
 0:?           'InvocationId' ( in uint InvocationID)
 0:26        Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
@@ -85,7 +85,7 @@
 0:?         'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
 0:?         'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
 0:26      move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
-0:26        indirect index ( temp structure{ temp 3-component vector of float cpoint})
+0:26        indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
 0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
 0:?           'InvocationId' ( in uint InvocationID)
 0:26        Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
@@ -108,7 +108,7 @@
 0:?     'InvocationId' ( in uint InvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 55
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out
index a8870b1..356a212 100644
--- a/Test/baseResults/hlsl.identifier.sample.frag.out
+++ b/Test/baseResults/hlsl.identifier.sample.frag.out
@@ -86,7 +86,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out
index eade928..8490324 100755
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -216,7 +216,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 103
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out
index 3eb559b..2da4fae 100755
--- a/Test/baseResults/hlsl.implicitBool.frag.out
+++ b/Test/baseResults/hlsl.implicitBool.frag.out
@@ -334,7 +334,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 140
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out
index 8f31aa0..2a0532e 100755
--- a/Test/baseResults/hlsl.include.vert.out
+++ b/Test/baseResults/hlsl.include.vert.out
@@ -1,6 +1,6 @@
 ../Test/hlsl.include.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inf.vert.out b/Test/baseResults/hlsl.inf.vert.out
index ef551e7..afb0a4f 100755
--- a/Test/baseResults/hlsl.inf.vert.out
+++ b/Test/baseResults/hlsl.inf.vert.out
@@ -112,7 +112,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
index 119d0c5..9b52388 100755
--- a/Test/baseResults/hlsl.init.frag.out
+++ b/Test/baseResults/hlsl.init.frag.out
@@ -331,7 +331,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float a, layout( row_major std140) uniform float b, layout( row_major std140) uniform float c})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 110
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out
index 0b88500..2aff374 100644
--- a/Test/baseResults/hlsl.init2.frag.out
+++ b/Test/baseResults/hlsl.init2.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 112
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out
index 1bc4944..c589f5b 100644
--- a/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/Test/baseResults/hlsl.inoutquals.frag.out
@@ -206,7 +206,7 @@
 0:?     'sampleMask' ( out int SampleMaskIn)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 88
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
index 2aa1229..b04909e 100644
--- a/Test/baseResults/hlsl.intrinsic.frexp.frag.out
+++ b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
@@ -190,7 +190,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.vert.out b/Test/baseResults/hlsl.intrinsic.frexp.vert.out
index 1827bd6..01fc5b2 100644
--- a/Test/baseResults/hlsl.intrinsic.frexp.vert.out
+++ b/Test/baseResults/hlsl.intrinsic.frexp.vert.out
@@ -113,7 +113,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
index f7e3e22..bc8a073 100644
--- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -52,7 +52,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index 09a4a5d..01b6f69 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -716,7 +716,7 @@
 0:?     'inU1' (layout( location=4) in 4-component vector of uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 265
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index 94b4ad7..e365b98 100644
--- a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.double.frag.out b/Test/baseResults/hlsl.intrinsics.double.frag.out
index 020817a..a2e7c5f 100644
--- a/Test/baseResults/hlsl.intrinsics.double.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.double.frag.out
@@ -164,7 +164,7 @@
 0:?     'inU1b' (layout( location=9) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
index 50da716..6612451 100644
--- a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
@@ -154,7 +154,7 @@
 0:?     'inI2' (layout( location=4) flat in 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
index e828d96..5c6f6ba 100644
--- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -260,7 +260,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 103
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.f3216.frag.out b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
index 3ff9ce7..01c08d2 100644
--- a/Test/baseResults/hlsl.intrinsics.f3216.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index ad70545..105800b 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -83,2034 +83,2075 @@
 0:33            0.000000
 0:33        true case
 0:33        Branch: Kill
-0:34      Sequence
-0:34        move second child to first child ( temp float)
-0:34          'r014' ( temp float)
-0:34          cosine ( temp float)
-0:34            'inF0' ( in float)
+0:34      Test condition and select ( temp void)
+0:34        Condition
+0:34        Compare Less Than ( temp bool)
+0:34          'r005' ( temp int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        true case
+0:34        Branch: Kill
 0:35      Sequence
 0:35        move second child to first child ( temp float)
-0:35          'r015' ( temp float)
-0:35          hyp. cosine ( temp float)
+0:35          'r014' ( temp float)
+0:35          cosine ( temp float)
 0:35            'inF0' ( in float)
 0:36      Sequence
-0:36        move second child to first child ( temp int)
-0:36          'r016' ( temp int)
-0:36          bitCount ( temp int)
-0:36            Constant:
-0:36              7 (const int)
+0:36        move second child to first child ( temp float)
+0:36          'r015' ( temp float)
+0:36          hyp. cosine ( temp float)
+0:36            'inF0' ( in float)
 0:37      Sequence
-0:37        move second child to first child ( temp float)
-0:37          'r017' ( temp float)
-0:37          dPdx ( temp float)
-0:37            'inF0' ( in float)
+0:37        move second child to first child ( temp int)
+0:37          'r016' ( temp int)
+0:37          bitCount ( temp int)
+0:37            Constant:
+0:37              7 (const int)
 0:38      Sequence
 0:38        move second child to first child ( temp float)
-0:38          'r018' ( temp float)
-0:38          dPdxCoarse ( temp float)
+0:38          'r017' ( temp float)
+0:38          dPdx ( temp float)
 0:38            'inF0' ( in float)
 0:39      Sequence
 0:39        move second child to first child ( temp float)
-0:39          'r019' ( temp float)
-0:39          dPdxFine ( temp float)
+0:39          'r018' ( temp float)
+0:39          dPdxCoarse ( temp float)
 0:39            'inF0' ( in float)
 0:40      Sequence
 0:40        move second child to first child ( temp float)
-0:40          'r020' ( temp float)
-0:40          dPdy ( temp float)
+0:40          'r019' ( temp float)
+0:40          dPdxFine ( temp float)
 0:40            'inF0' ( in float)
 0:41      Sequence
 0:41        move second child to first child ( temp float)
-0:41          'r021' ( temp float)
-0:41          dPdyCoarse ( temp float)
+0:41          'r020' ( temp float)
+0:41          dPdy ( temp float)
 0:41            'inF0' ( in float)
 0:42      Sequence
 0:42        move second child to first child ( temp float)
-0:42          'r022' ( temp float)
-0:42          dPdyFine ( temp float)
+0:42          'r021' ( temp float)
+0:42          dPdyCoarse ( temp float)
 0:42            'inF0' ( in float)
 0:43      Sequence
 0:43        move second child to first child ( temp float)
-0:43          'r023' ( temp float)
-0:43          degrees ( temp float)
+0:43          'r022' ( temp float)
+0:43          dPdyFine ( temp float)
 0:43            'inF0' ( in float)
-0:47      Sequence
-0:47        move second child to first child ( temp float)
-0:47          'r027' ( temp float)
-0:47          exp ( temp float)
-0:47            'inF0' ( in float)
+0:44      Sequence
+0:44        move second child to first child ( temp float)
+0:44          'r023' ( temp float)
+0:44          degrees ( temp float)
+0:44            'inF0' ( in float)
 0:48      Sequence
 0:48        move second child to first child ( temp float)
-0:48          'r028' ( temp float)
-0:48          exp2 ( temp float)
+0:48          'r027' ( temp float)
+0:48          exp ( temp float)
 0:48            'inF0' ( in float)
 0:49      Sequence
-0:49        move second child to first child ( temp uint)
-0:49          'r029' ( temp uint)
-0:49          Convert int to uint ( temp uint)
-0:49            findMSB ( temp int)
-0:49              Constant:
-0:49                7 (const int)
+0:49        move second child to first child ( temp float)
+0:49          'r028' ( temp float)
+0:49          exp2 ( temp float)
+0:49            'inF0' ( in float)
 0:50      Sequence
 0:50        move second child to first child ( temp uint)
-0:50          'r030' ( temp uint)
+0:50          'r029' ( temp uint)
 0:50          Convert int to uint ( temp uint)
-0:50            findLSB ( temp int)
+0:50            findMSB ( temp int)
 0:50              Constant:
 0:50                7 (const int)
 0:51      Sequence
-0:51        move second child to first child ( temp float)
-0:51          'r031' ( temp float)
-0:51          Floor ( temp float)
-0:51            'inF0' ( in float)
-0:53      Sequence
-0:53        move second child to first child ( temp float)
-0:53          'r033' ( temp float)
-0:53          mod ( temp float)
-0:53            'inF0' ( in float)
-0:53            'inF1' ( in float)
+0:51        move second child to first child ( temp uint)
+0:51          'r030' ( temp uint)
+0:51          Convert int to uint ( temp uint)
+0:51            findLSB ( temp int)
+0:51              Constant:
+0:51                7 (const int)
+0:52      Sequence
+0:52        move second child to first child ( temp float)
+0:52          'r031' ( temp float)
+0:52          Floor ( temp float)
+0:52            'inF0' ( in float)
 0:54      Sequence
 0:54        move second child to first child ( temp float)
-0:54          'r034' ( temp float)
-0:54          Fraction ( temp float)
+0:54          'r033' ( temp float)
+0:54          mod ( temp float)
 0:54            'inF0' ( in float)
+0:54            'inF1' ( in float)
 0:55      Sequence
 0:55        move second child to first child ( temp float)
-0:55          'r036' ( temp float)
-0:55          fwidth ( temp float)
+0:55          'r034' ( temp float)
+0:55          Fraction ( temp float)
 0:55            'inF0' ( in float)
 0:56      Sequence
-0:56        move second child to first child ( temp bool)
-0:56          'r037' ( temp bool)
-0:56          isinf ( temp bool)
+0:56        move second child to first child ( temp float)
+0:56          'r036' ( temp float)
+0:56          fwidth ( temp float)
 0:56            'inF0' ( in float)
 0:57      Sequence
 0:57        move second child to first child ( temp bool)
-0:57          'r038' ( temp bool)
-0:57          isnan ( temp bool)
+0:57          'r037' ( temp bool)
+0:57          isinf ( temp bool)
 0:57            'inF0' ( in float)
 0:58      Sequence
-0:58        move second child to first child ( temp float)
-0:58          'r039' ( temp float)
-0:58          ldexp ( temp float)
+0:58        move second child to first child ( temp bool)
+0:58          'r038' ( temp bool)
+0:58          isnan ( temp bool)
 0:58            'inF0' ( in float)
-0:58            'inF1' ( in float)
 0:59      Sequence
 0:59        move second child to first child ( temp float)
-0:59          'r039a' ( temp float)
-0:59          mix ( temp float)
+0:59          'r039' ( temp float)
+0:59          ldexp ( temp float)
 0:59            'inF0' ( in float)
 0:59            'inF1' ( in float)
-0:59            'inF2' ( in float)
 0:60      Sequence
 0:60        move second child to first child ( temp float)
-0:60          'r040' ( temp float)
-0:60          log ( temp float)
+0:60          'r039a' ( temp float)
+0:60          mix ( temp float)
 0:60            'inF0' ( in float)
+0:60            'inF1' ( in float)
+0:60            'inF2' ( in float)
 0:61      Sequence
 0:61        move second child to first child ( temp float)
-0:61          'r041' ( temp float)
-0:61          component-wise multiply ( temp float)
-0:61            log2 ( temp float)
-0:61              'inF0' ( in float)
-0:61            Constant:
-0:61              0.301030
+0:61          'r040' ( temp float)
+0:61          log ( temp float)
+0:61            'inF0' ( in float)
 0:62      Sequence
 0:62        move second child to first child ( temp float)
-0:62          'r042' ( temp float)
-0:62          log2 ( temp float)
-0:62            'inF0' ( in float)
+0:62          'r041' ( temp float)
+0:62          component-wise multiply ( temp float)
+0:62            log2 ( temp float)
+0:62              'inF0' ( in float)
+0:62            Constant:
+0:62              0.301030
 0:63      Sequence
 0:63        move second child to first child ( temp float)
-0:63          'r043' ( temp float)
-0:63          max ( temp float)
+0:63          'r042' ( temp float)
+0:63          log2 ( temp float)
 0:63            'inF0' ( in float)
-0:63            'inF1' ( in float)
 0:64      Sequence
 0:64        move second child to first child ( temp float)
-0:64          'r044' ( temp float)
-0:64          min ( temp float)
+0:64          'r043' ( temp float)
+0:64          max ( temp float)
 0:64            'inF0' ( in float)
 0:64            'inF1' ( in float)
 0:65      Sequence
 0:65        move second child to first child ( temp float)
-0:65          'r045' ( temp float)
-0:65          pow ( temp float)
+0:65          'r044' ( temp float)
+0:65          min ( temp float)
 0:65            'inF0' ( in float)
 0:65            'inF1' ( in float)
 0:66      Sequence
 0:66        move second child to first child ( temp float)
-0:66          'r046' ( temp float)
-0:66          radians ( temp float)
+0:66          'r045' ( temp float)
+0:66          pow ( temp float)
 0:66            'inF0' ( in float)
+0:66            'inF1' ( in float)
 0:67      Sequence
 0:67        move second child to first child ( temp float)
-0:67          'r047' ( temp float)
-0:67          divide ( temp float)
-0:67            Constant:
-0:67              1.000000
+0:67          'r046' ( temp float)
+0:67          radians ( temp float)
 0:67            'inF0' ( in float)
 0:68      Sequence
-0:68        move second child to first child ( temp uint)
-0:68          'r048' ( temp uint)
-0:68          Convert int to uint ( temp uint)
-0:68            bitFieldReverse ( temp int)
-0:68              Constant:
-0:68                2 (const int)
+0:68        move second child to first child ( temp float)
+0:68          'r047' ( temp float)
+0:68          divide ( temp float)
+0:68            Constant:
+0:68              1.000000
+0:68            'inF0' ( in float)
 0:69      Sequence
-0:69        move second child to first child ( temp float)
-0:69          'r049' ( temp float)
-0:69          roundEven ( temp float)
-0:69            'inF0' ( in float)
+0:69        move second child to first child ( temp uint)
+0:69          'r048' ( temp uint)
+0:69          Convert int to uint ( temp uint)
+0:69            bitFieldReverse ( temp int)
+0:69              Constant:
+0:69                2 (const int)
 0:70      Sequence
 0:70        move second child to first child ( temp float)
-0:70          'r050' ( temp float)
-0:70          inverse sqrt ( temp float)
+0:70          'r049' ( temp float)
+0:70          roundEven ( temp float)
 0:70            'inF0' ( in float)
 0:71      Sequence
 0:71        move second child to first child ( temp float)
-0:71          'r051' ( temp float)
-0:71          clamp ( temp float)
+0:71          'r050' ( temp float)
+0:71          inverse sqrt ( temp float)
 0:71            'inF0' ( in float)
-0:71            Constant:
-0:71              0.000000
-0:71            Constant:
-0:71              1.000000
 0:72      Sequence
 0:72        move second child to first child ( temp float)
-0:72          'r052' ( temp float)
-0:72          Sign ( temp float)
+0:72          'r051' ( temp float)
+0:72          clamp ( temp float)
 0:72            'inF0' ( in float)
+0:72            Constant:
+0:72              0.000000
+0:72            Constant:
+0:72              1.000000
 0:73      Sequence
 0:73        move second child to first child ( temp float)
-0:73          'r053' ( temp float)
-0:73          sine ( temp float)
+0:73          'r052' ( temp float)
+0:73          Sign ( temp float)
 0:73            'inF0' ( in float)
 0:74      Sequence
 0:74        move second child to first child ( temp float)
-0:74          'inF1' ( in float)
+0:74          'r053' ( temp float)
 0:74          sine ( temp float)
 0:74            'inF0' ( in float)
-0:74        move second child to first child ( temp float)
-0:74          'inF2' ( in float)
-0:74          cosine ( temp float)
-0:74            'inF0' ( in float)
 0:75      Sequence
 0:75        move second child to first child ( temp float)
-0:75          'r055' ( temp float)
-0:75          hyp. sine ( temp float)
+0:75          'inF1' ( in float)
+0:75          sine ( temp float)
+0:75            'inF0' ( in float)
+0:75        move second child to first child ( temp float)
+0:75          'inF2' ( in float)
+0:75          cosine ( temp float)
 0:75            'inF0' ( in float)
 0:76      Sequence
 0:76        move second child to first child ( temp float)
-0:76          'r056' ( temp float)
-0:76          smoothstep ( temp float)
+0:76          'r055' ( temp float)
+0:76          hyp. sine ( temp float)
 0:76            'inF0' ( in float)
-0:76            'inF1' ( in float)
-0:76            'inF2' ( in float)
 0:77      Sequence
 0:77        move second child to first child ( temp float)
-0:77          'r057' ( temp float)
-0:77          sqrt ( temp float)
+0:77          'r056' ( temp float)
+0:77          smoothstep ( temp float)
 0:77            'inF0' ( in float)
+0:77            'inF1' ( in float)
+0:77            'inF2' ( in float)
 0:78      Sequence
 0:78        move second child to first child ( temp float)
-0:78          'r058' ( temp float)
-0:78          step ( temp float)
+0:78          'r057' ( temp float)
+0:78          sqrt ( temp float)
 0:78            'inF0' ( in float)
-0:78            'inF1' ( in float)
 0:79      Sequence
 0:79        move second child to first child ( temp float)
-0:79          'r059' ( temp float)
-0:79          tangent ( temp float)
+0:79          'r058' ( temp float)
+0:79          step ( temp float)
 0:79            'inF0' ( in float)
+0:79            'inF1' ( in float)
 0:80      Sequence
 0:80        move second child to first child ( temp float)
-0:80          'r060' ( temp float)
-0:80          hyp. tangent ( temp float)
+0:80          'r059' ( temp float)
+0:80          tangent ( temp float)
 0:80            'inF0' ( in float)
-0:82      Sequence
-0:82        move second child to first child ( temp float)
-0:82          'r061' ( temp float)
-0:82          trunc ( temp float)
-0:82            'inF0' ( in float)
-0:84      Branch: Return with expression
-0:84        Constant:
-0:84          0.000000
-0:88  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:88    Function Parameters: 
-0:88      'inF0' ( in 1-component vector of float)
-0:88      'inF1' ( in 1-component vector of float)
-0:88      'inF2' ( in 1-component vector of float)
+0:81      Sequence
+0:81        move second child to first child ( temp float)
+0:81          'r060' ( temp float)
+0:81          hyp. tangent ( temp float)
+0:81            'inF0' ( in float)
+0:83      Sequence
+0:83        move second child to first child ( temp float)
+0:83          'r061' ( temp float)
+0:83          trunc ( temp float)
+0:83            'inF0' ( in float)
+0:85      Branch: Return with expression
+0:85        Constant:
+0:85          0.000000
+0:89  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:89    Function Parameters: 
+0:89      'inF0' ( in 1-component vector of float)
+0:89      'inF1' ( in 1-component vector of float)
+0:89      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:90      Branch: Return with expression
-0:90        Constant:
-0:90          0.000000
-0:94  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:94    Function Parameters: 
-0:94      'inF0' ( in 2-component vector of float)
-0:94      'inF1' ( in 2-component vector of float)
-0:94      'inF2' ( in 2-component vector of float)
-0:94      'inU0' ( in 2-component vector of uint)
-0:94      'inU1' ( in 2-component vector of uint)
+0:91      Branch: Return with expression
+0:91        Constant:
+0:91          0.000000
+0:95  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:95    Function Parameters: 
+0:95      'inF0' ( in 2-component vector of float)
+0:95      'inF1' ( in 2-component vector of float)
+0:95      'inF2' ( in 2-component vector of float)
+0:95      'inU0' ( in 2-component vector of uint)
+0:95      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:97      Sequence
-0:97        move second child to first child ( temp bool)
-0:97          'r000' ( temp bool)
-0:97          all ( temp bool)
-0:97            Convert float to bool ( temp 2-component vector of bool)
-0:97              'inF0' ( in 2-component vector of float)
 0:98      Sequence
-0:98        move second child to first child ( temp 2-component vector of float)
-0:98          'r001' ( temp 2-component vector of float)
-0:98          Absolute value ( temp 2-component vector of float)
-0:98            'inF0' ( in 2-component vector of float)
+0:98        move second child to first child ( temp bool)
+0:98          'r000' ( temp bool)
+0:98          all ( temp bool)
+0:98            Convert float to bool ( temp 2-component vector of bool)
+0:98              'inF0' ( in 2-component vector of float)
 0:99      Sequence
 0:99        move second child to first child ( temp 2-component vector of float)
-0:99          'r002' ( temp 2-component vector of float)
-0:99          arc cosine ( temp 2-component vector of float)
+0:99          'r001' ( temp 2-component vector of float)
+0:99          Absolute value ( temp 2-component vector of float)
 0:99            'inF0' ( in 2-component vector of float)
 0:100      Sequence
-0:100        move second child to first child ( temp bool)
-0:100          'r003' ( temp bool)
-0:100          any ( temp bool)
-0:100            Convert float to bool ( temp 2-component vector of bool)
-0:100              'inF0' ( in 2-component vector of float)
+0:100        move second child to first child ( temp 2-component vector of float)
+0:100          'r002' ( temp 2-component vector of float)
+0:100          arc cosine ( temp 2-component vector of float)
+0:100            'inF0' ( in 2-component vector of float)
 0:101      Sequence
-0:101        move second child to first child ( temp 2-component vector of float)
-0:101          'r004' ( temp 2-component vector of float)
-0:101          arc sine ( temp 2-component vector of float)
-0:101            'inF0' ( in 2-component vector of float)
+0:101        move second child to first child ( temp bool)
+0:101          'r003' ( temp bool)
+0:101          any ( temp bool)
+0:101            Convert float to bool ( temp 2-component vector of bool)
+0:101              'inF0' ( in 2-component vector of float)
 0:102      Sequence
-0:102        move second child to first child ( temp 2-component vector of int)
-0:102          'r005' ( temp 2-component vector of int)
-0:102          floatBitsToInt ( temp 2-component vector of int)
+0:102        move second child to first child ( temp 2-component vector of float)
+0:102          'r004' ( temp 2-component vector of float)
+0:102          arc sine ( temp 2-component vector of float)
 0:102            'inF0' ( in 2-component vector of float)
 0:103      Sequence
-0:103        move second child to first child ( temp 2-component vector of uint)
-0:103          'r006' ( temp 2-component vector of uint)
-0:103          floatBitsToUint ( temp 2-component vector of uint)
+0:103        move second child to first child ( temp 2-component vector of int)
+0:103          'r005' ( temp 2-component vector of int)
+0:103          floatBitsToInt ( temp 2-component vector of int)
 0:103            'inF0' ( in 2-component vector of float)
 0:104      Sequence
-0:104        move second child to first child ( temp 2-component vector of float)
-0:104          'r007' ( temp 2-component vector of float)
-0:104          intBitsToFloat ( temp 2-component vector of float)
-0:104            'inU0' ( in 2-component vector of uint)
-0:106      Sequence
-0:106        move second child to first child ( temp 2-component vector of float)
-0:106          'r009' ( temp 2-component vector of float)
-0:106          arc tangent ( temp 2-component vector of float)
-0:106            'inF0' ( in 2-component vector of float)
+0:104        move second child to first child ( temp 2-component vector of uint)
+0:104          'r006' ( temp 2-component vector of uint)
+0:104          floatBitsToUint ( temp 2-component vector of uint)
+0:104            'inF0' ( in 2-component vector of float)
+0:105      Sequence
+0:105        move second child to first child ( temp 2-component vector of float)
+0:105          'r007' ( temp 2-component vector of float)
+0:105          intBitsToFloat ( temp 2-component vector of float)
+0:105            'inU0' ( in 2-component vector of uint)
 0:107      Sequence
 0:107        move second child to first child ( temp 2-component vector of float)
-0:107          'r010' ( temp 2-component vector of float)
+0:107          'r009' ( temp 2-component vector of float)
 0:107          arc tangent ( temp 2-component vector of float)
 0:107            'inF0' ( in 2-component vector of float)
-0:107            'inF1' ( in 2-component vector of float)
 0:108      Sequence
 0:108        move second child to first child ( temp 2-component vector of float)
-0:108          'r011' ( temp 2-component vector of float)
-0:108          Ceiling ( temp 2-component vector of float)
+0:108          'r010' ( temp 2-component vector of float)
+0:108          arc tangent ( temp 2-component vector of float)
 0:108            'inF0' ( in 2-component vector of float)
+0:108            'inF1' ( in 2-component vector of float)
 0:109      Sequence
 0:109        move second child to first child ( temp 2-component vector of float)
-0:109          'r012' ( temp 2-component vector of float)
-0:109          clamp ( temp 2-component vector of float)
+0:109          'r011' ( temp 2-component vector of float)
+0:109          Ceiling ( temp 2-component vector of float)
 0:109            'inF0' ( in 2-component vector of float)
-0:109            'inF1' ( in 2-component vector of float)
-0:109            'inF2' ( in 2-component vector of float)
-0:110      Test condition and select ( temp void)
-0:110        Condition
-0:110        any ( temp bool)
-0:110          Compare Less Than ( temp 2-component vector of bool)
+0:110      Sequence
+0:110        move second child to first child ( temp 2-component vector of float)
+0:110          'r012' ( temp 2-component vector of float)
+0:110          clamp ( temp 2-component vector of float)
 0:110            'inF0' ( in 2-component vector of float)
-0:110            Constant:
-0:110              0.000000
-0:110              0.000000
-0:110        true case
-0:110        Branch: Kill
-0:111      Sequence
-0:111        move second child to first child ( temp 2-component vector of float)
-0:111          'r013' ( temp 2-component vector of float)
-0:111          cosine ( temp 2-component vector of float)
+0:110            'inF1' ( in 2-component vector of float)
+0:110            'inF2' ( in 2-component vector of float)
+0:111      Test condition and select ( temp void)
+0:111        Condition
+0:111        any ( temp bool)
+0:111          Compare Less Than ( temp 2-component vector of bool)
 0:111            'inF0' ( in 2-component vector of float)
-0:112      Sequence
-0:112        move second child to first child ( temp 2-component vector of float)
-0:112          'r015' ( temp 2-component vector of float)
-0:112          hyp. cosine ( temp 2-component vector of float)
-0:112            'inF0' ( in 2-component vector of float)
+0:111            Constant:
+0:111              0.000000
+0:111              0.000000
+0:111        true case
+0:111        Branch: Kill
+0:112      Test condition and select ( temp void)
+0:112        Condition
+0:112        any ( temp bool)
+0:112          Compare Less Than ( temp 2-component vector of bool)
+0:112            'inU0' ( in 2-component vector of uint)
+0:112            Constant:
+0:112              0.000000
+0:112              0.000000
+0:112        true case
+0:112        Branch: Kill
 0:113      Sequence
-0:113        move second child to first child ( temp 2-component vector of int)
-0:113          'r016' ( temp 2-component vector of int)
+0:113        move second child to first child ( temp 2-component vector of float)
+0:113          'r013' ( temp 2-component vector of float)
+0:113          cosine ( temp 2-component vector of float)
+0:113            'inF0' ( in 2-component vector of float)
+0:114      Sequence
+0:114        move second child to first child ( temp 2-component vector of float)
+0:114          'r015' ( temp 2-component vector of float)
+0:114          hyp. cosine ( temp 2-component vector of float)
+0:114            'inF0' ( in 2-component vector of float)
+0:115      Sequence
+0:115        move second child to first child ( temp 2-component vector of int)
+0:115          'r016' ( temp 2-component vector of int)
 0:?           bitCount ( temp 2-component vector of int)
 0:?             Constant:
 0:?               7 (const int)
 0:?               3 (const int)
-0:114      Sequence
-0:114        move second child to first child ( temp 2-component vector of float)
-0:114          'r017' ( temp 2-component vector of float)
-0:114          dPdx ( temp 2-component vector of float)
-0:114            'inF0' ( in 2-component vector of float)
-0:115      Sequence
-0:115        move second child to first child ( temp 2-component vector of float)
-0:115          'r018' ( temp 2-component vector of float)
-0:115          dPdxCoarse ( temp 2-component vector of float)
-0:115            'inF0' ( in 2-component vector of float)
 0:116      Sequence
 0:116        move second child to first child ( temp 2-component vector of float)
-0:116          'r019' ( temp 2-component vector of float)
-0:116          dPdxFine ( temp 2-component vector of float)
+0:116          'r017' ( temp 2-component vector of float)
+0:116          dPdx ( temp 2-component vector of float)
 0:116            'inF0' ( in 2-component vector of float)
 0:117      Sequence
 0:117        move second child to first child ( temp 2-component vector of float)
-0:117          'r020' ( temp 2-component vector of float)
-0:117          dPdy ( temp 2-component vector of float)
+0:117          'r018' ( temp 2-component vector of float)
+0:117          dPdxCoarse ( temp 2-component vector of float)
 0:117            'inF0' ( in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child ( temp 2-component vector of float)
-0:118          'r021' ( temp 2-component vector of float)
-0:118          dPdyCoarse ( temp 2-component vector of float)
+0:118          'r019' ( temp 2-component vector of float)
+0:118          dPdxFine ( temp 2-component vector of float)
 0:118            'inF0' ( in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child ( temp 2-component vector of float)
-0:119          'r022' ( temp 2-component vector of float)
-0:119          dPdyFine ( temp 2-component vector of float)
+0:119          'r020' ( temp 2-component vector of float)
+0:119          dPdy ( temp 2-component vector of float)
 0:119            'inF0' ( in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child ( temp 2-component vector of float)
-0:120          'r023' ( temp 2-component vector of float)
-0:120          degrees ( temp 2-component vector of float)
+0:120          'r021' ( temp 2-component vector of float)
+0:120          dPdyCoarse ( temp 2-component vector of float)
 0:120            'inF0' ( in 2-component vector of float)
-0:124      Sequence
-0:124        move second child to first child ( temp float)
-0:124          'r026' ( temp float)
-0:124          distance ( temp float)
-0:124            'inF0' ( in 2-component vector of float)
-0:124            'inF1' ( in 2-component vector of float)
-0:125      Sequence
-0:125        move second child to first child ( temp float)
-0:125          'r027' ( temp float)
-0:125          dot-product ( temp float)
-0:125            'inF0' ( in 2-component vector of float)
-0:125            'inF1' ( in 2-component vector of float)
-0:129      Sequence
-0:129        move second child to first child ( temp 2-component vector of float)
-0:129          'r028' ( temp 2-component vector of float)
-0:129          exp ( temp 2-component vector of float)
-0:129            'inF0' ( in 2-component vector of float)
-0:130      Sequence
-0:130        move second child to first child ( temp 2-component vector of float)
-0:130          'r029' ( temp 2-component vector of float)
-0:130          exp2 ( temp 2-component vector of float)
-0:130            'inF0' ( in 2-component vector of float)
+0:121      Sequence
+0:121        move second child to first child ( temp 2-component vector of float)
+0:121          'r022' ( temp 2-component vector of float)
+0:121          dPdyFine ( temp 2-component vector of float)
+0:121            'inF0' ( in 2-component vector of float)
+0:122      Sequence
+0:122        move second child to first child ( temp 2-component vector of float)
+0:122          'r023' ( temp 2-component vector of float)
+0:122          degrees ( temp 2-component vector of float)
+0:122            'inF0' ( in 2-component vector of float)
+0:126      Sequence
+0:126        move second child to first child ( temp float)
+0:126          'r026' ( temp float)
+0:126          distance ( temp float)
+0:126            'inF0' ( in 2-component vector of float)
+0:126            'inF1' ( in 2-component vector of float)
+0:127      Sequence
+0:127        move second child to first child ( temp float)
+0:127          'r027' ( temp float)
+0:127          dot-product ( temp float)
+0:127            'inF0' ( in 2-component vector of float)
+0:127            'inF1' ( in 2-component vector of float)
 0:131      Sequence
 0:131        move second child to first child ( temp 2-component vector of float)
-0:131          'r030' ( temp 2-component vector of float)
-0:131          face-forward ( temp 2-component vector of float)
+0:131          'r028' ( temp 2-component vector of float)
+0:131          exp ( temp 2-component vector of float)
 0:131            'inF0' ( in 2-component vector of float)
-0:131            'inF1' ( in 2-component vector of float)
-0:131            'inF2' ( in 2-component vector of float)
 0:132      Sequence
-0:132        move second child to first child ( temp 2-component vector of uint)
-0:132          'r031' ( temp 2-component vector of uint)
+0:132        move second child to first child ( temp 2-component vector of float)
+0:132          'r029' ( temp 2-component vector of float)
+0:132          exp2 ( temp 2-component vector of float)
+0:132            'inF0' ( in 2-component vector of float)
+0:133      Sequence
+0:133        move second child to first child ( temp 2-component vector of float)
+0:133          'r030' ( temp 2-component vector of float)
+0:133          face-forward ( temp 2-component vector of float)
+0:133            'inF0' ( in 2-component vector of float)
+0:133            'inF1' ( in 2-component vector of float)
+0:133            'inF2' ( in 2-component vector of float)
+0:134      Sequence
+0:134        move second child to first child ( temp 2-component vector of uint)
+0:134          'r031' ( temp 2-component vector of uint)
 0:?           findMSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:133      Sequence
-0:133        move second child to first child ( temp 2-component vector of uint)
-0:133          'r032' ( temp 2-component vector of uint)
+0:135      Sequence
+0:135        move second child to first child ( temp 2-component vector of uint)
+0:135          'r032' ( temp 2-component vector of uint)
 0:?           findLSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:134      Sequence
-0:134        move second child to first child ( temp 2-component vector of float)
-0:134          'r033' ( temp 2-component vector of float)
-0:134          Floor ( temp 2-component vector of float)
-0:134            'inF0' ( in 2-component vector of float)
 0:136      Sequence
 0:136        move second child to first child ( temp 2-component vector of float)
-0:136          'r035' ( temp 2-component vector of float)
-0:136          mod ( temp 2-component vector of float)
+0:136          'r033' ( temp 2-component vector of float)
+0:136          Floor ( temp 2-component vector of float)
 0:136            'inF0' ( in 2-component vector of float)
-0:136            'inF1' ( in 2-component vector of float)
-0:137      Sequence
-0:137        move second child to first child ( temp 2-component vector of float)
-0:137          'r036' ( temp 2-component vector of float)
-0:137          Fraction ( temp 2-component vector of float)
-0:137            'inF0' ( in 2-component vector of float)
 0:138      Sequence
 0:138        move second child to first child ( temp 2-component vector of float)
-0:138          'r038' ( temp 2-component vector of float)
-0:138          fwidth ( temp 2-component vector of float)
+0:138          'r035' ( temp 2-component vector of float)
+0:138          mod ( temp 2-component vector of float)
 0:138            'inF0' ( in 2-component vector of float)
+0:138            'inF1' ( in 2-component vector of float)
 0:139      Sequence
-0:139        move second child to first child ( temp 2-component vector of bool)
-0:139          'r039' ( temp 2-component vector of bool)
-0:139          isinf ( temp 2-component vector of bool)
+0:139        move second child to first child ( temp 2-component vector of float)
+0:139          'r036' ( temp 2-component vector of float)
+0:139          Fraction ( temp 2-component vector of float)
 0:139            'inF0' ( in 2-component vector of float)
 0:140      Sequence
-0:140        move second child to first child ( temp 2-component vector of bool)
-0:140          'r040' ( temp 2-component vector of bool)
-0:140          isnan ( temp 2-component vector of bool)
+0:140        move second child to first child ( temp 2-component vector of float)
+0:140          'r038' ( temp 2-component vector of float)
+0:140          fwidth ( temp 2-component vector of float)
 0:140            'inF0' ( in 2-component vector of float)
 0:141      Sequence
-0:141        move second child to first child ( temp 2-component vector of float)
-0:141          'r041' ( temp 2-component vector of float)
-0:141          ldexp ( temp 2-component vector of float)
+0:141        move second child to first child ( temp 2-component vector of bool)
+0:141          'r039' ( temp 2-component vector of bool)
+0:141          isinf ( temp 2-component vector of bool)
 0:141            'inF0' ( in 2-component vector of float)
-0:141            'inF1' ( in 2-component vector of float)
 0:142      Sequence
-0:142        move second child to first child ( temp 2-component vector of float)
-0:142          'r039a' ( temp 2-component vector of float)
-0:142          mix ( temp 2-component vector of float)
+0:142        move second child to first child ( temp 2-component vector of bool)
+0:142          'r040' ( temp 2-component vector of bool)
+0:142          isnan ( temp 2-component vector of bool)
 0:142            'inF0' ( in 2-component vector of float)
-0:142            'inF1' ( in 2-component vector of float)
-0:142            'inF2' ( in 2-component vector of float)
 0:143      Sequence
-0:143        move second child to first child ( temp float)
-0:143          'r042' ( temp float)
-0:143          length ( temp float)
+0:143        move second child to first child ( temp 2-component vector of float)
+0:143          'r041' ( temp 2-component vector of float)
+0:143          ldexp ( temp 2-component vector of float)
 0:143            'inF0' ( in 2-component vector of float)
+0:143            'inF1' ( in 2-component vector of float)
 0:144      Sequence
 0:144        move second child to first child ( temp 2-component vector of float)
-0:144          'r043' ( temp 2-component vector of float)
-0:144          log ( temp 2-component vector of float)
+0:144          'r039a' ( temp 2-component vector of float)
+0:144          mix ( temp 2-component vector of float)
 0:144            'inF0' ( in 2-component vector of float)
+0:144            'inF1' ( in 2-component vector of float)
+0:144            'inF2' ( in 2-component vector of float)
 0:145      Sequence
-0:145        move second child to first child ( temp 2-component vector of float)
-0:145          'r044' ( temp 2-component vector of float)
-0:145          vector-scale ( temp 2-component vector of float)
-0:145            log2 ( temp 2-component vector of float)
-0:145              'inF0' ( in 2-component vector of float)
-0:145            Constant:
-0:145              0.301030
+0:145        move second child to first child ( temp float)
+0:145          'r042' ( temp float)
+0:145          length ( temp float)
+0:145            'inF0' ( in 2-component vector of float)
 0:146      Sequence
 0:146        move second child to first child ( temp 2-component vector of float)
-0:146          'r045' ( temp 2-component vector of float)
-0:146          log2 ( temp 2-component vector of float)
+0:146          'r043' ( temp 2-component vector of float)
+0:146          log ( temp 2-component vector of float)
 0:146            'inF0' ( in 2-component vector of float)
 0:147      Sequence
 0:147        move second child to first child ( temp 2-component vector of float)
-0:147          'r046' ( temp 2-component vector of float)
-0:147          max ( temp 2-component vector of float)
-0:147            'inF0' ( in 2-component vector of float)
-0:147            'inF1' ( in 2-component vector of float)
+0:147          'r044' ( temp 2-component vector of float)
+0:147          vector-scale ( temp 2-component vector of float)
+0:147            log2 ( temp 2-component vector of float)
+0:147              'inF0' ( in 2-component vector of float)
+0:147            Constant:
+0:147              0.301030
 0:148      Sequence
 0:148        move second child to first child ( temp 2-component vector of float)
-0:148          'r047' ( temp 2-component vector of float)
-0:148          min ( temp 2-component vector of float)
+0:148          'r045' ( temp 2-component vector of float)
+0:148          log2 ( temp 2-component vector of float)
 0:148            'inF0' ( in 2-component vector of float)
-0:148            'inF1' ( in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child ( temp 2-component vector of float)
-0:149          'r048' ( temp 2-component vector of float)
-0:149          normalize ( temp 2-component vector of float)
+0:149          'r046' ( temp 2-component vector of float)
+0:149          max ( temp 2-component vector of float)
 0:149            'inF0' ( in 2-component vector of float)
+0:149            'inF1' ( in 2-component vector of float)
 0:150      Sequence
 0:150        move second child to first child ( temp 2-component vector of float)
-0:150          'r049' ( temp 2-component vector of float)
-0:150          pow ( temp 2-component vector of float)
+0:150          'r047' ( temp 2-component vector of float)
+0:150          min ( temp 2-component vector of float)
 0:150            'inF0' ( in 2-component vector of float)
 0:150            'inF1' ( in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child ( temp 2-component vector of float)
-0:151          'r050' ( temp 2-component vector of float)
-0:151          radians ( temp 2-component vector of float)
+0:151          'r048' ( temp 2-component vector of float)
+0:151          normalize ( temp 2-component vector of float)
 0:151            'inF0' ( in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child ( temp 2-component vector of float)
-0:152          'r051' ( temp 2-component vector of float)
-0:152          divide ( temp 2-component vector of float)
-0:152            Constant:
-0:152              1.000000
+0:152          'r049' ( temp 2-component vector of float)
+0:152          pow ( temp 2-component vector of float)
 0:152            'inF0' ( in 2-component vector of float)
+0:152            'inF1' ( in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child ( temp 2-component vector of float)
-0:153          'r052' ( temp 2-component vector of float)
-0:153          reflect ( temp 2-component vector of float)
+0:153          'r050' ( temp 2-component vector of float)
+0:153          radians ( temp 2-component vector of float)
 0:153            'inF0' ( in 2-component vector of float)
-0:153            'inF1' ( in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child ( temp 2-component vector of float)
-0:154          'r053' ( temp 2-component vector of float)
-0:154          refract ( temp 2-component vector of float)
-0:154            'inF0' ( in 2-component vector of float)
-0:154            'inF1' ( in 2-component vector of float)
+0:154          'r051' ( temp 2-component vector of float)
+0:154          divide ( temp 2-component vector of float)
 0:154            Constant:
-0:154              2.000000
+0:154              1.000000
+0:154            'inF0' ( in 2-component vector of float)
 0:155      Sequence
-0:155        move second child to first child ( temp 2-component vector of uint)
-0:155          'r054' ( temp 2-component vector of uint)
+0:155        move second child to first child ( temp 2-component vector of float)
+0:155          'r052' ( temp 2-component vector of float)
+0:155          reflect ( temp 2-component vector of float)
+0:155            'inF0' ( in 2-component vector of float)
+0:155            'inF1' ( in 2-component vector of float)
+0:156      Sequence
+0:156        move second child to first child ( temp 2-component vector of float)
+0:156          'r053' ( temp 2-component vector of float)
+0:156          refract ( temp 2-component vector of float)
+0:156            'inF0' ( in 2-component vector of float)
+0:156            'inF1' ( in 2-component vector of float)
+0:156            Constant:
+0:156              2.000000
+0:157      Sequence
+0:157        move second child to first child ( temp 2-component vector of uint)
+0:157          'r054' ( temp 2-component vector of uint)
 0:?           bitFieldReverse ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
-0:156      Sequence
-0:156        move second child to first child ( temp 2-component vector of float)
-0:156          'r055' ( temp 2-component vector of float)
-0:156          roundEven ( temp 2-component vector of float)
-0:156            'inF0' ( in 2-component vector of float)
-0:157      Sequence
-0:157        move second child to first child ( temp 2-component vector of float)
-0:157          'r056' ( temp 2-component vector of float)
-0:157          inverse sqrt ( temp 2-component vector of float)
-0:157            'inF0' ( in 2-component vector of float)
 0:158      Sequence
 0:158        move second child to first child ( temp 2-component vector of float)
-0:158          'r057' ( temp 2-component vector of float)
-0:158          clamp ( temp 2-component vector of float)
+0:158          'r055' ( temp 2-component vector of float)
+0:158          roundEven ( temp 2-component vector of float)
 0:158            'inF0' ( in 2-component vector of float)
-0:158            Constant:
-0:158              0.000000
-0:158            Constant:
-0:158              1.000000
 0:159      Sequence
 0:159        move second child to first child ( temp 2-component vector of float)
-0:159          'r058' ( temp 2-component vector of float)
-0:159          Sign ( temp 2-component vector of float)
+0:159          'r056' ( temp 2-component vector of float)
+0:159          inverse sqrt ( temp 2-component vector of float)
 0:159            'inF0' ( in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child ( temp 2-component vector of float)
-0:160          'r059' ( temp 2-component vector of float)
-0:160          sine ( temp 2-component vector of float)
+0:160          'r057' ( temp 2-component vector of float)
+0:160          clamp ( temp 2-component vector of float)
 0:160            'inF0' ( in 2-component vector of float)
+0:160            Constant:
+0:160              0.000000
+0:160            Constant:
+0:160              1.000000
 0:161      Sequence
 0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'inF1' ( in 2-component vector of float)
-0:161          sine ( temp 2-component vector of float)
-0:161            'inF0' ( in 2-component vector of float)
-0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'inF2' ( in 2-component vector of float)
-0:161          cosine ( temp 2-component vector of float)
+0:161          'r058' ( temp 2-component vector of float)
+0:161          Sign ( temp 2-component vector of float)
 0:161            'inF0' ( in 2-component vector of float)
 0:162      Sequence
 0:162        move second child to first child ( temp 2-component vector of float)
-0:162          'r060' ( temp 2-component vector of float)
-0:162          hyp. sine ( temp 2-component vector of float)
+0:162          'r059' ( temp 2-component vector of float)
+0:162          sine ( temp 2-component vector of float)
 0:162            'inF0' ( in 2-component vector of float)
 0:163      Sequence
 0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'r061' ( temp 2-component vector of float)
-0:163          smoothstep ( temp 2-component vector of float)
+0:163          'inF1' ( in 2-component vector of float)
+0:163          sine ( temp 2-component vector of float)
 0:163            'inF0' ( in 2-component vector of float)
-0:163            'inF1' ( in 2-component vector of float)
-0:163            'inF2' ( in 2-component vector of float)
+0:163        move second child to first child ( temp 2-component vector of float)
+0:163          'inF2' ( in 2-component vector of float)
+0:163          cosine ( temp 2-component vector of float)
+0:163            'inF0' ( in 2-component vector of float)
 0:164      Sequence
 0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'r062' ( temp 2-component vector of float)
-0:164          sqrt ( temp 2-component vector of float)
+0:164          'r060' ( temp 2-component vector of float)
+0:164          hyp. sine ( temp 2-component vector of float)
 0:164            'inF0' ( in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child ( temp 2-component vector of float)
-0:165          'r063' ( temp 2-component vector of float)
-0:165          step ( temp 2-component vector of float)
+0:165          'r061' ( temp 2-component vector of float)
+0:165          smoothstep ( temp 2-component vector of float)
 0:165            'inF0' ( in 2-component vector of float)
 0:165            'inF1' ( in 2-component vector of float)
+0:165            'inF2' ( in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child ( temp 2-component vector of float)
-0:166          'r064' ( temp 2-component vector of float)
-0:166          tangent ( temp 2-component vector of float)
+0:166          'r062' ( temp 2-component vector of float)
+0:166          sqrt ( temp 2-component vector of float)
 0:166            'inF0' ( in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child ( temp 2-component vector of float)
-0:167          'r065' ( temp 2-component vector of float)
-0:167          hyp. tangent ( temp 2-component vector of float)
+0:167          'r063' ( temp 2-component vector of float)
+0:167          step ( temp 2-component vector of float)
 0:167            'inF0' ( in 2-component vector of float)
+0:167            'inF1' ( in 2-component vector of float)
+0:168      Sequence
+0:168        move second child to first child ( temp 2-component vector of float)
+0:168          'r064' ( temp 2-component vector of float)
+0:168          tangent ( temp 2-component vector of float)
+0:168            'inF0' ( in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child ( temp 2-component vector of float)
-0:169          'r066' ( temp 2-component vector of float)
-0:169          trunc ( temp 2-component vector of float)
+0:169          'r065' ( temp 2-component vector of float)
+0:169          hyp. tangent ( temp 2-component vector of float)
 0:169            'inF0' ( in 2-component vector of float)
-0:172      Branch: Return with expression
+0:171      Sequence
+0:171        move second child to first child ( temp 2-component vector of float)
+0:171          'r066' ( temp 2-component vector of float)
+0:171          trunc ( temp 2-component vector of float)
+0:171            'inF0' ( in 2-component vector of float)
+0:174      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:176  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:176    Function Parameters: 
-0:176      'inF0' ( in 3-component vector of float)
-0:176      'inF1' ( in 3-component vector of float)
-0:176      'inF2' ( in 3-component vector of float)
-0:176      'inU0' ( in 3-component vector of uint)
-0:176      'inU1' ( in 3-component vector of uint)
+0:178  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:178    Function Parameters: 
+0:178      'inF0' ( in 3-component vector of float)
+0:178      'inF1' ( in 3-component vector of float)
+0:178      'inF2' ( in 3-component vector of float)
+0:178      'inU0' ( in 3-component vector of uint)
+0:178      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:179      Sequence
-0:179        move second child to first child ( temp bool)
-0:179          'r000' ( temp bool)
-0:179          all ( temp bool)
-0:179            Convert float to bool ( temp 3-component vector of bool)
-0:179              'inF0' ( in 3-component vector of float)
-0:180      Sequence
-0:180        move second child to first child ( temp 3-component vector of float)
-0:180          'r001' ( temp 3-component vector of float)
-0:180          Absolute value ( temp 3-component vector of float)
-0:180            'inF0' ( in 3-component vector of float)
 0:181      Sequence
-0:181        move second child to first child ( temp 3-component vector of float)
-0:181          'r002' ( temp 3-component vector of float)
-0:181          arc cosine ( temp 3-component vector of float)
-0:181            'inF0' ( in 3-component vector of float)
+0:181        move second child to first child ( temp bool)
+0:181          'r000' ( temp bool)
+0:181          all ( temp bool)
+0:181            Convert float to bool ( temp 3-component vector of bool)
+0:181              'inF0' ( in 3-component vector of float)
 0:182      Sequence
-0:182        move second child to first child ( temp bool)
-0:182          'r003' ( temp bool)
-0:182          any ( temp bool)
-0:182            Convert float to bool ( temp 3-component vector of bool)
-0:182              'inF0' ( in 3-component vector of float)
+0:182        move second child to first child ( temp 3-component vector of float)
+0:182          'r001' ( temp 3-component vector of float)
+0:182          Absolute value ( temp 3-component vector of float)
+0:182            'inF0' ( in 3-component vector of float)
 0:183      Sequence
 0:183        move second child to first child ( temp 3-component vector of float)
-0:183          'r004' ( temp 3-component vector of float)
-0:183          arc sine ( temp 3-component vector of float)
+0:183          'r002' ( temp 3-component vector of float)
+0:183          arc cosine ( temp 3-component vector of float)
 0:183            'inF0' ( in 3-component vector of float)
 0:184      Sequence
-0:184        move second child to first child ( temp 3-component vector of int)
-0:184          'r005' ( temp 3-component vector of int)
-0:184          floatBitsToInt ( temp 3-component vector of int)
-0:184            'inF0' ( in 3-component vector of float)
+0:184        move second child to first child ( temp bool)
+0:184          'r003' ( temp bool)
+0:184          any ( temp bool)
+0:184            Convert float to bool ( temp 3-component vector of bool)
+0:184              'inF0' ( in 3-component vector of float)
 0:185      Sequence
-0:185        move second child to first child ( temp 3-component vector of uint)
-0:185          'r006' ( temp 3-component vector of uint)
-0:185          floatBitsToUint ( temp 3-component vector of uint)
+0:185        move second child to first child ( temp 3-component vector of float)
+0:185          'r004' ( temp 3-component vector of float)
+0:185          arc sine ( temp 3-component vector of float)
 0:185            'inF0' ( in 3-component vector of float)
 0:186      Sequence
-0:186        move second child to first child ( temp 3-component vector of float)
-0:186          'r007' ( temp 3-component vector of float)
-0:186          intBitsToFloat ( temp 3-component vector of float)
-0:186            'inU0' ( in 3-component vector of uint)
+0:186        move second child to first child ( temp 3-component vector of int)
+0:186          'r005' ( temp 3-component vector of int)
+0:186          floatBitsToInt ( temp 3-component vector of int)
+0:186            'inF0' ( in 3-component vector of float)
+0:187      Sequence
+0:187        move second child to first child ( temp 3-component vector of uint)
+0:187          'r006' ( temp 3-component vector of uint)
+0:187          floatBitsToUint ( temp 3-component vector of uint)
+0:187            'inF0' ( in 3-component vector of float)
 0:188      Sequence
 0:188        move second child to first child ( temp 3-component vector of float)
-0:188          'r009' ( temp 3-component vector of float)
-0:188          arc tangent ( temp 3-component vector of float)
-0:188            'inF0' ( in 3-component vector of float)
-0:189      Sequence
-0:189        move second child to first child ( temp 3-component vector of float)
-0:189          'r010' ( temp 3-component vector of float)
-0:189          arc tangent ( temp 3-component vector of float)
-0:189            'inF0' ( in 3-component vector of float)
-0:189            'inF1' ( in 3-component vector of float)
+0:188          'r007' ( temp 3-component vector of float)
+0:188          intBitsToFloat ( temp 3-component vector of float)
+0:188            'inU0' ( in 3-component vector of uint)
 0:190      Sequence
 0:190        move second child to first child ( temp 3-component vector of float)
-0:190          'r011' ( temp 3-component vector of float)
-0:190          Ceiling ( temp 3-component vector of float)
+0:190          'r009' ( temp 3-component vector of float)
+0:190          arc tangent ( temp 3-component vector of float)
 0:190            'inF0' ( in 3-component vector of float)
 0:191      Sequence
 0:191        move second child to first child ( temp 3-component vector of float)
-0:191          'r012' ( temp 3-component vector of float)
-0:191          clamp ( temp 3-component vector of float)
+0:191          'r010' ( temp 3-component vector of float)
+0:191          arc tangent ( temp 3-component vector of float)
 0:191            'inF0' ( in 3-component vector of float)
 0:191            'inF1' ( in 3-component vector of float)
-0:191            'inF2' ( in 3-component vector of float)
-0:192      Test condition and select ( temp void)
-0:192        Condition
-0:192        any ( temp bool)
-0:192          Compare Less Than ( temp 3-component vector of bool)
+0:192      Sequence
+0:192        move second child to first child ( temp 3-component vector of float)
+0:192          'r011' ( temp 3-component vector of float)
+0:192          Ceiling ( temp 3-component vector of float)
 0:192            'inF0' ( in 3-component vector of float)
-0:192            Constant:
-0:192              0.000000
-0:192              0.000000
-0:192              0.000000
-0:192        true case
-0:192        Branch: Kill
 0:193      Sequence
 0:193        move second child to first child ( temp 3-component vector of float)
-0:193          'r013' ( temp 3-component vector of float)
-0:193          cosine ( temp 3-component vector of float)
+0:193          'r012' ( temp 3-component vector of float)
+0:193          clamp ( temp 3-component vector of float)
 0:193            'inF0' ( in 3-component vector of float)
-0:194      Sequence
-0:194        move second child to first child ( temp 3-component vector of float)
-0:194          'r014' ( temp 3-component vector of float)
-0:194          hyp. cosine ( temp 3-component vector of float)
+0:193            'inF1' ( in 3-component vector of float)
+0:193            'inF2' ( in 3-component vector of float)
+0:194      Test condition and select ( temp void)
+0:194        Condition
+0:194        any ( temp bool)
+0:194          Compare Less Than ( temp 3-component vector of bool)
 0:194            'inF0' ( in 3-component vector of float)
-0:195      Sequence
-0:195        move second child to first child ( temp 3-component vector of uint)
-0:195          'r015' ( temp 3-component vector of uint)
+0:194            Constant:
+0:194              0.000000
+0:194              0.000000
+0:194              0.000000
+0:194        true case
+0:194        Branch: Kill
+0:195      Test condition and select ( temp void)
+0:195        Condition
+0:195        any ( temp bool)
+0:195          Compare Less Than ( temp 3-component vector of bool)
+0:195            'inU0' ( in 3-component vector of uint)
+0:195            Constant:
+0:195              0.000000
+0:195              0.000000
+0:195              0.000000
+0:195        true case
+0:195        Branch: Kill
+0:196      Sequence
+0:196        move second child to first child ( temp 3-component vector of float)
+0:196          'r013' ( temp 3-component vector of float)
+0:196          cosine ( temp 3-component vector of float)
+0:196            'inF0' ( in 3-component vector of float)
+0:197      Sequence
+0:197        move second child to first child ( temp 3-component vector of float)
+0:197          'r014' ( temp 3-component vector of float)
+0:197          hyp. cosine ( temp 3-component vector of float)
+0:197            'inF0' ( in 3-component vector of float)
+0:198      Sequence
+0:198        move second child to first child ( temp 3-component vector of uint)
+0:198          'r015' ( temp 3-component vector of uint)
 0:?           bitCount ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
-0:196      Sequence
-0:196        move second child to first child ( temp 3-component vector of float)
-0:196          'r016' ( temp 3-component vector of float)
-0:196          cross-product ( temp 3-component vector of float)
-0:196            'inF0' ( in 3-component vector of float)
-0:196            'inF1' ( in 3-component vector of float)
-0:197      Sequence
-0:197        move second child to first child ( temp 3-component vector of float)
-0:197          'r017' ( temp 3-component vector of float)
-0:197          dPdx ( temp 3-component vector of float)
-0:197            'inF0' ( in 3-component vector of float)
-0:198      Sequence
-0:198        move second child to first child ( temp 3-component vector of float)
-0:198          'r018' ( temp 3-component vector of float)
-0:198          dPdxCoarse ( temp 3-component vector of float)
-0:198            'inF0' ( in 3-component vector of float)
 0:199      Sequence
 0:199        move second child to first child ( temp 3-component vector of float)
-0:199          'r019' ( temp 3-component vector of float)
-0:199          dPdxFine ( temp 3-component vector of float)
+0:199          'r016' ( temp 3-component vector of float)
+0:199          cross-product ( temp 3-component vector of float)
 0:199            'inF0' ( in 3-component vector of float)
+0:199            'inF1' ( in 3-component vector of float)
 0:200      Sequence
 0:200        move second child to first child ( temp 3-component vector of float)
-0:200          'r020' ( temp 3-component vector of float)
-0:200          dPdy ( temp 3-component vector of float)
+0:200          'r017' ( temp 3-component vector of float)
+0:200          dPdx ( temp 3-component vector of float)
 0:200            'inF0' ( in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child ( temp 3-component vector of float)
-0:201          'r021' ( temp 3-component vector of float)
-0:201          dPdyCoarse ( temp 3-component vector of float)
+0:201          'r018' ( temp 3-component vector of float)
+0:201          dPdxCoarse ( temp 3-component vector of float)
 0:201            'inF0' ( in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child ( temp 3-component vector of float)
-0:202          'r022' ( temp 3-component vector of float)
-0:202          dPdyFine ( temp 3-component vector of float)
+0:202          'r019' ( temp 3-component vector of float)
+0:202          dPdxFine ( temp 3-component vector of float)
 0:202            'inF0' ( in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child ( temp 3-component vector of float)
-0:203          'r023' ( temp 3-component vector of float)
-0:203          degrees ( temp 3-component vector of float)
+0:203          'r020' ( temp 3-component vector of float)
+0:203          dPdy ( temp 3-component vector of float)
 0:203            'inF0' ( in 3-component vector of float)
 0:204      Sequence
-0:204        move second child to first child ( temp float)
-0:204          'r024' ( temp float)
-0:204          distance ( temp float)
+0:204        move second child to first child ( temp 3-component vector of float)
+0:204          'r021' ( temp 3-component vector of float)
+0:204          dPdyCoarse ( temp 3-component vector of float)
 0:204            'inF0' ( in 3-component vector of float)
-0:204            'inF1' ( in 3-component vector of float)
 0:205      Sequence
-0:205        move second child to first child ( temp float)
-0:205          'r025' ( temp float)
-0:205          dot-product ( temp float)
+0:205        move second child to first child ( temp 3-component vector of float)
+0:205          'r022' ( temp 3-component vector of float)
+0:205          dPdyFine ( temp 3-component vector of float)
 0:205            'inF0' ( in 3-component vector of float)
-0:205            'inF1' ( in 3-component vector of float)
-0:209      Sequence
-0:209        move second child to first child ( temp 3-component vector of float)
-0:209          'r029' ( temp 3-component vector of float)
-0:209          exp ( temp 3-component vector of float)
-0:209            'inF0' ( in 3-component vector of float)
-0:210      Sequence
-0:210        move second child to first child ( temp 3-component vector of float)
-0:210          'r030' ( temp 3-component vector of float)
-0:210          exp2 ( temp 3-component vector of float)
-0:210            'inF0' ( in 3-component vector of float)
-0:211      Sequence
-0:211        move second child to first child ( temp 3-component vector of float)
-0:211          'r031' ( temp 3-component vector of float)
-0:211          face-forward ( temp 3-component vector of float)
-0:211            'inF0' ( in 3-component vector of float)
-0:211            'inF1' ( in 3-component vector of float)
-0:211            'inF2' ( in 3-component vector of float)
+0:206      Sequence
+0:206        move second child to first child ( temp 3-component vector of float)
+0:206          'r023' ( temp 3-component vector of float)
+0:206          degrees ( temp 3-component vector of float)
+0:206            'inF0' ( in 3-component vector of float)
+0:207      Sequence
+0:207        move second child to first child ( temp float)
+0:207          'r024' ( temp float)
+0:207          distance ( temp float)
+0:207            'inF0' ( in 3-component vector of float)
+0:207            'inF1' ( in 3-component vector of float)
+0:208      Sequence
+0:208        move second child to first child ( temp float)
+0:208          'r025' ( temp float)
+0:208          dot-product ( temp float)
+0:208            'inF0' ( in 3-component vector of float)
+0:208            'inF1' ( in 3-component vector of float)
 0:212      Sequence
-0:212        move second child to first child ( temp 3-component vector of uint)
-0:212          'r032' ( temp 3-component vector of uint)
+0:212        move second child to first child ( temp 3-component vector of float)
+0:212          'r029' ( temp 3-component vector of float)
+0:212          exp ( temp 3-component vector of float)
+0:212            'inF0' ( in 3-component vector of float)
+0:213      Sequence
+0:213        move second child to first child ( temp 3-component vector of float)
+0:213          'r030' ( temp 3-component vector of float)
+0:213          exp2 ( temp 3-component vector of float)
+0:213            'inF0' ( in 3-component vector of float)
+0:214      Sequence
+0:214        move second child to first child ( temp 3-component vector of float)
+0:214          'r031' ( temp 3-component vector of float)
+0:214          face-forward ( temp 3-component vector of float)
+0:214            'inF0' ( in 3-component vector of float)
+0:214            'inF1' ( in 3-component vector of float)
+0:214            'inF2' ( in 3-component vector of float)
+0:215      Sequence
+0:215        move second child to first child ( temp 3-component vector of uint)
+0:215          'r032' ( temp 3-component vector of uint)
 0:?           findMSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:213      Sequence
-0:213        move second child to first child ( temp 3-component vector of uint)
-0:213          'r033' ( temp 3-component vector of uint)
+0:216      Sequence
+0:216        move second child to first child ( temp 3-component vector of uint)
+0:216          'r033' ( temp 3-component vector of uint)
 0:?           findLSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:214      Sequence
-0:214        move second child to first child ( temp 3-component vector of float)
-0:214          'r034' ( temp 3-component vector of float)
-0:214          Floor ( temp 3-component vector of float)
-0:214            'inF0' ( in 3-component vector of float)
-0:216      Sequence
-0:216        move second child to first child ( temp 3-component vector of float)
-0:216          'r036' ( temp 3-component vector of float)
-0:216          mod ( temp 3-component vector of float)
-0:216            'inF0' ( in 3-component vector of float)
-0:216            'inF1' ( in 3-component vector of float)
 0:217      Sequence
 0:217        move second child to first child ( temp 3-component vector of float)
-0:217          'r037' ( temp 3-component vector of float)
-0:217          Fraction ( temp 3-component vector of float)
+0:217          'r034' ( temp 3-component vector of float)
+0:217          Floor ( temp 3-component vector of float)
 0:217            'inF0' ( in 3-component vector of float)
-0:218      Sequence
-0:218        move second child to first child ( temp 3-component vector of float)
-0:218          'r039' ( temp 3-component vector of float)
-0:218          fwidth ( temp 3-component vector of float)
-0:218            'inF0' ( in 3-component vector of float)
 0:219      Sequence
-0:219        move second child to first child ( temp 3-component vector of bool)
-0:219          'r040' ( temp 3-component vector of bool)
-0:219          isinf ( temp 3-component vector of bool)
+0:219        move second child to first child ( temp 3-component vector of float)
+0:219          'r036' ( temp 3-component vector of float)
+0:219          mod ( temp 3-component vector of float)
 0:219            'inF0' ( in 3-component vector of float)
+0:219            'inF1' ( in 3-component vector of float)
 0:220      Sequence
-0:220        move second child to first child ( temp 3-component vector of bool)
-0:220          'r041' ( temp 3-component vector of bool)
-0:220          isnan ( temp 3-component vector of bool)
+0:220        move second child to first child ( temp 3-component vector of float)
+0:220          'r037' ( temp 3-component vector of float)
+0:220          Fraction ( temp 3-component vector of float)
 0:220            'inF0' ( in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child ( temp 3-component vector of float)
-0:221          'r042' ( temp 3-component vector of float)
-0:221          ldexp ( temp 3-component vector of float)
+0:221          'r039' ( temp 3-component vector of float)
+0:221          fwidth ( temp 3-component vector of float)
 0:221            'inF0' ( in 3-component vector of float)
-0:221            'inF1' ( in 3-component vector of float)
 0:222      Sequence
-0:222        move second child to first child ( temp 3-component vector of float)
-0:222          'r039a' ( temp 3-component vector of float)
-0:222          mix ( temp 3-component vector of float)
+0:222        move second child to first child ( temp 3-component vector of bool)
+0:222          'r040' ( temp 3-component vector of bool)
+0:222          isinf ( temp 3-component vector of bool)
 0:222            'inF0' ( in 3-component vector of float)
-0:222            'inF1' ( in 3-component vector of float)
-0:222            'inF2' ( in 3-component vector of float)
 0:223      Sequence
-0:223        move second child to first child ( temp 3-component vector of float)
-0:223          'r039b' ( temp 3-component vector of float)
-0:223          mix ( temp 3-component vector of float)
+0:223        move second child to first child ( temp 3-component vector of bool)
+0:223          'r041' ( temp 3-component vector of bool)
+0:223          isnan ( temp 3-component vector of bool)
 0:223            'inF0' ( in 3-component vector of float)
-0:223            'inF1' ( in 3-component vector of float)
-0:223            Constant:
-0:223              0.300000
 0:224      Sequence
-0:224        move second child to first child ( temp float)
-0:224          'r043' ( temp float)
-0:224          length ( temp float)
+0:224        move second child to first child ( temp 3-component vector of float)
+0:224          'r042' ( temp 3-component vector of float)
+0:224          ldexp ( temp 3-component vector of float)
 0:224            'inF0' ( in 3-component vector of float)
+0:224            'inF1' ( in 3-component vector of float)
 0:225      Sequence
 0:225        move second child to first child ( temp 3-component vector of float)
-0:225          'r044' ( temp 3-component vector of float)
-0:225          log ( temp 3-component vector of float)
+0:225          'r039a' ( temp 3-component vector of float)
+0:225          mix ( temp 3-component vector of float)
 0:225            'inF0' ( in 3-component vector of float)
+0:225            'inF1' ( in 3-component vector of float)
+0:225            'inF2' ( in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child ( temp 3-component vector of float)
-0:226          'r045' ( temp 3-component vector of float)
-0:226          vector-scale ( temp 3-component vector of float)
-0:226            log2 ( temp 3-component vector of float)
-0:226              'inF0' ( in 3-component vector of float)
+0:226          'r039b' ( temp 3-component vector of float)
+0:226          mix ( temp 3-component vector of float)
+0:226            'inF0' ( in 3-component vector of float)
+0:226            'inF1' ( in 3-component vector of float)
 0:226            Constant:
-0:226              0.301030
+0:226              0.300000
 0:227      Sequence
-0:227        move second child to first child ( temp 3-component vector of float)
-0:227          'r046' ( temp 3-component vector of float)
-0:227          log2 ( temp 3-component vector of float)
+0:227        move second child to first child ( temp float)
+0:227          'r043' ( temp float)
+0:227          length ( temp float)
 0:227            'inF0' ( in 3-component vector of float)
 0:228      Sequence
 0:228        move second child to first child ( temp 3-component vector of float)
-0:228          'r047' ( temp 3-component vector of float)
-0:228          max ( temp 3-component vector of float)
+0:228          'r044' ( temp 3-component vector of float)
+0:228          log ( temp 3-component vector of float)
 0:228            'inF0' ( in 3-component vector of float)
-0:228            'inF1' ( in 3-component vector of float)
 0:229      Sequence
 0:229        move second child to first child ( temp 3-component vector of float)
-0:229          'r048' ( temp 3-component vector of float)
-0:229          min ( temp 3-component vector of float)
-0:229            'inF0' ( in 3-component vector of float)
-0:229            'inF1' ( in 3-component vector of float)
+0:229          'r045' ( temp 3-component vector of float)
+0:229          vector-scale ( temp 3-component vector of float)
+0:229            log2 ( temp 3-component vector of float)
+0:229              'inF0' ( in 3-component vector of float)
+0:229            Constant:
+0:229              0.301030
 0:230      Sequence
 0:230        move second child to first child ( temp 3-component vector of float)
-0:230          'r049' ( temp 3-component vector of float)
-0:230          normalize ( temp 3-component vector of float)
+0:230          'r046' ( temp 3-component vector of float)
+0:230          log2 ( temp 3-component vector of float)
 0:230            'inF0' ( in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child ( temp 3-component vector of float)
-0:231          'r050' ( temp 3-component vector of float)
-0:231          pow ( temp 3-component vector of float)
+0:231          'r047' ( temp 3-component vector of float)
+0:231          max ( temp 3-component vector of float)
 0:231            'inF0' ( in 3-component vector of float)
 0:231            'inF1' ( in 3-component vector of float)
 0:232      Sequence
 0:232        move second child to first child ( temp 3-component vector of float)
-0:232          'r051' ( temp 3-component vector of float)
-0:232          radians ( temp 3-component vector of float)
+0:232          'r048' ( temp 3-component vector of float)
+0:232          min ( temp 3-component vector of float)
 0:232            'inF0' ( in 3-component vector of float)
+0:232            'inF1' ( in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child ( temp 3-component vector of float)
-0:233          'r052' ( temp 3-component vector of float)
-0:233          divide ( temp 3-component vector of float)
-0:233            Constant:
-0:233              1.000000
+0:233          'r049' ( temp 3-component vector of float)
+0:233          normalize ( temp 3-component vector of float)
 0:233            'inF0' ( in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child ( temp 3-component vector of float)
-0:234          'r053' ( temp 3-component vector of float)
-0:234          reflect ( temp 3-component vector of float)
+0:234          'r050' ( temp 3-component vector of float)
+0:234          pow ( temp 3-component vector of float)
 0:234            'inF0' ( in 3-component vector of float)
 0:234            'inF1' ( in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child ( temp 3-component vector of float)
-0:235          'r054' ( temp 3-component vector of float)
-0:235          refract ( temp 3-component vector of float)
+0:235          'r051' ( temp 3-component vector of float)
+0:235          radians ( temp 3-component vector of float)
 0:235            'inF0' ( in 3-component vector of float)
-0:235            'inF1' ( in 3-component vector of float)
-0:235            Constant:
-0:235              2.000000
 0:236      Sequence
-0:236        move second child to first child ( temp 3-component vector of uint)
-0:236          'r055' ( temp 3-component vector of uint)
+0:236        move second child to first child ( temp 3-component vector of float)
+0:236          'r052' ( temp 3-component vector of float)
+0:236          divide ( temp 3-component vector of float)
+0:236            Constant:
+0:236              1.000000
+0:236            'inF0' ( in 3-component vector of float)
+0:237      Sequence
+0:237        move second child to first child ( temp 3-component vector of float)
+0:237          'r053' ( temp 3-component vector of float)
+0:237          reflect ( temp 3-component vector of float)
+0:237            'inF0' ( in 3-component vector of float)
+0:237            'inF1' ( in 3-component vector of float)
+0:238      Sequence
+0:238        move second child to first child ( temp 3-component vector of float)
+0:238          'r054' ( temp 3-component vector of float)
+0:238          refract ( temp 3-component vector of float)
+0:238            'inF0' ( in 3-component vector of float)
+0:238            'inF1' ( in 3-component vector of float)
+0:238            Constant:
+0:238              2.000000
+0:239      Sequence
+0:239        move second child to first child ( temp 3-component vector of uint)
+0:239          'r055' ( temp 3-component vector of uint)
 0:?           bitFieldReverse ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:237      Sequence
-0:237        move second child to first child ( temp 3-component vector of float)
-0:237          'r056' ( temp 3-component vector of float)
-0:237          roundEven ( temp 3-component vector of float)
-0:237            'inF0' ( in 3-component vector of float)
-0:238      Sequence
-0:238        move second child to first child ( temp 3-component vector of float)
-0:238          'r057' ( temp 3-component vector of float)
-0:238          inverse sqrt ( temp 3-component vector of float)
-0:238            'inF0' ( in 3-component vector of float)
-0:239      Sequence
-0:239        move second child to first child ( temp 3-component vector of float)
-0:239          'r058' ( temp 3-component vector of float)
-0:239          clamp ( temp 3-component vector of float)
-0:239            'inF0' ( in 3-component vector of float)
-0:239            Constant:
-0:239              0.000000
-0:239            Constant:
-0:239              1.000000
 0:240      Sequence
 0:240        move second child to first child ( temp 3-component vector of float)
-0:240          'r059' ( temp 3-component vector of float)
-0:240          Sign ( temp 3-component vector of float)
+0:240          'r056' ( temp 3-component vector of float)
+0:240          roundEven ( temp 3-component vector of float)
 0:240            'inF0' ( in 3-component vector of float)
 0:241      Sequence
 0:241        move second child to first child ( temp 3-component vector of float)
-0:241          'r060' ( temp 3-component vector of float)
-0:241          sine ( temp 3-component vector of float)
+0:241          'r057' ( temp 3-component vector of float)
+0:241          inverse sqrt ( temp 3-component vector of float)
 0:241            'inF0' ( in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'inF1' ( in 3-component vector of float)
-0:242          sine ( temp 3-component vector of float)
+0:242          'r058' ( temp 3-component vector of float)
+0:242          clamp ( temp 3-component vector of float)
 0:242            'inF0' ( in 3-component vector of float)
-0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'inF2' ( in 3-component vector of float)
-0:242          cosine ( temp 3-component vector of float)
-0:242            'inF0' ( in 3-component vector of float)
+0:242            Constant:
+0:242              0.000000
+0:242            Constant:
+0:242              1.000000
 0:243      Sequence
 0:243        move second child to first child ( temp 3-component vector of float)
-0:243          'r061' ( temp 3-component vector of float)
-0:243          hyp. sine ( temp 3-component vector of float)
+0:243          'r059' ( temp 3-component vector of float)
+0:243          Sign ( temp 3-component vector of float)
 0:243            'inF0' ( in 3-component vector of float)
 0:244      Sequence
 0:244        move second child to first child ( temp 3-component vector of float)
-0:244          'r062' ( temp 3-component vector of float)
-0:244          smoothstep ( temp 3-component vector of float)
+0:244          'r060' ( temp 3-component vector of float)
+0:244          sine ( temp 3-component vector of float)
 0:244            'inF0' ( in 3-component vector of float)
-0:244            'inF1' ( in 3-component vector of float)
-0:244            'inF2' ( in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'r063' ( temp 3-component vector of float)
-0:245          sqrt ( temp 3-component vector of float)
+0:245          'inF1' ( in 3-component vector of float)
+0:245          sine ( temp 3-component vector of float)
+0:245            'inF0' ( in 3-component vector of float)
+0:245        move second child to first child ( temp 3-component vector of float)
+0:245          'inF2' ( in 3-component vector of float)
+0:245          cosine ( temp 3-component vector of float)
 0:245            'inF0' ( in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'r064' ( temp 3-component vector of float)
-0:246          step ( temp 3-component vector of float)
+0:246          'r061' ( temp 3-component vector of float)
+0:246          hyp. sine ( temp 3-component vector of float)
 0:246            'inF0' ( in 3-component vector of float)
-0:246            'inF1' ( in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child ( temp 3-component vector of float)
-0:247          'r065' ( temp 3-component vector of float)
-0:247          tangent ( temp 3-component vector of float)
+0:247          'r062' ( temp 3-component vector of float)
+0:247          smoothstep ( temp 3-component vector of float)
 0:247            'inF0' ( in 3-component vector of float)
+0:247            'inF1' ( in 3-component vector of float)
+0:247            'inF2' ( in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child ( temp 3-component vector of float)
-0:248          'r066' ( temp 3-component vector of float)
-0:248          hyp. tangent ( temp 3-component vector of float)
+0:248          'r063' ( temp 3-component vector of float)
+0:248          sqrt ( temp 3-component vector of float)
 0:248            'inF0' ( in 3-component vector of float)
+0:249      Sequence
+0:249        move second child to first child ( temp 3-component vector of float)
+0:249          'r064' ( temp 3-component vector of float)
+0:249          step ( temp 3-component vector of float)
+0:249            'inF0' ( in 3-component vector of float)
+0:249            'inF1' ( in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child ( temp 3-component vector of float)
-0:250          'r067' ( temp 3-component vector of float)
-0:250          trunc ( temp 3-component vector of float)
+0:250          'r065' ( temp 3-component vector of float)
+0:250          tangent ( temp 3-component vector of float)
 0:250            'inF0' ( in 3-component vector of float)
-0:253      Branch: Return with expression
+0:251      Sequence
+0:251        move second child to first child ( temp 3-component vector of float)
+0:251          'r066' ( temp 3-component vector of float)
+0:251          hyp. tangent ( temp 3-component vector of float)
+0:251            'inF0' ( in 3-component vector of float)
+0:253      Sequence
+0:253        move second child to first child ( temp 3-component vector of float)
+0:253          'r067' ( temp 3-component vector of float)
+0:253          trunc ( temp 3-component vector of float)
+0:253            'inF0' ( in 3-component vector of float)
+0:256      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:257  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:257    Function Parameters: 
-0:257      'inF0' ( in 4-component vector of float)
-0:257      'inF1' ( in 4-component vector of float)
-0:257      'inF2' ( in 4-component vector of float)
-0:257      'inU0' ( in 4-component vector of uint)
-0:257      'inU1' ( in 4-component vector of uint)
+0:260  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:260    Function Parameters: 
+0:260      'inF0' ( in 4-component vector of float)
+0:260      'inF1' ( in 4-component vector of float)
+0:260      'inF2' ( in 4-component vector of float)
+0:260      'inU0' ( in 4-component vector of uint)
+0:260      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:260      Sequence
-0:260        move second child to first child ( temp bool)
-0:260          'r000' ( temp bool)
-0:260          all ( temp bool)
-0:260            Convert float to bool ( temp 4-component vector of bool)
-0:260              'inF0' ( in 4-component vector of float)
-0:261      Sequence
-0:261        move second child to first child ( temp 4-component vector of float)
-0:261          'r001' ( temp 4-component vector of float)
-0:261          Absolute value ( temp 4-component vector of float)
-0:261            'inF0' ( in 4-component vector of float)
-0:262      Sequence
-0:262        move second child to first child ( temp 4-component vector of float)
-0:262          'r002' ( temp 4-component vector of float)
-0:262          arc cosine ( temp 4-component vector of float)
-0:262            'inF0' ( in 4-component vector of float)
 0:263      Sequence
 0:263        move second child to first child ( temp bool)
-0:263          'r003' ( temp bool)
-0:263          any ( temp bool)
+0:263          'r000' ( temp bool)
+0:263          all ( temp bool)
 0:263            Convert float to bool ( temp 4-component vector of bool)
 0:263              'inF0' ( in 4-component vector of float)
 0:264      Sequence
 0:264        move second child to first child ( temp 4-component vector of float)
-0:264          'r004' ( temp 4-component vector of float)
-0:264          arc sine ( temp 4-component vector of float)
+0:264          'r001' ( temp 4-component vector of float)
+0:264          Absolute value ( temp 4-component vector of float)
 0:264            'inF0' ( in 4-component vector of float)
 0:265      Sequence
-0:265        move second child to first child ( temp 4-component vector of int)
-0:265          'r005' ( temp 4-component vector of int)
-0:265          floatBitsToInt ( temp 4-component vector of int)
+0:265        move second child to first child ( temp 4-component vector of float)
+0:265          'r002' ( temp 4-component vector of float)
+0:265          arc cosine ( temp 4-component vector of float)
 0:265            'inF0' ( in 4-component vector of float)
 0:266      Sequence
-0:266        move second child to first child ( temp 4-component vector of uint)
-0:266          'r006' ( temp 4-component vector of uint)
-0:266          floatBitsToUint ( temp 4-component vector of uint)
-0:266            'inF0' ( in 4-component vector of float)
+0:266        move second child to first child ( temp bool)
+0:266          'r003' ( temp bool)
+0:266          any ( temp bool)
+0:266            Convert float to bool ( temp 4-component vector of bool)
+0:266              'inF0' ( in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child ( temp 4-component vector of float)
-0:267          'r007' ( temp 4-component vector of float)
-0:267          intBitsToFloat ( temp 4-component vector of float)
-0:267            'inU0' ( in 4-component vector of uint)
+0:267          'r004' ( temp 4-component vector of float)
+0:267          arc sine ( temp 4-component vector of float)
+0:267            'inF0' ( in 4-component vector of float)
+0:268      Sequence
+0:268        move second child to first child ( temp 4-component vector of int)
+0:268          'r005' ( temp 4-component vector of int)
+0:268          floatBitsToInt ( temp 4-component vector of int)
+0:268            'inF0' ( in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child ( temp 4-component vector of float)
-0:269          'r009' ( temp 4-component vector of float)
-0:269          arc tangent ( temp 4-component vector of float)
+0:269        move second child to first child ( temp 4-component vector of uint)
+0:269          'r006' ( temp 4-component vector of uint)
+0:269          floatBitsToUint ( temp 4-component vector of uint)
 0:269            'inF0' ( in 4-component vector of float)
 0:270      Sequence
 0:270        move second child to first child ( temp 4-component vector of float)
-0:270          'r010' ( temp 4-component vector of float)
-0:270          arc tangent ( temp 4-component vector of float)
-0:270            'inF0' ( in 4-component vector of float)
-0:270            'inF1' ( in 4-component vector of float)
-0:271      Sequence
-0:271        move second child to first child ( temp 4-component vector of float)
-0:271          'r011' ( temp 4-component vector of float)
-0:271          Ceiling ( temp 4-component vector of float)
-0:271            'inF0' ( in 4-component vector of float)
+0:270          'r007' ( temp 4-component vector of float)
+0:270          intBitsToFloat ( temp 4-component vector of float)
+0:270            'inU0' ( in 4-component vector of uint)
 0:272      Sequence
 0:272        move second child to first child ( temp 4-component vector of float)
-0:272          'r012' ( temp 4-component vector of float)
-0:272          clamp ( temp 4-component vector of float)
+0:272          'r009' ( temp 4-component vector of float)
+0:272          arc tangent ( temp 4-component vector of float)
 0:272            'inF0' ( in 4-component vector of float)
-0:272            'inF1' ( in 4-component vector of float)
-0:272            'inF2' ( in 4-component vector of float)
-0:273      Test condition and select ( temp void)
-0:273        Condition
-0:273        any ( temp bool)
-0:273          Compare Less Than ( temp 4-component vector of bool)
+0:273      Sequence
+0:273        move second child to first child ( temp 4-component vector of float)
+0:273          'r010' ( temp 4-component vector of float)
+0:273          arc tangent ( temp 4-component vector of float)
 0:273            'inF0' ( in 4-component vector of float)
-0:273            Constant:
-0:273              0.000000
-0:273              0.000000
-0:273              0.000000
-0:273              0.000000
-0:273        true case
-0:273        Branch: Kill
+0:273            'inF1' ( in 4-component vector of float)
 0:274      Sequence
 0:274        move second child to first child ( temp 4-component vector of float)
-0:274          'r013' ( temp 4-component vector of float)
-0:274          cosine ( temp 4-component vector of float)
+0:274          'r011' ( temp 4-component vector of float)
+0:274          Ceiling ( temp 4-component vector of float)
 0:274            'inF0' ( in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child ( temp 4-component vector of float)
-0:275          'r014' ( temp 4-component vector of float)
-0:275          hyp. cosine ( temp 4-component vector of float)
+0:275          'r012' ( temp 4-component vector of float)
+0:275          clamp ( temp 4-component vector of float)
 0:275            'inF0' ( in 4-component vector of float)
-0:276      Sequence
-0:276        move second child to first child ( temp 4-component vector of uint)
-0:276          'r015' ( temp 4-component vector of uint)
+0:275            'inF1' ( in 4-component vector of float)
+0:275            'inF2' ( in 4-component vector of float)
+0:276      Test condition and select ( temp void)
+0:276        Condition
+0:276        any ( temp bool)
+0:276          Compare Less Than ( temp 4-component vector of bool)
+0:276            'inF0' ( in 4-component vector of float)
+0:276            Constant:
+0:276              0.000000
+0:276              0.000000
+0:276              0.000000
+0:276              0.000000
+0:276        true case
+0:276        Branch: Kill
+0:277      Test condition and select ( temp void)
+0:277        Condition
+0:277        any ( temp bool)
+0:277          Compare Less Than ( temp 4-component vector of bool)
+0:277            'inU0' ( in 4-component vector of uint)
+0:277            Constant:
+0:277              0.000000
+0:277              0.000000
+0:277              0.000000
+0:277              0.000000
+0:277        true case
+0:277        Branch: Kill
+0:278      Sequence
+0:278        move second child to first child ( temp 4-component vector of float)
+0:278          'r013' ( temp 4-component vector of float)
+0:278          cosine ( temp 4-component vector of float)
+0:278            'inF0' ( in 4-component vector of float)
+0:279      Sequence
+0:279        move second child to first child ( temp 4-component vector of float)
+0:279          'r014' ( temp 4-component vector of float)
+0:279          hyp. cosine ( temp 4-component vector of float)
+0:279            'inF0' ( in 4-component vector of float)
+0:280      Sequence
+0:280        move second child to first child ( temp 4-component vector of uint)
+0:280          'r015' ( temp 4-component vector of uint)
 0:?           bitCount ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:277      Sequence
-0:277        move second child to first child ( temp 4-component vector of float)
-0:277          'r016' ( temp 4-component vector of float)
-0:277          dPdx ( temp 4-component vector of float)
-0:277            'inF0' ( in 4-component vector of float)
-0:278      Sequence
-0:278        move second child to first child ( temp 4-component vector of float)
-0:278          'r017' ( temp 4-component vector of float)
-0:278          dPdxCoarse ( temp 4-component vector of float)
-0:278            'inF0' ( in 4-component vector of float)
-0:279      Sequence
-0:279        move second child to first child ( temp 4-component vector of float)
-0:279          'r018' ( temp 4-component vector of float)
-0:279          dPdxFine ( temp 4-component vector of float)
-0:279            'inF0' ( in 4-component vector of float)
-0:280      Sequence
-0:280        move second child to first child ( temp 4-component vector of float)
-0:280          'r019' ( temp 4-component vector of float)
-0:280          dPdy ( temp 4-component vector of float)
-0:280            'inF0' ( in 4-component vector of float)
 0:281      Sequence
 0:281        move second child to first child ( temp 4-component vector of float)
-0:281          'r020' ( temp 4-component vector of float)
-0:281          dPdyCoarse ( temp 4-component vector of float)
+0:281          'r016' ( temp 4-component vector of float)
+0:281          dPdx ( temp 4-component vector of float)
 0:281            'inF0' ( in 4-component vector of float)
 0:282      Sequence
 0:282        move second child to first child ( temp 4-component vector of float)
-0:282          'r021' ( temp 4-component vector of float)
-0:282          dPdyFine ( temp 4-component vector of float)
+0:282          'r017' ( temp 4-component vector of float)
+0:282          dPdxCoarse ( temp 4-component vector of float)
 0:282            'inF0' ( in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child ( temp 4-component vector of float)
-0:283          'r022' ( temp 4-component vector of float)
-0:283          degrees ( temp 4-component vector of float)
+0:283          'r018' ( temp 4-component vector of float)
+0:283          dPdxFine ( temp 4-component vector of float)
 0:283            'inF0' ( in 4-component vector of float)
 0:284      Sequence
-0:284        move second child to first child ( temp float)
-0:284          'r023' ( temp float)
-0:284          distance ( temp float)
+0:284        move second child to first child ( temp 4-component vector of float)
+0:284          'r019' ( temp 4-component vector of float)
+0:284          dPdy ( temp 4-component vector of float)
 0:284            'inF0' ( in 4-component vector of float)
-0:284            'inF1' ( in 4-component vector of float)
 0:285      Sequence
-0:285        move second child to first child ( temp float)
-0:285          'r024' ( temp float)
-0:285          dot-product ( temp float)
+0:285        move second child to first child ( temp 4-component vector of float)
+0:285          'r020' ( temp 4-component vector of float)
+0:285          dPdyCoarse ( temp 4-component vector of float)
 0:285            'inF0' ( in 4-component vector of float)
-0:285            'inF1' ( in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child ( temp 4-component vector of float)
-0:286          'r025' ( temp 4-component vector of float)
-0:286          Construct vec4 ( temp 4-component vector of float)
-0:286            Constant:
-0:286              1.000000
-0:286            component-wise multiply ( temp float)
-0:286              direct index ( temp float)
-0:286                'inF0' ( in 4-component vector of float)
-0:286                Constant:
-0:286                  1 (const int)
-0:286              direct index ( temp float)
-0:286                'inF1' ( in 4-component vector of float)
-0:286                Constant:
-0:286                  1 (const int)
-0:286            direct index ( temp float)
-0:286              'inF0' ( in 4-component vector of float)
-0:286              Constant:
-0:286                2 (const int)
-0:286            direct index ( temp float)
-0:286              'inF1' ( in 4-component vector of float)
-0:286              Constant:
-0:286                3 (const int)
+0:286          'r021' ( temp 4-component vector of float)
+0:286          dPdyFine ( temp 4-component vector of float)
+0:286            'inF0' ( in 4-component vector of float)
+0:287      Sequence
+0:287        move second child to first child ( temp 4-component vector of float)
+0:287          'r022' ( temp 4-component vector of float)
+0:287          degrees ( temp 4-component vector of float)
+0:287            'inF0' ( in 4-component vector of float)
+0:288      Sequence
+0:288        move second child to first child ( temp float)
+0:288          'r023' ( temp float)
+0:288          distance ( temp float)
+0:288            'inF0' ( in 4-component vector of float)
+0:288            'inF1' ( in 4-component vector of float)
+0:289      Sequence
+0:289        move second child to first child ( temp float)
+0:289          'r024' ( temp float)
+0:289          dot-product ( temp float)
+0:289            'inF0' ( in 4-component vector of float)
+0:289            'inF1' ( in 4-component vector of float)
 0:290      Sequence
 0:290        move second child to first child ( temp 4-component vector of float)
-0:290          'r029' ( temp 4-component vector of float)
-0:290          exp ( temp 4-component vector of float)
-0:290            'inF0' ( in 4-component vector of float)
-0:291      Sequence
-0:291        move second child to first child ( temp 4-component vector of float)
-0:291          'r030' ( temp 4-component vector of float)
-0:291          exp2 ( temp 4-component vector of float)
-0:291            'inF0' ( in 4-component vector of float)
-0:292      Sequence
-0:292        move second child to first child ( temp 4-component vector of float)
-0:292          'r031' ( temp 4-component vector of float)
-0:292          face-forward ( temp 4-component vector of float)
-0:292            'inF0' ( in 4-component vector of float)
-0:292            'inF1' ( in 4-component vector of float)
-0:292            'inF2' ( in 4-component vector of float)
-0:293      Sequence
-0:293        move second child to first child ( temp 4-component vector of uint)
-0:293          'r032' ( temp 4-component vector of uint)
+0:290          'r025' ( temp 4-component vector of float)
+0:290          Construct vec4 ( temp 4-component vector of float)
+0:290            Constant:
+0:290              1.000000
+0:290            component-wise multiply ( temp float)
+0:290              direct index ( temp float)
+0:290                'inF0' ( in 4-component vector of float)
+0:290                Constant:
+0:290                  1 (const int)
+0:290              direct index ( temp float)
+0:290                'inF1' ( in 4-component vector of float)
+0:290                Constant:
+0:290                  1 (const int)
+0:290            direct index ( temp float)
+0:290              'inF0' ( in 4-component vector of float)
+0:290              Constant:
+0:290                2 (const int)
+0:290            direct index ( temp float)
+0:290              'inF1' ( in 4-component vector of float)
+0:290              Constant:
+0:290                3 (const int)
+0:294      Sequence
+0:294        move second child to first child ( temp 4-component vector of float)
+0:294          'r029' ( temp 4-component vector of float)
+0:294          exp ( temp 4-component vector of float)
+0:294            'inF0' ( in 4-component vector of float)
+0:295      Sequence
+0:295        move second child to first child ( temp 4-component vector of float)
+0:295          'r030' ( temp 4-component vector of float)
+0:295          exp2 ( temp 4-component vector of float)
+0:295            'inF0' ( in 4-component vector of float)
+0:296      Sequence
+0:296        move second child to first child ( temp 4-component vector of float)
+0:296          'r031' ( temp 4-component vector of float)
+0:296          face-forward ( temp 4-component vector of float)
+0:296            'inF0' ( in 4-component vector of float)
+0:296            'inF1' ( in 4-component vector of float)
+0:296            'inF2' ( in 4-component vector of float)
+0:297      Sequence
+0:297        move second child to first child ( temp 4-component vector of uint)
+0:297          'r032' ( temp 4-component vector of uint)
 0:?           findMSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:294      Sequence
-0:294        move second child to first child ( temp 4-component vector of uint)
-0:294          'r033' ( temp 4-component vector of uint)
+0:298      Sequence
+0:298        move second child to first child ( temp 4-component vector of uint)
+0:298          'r033' ( temp 4-component vector of uint)
 0:?           findLSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:295      Sequence
-0:295        move second child to first child ( temp 4-component vector of float)
-0:295          'r034' ( temp 4-component vector of float)
-0:295          Floor ( temp 4-component vector of float)
-0:295            'inF0' ( in 4-component vector of float)
-0:297      Sequence
-0:297        move second child to first child ( temp 4-component vector of float)
-0:297          'r036' ( temp 4-component vector of float)
-0:297          mod ( temp 4-component vector of float)
-0:297            'inF0' ( in 4-component vector of float)
-0:297            'inF1' ( in 4-component vector of float)
-0:298      Sequence
-0:298        move second child to first child ( temp 4-component vector of float)
-0:298          'r037' ( temp 4-component vector of float)
-0:298          Fraction ( temp 4-component vector of float)
-0:298            'inF0' ( in 4-component vector of float)
 0:299      Sequence
 0:299        move second child to first child ( temp 4-component vector of float)
-0:299          'r039' ( temp 4-component vector of float)
-0:299          fwidth ( temp 4-component vector of float)
+0:299          'r034' ( temp 4-component vector of float)
+0:299          Floor ( temp 4-component vector of float)
 0:299            'inF0' ( in 4-component vector of float)
-0:300      Sequence
-0:300        move second child to first child ( temp 4-component vector of bool)
-0:300          'r040' ( temp 4-component vector of bool)
-0:300          isinf ( temp 4-component vector of bool)
-0:300            'inF0' ( in 4-component vector of float)
 0:301      Sequence
-0:301        move second child to first child ( temp 4-component vector of bool)
-0:301          'r041' ( temp 4-component vector of bool)
-0:301          isnan ( temp 4-component vector of bool)
+0:301        move second child to first child ( temp 4-component vector of float)
+0:301          'r036' ( temp 4-component vector of float)
+0:301          mod ( temp 4-component vector of float)
 0:301            'inF0' ( in 4-component vector of float)
+0:301            'inF1' ( in 4-component vector of float)
 0:302      Sequence
 0:302        move second child to first child ( temp 4-component vector of float)
-0:302          'r042' ( temp 4-component vector of float)
-0:302          ldexp ( temp 4-component vector of float)
+0:302          'r037' ( temp 4-component vector of float)
+0:302          Fraction ( temp 4-component vector of float)
 0:302            'inF0' ( in 4-component vector of float)
-0:302            'inF1' ( in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child ( temp 4-component vector of float)
-0:303          'r039a' ( temp 4-component vector of float)
-0:303          mix ( temp 4-component vector of float)
+0:303          'r039' ( temp 4-component vector of float)
+0:303          fwidth ( temp 4-component vector of float)
 0:303            'inF0' ( in 4-component vector of float)
-0:303            'inF1' ( in 4-component vector of float)
-0:303            'inF2' ( in 4-component vector of float)
 0:304      Sequence
-0:304        move second child to first child ( temp float)
-0:304          'r043' ( temp float)
-0:304          length ( temp float)
+0:304        move second child to first child ( temp 4-component vector of bool)
+0:304          'r040' ( temp 4-component vector of bool)
+0:304          isinf ( temp 4-component vector of bool)
 0:304            'inF0' ( in 4-component vector of float)
 0:305      Sequence
-0:305        move second child to first child ( temp 4-component vector of float)
-0:305          'r044' ( temp 4-component vector of float)
-0:305          log ( temp 4-component vector of float)
+0:305        move second child to first child ( temp 4-component vector of bool)
+0:305          'r041' ( temp 4-component vector of bool)
+0:305          isnan ( temp 4-component vector of bool)
 0:305            'inF0' ( in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child ( temp 4-component vector of float)
-0:306          'r045' ( temp 4-component vector of float)
-0:306          vector-scale ( temp 4-component vector of float)
-0:306            log2 ( temp 4-component vector of float)
-0:306              'inF0' ( in 4-component vector of float)
-0:306            Constant:
-0:306              0.301030
+0:306          'r042' ( temp 4-component vector of float)
+0:306          ldexp ( temp 4-component vector of float)
+0:306            'inF0' ( in 4-component vector of float)
+0:306            'inF1' ( in 4-component vector of float)
 0:307      Sequence
 0:307        move second child to first child ( temp 4-component vector of float)
-0:307          'r046' ( temp 4-component vector of float)
-0:307          log2 ( temp 4-component vector of float)
+0:307          'r039a' ( temp 4-component vector of float)
+0:307          mix ( temp 4-component vector of float)
 0:307            'inF0' ( in 4-component vector of float)
+0:307            'inF1' ( in 4-component vector of float)
+0:307            'inF2' ( in 4-component vector of float)
 0:308      Sequence
-0:308        move second child to first child ( temp 4-component vector of float)
-0:308          'r047' ( temp 4-component vector of float)
-0:308          max ( temp 4-component vector of float)
+0:308        move second child to first child ( temp float)
+0:308          'r043' ( temp float)
+0:308          length ( temp float)
 0:308            'inF0' ( in 4-component vector of float)
-0:308            'inF1' ( in 4-component vector of float)
 0:309      Sequence
 0:309        move second child to first child ( temp 4-component vector of float)
-0:309          'r048' ( temp 4-component vector of float)
-0:309          min ( temp 4-component vector of float)
+0:309          'r044' ( temp 4-component vector of float)
+0:309          log ( temp 4-component vector of float)
 0:309            'inF0' ( in 4-component vector of float)
-0:309            'inF1' ( in 4-component vector of float)
 0:310      Sequence
 0:310        move second child to first child ( temp 4-component vector of float)
-0:310          'r049' ( temp 4-component vector of float)
-0:310          normalize ( temp 4-component vector of float)
-0:310            'inF0' ( in 4-component vector of float)
+0:310          'r045' ( temp 4-component vector of float)
+0:310          vector-scale ( temp 4-component vector of float)
+0:310            log2 ( temp 4-component vector of float)
+0:310              'inF0' ( in 4-component vector of float)
+0:310            Constant:
+0:310              0.301030
 0:311      Sequence
 0:311        move second child to first child ( temp 4-component vector of float)
-0:311          'r050' ( temp 4-component vector of float)
-0:311          pow ( temp 4-component vector of float)
+0:311          'r046' ( temp 4-component vector of float)
+0:311          log2 ( temp 4-component vector of float)
 0:311            'inF0' ( in 4-component vector of float)
-0:311            'inF1' ( in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child ( temp 4-component vector of float)
-0:312          'r051' ( temp 4-component vector of float)
-0:312          radians ( temp 4-component vector of float)
+0:312          'r047' ( temp 4-component vector of float)
+0:312          max ( temp 4-component vector of float)
 0:312            'inF0' ( in 4-component vector of float)
+0:312            'inF1' ( in 4-component vector of float)
 0:313      Sequence
 0:313        move second child to first child ( temp 4-component vector of float)
-0:313          'r052' ( temp 4-component vector of float)
-0:313          divide ( temp 4-component vector of float)
-0:313            Constant:
-0:313              1.000000
+0:313          'r048' ( temp 4-component vector of float)
+0:313          min ( temp 4-component vector of float)
 0:313            'inF0' ( in 4-component vector of float)
+0:313            'inF1' ( in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child ( temp 4-component vector of float)
-0:314          'r053' ( temp 4-component vector of float)
-0:314          reflect ( temp 4-component vector of float)
+0:314          'r049' ( temp 4-component vector of float)
+0:314          normalize ( temp 4-component vector of float)
 0:314            'inF0' ( in 4-component vector of float)
-0:314            'inF1' ( in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child ( temp 4-component vector of float)
-0:315          'r054' ( temp 4-component vector of float)
-0:315          refract ( temp 4-component vector of float)
+0:315          'r050' ( temp 4-component vector of float)
+0:315          pow ( temp 4-component vector of float)
 0:315            'inF0' ( in 4-component vector of float)
 0:315            'inF1' ( in 4-component vector of float)
-0:315            Constant:
-0:315              2.000000
 0:316      Sequence
-0:316        move second child to first child ( temp 4-component vector of uint)
-0:316          'r055' ( temp 4-component vector of uint)
+0:316        move second child to first child ( temp 4-component vector of float)
+0:316          'r051' ( temp 4-component vector of float)
+0:316          radians ( temp 4-component vector of float)
+0:316            'inF0' ( in 4-component vector of float)
+0:317      Sequence
+0:317        move second child to first child ( temp 4-component vector of float)
+0:317          'r052' ( temp 4-component vector of float)
+0:317          divide ( temp 4-component vector of float)
+0:317            Constant:
+0:317              1.000000
+0:317            'inF0' ( in 4-component vector of float)
+0:318      Sequence
+0:318        move second child to first child ( temp 4-component vector of float)
+0:318          'r053' ( temp 4-component vector of float)
+0:318          reflect ( temp 4-component vector of float)
+0:318            'inF0' ( in 4-component vector of float)
+0:318            'inF1' ( in 4-component vector of float)
+0:319      Sequence
+0:319        move second child to first child ( temp 4-component vector of float)
+0:319          'r054' ( temp 4-component vector of float)
+0:319          refract ( temp 4-component vector of float)
+0:319            'inF0' ( in 4-component vector of float)
+0:319            'inF1' ( in 4-component vector of float)
+0:319            Constant:
+0:319              2.000000
+0:320      Sequence
+0:320        move second child to first child ( temp 4-component vector of uint)
+0:320          'r055' ( temp 4-component vector of uint)
 0:?           bitFieldReverse ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:317      Sequence
-0:317        move second child to first child ( temp 4-component vector of float)
-0:317          'r056' ( temp 4-component vector of float)
-0:317          roundEven ( temp 4-component vector of float)
-0:317            'inF0' ( in 4-component vector of float)
-0:318      Sequence
-0:318        move second child to first child ( temp 4-component vector of float)
-0:318          'r057' ( temp 4-component vector of float)
-0:318          inverse sqrt ( temp 4-component vector of float)
-0:318            'inF0' ( in 4-component vector of float)
-0:319      Sequence
-0:319        move second child to first child ( temp 4-component vector of float)
-0:319          'r058' ( temp 4-component vector of float)
-0:319          clamp ( temp 4-component vector of float)
-0:319            'inF0' ( in 4-component vector of float)
-0:319            Constant:
-0:319              0.000000
-0:319            Constant:
-0:319              1.000000
-0:320      Sequence
-0:320        move second child to first child ( temp 4-component vector of float)
-0:320          'r059' ( temp 4-component vector of float)
-0:320          Sign ( temp 4-component vector of float)
-0:320            'inF0' ( in 4-component vector of float)
 0:321      Sequence
 0:321        move second child to first child ( temp 4-component vector of float)
-0:321          'r060' ( temp 4-component vector of float)
-0:321          sine ( temp 4-component vector of float)
+0:321          'r056' ( temp 4-component vector of float)
+0:321          roundEven ( temp 4-component vector of float)
 0:321            'inF0' ( in 4-component vector of float)
 0:322      Sequence
 0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'inF1' ( in 4-component vector of float)
-0:322          sine ( temp 4-component vector of float)
-0:322            'inF0' ( in 4-component vector of float)
-0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'inF2' ( in 4-component vector of float)
-0:322          cosine ( temp 4-component vector of float)
+0:322          'r057' ( temp 4-component vector of float)
+0:322          inverse sqrt ( temp 4-component vector of float)
 0:322            'inF0' ( in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child ( temp 4-component vector of float)
-0:323          'r061' ( temp 4-component vector of float)
-0:323          hyp. sine ( temp 4-component vector of float)
+0:323          'r058' ( temp 4-component vector of float)
+0:323          clamp ( temp 4-component vector of float)
 0:323            'inF0' ( in 4-component vector of float)
+0:323            Constant:
+0:323              0.000000
+0:323            Constant:
+0:323              1.000000
 0:324      Sequence
 0:324        move second child to first child ( temp 4-component vector of float)
-0:324          'r062' ( temp 4-component vector of float)
-0:324          smoothstep ( temp 4-component vector of float)
+0:324          'r059' ( temp 4-component vector of float)
+0:324          Sign ( temp 4-component vector of float)
 0:324            'inF0' ( in 4-component vector of float)
-0:324            'inF1' ( in 4-component vector of float)
-0:324            'inF2' ( in 4-component vector of float)
 0:325      Sequence
 0:325        move second child to first child ( temp 4-component vector of float)
-0:325          'r063' ( temp 4-component vector of float)
-0:325          sqrt ( temp 4-component vector of float)
+0:325          'r060' ( temp 4-component vector of float)
+0:325          sine ( temp 4-component vector of float)
 0:325            'inF0' ( in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'r064' ( temp 4-component vector of float)
-0:326          step ( temp 4-component vector of float)
+0:326          'inF1' ( in 4-component vector of float)
+0:326          sine ( temp 4-component vector of float)
 0:326            'inF0' ( in 4-component vector of float)
-0:326            'inF1' ( in 4-component vector of float)
+0:326        move second child to first child ( temp 4-component vector of float)
+0:326          'inF2' ( in 4-component vector of float)
+0:326          cosine ( temp 4-component vector of float)
+0:326            'inF0' ( in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'r065' ( temp 4-component vector of float)
-0:327          tangent ( temp 4-component vector of float)
+0:327          'r061' ( temp 4-component vector of float)
+0:327          hyp. sine ( temp 4-component vector of float)
 0:327            'inF0' ( in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child ( temp 4-component vector of float)
-0:328          'r066' ( temp 4-component vector of float)
-0:328          hyp. tangent ( temp 4-component vector of float)
+0:328          'r062' ( temp 4-component vector of float)
+0:328          smoothstep ( temp 4-component vector of float)
 0:328            'inF0' ( in 4-component vector of float)
+0:328            'inF1' ( in 4-component vector of float)
+0:328            'inF2' ( in 4-component vector of float)
+0:329      Sequence
+0:329        move second child to first child ( temp 4-component vector of float)
+0:329          'r063' ( temp 4-component vector of float)
+0:329          sqrt ( temp 4-component vector of float)
+0:329            'inF0' ( in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child ( temp 4-component vector of float)
-0:330          'r067' ( temp 4-component vector of float)
-0:330          trunc ( temp 4-component vector of float)
+0:330          'r064' ( temp 4-component vector of float)
+0:330          step ( temp 4-component vector of float)
 0:330            'inF0' ( in 4-component vector of float)
-0:333      Branch: Return with expression
+0:330            'inF1' ( in 4-component vector of float)
+0:331      Sequence
+0:331        move second child to first child ( temp 4-component vector of float)
+0:331          'r065' ( temp 4-component vector of float)
+0:331          tangent ( temp 4-component vector of float)
+0:331            'inF0' ( in 4-component vector of float)
+0:332      Sequence
+0:332        move second child to first child ( temp 4-component vector of float)
+0:332          'r066' ( temp 4-component vector of float)
+0:332          hyp. tangent ( temp 4-component vector of float)
+0:332            'inF0' ( in 4-component vector of float)
+0:334      Sequence
+0:334        move second child to first child ( temp 4-component vector of float)
+0:334          'r067' ( temp 4-component vector of float)
+0:334          trunc ( temp 4-component vector of float)
+0:334            'inF0' ( in 4-component vector of float)
+0:337      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:396  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:396    Function Parameters: 
-0:396      'inF0' ( in 2X2 matrix of float)
-0:396      'inF1' ( in 2X2 matrix of float)
-0:396      'inF2' ( in 2X2 matrix of float)
+0:400  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:400    Function Parameters: 
+0:400      'inF0' ( in 2X2 matrix of float)
+0:400      'inF1' ( in 2X2 matrix of float)
+0:400      'inF2' ( in 2X2 matrix of float)
 0:?     Sequence
-0:398      Sequence
-0:398        move second child to first child ( temp bool)
-0:398          'r000' ( temp bool)
-0:398          all ( temp bool)
-0:398            Convert float to bool ( temp 2X2 matrix of bool)
-0:398              'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r001' ( temp 2X2 matrix of float)
-0:398          Absolute value ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      arc cosine ( temp 2X2 matrix of float)
-0:398        'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp bool)
-0:398          'r003' ( temp bool)
-0:398          any ( temp bool)
-0:398            Convert float to bool ( temp 2X2 matrix of bool)
-0:398              'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r004' ( temp 2X2 matrix of float)
-0:398          arc sine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r005' ( temp 2X2 matrix of float)
-0:398          arc tangent ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r006' ( temp 2X2 matrix of float)
-0:398          arc tangent ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r007' ( temp 2X2 matrix of float)
-0:398          Ceiling ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Test condition and select ( temp void)
-0:398        Condition
-0:398        any ( temp bool)
-0:398          Compare Less Than ( temp 2X2 matrix of bool)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            Constant:
-0:398              0.000000
-0:398              0.000000
-0:398              0.000000
-0:398              0.000000
-0:398        true case
-0:398        Branch: Kill
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r008' ( temp 2X2 matrix of float)
-0:398          clamp ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398            'inF2' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r009' ( temp 2X2 matrix of float)
-0:398          cosine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r010' ( temp 2X2 matrix of float)
-0:398          hyp. cosine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r011' ( temp 2X2 matrix of float)
-0:398          dPdx ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r012' ( temp 2X2 matrix of float)
-0:398          dPdxCoarse ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r013' ( temp 2X2 matrix of float)
-0:398          dPdxFine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r014' ( temp 2X2 matrix of float)
-0:398          dPdy ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r015' ( temp 2X2 matrix of float)
-0:398          dPdyCoarse ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r016' ( temp 2X2 matrix of float)
-0:398          dPdyFine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r017' ( temp 2X2 matrix of float)
-0:398          degrees ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp float)
-0:398          'r018' ( temp float)
-0:398          determinant ( temp float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r019' ( temp 2X2 matrix of float)
-0:398          exp ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'R020' ( temp 2X2 matrix of float)
-0:398          exp2 ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r021' ( temp 2X2 matrix of float)
-0:398          Floor ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r022' ( temp 2X2 matrix of float)
-0:398          mod ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r023' ( temp 2X2 matrix of float)
-0:398          Fraction ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r025' ( temp 2X2 matrix of float)
-0:398          fwidth ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r026' ( temp 2X2 matrix of float)
-0:398          ldexp ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r026a' ( temp 2X2 matrix of float)
-0:398          mix ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398            'inF2' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r027' ( temp 2X2 matrix of float)
-0:398          log ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r028' ( temp 2X2 matrix of float)
-0:398          matrix-scale ( temp 2X2 matrix of float)
-0:398            log2 ( temp 2X2 matrix of float)
-0:398              'inF0' ( in 2X2 matrix of float)
-0:398            Constant:
-0:398              0.301030
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r029' ( temp 2X2 matrix of float)
-0:398          log2 ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r030' ( temp 2X2 matrix of float)
-0:398          max ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r031' ( temp 2X2 matrix of float)
-0:398          min ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r032' ( temp 2X2 matrix of float)
-0:398          pow ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r033' ( temp 2X2 matrix of float)
-0:398          radians ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r034' ( temp 2X2 matrix of float)
-0:398          roundEven ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r035' ( temp 2X2 matrix of float)
-0:398          inverse sqrt ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r036' ( temp 2X2 matrix of float)
-0:398          clamp ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            Constant:
-0:398              0.000000
-0:398            Constant:
-0:398              1.000000
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r037' ( temp 2X2 matrix of float)
-0:398          Sign ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r038' ( temp 2X2 matrix of float)
-0:398          sine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'inF1' ( in 2X2 matrix of float)
-0:398          sine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'inF2' ( in 2X2 matrix of float)
-0:398          cosine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r039' ( temp 2X2 matrix of float)
-0:398          hyp. sine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r049' ( temp 2X2 matrix of float)
-0:398          smoothstep ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398            'inF2' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r041' ( temp 2X2 matrix of float)
-0:398          sqrt ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r042' ( temp 2X2 matrix of float)
-0:398          step ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r043' ( temp 2X2 matrix of float)
-0:398          tangent ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r044' ( temp 2X2 matrix of float)
-0:398          hyp. tangent ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      transpose ( temp 2X2 matrix of float)
-0:398        'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r046' ( temp 2X2 matrix of float)
-0:398          trunc ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:401      Branch: Return with expression
+0:402      Sequence
+0:402        move second child to first child ( temp bool)
+0:402          'r000' ( temp bool)
+0:402          all ( temp bool)
+0:402            Convert float to bool ( temp 2X2 matrix of bool)
+0:402              'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r001' ( temp 2X2 matrix of float)
+0:402          Absolute value ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      arc cosine ( temp 2X2 matrix of float)
+0:402        'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp bool)
+0:402          'r003' ( temp bool)
+0:402          any ( temp bool)
+0:402            Convert float to bool ( temp 2X2 matrix of bool)
+0:402              'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r004' ( temp 2X2 matrix of float)
+0:402          arc sine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r005' ( temp 2X2 matrix of float)
+0:402          arc tangent ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r006' ( temp 2X2 matrix of float)
+0:402          arc tangent ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r007' ( temp 2X2 matrix of float)
+0:402          Ceiling ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Test condition and select ( temp void)
+0:402        Condition
+0:402        any ( temp bool)
+0:402          Compare Less Than ( temp 2X2 matrix of bool)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            Constant:
+0:402              0.000000
+0:402              0.000000
+0:402              0.000000
+0:402              0.000000
+0:402        true case
+0:402        Branch: Kill
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r008' ( temp 2X2 matrix of float)
+0:402          clamp ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402            'inF2' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r009' ( temp 2X2 matrix of float)
+0:402          cosine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r010' ( temp 2X2 matrix of float)
+0:402          hyp. cosine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r011' ( temp 2X2 matrix of float)
+0:402          dPdx ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r012' ( temp 2X2 matrix of float)
+0:402          dPdxCoarse ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r013' ( temp 2X2 matrix of float)
+0:402          dPdxFine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r014' ( temp 2X2 matrix of float)
+0:402          dPdy ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r015' ( temp 2X2 matrix of float)
+0:402          dPdyCoarse ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r016' ( temp 2X2 matrix of float)
+0:402          dPdyFine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r017' ( temp 2X2 matrix of float)
+0:402          degrees ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp float)
+0:402          'r018' ( temp float)
+0:402          determinant ( temp float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r019' ( temp 2X2 matrix of float)
+0:402          exp ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'R020' ( temp 2X2 matrix of float)
+0:402          exp2 ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r021' ( temp 2X2 matrix of float)
+0:402          Floor ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r022' ( temp 2X2 matrix of float)
+0:402          mod ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r023' ( temp 2X2 matrix of float)
+0:402          Fraction ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r025' ( temp 2X2 matrix of float)
+0:402          fwidth ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r026' ( temp 2X2 matrix of float)
+0:402          ldexp ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r026a' ( temp 2X2 matrix of float)
+0:402          mix ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402            'inF2' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r027' ( temp 2X2 matrix of float)
+0:402          log ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r028' ( temp 2X2 matrix of float)
+0:402          matrix-scale ( temp 2X2 matrix of float)
+0:402            log2 ( temp 2X2 matrix of float)
+0:402              'inF0' ( in 2X2 matrix of float)
+0:402            Constant:
+0:402              0.301030
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r029' ( temp 2X2 matrix of float)
+0:402          log2 ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r030' ( temp 2X2 matrix of float)
+0:402          max ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r031' ( temp 2X2 matrix of float)
+0:402          min ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r032' ( temp 2X2 matrix of float)
+0:402          pow ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r033' ( temp 2X2 matrix of float)
+0:402          radians ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r034' ( temp 2X2 matrix of float)
+0:402          roundEven ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r035' ( temp 2X2 matrix of float)
+0:402          inverse sqrt ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r036' ( temp 2X2 matrix of float)
+0:402          clamp ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            Constant:
+0:402              0.000000
+0:402            Constant:
+0:402              1.000000
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r037' ( temp 2X2 matrix of float)
+0:402          Sign ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r038' ( temp 2X2 matrix of float)
+0:402          sine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'inF1' ( in 2X2 matrix of float)
+0:402          sine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'inF2' ( in 2X2 matrix of float)
+0:402          cosine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r039' ( temp 2X2 matrix of float)
+0:402          hyp. sine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r049' ( temp 2X2 matrix of float)
+0:402          smoothstep ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402            'inF2' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r041' ( temp 2X2 matrix of float)
+0:402          sqrt ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r042' ( temp 2X2 matrix of float)
+0:402          step ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r043' ( temp 2X2 matrix of float)
+0:402          tangent ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r044' ( temp 2X2 matrix of float)
+0:402          hyp. tangent ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      transpose ( temp 2X2 matrix of float)
+0:402        'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r046' ( temp 2X2 matrix of float)
+0:402          trunc ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:405      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:405  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:405    Function Parameters: 
-0:405      'inF0' ( in 3X3 matrix of float)
-0:405      'inF1' ( in 3X3 matrix of float)
-0:405      'inF2' ( in 3X3 matrix of float)
+0:409  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:409    Function Parameters: 
+0:409      'inF0' ( in 3X3 matrix of float)
+0:409      'inF1' ( in 3X3 matrix of float)
+0:409      'inF2' ( in 3X3 matrix of float)
 0:?     Sequence
-0:407      Sequence
-0:407        move second child to first child ( temp bool)
-0:407          'r000' ( temp bool)
-0:407          all ( temp bool)
-0:407            Convert float to bool ( temp 3X3 matrix of bool)
-0:407              'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r001' ( temp 3X3 matrix of float)
-0:407          Absolute value ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      arc cosine ( temp 3X3 matrix of float)
-0:407        'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp bool)
-0:407          'r003' ( temp bool)
-0:407          any ( temp bool)
-0:407            Convert float to bool ( temp 3X3 matrix of bool)
-0:407              'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r004' ( temp 3X3 matrix of float)
-0:407          arc sine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r005' ( temp 3X3 matrix of float)
-0:407          arc tangent ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r006' ( temp 3X3 matrix of float)
-0:407          arc tangent ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r007' ( temp 3X3 matrix of float)
-0:407          Ceiling ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Test condition and select ( temp void)
-0:407        Condition
-0:407        any ( temp bool)
-0:407          Compare Less Than ( temp 3X3 matrix of bool)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            Constant:
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407        true case
-0:407        Branch: Kill
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r008' ( temp 3X3 matrix of float)
-0:407          clamp ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407            'inF2' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r009' ( temp 3X3 matrix of float)
-0:407          cosine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r010' ( temp 3X3 matrix of float)
-0:407          hyp. cosine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r011' ( temp 3X3 matrix of float)
-0:407          dPdx ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r012' ( temp 3X3 matrix of float)
-0:407          dPdxCoarse ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r013' ( temp 3X3 matrix of float)
-0:407          dPdxFine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r014' ( temp 3X3 matrix of float)
-0:407          dPdy ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r015' ( temp 3X3 matrix of float)
-0:407          dPdyCoarse ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r016' ( temp 3X3 matrix of float)
-0:407          dPdyFine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r017' ( temp 3X3 matrix of float)
-0:407          degrees ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp float)
-0:407          'r018' ( temp float)
-0:407          determinant ( temp float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r019' ( temp 3X3 matrix of float)
-0:407          exp ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'R020' ( temp 3X3 matrix of float)
-0:407          exp2 ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r021' ( temp 3X3 matrix of float)
-0:407          Floor ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r022' ( temp 3X3 matrix of float)
-0:407          mod ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r023' ( temp 3X3 matrix of float)
-0:407          Fraction ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r025' ( temp 3X3 matrix of float)
-0:407          fwidth ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r026' ( temp 3X3 matrix of float)
-0:407          ldexp ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r026a' ( temp 3X3 matrix of float)
-0:407          mix ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407            'inF2' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r027' ( temp 3X3 matrix of float)
-0:407          log ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r028' ( temp 3X3 matrix of float)
-0:407          matrix-scale ( temp 3X3 matrix of float)
-0:407            log2 ( temp 3X3 matrix of float)
-0:407              'inF0' ( in 3X3 matrix of float)
-0:407            Constant:
-0:407              0.301030
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r029' ( temp 3X3 matrix of float)
-0:407          log2 ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r030' ( temp 3X3 matrix of float)
-0:407          max ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r031' ( temp 3X3 matrix of float)
-0:407          min ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r032' ( temp 3X3 matrix of float)
-0:407          pow ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r033' ( temp 3X3 matrix of float)
-0:407          radians ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r034' ( temp 3X3 matrix of float)
-0:407          roundEven ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r035' ( temp 3X3 matrix of float)
-0:407          inverse sqrt ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r036' ( temp 3X3 matrix of float)
-0:407          clamp ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            Constant:
-0:407              0.000000
-0:407            Constant:
-0:407              1.000000
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r037' ( temp 3X3 matrix of float)
-0:407          Sign ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r038' ( temp 3X3 matrix of float)
-0:407          sine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'inF1' ( in 3X3 matrix of float)
-0:407          sine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'inF2' ( in 3X3 matrix of float)
-0:407          cosine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r039' ( temp 3X3 matrix of float)
-0:407          hyp. sine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r049' ( temp 3X3 matrix of float)
-0:407          smoothstep ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407            'inF2' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r041' ( temp 3X3 matrix of float)
-0:407          sqrt ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r042' ( temp 3X3 matrix of float)
-0:407          step ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r043' ( temp 3X3 matrix of float)
-0:407          tangent ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r044' ( temp 3X3 matrix of float)
-0:407          hyp. tangent ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      transpose ( temp 3X3 matrix of float)
-0:407        'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r046' ( temp 3X3 matrix of float)
-0:407          trunc ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:410      Branch: Return with expression
+0:411      Sequence
+0:411        move second child to first child ( temp bool)
+0:411          'r000' ( temp bool)
+0:411          all ( temp bool)
+0:411            Convert float to bool ( temp 3X3 matrix of bool)
+0:411              'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r001' ( temp 3X3 matrix of float)
+0:411          Absolute value ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      arc cosine ( temp 3X3 matrix of float)
+0:411        'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp bool)
+0:411          'r003' ( temp bool)
+0:411          any ( temp bool)
+0:411            Convert float to bool ( temp 3X3 matrix of bool)
+0:411              'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r004' ( temp 3X3 matrix of float)
+0:411          arc sine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r005' ( temp 3X3 matrix of float)
+0:411          arc tangent ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r006' ( temp 3X3 matrix of float)
+0:411          arc tangent ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r007' ( temp 3X3 matrix of float)
+0:411          Ceiling ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Test condition and select ( temp void)
+0:411        Condition
+0:411        any ( temp bool)
+0:411          Compare Less Than ( temp 3X3 matrix of bool)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            Constant:
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411        true case
+0:411        Branch: Kill
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r008' ( temp 3X3 matrix of float)
+0:411          clamp ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411            'inF2' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r009' ( temp 3X3 matrix of float)
+0:411          cosine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r010' ( temp 3X3 matrix of float)
+0:411          hyp. cosine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r011' ( temp 3X3 matrix of float)
+0:411          dPdx ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r012' ( temp 3X3 matrix of float)
+0:411          dPdxCoarse ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r013' ( temp 3X3 matrix of float)
+0:411          dPdxFine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r014' ( temp 3X3 matrix of float)
+0:411          dPdy ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r015' ( temp 3X3 matrix of float)
+0:411          dPdyCoarse ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r016' ( temp 3X3 matrix of float)
+0:411          dPdyFine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r017' ( temp 3X3 matrix of float)
+0:411          degrees ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp float)
+0:411          'r018' ( temp float)
+0:411          determinant ( temp float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r019' ( temp 3X3 matrix of float)
+0:411          exp ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'R020' ( temp 3X3 matrix of float)
+0:411          exp2 ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r021' ( temp 3X3 matrix of float)
+0:411          Floor ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r022' ( temp 3X3 matrix of float)
+0:411          mod ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r023' ( temp 3X3 matrix of float)
+0:411          Fraction ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r025' ( temp 3X3 matrix of float)
+0:411          fwidth ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r026' ( temp 3X3 matrix of float)
+0:411          ldexp ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r026a' ( temp 3X3 matrix of float)
+0:411          mix ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411            'inF2' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r027' ( temp 3X3 matrix of float)
+0:411          log ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r028' ( temp 3X3 matrix of float)
+0:411          matrix-scale ( temp 3X3 matrix of float)
+0:411            log2 ( temp 3X3 matrix of float)
+0:411              'inF0' ( in 3X3 matrix of float)
+0:411            Constant:
+0:411              0.301030
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r029' ( temp 3X3 matrix of float)
+0:411          log2 ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r030' ( temp 3X3 matrix of float)
+0:411          max ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r031' ( temp 3X3 matrix of float)
+0:411          min ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r032' ( temp 3X3 matrix of float)
+0:411          pow ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r033' ( temp 3X3 matrix of float)
+0:411          radians ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r034' ( temp 3X3 matrix of float)
+0:411          roundEven ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r035' ( temp 3X3 matrix of float)
+0:411          inverse sqrt ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r036' ( temp 3X3 matrix of float)
+0:411          clamp ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            Constant:
+0:411              0.000000
+0:411            Constant:
+0:411              1.000000
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r037' ( temp 3X3 matrix of float)
+0:411          Sign ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r038' ( temp 3X3 matrix of float)
+0:411          sine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'inF1' ( in 3X3 matrix of float)
+0:411          sine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'inF2' ( in 3X3 matrix of float)
+0:411          cosine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r039' ( temp 3X3 matrix of float)
+0:411          hyp. sine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r049' ( temp 3X3 matrix of float)
+0:411          smoothstep ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411            'inF2' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r041' ( temp 3X3 matrix of float)
+0:411          sqrt ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r042' ( temp 3X3 matrix of float)
+0:411          step ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r043' ( temp 3X3 matrix of float)
+0:411          tangent ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r044' ( temp 3X3 matrix of float)
+0:411          hyp. tangent ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      transpose ( temp 3X3 matrix of float)
+0:411        'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r046' ( temp 3X3 matrix of float)
+0:411          trunc ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:414      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -2121,297 +2162,297 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:414  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:414    Function Parameters: 
-0:414      'inF0' ( in 4X4 matrix of float)
-0:414      'inF1' ( in 4X4 matrix of float)
-0:414      'inF2' ( in 4X4 matrix of float)
+0:418  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:418    Function Parameters: 
+0:418      'inF0' ( in 4X4 matrix of float)
+0:418      'inF1' ( in 4X4 matrix of float)
+0:418      'inF2' ( in 4X4 matrix of float)
 0:?     Sequence
-0:416      Sequence
-0:416        move second child to first child ( temp bool)
-0:416          'r000' ( temp bool)
-0:416          all ( temp bool)
-0:416            Convert float to bool ( temp 4X4 matrix of bool)
-0:416              'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r001' ( temp 4X4 matrix of float)
-0:416          Absolute value ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      arc cosine ( temp 4X4 matrix of float)
-0:416        'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp bool)
-0:416          'r003' ( temp bool)
-0:416          any ( temp bool)
-0:416            Convert float to bool ( temp 4X4 matrix of bool)
-0:416              'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r004' ( temp 4X4 matrix of float)
-0:416          arc sine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r005' ( temp 4X4 matrix of float)
-0:416          arc tangent ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r006' ( temp 4X4 matrix of float)
-0:416          arc tangent ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r007' ( temp 4X4 matrix of float)
-0:416          Ceiling ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Test condition and select ( temp void)
-0:416        Condition
-0:416        any ( temp bool)
-0:416          Compare Less Than ( temp 4X4 matrix of bool)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            Constant:
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416        true case
-0:416        Branch: Kill
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r008' ( temp 4X4 matrix of float)
-0:416          clamp ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416            'inF2' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r009' ( temp 4X4 matrix of float)
-0:416          cosine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r010' ( temp 4X4 matrix of float)
-0:416          hyp. cosine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r011' ( temp 4X4 matrix of float)
-0:416          dPdx ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r012' ( temp 4X4 matrix of float)
-0:416          dPdxCoarse ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r013' ( temp 4X4 matrix of float)
-0:416          dPdxFine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r014' ( temp 4X4 matrix of float)
-0:416          dPdy ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r015' ( temp 4X4 matrix of float)
-0:416          dPdyCoarse ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r016' ( temp 4X4 matrix of float)
-0:416          dPdyFine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r017' ( temp 4X4 matrix of float)
-0:416          degrees ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp float)
-0:416          'r018' ( temp float)
-0:416          determinant ( temp float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r019' ( temp 4X4 matrix of float)
-0:416          exp ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'R020' ( temp 4X4 matrix of float)
-0:416          exp2 ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r021' ( temp 4X4 matrix of float)
-0:416          Floor ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r022' ( temp 4X4 matrix of float)
-0:416          mod ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r023' ( temp 4X4 matrix of float)
-0:416          Fraction ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r025' ( temp 4X4 matrix of float)
-0:416          fwidth ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r026' ( temp 4X4 matrix of float)
-0:416          ldexp ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r026a' ( temp 4X4 matrix of float)
-0:416          mix ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416            'inF2' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r027' ( temp 4X4 matrix of float)
-0:416          log ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r028' ( temp 4X4 matrix of float)
-0:416          matrix-scale ( temp 4X4 matrix of float)
-0:416            log2 ( temp 4X4 matrix of float)
-0:416              'inF0' ( in 4X4 matrix of float)
-0:416            Constant:
-0:416              0.301030
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r029' ( temp 4X4 matrix of float)
-0:416          log2 ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r030' ( temp 4X4 matrix of float)
-0:416          max ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r031' ( temp 4X4 matrix of float)
-0:416          min ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r032' ( temp 4X4 matrix of float)
-0:416          pow ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r033' ( temp 4X4 matrix of float)
-0:416          radians ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r034' ( temp 4X4 matrix of float)
-0:416          roundEven ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r035' ( temp 4X4 matrix of float)
-0:416          inverse sqrt ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r036' ( temp 4X4 matrix of float)
-0:416          clamp ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            Constant:
-0:416              0.000000
-0:416            Constant:
-0:416              1.000000
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r037' ( temp 4X4 matrix of float)
-0:416          Sign ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r038' ( temp 4X4 matrix of float)
-0:416          sine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'inF1' ( in 4X4 matrix of float)
-0:416          sine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'inF2' ( in 4X4 matrix of float)
-0:416          cosine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r039' ( temp 4X4 matrix of float)
-0:416          hyp. sine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r049' ( temp 4X4 matrix of float)
-0:416          smoothstep ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416            'inF2' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r041' ( temp 4X4 matrix of float)
-0:416          sqrt ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r042' ( temp 4X4 matrix of float)
-0:416          step ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r043' ( temp 4X4 matrix of float)
-0:416          tangent ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r044' ( temp 4X4 matrix of float)
-0:416          hyp. tangent ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      transpose ( temp 4X4 matrix of float)
-0:416        'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r046' ( temp 4X4 matrix of float)
-0:416          trunc ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:419      Branch: Return with expression
+0:420      Sequence
+0:420        move second child to first child ( temp bool)
+0:420          'r000' ( temp bool)
+0:420          all ( temp bool)
+0:420            Convert float to bool ( temp 4X4 matrix of bool)
+0:420              'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r001' ( temp 4X4 matrix of float)
+0:420          Absolute value ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      arc cosine ( temp 4X4 matrix of float)
+0:420        'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp bool)
+0:420          'r003' ( temp bool)
+0:420          any ( temp bool)
+0:420            Convert float to bool ( temp 4X4 matrix of bool)
+0:420              'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r004' ( temp 4X4 matrix of float)
+0:420          arc sine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r005' ( temp 4X4 matrix of float)
+0:420          arc tangent ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r006' ( temp 4X4 matrix of float)
+0:420          arc tangent ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r007' ( temp 4X4 matrix of float)
+0:420          Ceiling ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Test condition and select ( temp void)
+0:420        Condition
+0:420        any ( temp bool)
+0:420          Compare Less Than ( temp 4X4 matrix of bool)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            Constant:
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420        true case
+0:420        Branch: Kill
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r008' ( temp 4X4 matrix of float)
+0:420          clamp ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420            'inF2' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r009' ( temp 4X4 matrix of float)
+0:420          cosine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r010' ( temp 4X4 matrix of float)
+0:420          hyp. cosine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r011' ( temp 4X4 matrix of float)
+0:420          dPdx ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r012' ( temp 4X4 matrix of float)
+0:420          dPdxCoarse ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r013' ( temp 4X4 matrix of float)
+0:420          dPdxFine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r014' ( temp 4X4 matrix of float)
+0:420          dPdy ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r015' ( temp 4X4 matrix of float)
+0:420          dPdyCoarse ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r016' ( temp 4X4 matrix of float)
+0:420          dPdyFine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r017' ( temp 4X4 matrix of float)
+0:420          degrees ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp float)
+0:420          'r018' ( temp float)
+0:420          determinant ( temp float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r019' ( temp 4X4 matrix of float)
+0:420          exp ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'R020' ( temp 4X4 matrix of float)
+0:420          exp2 ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r021' ( temp 4X4 matrix of float)
+0:420          Floor ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r022' ( temp 4X4 matrix of float)
+0:420          mod ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r023' ( temp 4X4 matrix of float)
+0:420          Fraction ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r025' ( temp 4X4 matrix of float)
+0:420          fwidth ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r026' ( temp 4X4 matrix of float)
+0:420          ldexp ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r026a' ( temp 4X4 matrix of float)
+0:420          mix ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420            'inF2' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r027' ( temp 4X4 matrix of float)
+0:420          log ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r028' ( temp 4X4 matrix of float)
+0:420          matrix-scale ( temp 4X4 matrix of float)
+0:420            log2 ( temp 4X4 matrix of float)
+0:420              'inF0' ( in 4X4 matrix of float)
+0:420            Constant:
+0:420              0.301030
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r029' ( temp 4X4 matrix of float)
+0:420          log2 ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r030' ( temp 4X4 matrix of float)
+0:420          max ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r031' ( temp 4X4 matrix of float)
+0:420          min ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r032' ( temp 4X4 matrix of float)
+0:420          pow ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r033' ( temp 4X4 matrix of float)
+0:420          radians ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r034' ( temp 4X4 matrix of float)
+0:420          roundEven ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r035' ( temp 4X4 matrix of float)
+0:420          inverse sqrt ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r036' ( temp 4X4 matrix of float)
+0:420          clamp ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            Constant:
+0:420              0.000000
+0:420            Constant:
+0:420              1.000000
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r037' ( temp 4X4 matrix of float)
+0:420          Sign ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r038' ( temp 4X4 matrix of float)
+0:420          sine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'inF1' ( in 4X4 matrix of float)
+0:420          sine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'inF2' ( in 4X4 matrix of float)
+0:420          cosine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r039' ( temp 4X4 matrix of float)
+0:420          hyp. sine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r049' ( temp 4X4 matrix of float)
+0:420          smoothstep ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420            'inF2' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r041' ( temp 4X4 matrix of float)
+0:420          sqrt ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r042' ( temp 4X4 matrix of float)
+0:420          step ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r043' ( temp 4X4 matrix of float)
+0:420          tangent ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r044' ( temp 4X4 matrix of float)
+0:420          hyp. tangent ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      transpose ( temp 4X4 matrix of float)
+0:420        'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r046' ( temp 4X4 matrix of float)
+0:420          trunc ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:423      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -2429,334 +2470,334 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:437  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:437    Function Parameters: 
-0:437      'inF0' ( in float)
-0:437      'inF1' ( in float)
-0:437      'inFV0' ( in 2-component vector of float)
-0:437      'inFV1' ( in 2-component vector of float)
-0:437      'inFM0' ( in 2X2 matrix of float)
-0:437      'inFM1' ( in 2X2 matrix of float)
+0:441  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:441    Function Parameters: 
+0:441      'inF0' ( in float)
+0:441      'inF1' ( in float)
+0:441      'inFV0' ( in 2-component vector of float)
+0:441      'inFV1' ( in 2-component vector of float)
+0:441      'inFM0' ( in 2X2 matrix of float)
+0:441      'inFM1' ( in 2X2 matrix of float)
 0:?     Sequence
-0:438      Sequence
-0:438        move second child to first child ( temp float)
-0:438          'r0' ( temp float)
-0:438          component-wise multiply ( temp float)
-0:438            'inF1' ( in float)
-0:438            'inF0' ( in float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2-component vector of float)
-0:438          'r1' ( temp 2-component vector of float)
-0:438          vector-scale ( temp 2-component vector of float)
-0:438            'inF0' ( in float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2-component vector of float)
-0:438          'r2' ( temp 2-component vector of float)
-0:438          vector-scale ( temp 2-component vector of float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438            'inF0' ( in float)
-0:438      Sequence
-0:438        move second child to first child ( temp float)
-0:438          'r3' ( temp float)
-0:438          dot-product ( temp float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438            'inFV1' ( in 2-component vector of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2-component vector of float)
-0:438          'r4' ( temp 2-component vector of float)
-0:438          vector-times-matrix ( temp 2-component vector of float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2-component vector of float)
-0:438          'r5' ( temp 2-component vector of float)
-0:438          matrix-times-vector ( temp 2-component vector of float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2X2 matrix of float)
-0:438          'r6' ( temp 2X2 matrix of float)
-0:438          matrix-scale ( temp 2X2 matrix of float)
-0:438            'inF0' ( in float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2X2 matrix of float)
-0:438          'r7' ( temp 2X2 matrix of float)
-0:438          matrix-scale ( temp 2X2 matrix of float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:438            'inF0' ( in float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2X2 matrix of float)
-0:438          'r8' ( temp 2X2 matrix of float)
-0:438          matrix-multiply ( temp 2X2 matrix of float)
-0:438            'inFM1' ( in 2X2 matrix of float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:444  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:444    Function Parameters: 
-0:444      'inF0' ( in float)
-0:444      'inF1' ( in float)
-0:444      'inFV0' ( in 3-component vector of float)
-0:444      'inFV1' ( in 3-component vector of float)
-0:444      'inFM0' ( in 3X3 matrix of float)
-0:444      'inFM1' ( in 3X3 matrix of float)
+0:442      Sequence
+0:442        move second child to first child ( temp float)
+0:442          'r0' ( temp float)
+0:442          component-wise multiply ( temp float)
+0:442            'inF1' ( in float)
+0:442            'inF0' ( in float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2-component vector of float)
+0:442          'r1' ( temp 2-component vector of float)
+0:442          vector-scale ( temp 2-component vector of float)
+0:442            'inF0' ( in float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2-component vector of float)
+0:442          'r2' ( temp 2-component vector of float)
+0:442          vector-scale ( temp 2-component vector of float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442            'inF0' ( in float)
+0:442      Sequence
+0:442        move second child to first child ( temp float)
+0:442          'r3' ( temp float)
+0:442          dot-product ( temp float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442            'inFV1' ( in 2-component vector of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2-component vector of float)
+0:442          'r4' ( temp 2-component vector of float)
+0:442          vector-times-matrix ( temp 2-component vector of float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2-component vector of float)
+0:442          'r5' ( temp 2-component vector of float)
+0:442          matrix-times-vector ( temp 2-component vector of float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2X2 matrix of float)
+0:442          'r6' ( temp 2X2 matrix of float)
+0:442          matrix-scale ( temp 2X2 matrix of float)
+0:442            'inF0' ( in float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2X2 matrix of float)
+0:442          'r7' ( temp 2X2 matrix of float)
+0:442          matrix-scale ( temp 2X2 matrix of float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:442            'inF0' ( in float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2X2 matrix of float)
+0:442          'r8' ( temp 2X2 matrix of float)
+0:442          matrix-multiply ( temp 2X2 matrix of float)
+0:442            'inFM1' ( in 2X2 matrix of float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:448  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:448    Function Parameters: 
+0:448      'inF0' ( in float)
+0:448      'inF1' ( in float)
+0:448      'inFV0' ( in 3-component vector of float)
+0:448      'inFV1' ( in 3-component vector of float)
+0:448      'inFM0' ( in 3X3 matrix of float)
+0:448      'inFM1' ( in 3X3 matrix of float)
 0:?     Sequence
-0:445      Sequence
-0:445        move second child to first child ( temp float)
-0:445          'r0' ( temp float)
-0:445          component-wise multiply ( temp float)
-0:445            'inF1' ( in float)
-0:445            'inF0' ( in float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3-component vector of float)
-0:445          'r1' ( temp 3-component vector of float)
-0:445          vector-scale ( temp 3-component vector of float)
-0:445            'inF0' ( in float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3-component vector of float)
-0:445          'r2' ( temp 3-component vector of float)
-0:445          vector-scale ( temp 3-component vector of float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445            'inF0' ( in float)
-0:445      Sequence
-0:445        move second child to first child ( temp float)
-0:445          'r3' ( temp float)
-0:445          dot-product ( temp float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445            'inFV1' ( in 3-component vector of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3-component vector of float)
-0:445          'r4' ( temp 3-component vector of float)
-0:445          vector-times-matrix ( temp 3-component vector of float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3-component vector of float)
-0:445          'r5' ( temp 3-component vector of float)
-0:445          matrix-times-vector ( temp 3-component vector of float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3X3 matrix of float)
-0:445          'r6' ( temp 3X3 matrix of float)
-0:445          matrix-scale ( temp 3X3 matrix of float)
-0:445            'inF0' ( in float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3X3 matrix of float)
-0:445          'r7' ( temp 3X3 matrix of float)
-0:445          matrix-scale ( temp 3X3 matrix of float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:445            'inF0' ( in float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3X3 matrix of float)
-0:445          'r8' ( temp 3X3 matrix of float)
-0:445          matrix-multiply ( temp 3X3 matrix of float)
-0:445            'inFM1' ( in 3X3 matrix of float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:451  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:451    Function Parameters: 
-0:451      'inF0' ( in float)
-0:451      'inF1' ( in float)
-0:451      'inFV0' ( in 4-component vector of float)
-0:451      'inFV1' ( in 4-component vector of float)
-0:451      'inFM0' ( in 4X4 matrix of float)
-0:451      'inFM1' ( in 4X4 matrix of float)
+0:449      Sequence
+0:449        move second child to first child ( temp float)
+0:449          'r0' ( temp float)
+0:449          component-wise multiply ( temp float)
+0:449            'inF1' ( in float)
+0:449            'inF0' ( in float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3-component vector of float)
+0:449          'r1' ( temp 3-component vector of float)
+0:449          vector-scale ( temp 3-component vector of float)
+0:449            'inF0' ( in float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3-component vector of float)
+0:449          'r2' ( temp 3-component vector of float)
+0:449          vector-scale ( temp 3-component vector of float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449            'inF0' ( in float)
+0:449      Sequence
+0:449        move second child to first child ( temp float)
+0:449          'r3' ( temp float)
+0:449          dot-product ( temp float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449            'inFV1' ( in 3-component vector of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3-component vector of float)
+0:449          'r4' ( temp 3-component vector of float)
+0:449          vector-times-matrix ( temp 3-component vector of float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3-component vector of float)
+0:449          'r5' ( temp 3-component vector of float)
+0:449          matrix-times-vector ( temp 3-component vector of float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3X3 matrix of float)
+0:449          'r6' ( temp 3X3 matrix of float)
+0:449          matrix-scale ( temp 3X3 matrix of float)
+0:449            'inF0' ( in float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3X3 matrix of float)
+0:449          'r7' ( temp 3X3 matrix of float)
+0:449          matrix-scale ( temp 3X3 matrix of float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:449            'inF0' ( in float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3X3 matrix of float)
+0:449          'r8' ( temp 3X3 matrix of float)
+0:449          matrix-multiply ( temp 3X3 matrix of float)
+0:449            'inFM1' ( in 3X3 matrix of float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:455  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:455    Function Parameters: 
+0:455      'inF0' ( in float)
+0:455      'inF1' ( in float)
+0:455      'inFV0' ( in 4-component vector of float)
+0:455      'inFV1' ( in 4-component vector of float)
+0:455      'inFM0' ( in 4X4 matrix of float)
+0:455      'inFM1' ( in 4X4 matrix of float)
 0:?     Sequence
-0:452      Sequence
-0:452        move second child to first child ( temp float)
-0:452          'r0' ( temp float)
-0:452          component-wise multiply ( temp float)
-0:452            'inF1' ( in float)
-0:452            'inF0' ( in float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4-component vector of float)
-0:452          'r1' ( temp 4-component vector of float)
-0:452          vector-scale ( temp 4-component vector of float)
-0:452            'inF0' ( in float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4-component vector of float)
-0:452          'r2' ( temp 4-component vector of float)
-0:452          vector-scale ( temp 4-component vector of float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452            'inF0' ( in float)
-0:452      Sequence
-0:452        move second child to first child ( temp float)
-0:452          'r3' ( temp float)
-0:452          dot-product ( temp float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452            'inFV1' ( in 4-component vector of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4-component vector of float)
-0:452          'r4' ( temp 4-component vector of float)
-0:452          vector-times-matrix ( temp 4-component vector of float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4-component vector of float)
-0:452          'r5' ( temp 4-component vector of float)
-0:452          matrix-times-vector ( temp 4-component vector of float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4X4 matrix of float)
-0:452          'r6' ( temp 4X4 matrix of float)
-0:452          matrix-scale ( temp 4X4 matrix of float)
-0:452            'inF0' ( in float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4X4 matrix of float)
-0:452          'r7' ( temp 4X4 matrix of float)
-0:452          matrix-scale ( temp 4X4 matrix of float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:452            'inF0' ( in float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4X4 matrix of float)
-0:452          'r8' ( temp 4X4 matrix of float)
-0:452          matrix-multiply ( temp 4X4 matrix of float)
-0:452            'inFM1' ( in 4X4 matrix of float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:461  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:461    Function Parameters: 
-0:461      'inF0' ( in float)
-0:461      'inF1' ( in float)
-0:461      'inFV2' ( in 2-component vector of float)
-0:461      'inFV3' ( in 3-component vector of float)
-0:461      'inFM2x3' ( in 2X3 matrix of float)
-0:461      'inFM3x2' ( in 3X2 matrix of float)
-0:461      'inFM3x3' ( in 3X3 matrix of float)
-0:461      'inFM3x4' ( in 3X4 matrix of float)
-0:461      'inFM2x4' ( in 2X4 matrix of float)
+0:456      Sequence
+0:456        move second child to first child ( temp float)
+0:456          'r0' ( temp float)
+0:456          component-wise multiply ( temp float)
+0:456            'inF1' ( in float)
+0:456            'inF0' ( in float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4-component vector of float)
+0:456          'r1' ( temp 4-component vector of float)
+0:456          vector-scale ( temp 4-component vector of float)
+0:456            'inF0' ( in float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4-component vector of float)
+0:456          'r2' ( temp 4-component vector of float)
+0:456          vector-scale ( temp 4-component vector of float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456            'inF0' ( in float)
+0:456      Sequence
+0:456        move second child to first child ( temp float)
+0:456          'r3' ( temp float)
+0:456          dot-product ( temp float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456            'inFV1' ( in 4-component vector of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4-component vector of float)
+0:456          'r4' ( temp 4-component vector of float)
+0:456          vector-times-matrix ( temp 4-component vector of float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4-component vector of float)
+0:456          'r5' ( temp 4-component vector of float)
+0:456          matrix-times-vector ( temp 4-component vector of float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4X4 matrix of float)
+0:456          'r6' ( temp 4X4 matrix of float)
+0:456          matrix-scale ( temp 4X4 matrix of float)
+0:456            'inF0' ( in float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4X4 matrix of float)
+0:456          'r7' ( temp 4X4 matrix of float)
+0:456          matrix-scale ( temp 4X4 matrix of float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:456            'inF0' ( in float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4X4 matrix of float)
+0:456          'r8' ( temp 4X4 matrix of float)
+0:456          matrix-multiply ( temp 4X4 matrix of float)
+0:456            'inFM1' ( in 4X4 matrix of float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:465  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:465    Function Parameters: 
+0:465      'inF0' ( in float)
+0:465      'inF1' ( in float)
+0:465      'inFV2' ( in 2-component vector of float)
+0:465      'inFV3' ( in 3-component vector of float)
+0:465      'inFM2x3' ( in 2X3 matrix of float)
+0:465      'inFM3x2' ( in 3X2 matrix of float)
+0:465      'inFM3x3' ( in 3X3 matrix of float)
+0:465      'inFM3x4' ( in 3X4 matrix of float)
+0:465      'inFM2x4' ( in 2X4 matrix of float)
 0:?     Sequence
-0:462      Sequence
-0:462        move second child to first child ( temp float)
-0:462          'r00' ( temp float)
-0:462          component-wise multiply ( temp float)
-0:462            'inF1' ( in float)
-0:462            'inF0' ( in float)
-0:463      Sequence
-0:463        move second child to first child ( temp 2-component vector of float)
-0:463          'r01' ( temp 2-component vector of float)
-0:463          vector-scale ( temp 2-component vector of float)
-0:463            'inF0' ( in float)
-0:463            'inFV2' ( in 2-component vector of float)
-0:464      Sequence
-0:464        move second child to first child ( temp 3-component vector of float)
-0:464          'r02' ( temp 3-component vector of float)
-0:464          vector-scale ( temp 3-component vector of float)
-0:464            'inF0' ( in float)
-0:464            'inFV3' ( in 3-component vector of float)
-0:465      Sequence
-0:465        move second child to first child ( temp 2-component vector of float)
-0:465          'r03' ( temp 2-component vector of float)
-0:465          vector-scale ( temp 2-component vector of float)
-0:465            'inFV2' ( in 2-component vector of float)
-0:465            'inF0' ( in float)
 0:466      Sequence
-0:466        move second child to first child ( temp 3-component vector of float)
-0:466          'r04' ( temp 3-component vector of float)
-0:466          vector-scale ( temp 3-component vector of float)
-0:466            'inFV3' ( in 3-component vector of float)
+0:466        move second child to first child ( temp float)
+0:466          'r00' ( temp float)
+0:466          component-wise multiply ( temp float)
+0:466            'inF1' ( in float)
 0:466            'inF0' ( in float)
 0:467      Sequence
-0:467        move second child to first child ( temp float)
-0:467          'r05' ( temp float)
-0:467          dot-product ( temp float)
-0:467            'inFV2' ( in 2-component vector of float)
+0:467        move second child to first child ( temp 2-component vector of float)
+0:467          'r01' ( temp 2-component vector of float)
+0:467          vector-scale ( temp 2-component vector of float)
+0:467            'inF0' ( in float)
 0:467            'inFV2' ( in 2-component vector of float)
 0:468      Sequence
-0:468        move second child to first child ( temp float)
-0:468          'r06' ( temp float)
-0:468          dot-product ( temp float)
-0:468            'inFV3' ( in 3-component vector of float)
+0:468        move second child to first child ( temp 3-component vector of float)
+0:468          'r02' ( temp 3-component vector of float)
+0:468          vector-scale ( temp 3-component vector of float)
+0:468            'inF0' ( in float)
 0:468            'inFV3' ( in 3-component vector of float)
 0:469      Sequence
-0:469        move second child to first child ( temp 3-component vector of float)
-0:469          'r07' ( temp 3-component vector of float)
-0:469          matrix-times-vector ( temp 3-component vector of float)
-0:469            'inFM2x3' ( in 2X3 matrix of float)
+0:469        move second child to first child ( temp 2-component vector of float)
+0:469          'r03' ( temp 2-component vector of float)
+0:469          vector-scale ( temp 2-component vector of float)
 0:469            'inFV2' ( in 2-component vector of float)
+0:469            'inF0' ( in float)
 0:470      Sequence
-0:470        move second child to first child ( temp 2-component vector of float)
-0:470          'r08' ( temp 2-component vector of float)
-0:470          matrix-times-vector ( temp 2-component vector of float)
-0:470            'inFM3x2' ( in 3X2 matrix of float)
+0:470        move second child to first child ( temp 3-component vector of float)
+0:470          'r04' ( temp 3-component vector of float)
+0:470          vector-scale ( temp 3-component vector of float)
 0:470            'inFV3' ( in 3-component vector of float)
+0:470            'inF0' ( in float)
 0:471      Sequence
-0:471        move second child to first child ( temp 2-component vector of float)
-0:471          'r09' ( temp 2-component vector of float)
-0:471          vector-times-matrix ( temp 2-component vector of float)
-0:471            'inFV3' ( in 3-component vector of float)
-0:471            'inFM2x3' ( in 2X3 matrix of float)
+0:471        move second child to first child ( temp float)
+0:471          'r05' ( temp float)
+0:471          dot-product ( temp float)
+0:471            'inFV2' ( in 2-component vector of float)
+0:471            'inFV2' ( in 2-component vector of float)
 0:472      Sequence
-0:472        move second child to first child ( temp 3-component vector of float)
-0:472          'r10' ( temp 3-component vector of float)
-0:472          vector-times-matrix ( temp 3-component vector of float)
-0:472            'inFV2' ( in 2-component vector of float)
-0:472            'inFM3x2' ( in 3X2 matrix of float)
+0:472        move second child to first child ( temp float)
+0:472          'r06' ( temp float)
+0:472          dot-product ( temp float)
+0:472            'inFV3' ( in 3-component vector of float)
+0:472            'inFV3' ( in 3-component vector of float)
 0:473      Sequence
-0:473        move second child to first child ( temp 2X3 matrix of float)
-0:473          'r11' ( temp 2X3 matrix of float)
-0:473          matrix-scale ( temp 2X3 matrix of float)
-0:473            'inF0' ( in float)
+0:473        move second child to first child ( temp 3-component vector of float)
+0:473          'r07' ( temp 3-component vector of float)
+0:473          matrix-times-vector ( temp 3-component vector of float)
 0:473            'inFM2x3' ( in 2X3 matrix of float)
+0:473            'inFV2' ( in 2-component vector of float)
 0:474      Sequence
-0:474        move second child to first child ( temp 3X2 matrix of float)
-0:474          'r12' ( temp 3X2 matrix of float)
-0:474          matrix-scale ( temp 3X2 matrix of float)
-0:474            'inF0' ( in float)
+0:474        move second child to first child ( temp 2-component vector of float)
+0:474          'r08' ( temp 2-component vector of float)
+0:474          matrix-times-vector ( temp 2-component vector of float)
 0:474            'inFM3x2' ( in 3X2 matrix of float)
+0:474            'inFV3' ( in 3-component vector of float)
 0:475      Sequence
-0:475        move second child to first child ( temp 2X2 matrix of float)
-0:475          'r13' ( temp 2X2 matrix of float)
-0:475          matrix-multiply ( temp 2X2 matrix of float)
-0:475            'inFM3x2' ( in 3X2 matrix of float)
+0:475        move second child to first child ( temp 2-component vector of float)
+0:475          'r09' ( temp 2-component vector of float)
+0:475          vector-times-matrix ( temp 2-component vector of float)
+0:475            'inFV3' ( in 3-component vector of float)
 0:475            'inFM2x3' ( in 2X3 matrix of float)
 0:476      Sequence
-0:476        move second child to first child ( temp 2X3 matrix of float)
-0:476          'r14' ( temp 2X3 matrix of float)
-0:476          matrix-multiply ( temp 2X3 matrix of float)
-0:476            'inFM3x3' ( in 3X3 matrix of float)
-0:476            'inFM2x3' ( in 2X3 matrix of float)
+0:476        move second child to first child ( temp 3-component vector of float)
+0:476          'r10' ( temp 3-component vector of float)
+0:476          vector-times-matrix ( temp 3-component vector of float)
+0:476            'inFV2' ( in 2-component vector of float)
+0:476            'inFM3x2' ( in 3X2 matrix of float)
 0:477      Sequence
-0:477        move second child to first child ( temp 2X4 matrix of float)
-0:477          'r15' ( temp 2X4 matrix of float)
-0:477          matrix-multiply ( temp 2X4 matrix of float)
-0:477            'inFM3x4' ( in 3X4 matrix of float)
+0:477        move second child to first child ( temp 2X3 matrix of float)
+0:477          'r11' ( temp 2X3 matrix of float)
+0:477          matrix-scale ( temp 2X3 matrix of float)
+0:477            'inF0' ( in float)
 0:477            'inFM2x3' ( in 2X3 matrix of float)
 0:478      Sequence
-0:478        move second child to first child ( temp 3X4 matrix of float)
-0:478          'r16' ( temp 3X4 matrix of float)
-0:478          matrix-multiply ( temp 3X4 matrix of float)
-0:478            'inFM2x4' ( in 2X4 matrix of float)
+0:478        move second child to first child ( temp 3X2 matrix of float)
+0:478          'r12' ( temp 3X2 matrix of float)
+0:478          matrix-scale ( temp 3X2 matrix of float)
+0:478            'inF0' ( in float)
 0:478            'inFM3x2' ( in 3X2 matrix of float)
-0:484  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:484    Function Parameters: 
+0:479      Sequence
+0:479        move second child to first child ( temp 2X2 matrix of float)
+0:479          'r13' ( temp 2X2 matrix of float)
+0:479          matrix-multiply ( temp 2X2 matrix of float)
+0:479            'inFM3x2' ( in 3X2 matrix of float)
+0:479            'inFM2x3' ( in 2X3 matrix of float)
+0:480      Sequence
+0:480        move second child to first child ( temp 2X3 matrix of float)
+0:480          'r14' ( temp 2X3 matrix of float)
+0:480          matrix-multiply ( temp 2X3 matrix of float)
+0:480            'inFM3x3' ( in 3X3 matrix of float)
+0:480            'inFM2x3' ( in 2X3 matrix of float)
+0:481      Sequence
+0:481        move second child to first child ( temp 2X4 matrix of float)
+0:481          'r15' ( temp 2X4 matrix of float)
+0:481          matrix-multiply ( temp 2X4 matrix of float)
+0:481            'inFM3x4' ( in 3X4 matrix of float)
+0:481            'inFM2x3' ( in 2X3 matrix of float)
+0:482      Sequence
+0:482        move second child to first child ( temp 3X4 matrix of float)
+0:482          'r16' ( temp 3X4 matrix of float)
+0:482          matrix-multiply ( temp 3X4 matrix of float)
+0:482            'inFM2x4' ( in 2X4 matrix of float)
+0:482            'inFM3x2' ( in 3X2 matrix of float)
+0:488  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:488    Function Parameters: 
 0:?     Sequence
-0:486      move second child to first child ( temp 4-component vector of float)
-0:486        color: direct index for structure ( temp 4-component vector of float)
-0:486          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:486          Constant:
-0:486            0 (const int)
-0:486        Constant:
-0:486          1.000000
-0:486          1.000000
-0:486          1.000000
-0:486          1.000000
-0:487      Branch: Return with expression
-0:487        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:484  Function Definition: main( ( temp void)
-0:484    Function Parameters: 
+0:490      move second child to first child ( temp 4-component vector of float)
+0:490        color: direct index for structure ( temp 4-component vector of float)
+0:490          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:490          Constant:
+0:490            0 (const int)
+0:490        Constant:
+0:490          1.000000
+0:490          1.000000
+0:490          1.000000
+0:490          1.000000
+0:491      Branch: Return with expression
+0:491        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:488  Function Definition: main( ( temp void)
+0:488    Function Parameters: 
 0:?     Sequence
-0:484      Sequence
-0:484        move second child to first child ( temp 4-component vector of float)
+0:488      Sequence
+0:488        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:484          color: direct index for structure ( temp 4-component vector of float)
-0:484            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:484            Constant:
-0:484              0 (const int)
+0:488          color: direct index for structure ( temp 4-component vector of float)
+0:488            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:488            Constant:
+0:488              0 (const int)
 0:?   Linker Objects
 0:?     'gs_ua' ( shared uint)
 0:?     'gs_ub' ( shared uint)
@@ -2860,2034 +2901,2075 @@
 0:33            0.000000
 0:33        true case
 0:33        Branch: Kill
-0:34      Sequence
-0:34        move second child to first child ( temp float)
-0:34          'r014' ( temp float)
-0:34          cosine ( temp float)
-0:34            'inF0' ( in float)
+0:34      Test condition and select ( temp void)
+0:34        Condition
+0:34        Compare Less Than ( temp bool)
+0:34          'r005' ( temp int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        true case
+0:34        Branch: Kill
 0:35      Sequence
 0:35        move second child to first child ( temp float)
-0:35          'r015' ( temp float)
-0:35          hyp. cosine ( temp float)
+0:35          'r014' ( temp float)
+0:35          cosine ( temp float)
 0:35            'inF0' ( in float)
 0:36      Sequence
-0:36        move second child to first child ( temp int)
-0:36          'r016' ( temp int)
-0:36          bitCount ( temp int)
-0:36            Constant:
-0:36              7 (const int)
+0:36        move second child to first child ( temp float)
+0:36          'r015' ( temp float)
+0:36          hyp. cosine ( temp float)
+0:36            'inF0' ( in float)
 0:37      Sequence
-0:37        move second child to first child ( temp float)
-0:37          'r017' ( temp float)
-0:37          dPdx ( temp float)
-0:37            'inF0' ( in float)
+0:37        move second child to first child ( temp int)
+0:37          'r016' ( temp int)
+0:37          bitCount ( temp int)
+0:37            Constant:
+0:37              7 (const int)
 0:38      Sequence
 0:38        move second child to first child ( temp float)
-0:38          'r018' ( temp float)
-0:38          dPdxCoarse ( temp float)
+0:38          'r017' ( temp float)
+0:38          dPdx ( temp float)
 0:38            'inF0' ( in float)
 0:39      Sequence
 0:39        move second child to first child ( temp float)
-0:39          'r019' ( temp float)
-0:39          dPdxFine ( temp float)
+0:39          'r018' ( temp float)
+0:39          dPdxCoarse ( temp float)
 0:39            'inF0' ( in float)
 0:40      Sequence
 0:40        move second child to first child ( temp float)
-0:40          'r020' ( temp float)
-0:40          dPdy ( temp float)
+0:40          'r019' ( temp float)
+0:40          dPdxFine ( temp float)
 0:40            'inF0' ( in float)
 0:41      Sequence
 0:41        move second child to first child ( temp float)
-0:41          'r021' ( temp float)
-0:41          dPdyCoarse ( temp float)
+0:41          'r020' ( temp float)
+0:41          dPdy ( temp float)
 0:41            'inF0' ( in float)
 0:42      Sequence
 0:42        move second child to first child ( temp float)
-0:42          'r022' ( temp float)
-0:42          dPdyFine ( temp float)
+0:42          'r021' ( temp float)
+0:42          dPdyCoarse ( temp float)
 0:42            'inF0' ( in float)
 0:43      Sequence
 0:43        move second child to first child ( temp float)
-0:43          'r023' ( temp float)
-0:43          degrees ( temp float)
+0:43          'r022' ( temp float)
+0:43          dPdyFine ( temp float)
 0:43            'inF0' ( in float)
-0:47      Sequence
-0:47        move second child to first child ( temp float)
-0:47          'r027' ( temp float)
-0:47          exp ( temp float)
-0:47            'inF0' ( in float)
+0:44      Sequence
+0:44        move second child to first child ( temp float)
+0:44          'r023' ( temp float)
+0:44          degrees ( temp float)
+0:44            'inF0' ( in float)
 0:48      Sequence
 0:48        move second child to first child ( temp float)
-0:48          'r028' ( temp float)
-0:48          exp2 ( temp float)
+0:48          'r027' ( temp float)
+0:48          exp ( temp float)
 0:48            'inF0' ( in float)
 0:49      Sequence
-0:49        move second child to first child ( temp uint)
-0:49          'r029' ( temp uint)
-0:49          Convert int to uint ( temp uint)
-0:49            findMSB ( temp int)
-0:49              Constant:
-0:49                7 (const int)
+0:49        move second child to first child ( temp float)
+0:49          'r028' ( temp float)
+0:49          exp2 ( temp float)
+0:49            'inF0' ( in float)
 0:50      Sequence
 0:50        move second child to first child ( temp uint)
-0:50          'r030' ( temp uint)
+0:50          'r029' ( temp uint)
 0:50          Convert int to uint ( temp uint)
-0:50            findLSB ( temp int)
+0:50            findMSB ( temp int)
 0:50              Constant:
 0:50                7 (const int)
 0:51      Sequence
-0:51        move second child to first child ( temp float)
-0:51          'r031' ( temp float)
-0:51          Floor ( temp float)
-0:51            'inF0' ( in float)
-0:53      Sequence
-0:53        move second child to first child ( temp float)
-0:53          'r033' ( temp float)
-0:53          mod ( temp float)
-0:53            'inF0' ( in float)
-0:53            'inF1' ( in float)
+0:51        move second child to first child ( temp uint)
+0:51          'r030' ( temp uint)
+0:51          Convert int to uint ( temp uint)
+0:51            findLSB ( temp int)
+0:51              Constant:
+0:51                7 (const int)
+0:52      Sequence
+0:52        move second child to first child ( temp float)
+0:52          'r031' ( temp float)
+0:52          Floor ( temp float)
+0:52            'inF0' ( in float)
 0:54      Sequence
 0:54        move second child to first child ( temp float)
-0:54          'r034' ( temp float)
-0:54          Fraction ( temp float)
+0:54          'r033' ( temp float)
+0:54          mod ( temp float)
 0:54            'inF0' ( in float)
+0:54            'inF1' ( in float)
 0:55      Sequence
 0:55        move second child to first child ( temp float)
-0:55          'r036' ( temp float)
-0:55          fwidth ( temp float)
+0:55          'r034' ( temp float)
+0:55          Fraction ( temp float)
 0:55            'inF0' ( in float)
 0:56      Sequence
-0:56        move second child to first child ( temp bool)
-0:56          'r037' ( temp bool)
-0:56          isinf ( temp bool)
+0:56        move second child to first child ( temp float)
+0:56          'r036' ( temp float)
+0:56          fwidth ( temp float)
 0:56            'inF0' ( in float)
 0:57      Sequence
 0:57        move second child to first child ( temp bool)
-0:57          'r038' ( temp bool)
-0:57          isnan ( temp bool)
+0:57          'r037' ( temp bool)
+0:57          isinf ( temp bool)
 0:57            'inF0' ( in float)
 0:58      Sequence
-0:58        move second child to first child ( temp float)
-0:58          'r039' ( temp float)
-0:58          ldexp ( temp float)
+0:58        move second child to first child ( temp bool)
+0:58          'r038' ( temp bool)
+0:58          isnan ( temp bool)
 0:58            'inF0' ( in float)
-0:58            'inF1' ( in float)
 0:59      Sequence
 0:59        move second child to first child ( temp float)
-0:59          'r039a' ( temp float)
-0:59          mix ( temp float)
+0:59          'r039' ( temp float)
+0:59          ldexp ( temp float)
 0:59            'inF0' ( in float)
 0:59            'inF1' ( in float)
-0:59            'inF2' ( in float)
 0:60      Sequence
 0:60        move second child to first child ( temp float)
-0:60          'r040' ( temp float)
-0:60          log ( temp float)
+0:60          'r039a' ( temp float)
+0:60          mix ( temp float)
 0:60            'inF0' ( in float)
+0:60            'inF1' ( in float)
+0:60            'inF2' ( in float)
 0:61      Sequence
 0:61        move second child to first child ( temp float)
-0:61          'r041' ( temp float)
-0:61          component-wise multiply ( temp float)
-0:61            log2 ( temp float)
-0:61              'inF0' ( in float)
-0:61            Constant:
-0:61              0.301030
+0:61          'r040' ( temp float)
+0:61          log ( temp float)
+0:61            'inF0' ( in float)
 0:62      Sequence
 0:62        move second child to first child ( temp float)
-0:62          'r042' ( temp float)
-0:62          log2 ( temp float)
-0:62            'inF0' ( in float)
+0:62          'r041' ( temp float)
+0:62          component-wise multiply ( temp float)
+0:62            log2 ( temp float)
+0:62              'inF0' ( in float)
+0:62            Constant:
+0:62              0.301030
 0:63      Sequence
 0:63        move second child to first child ( temp float)
-0:63          'r043' ( temp float)
-0:63          max ( temp float)
+0:63          'r042' ( temp float)
+0:63          log2 ( temp float)
 0:63            'inF0' ( in float)
-0:63            'inF1' ( in float)
 0:64      Sequence
 0:64        move second child to first child ( temp float)
-0:64          'r044' ( temp float)
-0:64          min ( temp float)
+0:64          'r043' ( temp float)
+0:64          max ( temp float)
 0:64            'inF0' ( in float)
 0:64            'inF1' ( in float)
 0:65      Sequence
 0:65        move second child to first child ( temp float)
-0:65          'r045' ( temp float)
-0:65          pow ( temp float)
+0:65          'r044' ( temp float)
+0:65          min ( temp float)
 0:65            'inF0' ( in float)
 0:65            'inF1' ( in float)
 0:66      Sequence
 0:66        move second child to first child ( temp float)
-0:66          'r046' ( temp float)
-0:66          radians ( temp float)
+0:66          'r045' ( temp float)
+0:66          pow ( temp float)
 0:66            'inF0' ( in float)
+0:66            'inF1' ( in float)
 0:67      Sequence
 0:67        move second child to first child ( temp float)
-0:67          'r047' ( temp float)
-0:67          divide ( temp float)
-0:67            Constant:
-0:67              1.000000
+0:67          'r046' ( temp float)
+0:67          radians ( temp float)
 0:67            'inF0' ( in float)
 0:68      Sequence
-0:68        move second child to first child ( temp uint)
-0:68          'r048' ( temp uint)
-0:68          Convert int to uint ( temp uint)
-0:68            bitFieldReverse ( temp int)
-0:68              Constant:
-0:68                2 (const int)
+0:68        move second child to first child ( temp float)
+0:68          'r047' ( temp float)
+0:68          divide ( temp float)
+0:68            Constant:
+0:68              1.000000
+0:68            'inF0' ( in float)
 0:69      Sequence
-0:69        move second child to first child ( temp float)
-0:69          'r049' ( temp float)
-0:69          roundEven ( temp float)
-0:69            'inF0' ( in float)
+0:69        move second child to first child ( temp uint)
+0:69          'r048' ( temp uint)
+0:69          Convert int to uint ( temp uint)
+0:69            bitFieldReverse ( temp int)
+0:69              Constant:
+0:69                2 (const int)
 0:70      Sequence
 0:70        move second child to first child ( temp float)
-0:70          'r050' ( temp float)
-0:70          inverse sqrt ( temp float)
+0:70          'r049' ( temp float)
+0:70          roundEven ( temp float)
 0:70            'inF0' ( in float)
 0:71      Sequence
 0:71        move second child to first child ( temp float)
-0:71          'r051' ( temp float)
-0:71          clamp ( temp float)
+0:71          'r050' ( temp float)
+0:71          inverse sqrt ( temp float)
 0:71            'inF0' ( in float)
-0:71            Constant:
-0:71              0.000000
-0:71            Constant:
-0:71              1.000000
 0:72      Sequence
 0:72        move second child to first child ( temp float)
-0:72          'r052' ( temp float)
-0:72          Sign ( temp float)
+0:72          'r051' ( temp float)
+0:72          clamp ( temp float)
 0:72            'inF0' ( in float)
+0:72            Constant:
+0:72              0.000000
+0:72            Constant:
+0:72              1.000000
 0:73      Sequence
 0:73        move second child to first child ( temp float)
-0:73          'r053' ( temp float)
-0:73          sine ( temp float)
+0:73          'r052' ( temp float)
+0:73          Sign ( temp float)
 0:73            'inF0' ( in float)
 0:74      Sequence
 0:74        move second child to first child ( temp float)
-0:74          'inF1' ( in float)
+0:74          'r053' ( temp float)
 0:74          sine ( temp float)
 0:74            'inF0' ( in float)
-0:74        move second child to first child ( temp float)
-0:74          'inF2' ( in float)
-0:74          cosine ( temp float)
-0:74            'inF0' ( in float)
 0:75      Sequence
 0:75        move second child to first child ( temp float)
-0:75          'r055' ( temp float)
-0:75          hyp. sine ( temp float)
+0:75          'inF1' ( in float)
+0:75          sine ( temp float)
+0:75            'inF0' ( in float)
+0:75        move second child to first child ( temp float)
+0:75          'inF2' ( in float)
+0:75          cosine ( temp float)
 0:75            'inF0' ( in float)
 0:76      Sequence
 0:76        move second child to first child ( temp float)
-0:76          'r056' ( temp float)
-0:76          smoothstep ( temp float)
+0:76          'r055' ( temp float)
+0:76          hyp. sine ( temp float)
 0:76            'inF0' ( in float)
-0:76            'inF1' ( in float)
-0:76            'inF2' ( in float)
 0:77      Sequence
 0:77        move second child to first child ( temp float)
-0:77          'r057' ( temp float)
-0:77          sqrt ( temp float)
+0:77          'r056' ( temp float)
+0:77          smoothstep ( temp float)
 0:77            'inF0' ( in float)
+0:77            'inF1' ( in float)
+0:77            'inF2' ( in float)
 0:78      Sequence
 0:78        move second child to first child ( temp float)
-0:78          'r058' ( temp float)
-0:78          step ( temp float)
+0:78          'r057' ( temp float)
+0:78          sqrt ( temp float)
 0:78            'inF0' ( in float)
-0:78            'inF1' ( in float)
 0:79      Sequence
 0:79        move second child to first child ( temp float)
-0:79          'r059' ( temp float)
-0:79          tangent ( temp float)
+0:79          'r058' ( temp float)
+0:79          step ( temp float)
 0:79            'inF0' ( in float)
+0:79            'inF1' ( in float)
 0:80      Sequence
 0:80        move second child to first child ( temp float)
-0:80          'r060' ( temp float)
-0:80          hyp. tangent ( temp float)
+0:80          'r059' ( temp float)
+0:80          tangent ( temp float)
 0:80            'inF0' ( in float)
-0:82      Sequence
-0:82        move second child to first child ( temp float)
-0:82          'r061' ( temp float)
-0:82          trunc ( temp float)
-0:82            'inF0' ( in float)
-0:84      Branch: Return with expression
-0:84        Constant:
-0:84          0.000000
-0:88  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:88    Function Parameters: 
-0:88      'inF0' ( in 1-component vector of float)
-0:88      'inF1' ( in 1-component vector of float)
-0:88      'inF2' ( in 1-component vector of float)
+0:81      Sequence
+0:81        move second child to first child ( temp float)
+0:81          'r060' ( temp float)
+0:81          hyp. tangent ( temp float)
+0:81            'inF0' ( in float)
+0:83      Sequence
+0:83        move second child to first child ( temp float)
+0:83          'r061' ( temp float)
+0:83          trunc ( temp float)
+0:83            'inF0' ( in float)
+0:85      Branch: Return with expression
+0:85        Constant:
+0:85          0.000000
+0:89  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:89    Function Parameters: 
+0:89      'inF0' ( in 1-component vector of float)
+0:89      'inF1' ( in 1-component vector of float)
+0:89      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:90      Branch: Return with expression
-0:90        Constant:
-0:90          0.000000
-0:94  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:94    Function Parameters: 
-0:94      'inF0' ( in 2-component vector of float)
-0:94      'inF1' ( in 2-component vector of float)
-0:94      'inF2' ( in 2-component vector of float)
-0:94      'inU0' ( in 2-component vector of uint)
-0:94      'inU1' ( in 2-component vector of uint)
+0:91      Branch: Return with expression
+0:91        Constant:
+0:91          0.000000
+0:95  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:95    Function Parameters: 
+0:95      'inF0' ( in 2-component vector of float)
+0:95      'inF1' ( in 2-component vector of float)
+0:95      'inF2' ( in 2-component vector of float)
+0:95      'inU0' ( in 2-component vector of uint)
+0:95      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:97      Sequence
-0:97        move second child to first child ( temp bool)
-0:97          'r000' ( temp bool)
-0:97          all ( temp bool)
-0:97            Convert float to bool ( temp 2-component vector of bool)
-0:97              'inF0' ( in 2-component vector of float)
 0:98      Sequence
-0:98        move second child to first child ( temp 2-component vector of float)
-0:98          'r001' ( temp 2-component vector of float)
-0:98          Absolute value ( temp 2-component vector of float)
-0:98            'inF0' ( in 2-component vector of float)
+0:98        move second child to first child ( temp bool)
+0:98          'r000' ( temp bool)
+0:98          all ( temp bool)
+0:98            Convert float to bool ( temp 2-component vector of bool)
+0:98              'inF0' ( in 2-component vector of float)
 0:99      Sequence
 0:99        move second child to first child ( temp 2-component vector of float)
-0:99          'r002' ( temp 2-component vector of float)
-0:99          arc cosine ( temp 2-component vector of float)
+0:99          'r001' ( temp 2-component vector of float)
+0:99          Absolute value ( temp 2-component vector of float)
 0:99            'inF0' ( in 2-component vector of float)
 0:100      Sequence
-0:100        move second child to first child ( temp bool)
-0:100          'r003' ( temp bool)
-0:100          any ( temp bool)
-0:100            Convert float to bool ( temp 2-component vector of bool)
-0:100              'inF0' ( in 2-component vector of float)
+0:100        move second child to first child ( temp 2-component vector of float)
+0:100          'r002' ( temp 2-component vector of float)
+0:100          arc cosine ( temp 2-component vector of float)
+0:100            'inF0' ( in 2-component vector of float)
 0:101      Sequence
-0:101        move second child to first child ( temp 2-component vector of float)
-0:101          'r004' ( temp 2-component vector of float)
-0:101          arc sine ( temp 2-component vector of float)
-0:101            'inF0' ( in 2-component vector of float)
+0:101        move second child to first child ( temp bool)
+0:101          'r003' ( temp bool)
+0:101          any ( temp bool)
+0:101            Convert float to bool ( temp 2-component vector of bool)
+0:101              'inF0' ( in 2-component vector of float)
 0:102      Sequence
-0:102        move second child to first child ( temp 2-component vector of int)
-0:102          'r005' ( temp 2-component vector of int)
-0:102          floatBitsToInt ( temp 2-component vector of int)
+0:102        move second child to first child ( temp 2-component vector of float)
+0:102          'r004' ( temp 2-component vector of float)
+0:102          arc sine ( temp 2-component vector of float)
 0:102            'inF0' ( in 2-component vector of float)
 0:103      Sequence
-0:103        move second child to first child ( temp 2-component vector of uint)
-0:103          'r006' ( temp 2-component vector of uint)
-0:103          floatBitsToUint ( temp 2-component vector of uint)
+0:103        move second child to first child ( temp 2-component vector of int)
+0:103          'r005' ( temp 2-component vector of int)
+0:103          floatBitsToInt ( temp 2-component vector of int)
 0:103            'inF0' ( in 2-component vector of float)
 0:104      Sequence
-0:104        move second child to first child ( temp 2-component vector of float)
-0:104          'r007' ( temp 2-component vector of float)
-0:104          intBitsToFloat ( temp 2-component vector of float)
-0:104            'inU0' ( in 2-component vector of uint)
-0:106      Sequence
-0:106        move second child to first child ( temp 2-component vector of float)
-0:106          'r009' ( temp 2-component vector of float)
-0:106          arc tangent ( temp 2-component vector of float)
-0:106            'inF0' ( in 2-component vector of float)
+0:104        move second child to first child ( temp 2-component vector of uint)
+0:104          'r006' ( temp 2-component vector of uint)
+0:104          floatBitsToUint ( temp 2-component vector of uint)
+0:104            'inF0' ( in 2-component vector of float)
+0:105      Sequence
+0:105        move second child to first child ( temp 2-component vector of float)
+0:105          'r007' ( temp 2-component vector of float)
+0:105          intBitsToFloat ( temp 2-component vector of float)
+0:105            'inU0' ( in 2-component vector of uint)
 0:107      Sequence
 0:107        move second child to first child ( temp 2-component vector of float)
-0:107          'r010' ( temp 2-component vector of float)
+0:107          'r009' ( temp 2-component vector of float)
 0:107          arc tangent ( temp 2-component vector of float)
 0:107            'inF0' ( in 2-component vector of float)
-0:107            'inF1' ( in 2-component vector of float)
 0:108      Sequence
 0:108        move second child to first child ( temp 2-component vector of float)
-0:108          'r011' ( temp 2-component vector of float)
-0:108          Ceiling ( temp 2-component vector of float)
+0:108          'r010' ( temp 2-component vector of float)
+0:108          arc tangent ( temp 2-component vector of float)
 0:108            'inF0' ( in 2-component vector of float)
+0:108            'inF1' ( in 2-component vector of float)
 0:109      Sequence
 0:109        move second child to first child ( temp 2-component vector of float)
-0:109          'r012' ( temp 2-component vector of float)
-0:109          clamp ( temp 2-component vector of float)
+0:109          'r011' ( temp 2-component vector of float)
+0:109          Ceiling ( temp 2-component vector of float)
 0:109            'inF0' ( in 2-component vector of float)
-0:109            'inF1' ( in 2-component vector of float)
-0:109            'inF2' ( in 2-component vector of float)
-0:110      Test condition and select ( temp void)
-0:110        Condition
-0:110        any ( temp bool)
-0:110          Compare Less Than ( temp 2-component vector of bool)
+0:110      Sequence
+0:110        move second child to first child ( temp 2-component vector of float)
+0:110          'r012' ( temp 2-component vector of float)
+0:110          clamp ( temp 2-component vector of float)
 0:110            'inF0' ( in 2-component vector of float)
-0:110            Constant:
-0:110              0.000000
-0:110              0.000000
-0:110        true case
-0:110        Branch: Kill
-0:111      Sequence
-0:111        move second child to first child ( temp 2-component vector of float)
-0:111          'r013' ( temp 2-component vector of float)
-0:111          cosine ( temp 2-component vector of float)
+0:110            'inF1' ( in 2-component vector of float)
+0:110            'inF2' ( in 2-component vector of float)
+0:111      Test condition and select ( temp void)
+0:111        Condition
+0:111        any ( temp bool)
+0:111          Compare Less Than ( temp 2-component vector of bool)
 0:111            'inF0' ( in 2-component vector of float)
-0:112      Sequence
-0:112        move second child to first child ( temp 2-component vector of float)
-0:112          'r015' ( temp 2-component vector of float)
-0:112          hyp. cosine ( temp 2-component vector of float)
-0:112            'inF0' ( in 2-component vector of float)
+0:111            Constant:
+0:111              0.000000
+0:111              0.000000
+0:111        true case
+0:111        Branch: Kill
+0:112      Test condition and select ( temp void)
+0:112        Condition
+0:112        any ( temp bool)
+0:112          Compare Less Than ( temp 2-component vector of bool)
+0:112            'inU0' ( in 2-component vector of uint)
+0:112            Constant:
+0:112              0.000000
+0:112              0.000000
+0:112        true case
+0:112        Branch: Kill
 0:113      Sequence
-0:113        move second child to first child ( temp 2-component vector of int)
-0:113          'r016' ( temp 2-component vector of int)
+0:113        move second child to first child ( temp 2-component vector of float)
+0:113          'r013' ( temp 2-component vector of float)
+0:113          cosine ( temp 2-component vector of float)
+0:113            'inF0' ( in 2-component vector of float)
+0:114      Sequence
+0:114        move second child to first child ( temp 2-component vector of float)
+0:114          'r015' ( temp 2-component vector of float)
+0:114          hyp. cosine ( temp 2-component vector of float)
+0:114            'inF0' ( in 2-component vector of float)
+0:115      Sequence
+0:115        move second child to first child ( temp 2-component vector of int)
+0:115          'r016' ( temp 2-component vector of int)
 0:?           bitCount ( temp 2-component vector of int)
 0:?             Constant:
 0:?               7 (const int)
 0:?               3 (const int)
-0:114      Sequence
-0:114        move second child to first child ( temp 2-component vector of float)
-0:114          'r017' ( temp 2-component vector of float)
-0:114          dPdx ( temp 2-component vector of float)
-0:114            'inF0' ( in 2-component vector of float)
-0:115      Sequence
-0:115        move second child to first child ( temp 2-component vector of float)
-0:115          'r018' ( temp 2-component vector of float)
-0:115          dPdxCoarse ( temp 2-component vector of float)
-0:115            'inF0' ( in 2-component vector of float)
 0:116      Sequence
 0:116        move second child to first child ( temp 2-component vector of float)
-0:116          'r019' ( temp 2-component vector of float)
-0:116          dPdxFine ( temp 2-component vector of float)
+0:116          'r017' ( temp 2-component vector of float)
+0:116          dPdx ( temp 2-component vector of float)
 0:116            'inF0' ( in 2-component vector of float)
 0:117      Sequence
 0:117        move second child to first child ( temp 2-component vector of float)
-0:117          'r020' ( temp 2-component vector of float)
-0:117          dPdy ( temp 2-component vector of float)
+0:117          'r018' ( temp 2-component vector of float)
+0:117          dPdxCoarse ( temp 2-component vector of float)
 0:117            'inF0' ( in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child ( temp 2-component vector of float)
-0:118          'r021' ( temp 2-component vector of float)
-0:118          dPdyCoarse ( temp 2-component vector of float)
+0:118          'r019' ( temp 2-component vector of float)
+0:118          dPdxFine ( temp 2-component vector of float)
 0:118            'inF0' ( in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child ( temp 2-component vector of float)
-0:119          'r022' ( temp 2-component vector of float)
-0:119          dPdyFine ( temp 2-component vector of float)
+0:119          'r020' ( temp 2-component vector of float)
+0:119          dPdy ( temp 2-component vector of float)
 0:119            'inF0' ( in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child ( temp 2-component vector of float)
-0:120          'r023' ( temp 2-component vector of float)
-0:120          degrees ( temp 2-component vector of float)
+0:120          'r021' ( temp 2-component vector of float)
+0:120          dPdyCoarse ( temp 2-component vector of float)
 0:120            'inF0' ( in 2-component vector of float)
-0:124      Sequence
-0:124        move second child to first child ( temp float)
-0:124          'r026' ( temp float)
-0:124          distance ( temp float)
-0:124            'inF0' ( in 2-component vector of float)
-0:124            'inF1' ( in 2-component vector of float)
-0:125      Sequence
-0:125        move second child to first child ( temp float)
-0:125          'r027' ( temp float)
-0:125          dot-product ( temp float)
-0:125            'inF0' ( in 2-component vector of float)
-0:125            'inF1' ( in 2-component vector of float)
-0:129      Sequence
-0:129        move second child to first child ( temp 2-component vector of float)
-0:129          'r028' ( temp 2-component vector of float)
-0:129          exp ( temp 2-component vector of float)
-0:129            'inF0' ( in 2-component vector of float)
-0:130      Sequence
-0:130        move second child to first child ( temp 2-component vector of float)
-0:130          'r029' ( temp 2-component vector of float)
-0:130          exp2 ( temp 2-component vector of float)
-0:130            'inF0' ( in 2-component vector of float)
+0:121      Sequence
+0:121        move second child to first child ( temp 2-component vector of float)
+0:121          'r022' ( temp 2-component vector of float)
+0:121          dPdyFine ( temp 2-component vector of float)
+0:121            'inF0' ( in 2-component vector of float)
+0:122      Sequence
+0:122        move second child to first child ( temp 2-component vector of float)
+0:122          'r023' ( temp 2-component vector of float)
+0:122          degrees ( temp 2-component vector of float)
+0:122            'inF0' ( in 2-component vector of float)
+0:126      Sequence
+0:126        move second child to first child ( temp float)
+0:126          'r026' ( temp float)
+0:126          distance ( temp float)
+0:126            'inF0' ( in 2-component vector of float)
+0:126            'inF1' ( in 2-component vector of float)
+0:127      Sequence
+0:127        move second child to first child ( temp float)
+0:127          'r027' ( temp float)
+0:127          dot-product ( temp float)
+0:127            'inF0' ( in 2-component vector of float)
+0:127            'inF1' ( in 2-component vector of float)
 0:131      Sequence
 0:131        move second child to first child ( temp 2-component vector of float)
-0:131          'r030' ( temp 2-component vector of float)
-0:131          face-forward ( temp 2-component vector of float)
+0:131          'r028' ( temp 2-component vector of float)
+0:131          exp ( temp 2-component vector of float)
 0:131            'inF0' ( in 2-component vector of float)
-0:131            'inF1' ( in 2-component vector of float)
-0:131            'inF2' ( in 2-component vector of float)
 0:132      Sequence
-0:132        move second child to first child ( temp 2-component vector of uint)
-0:132          'r031' ( temp 2-component vector of uint)
+0:132        move second child to first child ( temp 2-component vector of float)
+0:132          'r029' ( temp 2-component vector of float)
+0:132          exp2 ( temp 2-component vector of float)
+0:132            'inF0' ( in 2-component vector of float)
+0:133      Sequence
+0:133        move second child to first child ( temp 2-component vector of float)
+0:133          'r030' ( temp 2-component vector of float)
+0:133          face-forward ( temp 2-component vector of float)
+0:133            'inF0' ( in 2-component vector of float)
+0:133            'inF1' ( in 2-component vector of float)
+0:133            'inF2' ( in 2-component vector of float)
+0:134      Sequence
+0:134        move second child to first child ( temp 2-component vector of uint)
+0:134          'r031' ( temp 2-component vector of uint)
 0:?           findMSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:133      Sequence
-0:133        move second child to first child ( temp 2-component vector of uint)
-0:133          'r032' ( temp 2-component vector of uint)
+0:135      Sequence
+0:135        move second child to first child ( temp 2-component vector of uint)
+0:135          'r032' ( temp 2-component vector of uint)
 0:?           findLSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:134      Sequence
-0:134        move second child to first child ( temp 2-component vector of float)
-0:134          'r033' ( temp 2-component vector of float)
-0:134          Floor ( temp 2-component vector of float)
-0:134            'inF0' ( in 2-component vector of float)
 0:136      Sequence
 0:136        move second child to first child ( temp 2-component vector of float)
-0:136          'r035' ( temp 2-component vector of float)
-0:136          mod ( temp 2-component vector of float)
+0:136          'r033' ( temp 2-component vector of float)
+0:136          Floor ( temp 2-component vector of float)
 0:136            'inF0' ( in 2-component vector of float)
-0:136            'inF1' ( in 2-component vector of float)
-0:137      Sequence
-0:137        move second child to first child ( temp 2-component vector of float)
-0:137          'r036' ( temp 2-component vector of float)
-0:137          Fraction ( temp 2-component vector of float)
-0:137            'inF0' ( in 2-component vector of float)
 0:138      Sequence
 0:138        move second child to first child ( temp 2-component vector of float)
-0:138          'r038' ( temp 2-component vector of float)
-0:138          fwidth ( temp 2-component vector of float)
+0:138          'r035' ( temp 2-component vector of float)
+0:138          mod ( temp 2-component vector of float)
 0:138            'inF0' ( in 2-component vector of float)
+0:138            'inF1' ( in 2-component vector of float)
 0:139      Sequence
-0:139        move second child to first child ( temp 2-component vector of bool)
-0:139          'r039' ( temp 2-component vector of bool)
-0:139          isinf ( temp 2-component vector of bool)
+0:139        move second child to first child ( temp 2-component vector of float)
+0:139          'r036' ( temp 2-component vector of float)
+0:139          Fraction ( temp 2-component vector of float)
 0:139            'inF0' ( in 2-component vector of float)
 0:140      Sequence
-0:140        move second child to first child ( temp 2-component vector of bool)
-0:140          'r040' ( temp 2-component vector of bool)
-0:140          isnan ( temp 2-component vector of bool)
+0:140        move second child to first child ( temp 2-component vector of float)
+0:140          'r038' ( temp 2-component vector of float)
+0:140          fwidth ( temp 2-component vector of float)
 0:140            'inF0' ( in 2-component vector of float)
 0:141      Sequence
-0:141        move second child to first child ( temp 2-component vector of float)
-0:141          'r041' ( temp 2-component vector of float)
-0:141          ldexp ( temp 2-component vector of float)
+0:141        move second child to first child ( temp 2-component vector of bool)
+0:141          'r039' ( temp 2-component vector of bool)
+0:141          isinf ( temp 2-component vector of bool)
 0:141            'inF0' ( in 2-component vector of float)
-0:141            'inF1' ( in 2-component vector of float)
 0:142      Sequence
-0:142        move second child to first child ( temp 2-component vector of float)
-0:142          'r039a' ( temp 2-component vector of float)
-0:142          mix ( temp 2-component vector of float)
+0:142        move second child to first child ( temp 2-component vector of bool)
+0:142          'r040' ( temp 2-component vector of bool)
+0:142          isnan ( temp 2-component vector of bool)
 0:142            'inF0' ( in 2-component vector of float)
-0:142            'inF1' ( in 2-component vector of float)
-0:142            'inF2' ( in 2-component vector of float)
 0:143      Sequence
-0:143        move second child to first child ( temp float)
-0:143          'r042' ( temp float)
-0:143          length ( temp float)
+0:143        move second child to first child ( temp 2-component vector of float)
+0:143          'r041' ( temp 2-component vector of float)
+0:143          ldexp ( temp 2-component vector of float)
 0:143            'inF0' ( in 2-component vector of float)
+0:143            'inF1' ( in 2-component vector of float)
 0:144      Sequence
 0:144        move second child to first child ( temp 2-component vector of float)
-0:144          'r043' ( temp 2-component vector of float)
-0:144          log ( temp 2-component vector of float)
+0:144          'r039a' ( temp 2-component vector of float)
+0:144          mix ( temp 2-component vector of float)
 0:144            'inF0' ( in 2-component vector of float)
+0:144            'inF1' ( in 2-component vector of float)
+0:144            'inF2' ( in 2-component vector of float)
 0:145      Sequence
-0:145        move second child to first child ( temp 2-component vector of float)
-0:145          'r044' ( temp 2-component vector of float)
-0:145          vector-scale ( temp 2-component vector of float)
-0:145            log2 ( temp 2-component vector of float)
-0:145              'inF0' ( in 2-component vector of float)
-0:145            Constant:
-0:145              0.301030
+0:145        move second child to first child ( temp float)
+0:145          'r042' ( temp float)
+0:145          length ( temp float)
+0:145            'inF0' ( in 2-component vector of float)
 0:146      Sequence
 0:146        move second child to first child ( temp 2-component vector of float)
-0:146          'r045' ( temp 2-component vector of float)
-0:146          log2 ( temp 2-component vector of float)
+0:146          'r043' ( temp 2-component vector of float)
+0:146          log ( temp 2-component vector of float)
 0:146            'inF0' ( in 2-component vector of float)
 0:147      Sequence
 0:147        move second child to first child ( temp 2-component vector of float)
-0:147          'r046' ( temp 2-component vector of float)
-0:147          max ( temp 2-component vector of float)
-0:147            'inF0' ( in 2-component vector of float)
-0:147            'inF1' ( in 2-component vector of float)
+0:147          'r044' ( temp 2-component vector of float)
+0:147          vector-scale ( temp 2-component vector of float)
+0:147            log2 ( temp 2-component vector of float)
+0:147              'inF0' ( in 2-component vector of float)
+0:147            Constant:
+0:147              0.301030
 0:148      Sequence
 0:148        move second child to first child ( temp 2-component vector of float)
-0:148          'r047' ( temp 2-component vector of float)
-0:148          min ( temp 2-component vector of float)
+0:148          'r045' ( temp 2-component vector of float)
+0:148          log2 ( temp 2-component vector of float)
 0:148            'inF0' ( in 2-component vector of float)
-0:148            'inF1' ( in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child ( temp 2-component vector of float)
-0:149          'r048' ( temp 2-component vector of float)
-0:149          normalize ( temp 2-component vector of float)
+0:149          'r046' ( temp 2-component vector of float)
+0:149          max ( temp 2-component vector of float)
 0:149            'inF0' ( in 2-component vector of float)
+0:149            'inF1' ( in 2-component vector of float)
 0:150      Sequence
 0:150        move second child to first child ( temp 2-component vector of float)
-0:150          'r049' ( temp 2-component vector of float)
-0:150          pow ( temp 2-component vector of float)
+0:150          'r047' ( temp 2-component vector of float)
+0:150          min ( temp 2-component vector of float)
 0:150            'inF0' ( in 2-component vector of float)
 0:150            'inF1' ( in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child ( temp 2-component vector of float)
-0:151          'r050' ( temp 2-component vector of float)
-0:151          radians ( temp 2-component vector of float)
+0:151          'r048' ( temp 2-component vector of float)
+0:151          normalize ( temp 2-component vector of float)
 0:151            'inF0' ( in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child ( temp 2-component vector of float)
-0:152          'r051' ( temp 2-component vector of float)
-0:152          divide ( temp 2-component vector of float)
-0:152            Constant:
-0:152              1.000000
+0:152          'r049' ( temp 2-component vector of float)
+0:152          pow ( temp 2-component vector of float)
 0:152            'inF0' ( in 2-component vector of float)
+0:152            'inF1' ( in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child ( temp 2-component vector of float)
-0:153          'r052' ( temp 2-component vector of float)
-0:153          reflect ( temp 2-component vector of float)
+0:153          'r050' ( temp 2-component vector of float)
+0:153          radians ( temp 2-component vector of float)
 0:153            'inF0' ( in 2-component vector of float)
-0:153            'inF1' ( in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child ( temp 2-component vector of float)
-0:154          'r053' ( temp 2-component vector of float)
-0:154          refract ( temp 2-component vector of float)
-0:154            'inF0' ( in 2-component vector of float)
-0:154            'inF1' ( in 2-component vector of float)
+0:154          'r051' ( temp 2-component vector of float)
+0:154          divide ( temp 2-component vector of float)
 0:154            Constant:
-0:154              2.000000
+0:154              1.000000
+0:154            'inF0' ( in 2-component vector of float)
 0:155      Sequence
-0:155        move second child to first child ( temp 2-component vector of uint)
-0:155          'r054' ( temp 2-component vector of uint)
+0:155        move second child to first child ( temp 2-component vector of float)
+0:155          'r052' ( temp 2-component vector of float)
+0:155          reflect ( temp 2-component vector of float)
+0:155            'inF0' ( in 2-component vector of float)
+0:155            'inF1' ( in 2-component vector of float)
+0:156      Sequence
+0:156        move second child to first child ( temp 2-component vector of float)
+0:156          'r053' ( temp 2-component vector of float)
+0:156          refract ( temp 2-component vector of float)
+0:156            'inF0' ( in 2-component vector of float)
+0:156            'inF1' ( in 2-component vector of float)
+0:156            Constant:
+0:156              2.000000
+0:157      Sequence
+0:157        move second child to first child ( temp 2-component vector of uint)
+0:157          'r054' ( temp 2-component vector of uint)
 0:?           bitFieldReverse ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
-0:156      Sequence
-0:156        move second child to first child ( temp 2-component vector of float)
-0:156          'r055' ( temp 2-component vector of float)
-0:156          roundEven ( temp 2-component vector of float)
-0:156            'inF0' ( in 2-component vector of float)
-0:157      Sequence
-0:157        move second child to first child ( temp 2-component vector of float)
-0:157          'r056' ( temp 2-component vector of float)
-0:157          inverse sqrt ( temp 2-component vector of float)
-0:157            'inF0' ( in 2-component vector of float)
 0:158      Sequence
 0:158        move second child to first child ( temp 2-component vector of float)
-0:158          'r057' ( temp 2-component vector of float)
-0:158          clamp ( temp 2-component vector of float)
+0:158          'r055' ( temp 2-component vector of float)
+0:158          roundEven ( temp 2-component vector of float)
 0:158            'inF0' ( in 2-component vector of float)
-0:158            Constant:
-0:158              0.000000
-0:158            Constant:
-0:158              1.000000
 0:159      Sequence
 0:159        move second child to first child ( temp 2-component vector of float)
-0:159          'r058' ( temp 2-component vector of float)
-0:159          Sign ( temp 2-component vector of float)
+0:159          'r056' ( temp 2-component vector of float)
+0:159          inverse sqrt ( temp 2-component vector of float)
 0:159            'inF0' ( in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child ( temp 2-component vector of float)
-0:160          'r059' ( temp 2-component vector of float)
-0:160          sine ( temp 2-component vector of float)
+0:160          'r057' ( temp 2-component vector of float)
+0:160          clamp ( temp 2-component vector of float)
 0:160            'inF0' ( in 2-component vector of float)
+0:160            Constant:
+0:160              0.000000
+0:160            Constant:
+0:160              1.000000
 0:161      Sequence
 0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'inF1' ( in 2-component vector of float)
-0:161          sine ( temp 2-component vector of float)
-0:161            'inF0' ( in 2-component vector of float)
-0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'inF2' ( in 2-component vector of float)
-0:161          cosine ( temp 2-component vector of float)
+0:161          'r058' ( temp 2-component vector of float)
+0:161          Sign ( temp 2-component vector of float)
 0:161            'inF0' ( in 2-component vector of float)
 0:162      Sequence
 0:162        move second child to first child ( temp 2-component vector of float)
-0:162          'r060' ( temp 2-component vector of float)
-0:162          hyp. sine ( temp 2-component vector of float)
+0:162          'r059' ( temp 2-component vector of float)
+0:162          sine ( temp 2-component vector of float)
 0:162            'inF0' ( in 2-component vector of float)
 0:163      Sequence
 0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'r061' ( temp 2-component vector of float)
-0:163          smoothstep ( temp 2-component vector of float)
+0:163          'inF1' ( in 2-component vector of float)
+0:163          sine ( temp 2-component vector of float)
 0:163            'inF0' ( in 2-component vector of float)
-0:163            'inF1' ( in 2-component vector of float)
-0:163            'inF2' ( in 2-component vector of float)
+0:163        move second child to first child ( temp 2-component vector of float)
+0:163          'inF2' ( in 2-component vector of float)
+0:163          cosine ( temp 2-component vector of float)
+0:163            'inF0' ( in 2-component vector of float)
 0:164      Sequence
 0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'r062' ( temp 2-component vector of float)
-0:164          sqrt ( temp 2-component vector of float)
+0:164          'r060' ( temp 2-component vector of float)
+0:164          hyp. sine ( temp 2-component vector of float)
 0:164            'inF0' ( in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child ( temp 2-component vector of float)
-0:165          'r063' ( temp 2-component vector of float)
-0:165          step ( temp 2-component vector of float)
+0:165          'r061' ( temp 2-component vector of float)
+0:165          smoothstep ( temp 2-component vector of float)
 0:165            'inF0' ( in 2-component vector of float)
 0:165            'inF1' ( in 2-component vector of float)
+0:165            'inF2' ( in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child ( temp 2-component vector of float)
-0:166          'r064' ( temp 2-component vector of float)
-0:166          tangent ( temp 2-component vector of float)
+0:166          'r062' ( temp 2-component vector of float)
+0:166          sqrt ( temp 2-component vector of float)
 0:166            'inF0' ( in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child ( temp 2-component vector of float)
-0:167          'r065' ( temp 2-component vector of float)
-0:167          hyp. tangent ( temp 2-component vector of float)
+0:167          'r063' ( temp 2-component vector of float)
+0:167          step ( temp 2-component vector of float)
 0:167            'inF0' ( in 2-component vector of float)
+0:167            'inF1' ( in 2-component vector of float)
+0:168      Sequence
+0:168        move second child to first child ( temp 2-component vector of float)
+0:168          'r064' ( temp 2-component vector of float)
+0:168          tangent ( temp 2-component vector of float)
+0:168            'inF0' ( in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child ( temp 2-component vector of float)
-0:169          'r066' ( temp 2-component vector of float)
-0:169          trunc ( temp 2-component vector of float)
+0:169          'r065' ( temp 2-component vector of float)
+0:169          hyp. tangent ( temp 2-component vector of float)
 0:169            'inF0' ( in 2-component vector of float)
-0:172      Branch: Return with expression
+0:171      Sequence
+0:171        move second child to first child ( temp 2-component vector of float)
+0:171          'r066' ( temp 2-component vector of float)
+0:171          trunc ( temp 2-component vector of float)
+0:171            'inF0' ( in 2-component vector of float)
+0:174      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:176  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:176    Function Parameters: 
-0:176      'inF0' ( in 3-component vector of float)
-0:176      'inF1' ( in 3-component vector of float)
-0:176      'inF2' ( in 3-component vector of float)
-0:176      'inU0' ( in 3-component vector of uint)
-0:176      'inU1' ( in 3-component vector of uint)
+0:178  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:178    Function Parameters: 
+0:178      'inF0' ( in 3-component vector of float)
+0:178      'inF1' ( in 3-component vector of float)
+0:178      'inF2' ( in 3-component vector of float)
+0:178      'inU0' ( in 3-component vector of uint)
+0:178      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:179      Sequence
-0:179        move second child to first child ( temp bool)
-0:179          'r000' ( temp bool)
-0:179          all ( temp bool)
-0:179            Convert float to bool ( temp 3-component vector of bool)
-0:179              'inF0' ( in 3-component vector of float)
-0:180      Sequence
-0:180        move second child to first child ( temp 3-component vector of float)
-0:180          'r001' ( temp 3-component vector of float)
-0:180          Absolute value ( temp 3-component vector of float)
-0:180            'inF0' ( in 3-component vector of float)
 0:181      Sequence
-0:181        move second child to first child ( temp 3-component vector of float)
-0:181          'r002' ( temp 3-component vector of float)
-0:181          arc cosine ( temp 3-component vector of float)
-0:181            'inF0' ( in 3-component vector of float)
+0:181        move second child to first child ( temp bool)
+0:181          'r000' ( temp bool)
+0:181          all ( temp bool)
+0:181            Convert float to bool ( temp 3-component vector of bool)
+0:181              'inF0' ( in 3-component vector of float)
 0:182      Sequence
-0:182        move second child to first child ( temp bool)
-0:182          'r003' ( temp bool)
-0:182          any ( temp bool)
-0:182            Convert float to bool ( temp 3-component vector of bool)
-0:182              'inF0' ( in 3-component vector of float)
+0:182        move second child to first child ( temp 3-component vector of float)
+0:182          'r001' ( temp 3-component vector of float)
+0:182          Absolute value ( temp 3-component vector of float)
+0:182            'inF0' ( in 3-component vector of float)
 0:183      Sequence
 0:183        move second child to first child ( temp 3-component vector of float)
-0:183          'r004' ( temp 3-component vector of float)
-0:183          arc sine ( temp 3-component vector of float)
+0:183          'r002' ( temp 3-component vector of float)
+0:183          arc cosine ( temp 3-component vector of float)
 0:183            'inF0' ( in 3-component vector of float)
 0:184      Sequence
-0:184        move second child to first child ( temp 3-component vector of int)
-0:184          'r005' ( temp 3-component vector of int)
-0:184          floatBitsToInt ( temp 3-component vector of int)
-0:184            'inF0' ( in 3-component vector of float)
+0:184        move second child to first child ( temp bool)
+0:184          'r003' ( temp bool)
+0:184          any ( temp bool)
+0:184            Convert float to bool ( temp 3-component vector of bool)
+0:184              'inF0' ( in 3-component vector of float)
 0:185      Sequence
-0:185        move second child to first child ( temp 3-component vector of uint)
-0:185          'r006' ( temp 3-component vector of uint)
-0:185          floatBitsToUint ( temp 3-component vector of uint)
+0:185        move second child to first child ( temp 3-component vector of float)
+0:185          'r004' ( temp 3-component vector of float)
+0:185          arc sine ( temp 3-component vector of float)
 0:185            'inF0' ( in 3-component vector of float)
 0:186      Sequence
-0:186        move second child to first child ( temp 3-component vector of float)
-0:186          'r007' ( temp 3-component vector of float)
-0:186          intBitsToFloat ( temp 3-component vector of float)
-0:186            'inU0' ( in 3-component vector of uint)
+0:186        move second child to first child ( temp 3-component vector of int)
+0:186          'r005' ( temp 3-component vector of int)
+0:186          floatBitsToInt ( temp 3-component vector of int)
+0:186            'inF0' ( in 3-component vector of float)
+0:187      Sequence
+0:187        move second child to first child ( temp 3-component vector of uint)
+0:187          'r006' ( temp 3-component vector of uint)
+0:187          floatBitsToUint ( temp 3-component vector of uint)
+0:187            'inF0' ( in 3-component vector of float)
 0:188      Sequence
 0:188        move second child to first child ( temp 3-component vector of float)
-0:188          'r009' ( temp 3-component vector of float)
-0:188          arc tangent ( temp 3-component vector of float)
-0:188            'inF0' ( in 3-component vector of float)
-0:189      Sequence
-0:189        move second child to first child ( temp 3-component vector of float)
-0:189          'r010' ( temp 3-component vector of float)
-0:189          arc tangent ( temp 3-component vector of float)
-0:189            'inF0' ( in 3-component vector of float)
-0:189            'inF1' ( in 3-component vector of float)
+0:188          'r007' ( temp 3-component vector of float)
+0:188          intBitsToFloat ( temp 3-component vector of float)
+0:188            'inU0' ( in 3-component vector of uint)
 0:190      Sequence
 0:190        move second child to first child ( temp 3-component vector of float)
-0:190          'r011' ( temp 3-component vector of float)
-0:190          Ceiling ( temp 3-component vector of float)
+0:190          'r009' ( temp 3-component vector of float)
+0:190          arc tangent ( temp 3-component vector of float)
 0:190            'inF0' ( in 3-component vector of float)
 0:191      Sequence
 0:191        move second child to first child ( temp 3-component vector of float)
-0:191          'r012' ( temp 3-component vector of float)
-0:191          clamp ( temp 3-component vector of float)
+0:191          'r010' ( temp 3-component vector of float)
+0:191          arc tangent ( temp 3-component vector of float)
 0:191            'inF0' ( in 3-component vector of float)
 0:191            'inF1' ( in 3-component vector of float)
-0:191            'inF2' ( in 3-component vector of float)
-0:192      Test condition and select ( temp void)
-0:192        Condition
-0:192        any ( temp bool)
-0:192          Compare Less Than ( temp 3-component vector of bool)
+0:192      Sequence
+0:192        move second child to first child ( temp 3-component vector of float)
+0:192          'r011' ( temp 3-component vector of float)
+0:192          Ceiling ( temp 3-component vector of float)
 0:192            'inF0' ( in 3-component vector of float)
-0:192            Constant:
-0:192              0.000000
-0:192              0.000000
-0:192              0.000000
-0:192        true case
-0:192        Branch: Kill
 0:193      Sequence
 0:193        move second child to first child ( temp 3-component vector of float)
-0:193          'r013' ( temp 3-component vector of float)
-0:193          cosine ( temp 3-component vector of float)
+0:193          'r012' ( temp 3-component vector of float)
+0:193          clamp ( temp 3-component vector of float)
 0:193            'inF0' ( in 3-component vector of float)
-0:194      Sequence
-0:194        move second child to first child ( temp 3-component vector of float)
-0:194          'r014' ( temp 3-component vector of float)
-0:194          hyp. cosine ( temp 3-component vector of float)
+0:193            'inF1' ( in 3-component vector of float)
+0:193            'inF2' ( in 3-component vector of float)
+0:194      Test condition and select ( temp void)
+0:194        Condition
+0:194        any ( temp bool)
+0:194          Compare Less Than ( temp 3-component vector of bool)
 0:194            'inF0' ( in 3-component vector of float)
-0:195      Sequence
-0:195        move second child to first child ( temp 3-component vector of uint)
-0:195          'r015' ( temp 3-component vector of uint)
+0:194            Constant:
+0:194              0.000000
+0:194              0.000000
+0:194              0.000000
+0:194        true case
+0:194        Branch: Kill
+0:195      Test condition and select ( temp void)
+0:195        Condition
+0:195        any ( temp bool)
+0:195          Compare Less Than ( temp 3-component vector of bool)
+0:195            'inU0' ( in 3-component vector of uint)
+0:195            Constant:
+0:195              0.000000
+0:195              0.000000
+0:195              0.000000
+0:195        true case
+0:195        Branch: Kill
+0:196      Sequence
+0:196        move second child to first child ( temp 3-component vector of float)
+0:196          'r013' ( temp 3-component vector of float)
+0:196          cosine ( temp 3-component vector of float)
+0:196            'inF0' ( in 3-component vector of float)
+0:197      Sequence
+0:197        move second child to first child ( temp 3-component vector of float)
+0:197          'r014' ( temp 3-component vector of float)
+0:197          hyp. cosine ( temp 3-component vector of float)
+0:197            'inF0' ( in 3-component vector of float)
+0:198      Sequence
+0:198        move second child to first child ( temp 3-component vector of uint)
+0:198          'r015' ( temp 3-component vector of uint)
 0:?           bitCount ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
-0:196      Sequence
-0:196        move second child to first child ( temp 3-component vector of float)
-0:196          'r016' ( temp 3-component vector of float)
-0:196          cross-product ( temp 3-component vector of float)
-0:196            'inF0' ( in 3-component vector of float)
-0:196            'inF1' ( in 3-component vector of float)
-0:197      Sequence
-0:197        move second child to first child ( temp 3-component vector of float)
-0:197          'r017' ( temp 3-component vector of float)
-0:197          dPdx ( temp 3-component vector of float)
-0:197            'inF0' ( in 3-component vector of float)
-0:198      Sequence
-0:198        move second child to first child ( temp 3-component vector of float)
-0:198          'r018' ( temp 3-component vector of float)
-0:198          dPdxCoarse ( temp 3-component vector of float)
-0:198            'inF0' ( in 3-component vector of float)
 0:199      Sequence
 0:199        move second child to first child ( temp 3-component vector of float)
-0:199          'r019' ( temp 3-component vector of float)
-0:199          dPdxFine ( temp 3-component vector of float)
+0:199          'r016' ( temp 3-component vector of float)
+0:199          cross-product ( temp 3-component vector of float)
 0:199            'inF0' ( in 3-component vector of float)
+0:199            'inF1' ( in 3-component vector of float)
 0:200      Sequence
 0:200        move second child to first child ( temp 3-component vector of float)
-0:200          'r020' ( temp 3-component vector of float)
-0:200          dPdy ( temp 3-component vector of float)
+0:200          'r017' ( temp 3-component vector of float)
+0:200          dPdx ( temp 3-component vector of float)
 0:200            'inF0' ( in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child ( temp 3-component vector of float)
-0:201          'r021' ( temp 3-component vector of float)
-0:201          dPdyCoarse ( temp 3-component vector of float)
+0:201          'r018' ( temp 3-component vector of float)
+0:201          dPdxCoarse ( temp 3-component vector of float)
 0:201            'inF0' ( in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child ( temp 3-component vector of float)
-0:202          'r022' ( temp 3-component vector of float)
-0:202          dPdyFine ( temp 3-component vector of float)
+0:202          'r019' ( temp 3-component vector of float)
+0:202          dPdxFine ( temp 3-component vector of float)
 0:202            'inF0' ( in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child ( temp 3-component vector of float)
-0:203          'r023' ( temp 3-component vector of float)
-0:203          degrees ( temp 3-component vector of float)
+0:203          'r020' ( temp 3-component vector of float)
+0:203          dPdy ( temp 3-component vector of float)
 0:203            'inF0' ( in 3-component vector of float)
 0:204      Sequence
-0:204        move second child to first child ( temp float)
-0:204          'r024' ( temp float)
-0:204          distance ( temp float)
+0:204        move second child to first child ( temp 3-component vector of float)
+0:204          'r021' ( temp 3-component vector of float)
+0:204          dPdyCoarse ( temp 3-component vector of float)
 0:204            'inF0' ( in 3-component vector of float)
-0:204            'inF1' ( in 3-component vector of float)
 0:205      Sequence
-0:205        move second child to first child ( temp float)
-0:205          'r025' ( temp float)
-0:205          dot-product ( temp float)
+0:205        move second child to first child ( temp 3-component vector of float)
+0:205          'r022' ( temp 3-component vector of float)
+0:205          dPdyFine ( temp 3-component vector of float)
 0:205            'inF0' ( in 3-component vector of float)
-0:205            'inF1' ( in 3-component vector of float)
-0:209      Sequence
-0:209        move second child to first child ( temp 3-component vector of float)
-0:209          'r029' ( temp 3-component vector of float)
-0:209          exp ( temp 3-component vector of float)
-0:209            'inF0' ( in 3-component vector of float)
-0:210      Sequence
-0:210        move second child to first child ( temp 3-component vector of float)
-0:210          'r030' ( temp 3-component vector of float)
-0:210          exp2 ( temp 3-component vector of float)
-0:210            'inF0' ( in 3-component vector of float)
-0:211      Sequence
-0:211        move second child to first child ( temp 3-component vector of float)
-0:211          'r031' ( temp 3-component vector of float)
-0:211          face-forward ( temp 3-component vector of float)
-0:211            'inF0' ( in 3-component vector of float)
-0:211            'inF1' ( in 3-component vector of float)
-0:211            'inF2' ( in 3-component vector of float)
+0:206      Sequence
+0:206        move second child to first child ( temp 3-component vector of float)
+0:206          'r023' ( temp 3-component vector of float)
+0:206          degrees ( temp 3-component vector of float)
+0:206            'inF0' ( in 3-component vector of float)
+0:207      Sequence
+0:207        move second child to first child ( temp float)
+0:207          'r024' ( temp float)
+0:207          distance ( temp float)
+0:207            'inF0' ( in 3-component vector of float)
+0:207            'inF1' ( in 3-component vector of float)
+0:208      Sequence
+0:208        move second child to first child ( temp float)
+0:208          'r025' ( temp float)
+0:208          dot-product ( temp float)
+0:208            'inF0' ( in 3-component vector of float)
+0:208            'inF1' ( in 3-component vector of float)
 0:212      Sequence
-0:212        move second child to first child ( temp 3-component vector of uint)
-0:212          'r032' ( temp 3-component vector of uint)
+0:212        move second child to first child ( temp 3-component vector of float)
+0:212          'r029' ( temp 3-component vector of float)
+0:212          exp ( temp 3-component vector of float)
+0:212            'inF0' ( in 3-component vector of float)
+0:213      Sequence
+0:213        move second child to first child ( temp 3-component vector of float)
+0:213          'r030' ( temp 3-component vector of float)
+0:213          exp2 ( temp 3-component vector of float)
+0:213            'inF0' ( in 3-component vector of float)
+0:214      Sequence
+0:214        move second child to first child ( temp 3-component vector of float)
+0:214          'r031' ( temp 3-component vector of float)
+0:214          face-forward ( temp 3-component vector of float)
+0:214            'inF0' ( in 3-component vector of float)
+0:214            'inF1' ( in 3-component vector of float)
+0:214            'inF2' ( in 3-component vector of float)
+0:215      Sequence
+0:215        move second child to first child ( temp 3-component vector of uint)
+0:215          'r032' ( temp 3-component vector of uint)
 0:?           findMSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:213      Sequence
-0:213        move second child to first child ( temp 3-component vector of uint)
-0:213          'r033' ( temp 3-component vector of uint)
+0:216      Sequence
+0:216        move second child to first child ( temp 3-component vector of uint)
+0:216          'r033' ( temp 3-component vector of uint)
 0:?           findLSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:214      Sequence
-0:214        move second child to first child ( temp 3-component vector of float)
-0:214          'r034' ( temp 3-component vector of float)
-0:214          Floor ( temp 3-component vector of float)
-0:214            'inF0' ( in 3-component vector of float)
-0:216      Sequence
-0:216        move second child to first child ( temp 3-component vector of float)
-0:216          'r036' ( temp 3-component vector of float)
-0:216          mod ( temp 3-component vector of float)
-0:216            'inF0' ( in 3-component vector of float)
-0:216            'inF1' ( in 3-component vector of float)
 0:217      Sequence
 0:217        move second child to first child ( temp 3-component vector of float)
-0:217          'r037' ( temp 3-component vector of float)
-0:217          Fraction ( temp 3-component vector of float)
+0:217          'r034' ( temp 3-component vector of float)
+0:217          Floor ( temp 3-component vector of float)
 0:217            'inF0' ( in 3-component vector of float)
-0:218      Sequence
-0:218        move second child to first child ( temp 3-component vector of float)
-0:218          'r039' ( temp 3-component vector of float)
-0:218          fwidth ( temp 3-component vector of float)
-0:218            'inF0' ( in 3-component vector of float)
 0:219      Sequence
-0:219        move second child to first child ( temp 3-component vector of bool)
-0:219          'r040' ( temp 3-component vector of bool)
-0:219          isinf ( temp 3-component vector of bool)
+0:219        move second child to first child ( temp 3-component vector of float)
+0:219          'r036' ( temp 3-component vector of float)
+0:219          mod ( temp 3-component vector of float)
 0:219            'inF0' ( in 3-component vector of float)
+0:219            'inF1' ( in 3-component vector of float)
 0:220      Sequence
-0:220        move second child to first child ( temp 3-component vector of bool)
-0:220          'r041' ( temp 3-component vector of bool)
-0:220          isnan ( temp 3-component vector of bool)
+0:220        move second child to first child ( temp 3-component vector of float)
+0:220          'r037' ( temp 3-component vector of float)
+0:220          Fraction ( temp 3-component vector of float)
 0:220            'inF0' ( in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child ( temp 3-component vector of float)
-0:221          'r042' ( temp 3-component vector of float)
-0:221          ldexp ( temp 3-component vector of float)
+0:221          'r039' ( temp 3-component vector of float)
+0:221          fwidth ( temp 3-component vector of float)
 0:221            'inF0' ( in 3-component vector of float)
-0:221            'inF1' ( in 3-component vector of float)
 0:222      Sequence
-0:222        move second child to first child ( temp 3-component vector of float)
-0:222          'r039a' ( temp 3-component vector of float)
-0:222          mix ( temp 3-component vector of float)
+0:222        move second child to first child ( temp 3-component vector of bool)
+0:222          'r040' ( temp 3-component vector of bool)
+0:222          isinf ( temp 3-component vector of bool)
 0:222            'inF0' ( in 3-component vector of float)
-0:222            'inF1' ( in 3-component vector of float)
-0:222            'inF2' ( in 3-component vector of float)
 0:223      Sequence
-0:223        move second child to first child ( temp 3-component vector of float)
-0:223          'r039b' ( temp 3-component vector of float)
-0:223          mix ( temp 3-component vector of float)
+0:223        move second child to first child ( temp 3-component vector of bool)
+0:223          'r041' ( temp 3-component vector of bool)
+0:223          isnan ( temp 3-component vector of bool)
 0:223            'inF0' ( in 3-component vector of float)
-0:223            'inF1' ( in 3-component vector of float)
-0:223            Constant:
-0:223              0.300000
 0:224      Sequence
-0:224        move second child to first child ( temp float)
-0:224          'r043' ( temp float)
-0:224          length ( temp float)
+0:224        move second child to first child ( temp 3-component vector of float)
+0:224          'r042' ( temp 3-component vector of float)
+0:224          ldexp ( temp 3-component vector of float)
 0:224            'inF0' ( in 3-component vector of float)
+0:224            'inF1' ( in 3-component vector of float)
 0:225      Sequence
 0:225        move second child to first child ( temp 3-component vector of float)
-0:225          'r044' ( temp 3-component vector of float)
-0:225          log ( temp 3-component vector of float)
+0:225          'r039a' ( temp 3-component vector of float)
+0:225          mix ( temp 3-component vector of float)
 0:225            'inF0' ( in 3-component vector of float)
+0:225            'inF1' ( in 3-component vector of float)
+0:225            'inF2' ( in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child ( temp 3-component vector of float)
-0:226          'r045' ( temp 3-component vector of float)
-0:226          vector-scale ( temp 3-component vector of float)
-0:226            log2 ( temp 3-component vector of float)
-0:226              'inF0' ( in 3-component vector of float)
+0:226          'r039b' ( temp 3-component vector of float)
+0:226          mix ( temp 3-component vector of float)
+0:226            'inF0' ( in 3-component vector of float)
+0:226            'inF1' ( in 3-component vector of float)
 0:226            Constant:
-0:226              0.301030
+0:226              0.300000
 0:227      Sequence
-0:227        move second child to first child ( temp 3-component vector of float)
-0:227          'r046' ( temp 3-component vector of float)
-0:227          log2 ( temp 3-component vector of float)
+0:227        move second child to first child ( temp float)
+0:227          'r043' ( temp float)
+0:227          length ( temp float)
 0:227            'inF0' ( in 3-component vector of float)
 0:228      Sequence
 0:228        move second child to first child ( temp 3-component vector of float)
-0:228          'r047' ( temp 3-component vector of float)
-0:228          max ( temp 3-component vector of float)
+0:228          'r044' ( temp 3-component vector of float)
+0:228          log ( temp 3-component vector of float)
 0:228            'inF0' ( in 3-component vector of float)
-0:228            'inF1' ( in 3-component vector of float)
 0:229      Sequence
 0:229        move second child to first child ( temp 3-component vector of float)
-0:229          'r048' ( temp 3-component vector of float)
-0:229          min ( temp 3-component vector of float)
-0:229            'inF0' ( in 3-component vector of float)
-0:229            'inF1' ( in 3-component vector of float)
+0:229          'r045' ( temp 3-component vector of float)
+0:229          vector-scale ( temp 3-component vector of float)
+0:229            log2 ( temp 3-component vector of float)
+0:229              'inF0' ( in 3-component vector of float)
+0:229            Constant:
+0:229              0.301030
 0:230      Sequence
 0:230        move second child to first child ( temp 3-component vector of float)
-0:230          'r049' ( temp 3-component vector of float)
-0:230          normalize ( temp 3-component vector of float)
+0:230          'r046' ( temp 3-component vector of float)
+0:230          log2 ( temp 3-component vector of float)
 0:230            'inF0' ( in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child ( temp 3-component vector of float)
-0:231          'r050' ( temp 3-component vector of float)
-0:231          pow ( temp 3-component vector of float)
+0:231          'r047' ( temp 3-component vector of float)
+0:231          max ( temp 3-component vector of float)
 0:231            'inF0' ( in 3-component vector of float)
 0:231            'inF1' ( in 3-component vector of float)
 0:232      Sequence
 0:232        move second child to first child ( temp 3-component vector of float)
-0:232          'r051' ( temp 3-component vector of float)
-0:232          radians ( temp 3-component vector of float)
+0:232          'r048' ( temp 3-component vector of float)
+0:232          min ( temp 3-component vector of float)
 0:232            'inF0' ( in 3-component vector of float)
+0:232            'inF1' ( in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child ( temp 3-component vector of float)
-0:233          'r052' ( temp 3-component vector of float)
-0:233          divide ( temp 3-component vector of float)
-0:233            Constant:
-0:233              1.000000
+0:233          'r049' ( temp 3-component vector of float)
+0:233          normalize ( temp 3-component vector of float)
 0:233            'inF0' ( in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child ( temp 3-component vector of float)
-0:234          'r053' ( temp 3-component vector of float)
-0:234          reflect ( temp 3-component vector of float)
+0:234          'r050' ( temp 3-component vector of float)
+0:234          pow ( temp 3-component vector of float)
 0:234            'inF0' ( in 3-component vector of float)
 0:234            'inF1' ( in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child ( temp 3-component vector of float)
-0:235          'r054' ( temp 3-component vector of float)
-0:235          refract ( temp 3-component vector of float)
+0:235          'r051' ( temp 3-component vector of float)
+0:235          radians ( temp 3-component vector of float)
 0:235            'inF0' ( in 3-component vector of float)
-0:235            'inF1' ( in 3-component vector of float)
-0:235            Constant:
-0:235              2.000000
 0:236      Sequence
-0:236        move second child to first child ( temp 3-component vector of uint)
-0:236          'r055' ( temp 3-component vector of uint)
+0:236        move second child to first child ( temp 3-component vector of float)
+0:236          'r052' ( temp 3-component vector of float)
+0:236          divide ( temp 3-component vector of float)
+0:236            Constant:
+0:236              1.000000
+0:236            'inF0' ( in 3-component vector of float)
+0:237      Sequence
+0:237        move second child to first child ( temp 3-component vector of float)
+0:237          'r053' ( temp 3-component vector of float)
+0:237          reflect ( temp 3-component vector of float)
+0:237            'inF0' ( in 3-component vector of float)
+0:237            'inF1' ( in 3-component vector of float)
+0:238      Sequence
+0:238        move second child to first child ( temp 3-component vector of float)
+0:238          'r054' ( temp 3-component vector of float)
+0:238          refract ( temp 3-component vector of float)
+0:238            'inF0' ( in 3-component vector of float)
+0:238            'inF1' ( in 3-component vector of float)
+0:238            Constant:
+0:238              2.000000
+0:239      Sequence
+0:239        move second child to first child ( temp 3-component vector of uint)
+0:239          'r055' ( temp 3-component vector of uint)
 0:?           bitFieldReverse ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:237      Sequence
-0:237        move second child to first child ( temp 3-component vector of float)
-0:237          'r056' ( temp 3-component vector of float)
-0:237          roundEven ( temp 3-component vector of float)
-0:237            'inF0' ( in 3-component vector of float)
-0:238      Sequence
-0:238        move second child to first child ( temp 3-component vector of float)
-0:238          'r057' ( temp 3-component vector of float)
-0:238          inverse sqrt ( temp 3-component vector of float)
-0:238            'inF0' ( in 3-component vector of float)
-0:239      Sequence
-0:239        move second child to first child ( temp 3-component vector of float)
-0:239          'r058' ( temp 3-component vector of float)
-0:239          clamp ( temp 3-component vector of float)
-0:239            'inF0' ( in 3-component vector of float)
-0:239            Constant:
-0:239              0.000000
-0:239            Constant:
-0:239              1.000000
 0:240      Sequence
 0:240        move second child to first child ( temp 3-component vector of float)
-0:240          'r059' ( temp 3-component vector of float)
-0:240          Sign ( temp 3-component vector of float)
+0:240          'r056' ( temp 3-component vector of float)
+0:240          roundEven ( temp 3-component vector of float)
 0:240            'inF0' ( in 3-component vector of float)
 0:241      Sequence
 0:241        move second child to first child ( temp 3-component vector of float)
-0:241          'r060' ( temp 3-component vector of float)
-0:241          sine ( temp 3-component vector of float)
+0:241          'r057' ( temp 3-component vector of float)
+0:241          inverse sqrt ( temp 3-component vector of float)
 0:241            'inF0' ( in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'inF1' ( in 3-component vector of float)
-0:242          sine ( temp 3-component vector of float)
+0:242          'r058' ( temp 3-component vector of float)
+0:242          clamp ( temp 3-component vector of float)
 0:242            'inF0' ( in 3-component vector of float)
-0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'inF2' ( in 3-component vector of float)
-0:242          cosine ( temp 3-component vector of float)
-0:242            'inF0' ( in 3-component vector of float)
+0:242            Constant:
+0:242              0.000000
+0:242            Constant:
+0:242              1.000000
 0:243      Sequence
 0:243        move second child to first child ( temp 3-component vector of float)
-0:243          'r061' ( temp 3-component vector of float)
-0:243          hyp. sine ( temp 3-component vector of float)
+0:243          'r059' ( temp 3-component vector of float)
+0:243          Sign ( temp 3-component vector of float)
 0:243            'inF0' ( in 3-component vector of float)
 0:244      Sequence
 0:244        move second child to first child ( temp 3-component vector of float)
-0:244          'r062' ( temp 3-component vector of float)
-0:244          smoothstep ( temp 3-component vector of float)
+0:244          'r060' ( temp 3-component vector of float)
+0:244          sine ( temp 3-component vector of float)
 0:244            'inF0' ( in 3-component vector of float)
-0:244            'inF1' ( in 3-component vector of float)
-0:244            'inF2' ( in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'r063' ( temp 3-component vector of float)
-0:245          sqrt ( temp 3-component vector of float)
+0:245          'inF1' ( in 3-component vector of float)
+0:245          sine ( temp 3-component vector of float)
+0:245            'inF0' ( in 3-component vector of float)
+0:245        move second child to first child ( temp 3-component vector of float)
+0:245          'inF2' ( in 3-component vector of float)
+0:245          cosine ( temp 3-component vector of float)
 0:245            'inF0' ( in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'r064' ( temp 3-component vector of float)
-0:246          step ( temp 3-component vector of float)
+0:246          'r061' ( temp 3-component vector of float)
+0:246          hyp. sine ( temp 3-component vector of float)
 0:246            'inF0' ( in 3-component vector of float)
-0:246            'inF1' ( in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child ( temp 3-component vector of float)
-0:247          'r065' ( temp 3-component vector of float)
-0:247          tangent ( temp 3-component vector of float)
+0:247          'r062' ( temp 3-component vector of float)
+0:247          smoothstep ( temp 3-component vector of float)
 0:247            'inF0' ( in 3-component vector of float)
+0:247            'inF1' ( in 3-component vector of float)
+0:247            'inF2' ( in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child ( temp 3-component vector of float)
-0:248          'r066' ( temp 3-component vector of float)
-0:248          hyp. tangent ( temp 3-component vector of float)
+0:248          'r063' ( temp 3-component vector of float)
+0:248          sqrt ( temp 3-component vector of float)
 0:248            'inF0' ( in 3-component vector of float)
+0:249      Sequence
+0:249        move second child to first child ( temp 3-component vector of float)
+0:249          'r064' ( temp 3-component vector of float)
+0:249          step ( temp 3-component vector of float)
+0:249            'inF0' ( in 3-component vector of float)
+0:249            'inF1' ( in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child ( temp 3-component vector of float)
-0:250          'r067' ( temp 3-component vector of float)
-0:250          trunc ( temp 3-component vector of float)
+0:250          'r065' ( temp 3-component vector of float)
+0:250          tangent ( temp 3-component vector of float)
 0:250            'inF0' ( in 3-component vector of float)
-0:253      Branch: Return with expression
+0:251      Sequence
+0:251        move second child to first child ( temp 3-component vector of float)
+0:251          'r066' ( temp 3-component vector of float)
+0:251          hyp. tangent ( temp 3-component vector of float)
+0:251            'inF0' ( in 3-component vector of float)
+0:253      Sequence
+0:253        move second child to first child ( temp 3-component vector of float)
+0:253          'r067' ( temp 3-component vector of float)
+0:253          trunc ( temp 3-component vector of float)
+0:253            'inF0' ( in 3-component vector of float)
+0:256      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:257  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:257    Function Parameters: 
-0:257      'inF0' ( in 4-component vector of float)
-0:257      'inF1' ( in 4-component vector of float)
-0:257      'inF2' ( in 4-component vector of float)
-0:257      'inU0' ( in 4-component vector of uint)
-0:257      'inU1' ( in 4-component vector of uint)
+0:260  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:260    Function Parameters: 
+0:260      'inF0' ( in 4-component vector of float)
+0:260      'inF1' ( in 4-component vector of float)
+0:260      'inF2' ( in 4-component vector of float)
+0:260      'inU0' ( in 4-component vector of uint)
+0:260      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:260      Sequence
-0:260        move second child to first child ( temp bool)
-0:260          'r000' ( temp bool)
-0:260          all ( temp bool)
-0:260            Convert float to bool ( temp 4-component vector of bool)
-0:260              'inF0' ( in 4-component vector of float)
-0:261      Sequence
-0:261        move second child to first child ( temp 4-component vector of float)
-0:261          'r001' ( temp 4-component vector of float)
-0:261          Absolute value ( temp 4-component vector of float)
-0:261            'inF0' ( in 4-component vector of float)
-0:262      Sequence
-0:262        move second child to first child ( temp 4-component vector of float)
-0:262          'r002' ( temp 4-component vector of float)
-0:262          arc cosine ( temp 4-component vector of float)
-0:262            'inF0' ( in 4-component vector of float)
 0:263      Sequence
 0:263        move second child to first child ( temp bool)
-0:263          'r003' ( temp bool)
-0:263          any ( temp bool)
+0:263          'r000' ( temp bool)
+0:263          all ( temp bool)
 0:263            Convert float to bool ( temp 4-component vector of bool)
 0:263              'inF0' ( in 4-component vector of float)
 0:264      Sequence
 0:264        move second child to first child ( temp 4-component vector of float)
-0:264          'r004' ( temp 4-component vector of float)
-0:264          arc sine ( temp 4-component vector of float)
+0:264          'r001' ( temp 4-component vector of float)
+0:264          Absolute value ( temp 4-component vector of float)
 0:264            'inF0' ( in 4-component vector of float)
 0:265      Sequence
-0:265        move second child to first child ( temp 4-component vector of int)
-0:265          'r005' ( temp 4-component vector of int)
-0:265          floatBitsToInt ( temp 4-component vector of int)
+0:265        move second child to first child ( temp 4-component vector of float)
+0:265          'r002' ( temp 4-component vector of float)
+0:265          arc cosine ( temp 4-component vector of float)
 0:265            'inF0' ( in 4-component vector of float)
 0:266      Sequence
-0:266        move second child to first child ( temp 4-component vector of uint)
-0:266          'r006' ( temp 4-component vector of uint)
-0:266          floatBitsToUint ( temp 4-component vector of uint)
-0:266            'inF0' ( in 4-component vector of float)
+0:266        move second child to first child ( temp bool)
+0:266          'r003' ( temp bool)
+0:266          any ( temp bool)
+0:266            Convert float to bool ( temp 4-component vector of bool)
+0:266              'inF0' ( in 4-component vector of float)
 0:267      Sequence
 0:267        move second child to first child ( temp 4-component vector of float)
-0:267          'r007' ( temp 4-component vector of float)
-0:267          intBitsToFloat ( temp 4-component vector of float)
-0:267            'inU0' ( in 4-component vector of uint)
+0:267          'r004' ( temp 4-component vector of float)
+0:267          arc sine ( temp 4-component vector of float)
+0:267            'inF0' ( in 4-component vector of float)
+0:268      Sequence
+0:268        move second child to first child ( temp 4-component vector of int)
+0:268          'r005' ( temp 4-component vector of int)
+0:268          floatBitsToInt ( temp 4-component vector of int)
+0:268            'inF0' ( in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child ( temp 4-component vector of float)
-0:269          'r009' ( temp 4-component vector of float)
-0:269          arc tangent ( temp 4-component vector of float)
+0:269        move second child to first child ( temp 4-component vector of uint)
+0:269          'r006' ( temp 4-component vector of uint)
+0:269          floatBitsToUint ( temp 4-component vector of uint)
 0:269            'inF0' ( in 4-component vector of float)
 0:270      Sequence
 0:270        move second child to first child ( temp 4-component vector of float)
-0:270          'r010' ( temp 4-component vector of float)
-0:270          arc tangent ( temp 4-component vector of float)
-0:270            'inF0' ( in 4-component vector of float)
-0:270            'inF1' ( in 4-component vector of float)
-0:271      Sequence
-0:271        move second child to first child ( temp 4-component vector of float)
-0:271          'r011' ( temp 4-component vector of float)
-0:271          Ceiling ( temp 4-component vector of float)
-0:271            'inF0' ( in 4-component vector of float)
+0:270          'r007' ( temp 4-component vector of float)
+0:270          intBitsToFloat ( temp 4-component vector of float)
+0:270            'inU0' ( in 4-component vector of uint)
 0:272      Sequence
 0:272        move second child to first child ( temp 4-component vector of float)
-0:272          'r012' ( temp 4-component vector of float)
-0:272          clamp ( temp 4-component vector of float)
+0:272          'r009' ( temp 4-component vector of float)
+0:272          arc tangent ( temp 4-component vector of float)
 0:272            'inF0' ( in 4-component vector of float)
-0:272            'inF1' ( in 4-component vector of float)
-0:272            'inF2' ( in 4-component vector of float)
-0:273      Test condition and select ( temp void)
-0:273        Condition
-0:273        any ( temp bool)
-0:273          Compare Less Than ( temp 4-component vector of bool)
+0:273      Sequence
+0:273        move second child to first child ( temp 4-component vector of float)
+0:273          'r010' ( temp 4-component vector of float)
+0:273          arc tangent ( temp 4-component vector of float)
 0:273            'inF0' ( in 4-component vector of float)
-0:273            Constant:
-0:273              0.000000
-0:273              0.000000
-0:273              0.000000
-0:273              0.000000
-0:273        true case
-0:273        Branch: Kill
+0:273            'inF1' ( in 4-component vector of float)
 0:274      Sequence
 0:274        move second child to first child ( temp 4-component vector of float)
-0:274          'r013' ( temp 4-component vector of float)
-0:274          cosine ( temp 4-component vector of float)
+0:274          'r011' ( temp 4-component vector of float)
+0:274          Ceiling ( temp 4-component vector of float)
 0:274            'inF0' ( in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child ( temp 4-component vector of float)
-0:275          'r014' ( temp 4-component vector of float)
-0:275          hyp. cosine ( temp 4-component vector of float)
+0:275          'r012' ( temp 4-component vector of float)
+0:275          clamp ( temp 4-component vector of float)
 0:275            'inF0' ( in 4-component vector of float)
-0:276      Sequence
-0:276        move second child to first child ( temp 4-component vector of uint)
-0:276          'r015' ( temp 4-component vector of uint)
+0:275            'inF1' ( in 4-component vector of float)
+0:275            'inF2' ( in 4-component vector of float)
+0:276      Test condition and select ( temp void)
+0:276        Condition
+0:276        any ( temp bool)
+0:276          Compare Less Than ( temp 4-component vector of bool)
+0:276            'inF0' ( in 4-component vector of float)
+0:276            Constant:
+0:276              0.000000
+0:276              0.000000
+0:276              0.000000
+0:276              0.000000
+0:276        true case
+0:276        Branch: Kill
+0:277      Test condition and select ( temp void)
+0:277        Condition
+0:277        any ( temp bool)
+0:277          Compare Less Than ( temp 4-component vector of bool)
+0:277            'inU0' ( in 4-component vector of uint)
+0:277            Constant:
+0:277              0.000000
+0:277              0.000000
+0:277              0.000000
+0:277              0.000000
+0:277        true case
+0:277        Branch: Kill
+0:278      Sequence
+0:278        move second child to first child ( temp 4-component vector of float)
+0:278          'r013' ( temp 4-component vector of float)
+0:278          cosine ( temp 4-component vector of float)
+0:278            'inF0' ( in 4-component vector of float)
+0:279      Sequence
+0:279        move second child to first child ( temp 4-component vector of float)
+0:279          'r014' ( temp 4-component vector of float)
+0:279          hyp. cosine ( temp 4-component vector of float)
+0:279            'inF0' ( in 4-component vector of float)
+0:280      Sequence
+0:280        move second child to first child ( temp 4-component vector of uint)
+0:280          'r015' ( temp 4-component vector of uint)
 0:?           bitCount ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:277      Sequence
-0:277        move second child to first child ( temp 4-component vector of float)
-0:277          'r016' ( temp 4-component vector of float)
-0:277          dPdx ( temp 4-component vector of float)
-0:277            'inF0' ( in 4-component vector of float)
-0:278      Sequence
-0:278        move second child to first child ( temp 4-component vector of float)
-0:278          'r017' ( temp 4-component vector of float)
-0:278          dPdxCoarse ( temp 4-component vector of float)
-0:278            'inF0' ( in 4-component vector of float)
-0:279      Sequence
-0:279        move second child to first child ( temp 4-component vector of float)
-0:279          'r018' ( temp 4-component vector of float)
-0:279          dPdxFine ( temp 4-component vector of float)
-0:279            'inF0' ( in 4-component vector of float)
-0:280      Sequence
-0:280        move second child to first child ( temp 4-component vector of float)
-0:280          'r019' ( temp 4-component vector of float)
-0:280          dPdy ( temp 4-component vector of float)
-0:280            'inF0' ( in 4-component vector of float)
 0:281      Sequence
 0:281        move second child to first child ( temp 4-component vector of float)
-0:281          'r020' ( temp 4-component vector of float)
-0:281          dPdyCoarse ( temp 4-component vector of float)
+0:281          'r016' ( temp 4-component vector of float)
+0:281          dPdx ( temp 4-component vector of float)
 0:281            'inF0' ( in 4-component vector of float)
 0:282      Sequence
 0:282        move second child to first child ( temp 4-component vector of float)
-0:282          'r021' ( temp 4-component vector of float)
-0:282          dPdyFine ( temp 4-component vector of float)
+0:282          'r017' ( temp 4-component vector of float)
+0:282          dPdxCoarse ( temp 4-component vector of float)
 0:282            'inF0' ( in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child ( temp 4-component vector of float)
-0:283          'r022' ( temp 4-component vector of float)
-0:283          degrees ( temp 4-component vector of float)
+0:283          'r018' ( temp 4-component vector of float)
+0:283          dPdxFine ( temp 4-component vector of float)
 0:283            'inF0' ( in 4-component vector of float)
 0:284      Sequence
-0:284        move second child to first child ( temp float)
-0:284          'r023' ( temp float)
-0:284          distance ( temp float)
+0:284        move second child to first child ( temp 4-component vector of float)
+0:284          'r019' ( temp 4-component vector of float)
+0:284          dPdy ( temp 4-component vector of float)
 0:284            'inF0' ( in 4-component vector of float)
-0:284            'inF1' ( in 4-component vector of float)
 0:285      Sequence
-0:285        move second child to first child ( temp float)
-0:285          'r024' ( temp float)
-0:285          dot-product ( temp float)
+0:285        move second child to first child ( temp 4-component vector of float)
+0:285          'r020' ( temp 4-component vector of float)
+0:285          dPdyCoarse ( temp 4-component vector of float)
 0:285            'inF0' ( in 4-component vector of float)
-0:285            'inF1' ( in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child ( temp 4-component vector of float)
-0:286          'r025' ( temp 4-component vector of float)
-0:286          Construct vec4 ( temp 4-component vector of float)
-0:286            Constant:
-0:286              1.000000
-0:286            component-wise multiply ( temp float)
-0:286              direct index ( temp float)
-0:286                'inF0' ( in 4-component vector of float)
-0:286                Constant:
-0:286                  1 (const int)
-0:286              direct index ( temp float)
-0:286                'inF1' ( in 4-component vector of float)
-0:286                Constant:
-0:286                  1 (const int)
-0:286            direct index ( temp float)
-0:286              'inF0' ( in 4-component vector of float)
-0:286              Constant:
-0:286                2 (const int)
-0:286            direct index ( temp float)
-0:286              'inF1' ( in 4-component vector of float)
-0:286              Constant:
-0:286                3 (const int)
+0:286          'r021' ( temp 4-component vector of float)
+0:286          dPdyFine ( temp 4-component vector of float)
+0:286            'inF0' ( in 4-component vector of float)
+0:287      Sequence
+0:287        move second child to first child ( temp 4-component vector of float)
+0:287          'r022' ( temp 4-component vector of float)
+0:287          degrees ( temp 4-component vector of float)
+0:287            'inF0' ( in 4-component vector of float)
+0:288      Sequence
+0:288        move second child to first child ( temp float)
+0:288          'r023' ( temp float)
+0:288          distance ( temp float)
+0:288            'inF0' ( in 4-component vector of float)
+0:288            'inF1' ( in 4-component vector of float)
+0:289      Sequence
+0:289        move second child to first child ( temp float)
+0:289          'r024' ( temp float)
+0:289          dot-product ( temp float)
+0:289            'inF0' ( in 4-component vector of float)
+0:289            'inF1' ( in 4-component vector of float)
 0:290      Sequence
 0:290        move second child to first child ( temp 4-component vector of float)
-0:290          'r029' ( temp 4-component vector of float)
-0:290          exp ( temp 4-component vector of float)
-0:290            'inF0' ( in 4-component vector of float)
-0:291      Sequence
-0:291        move second child to first child ( temp 4-component vector of float)
-0:291          'r030' ( temp 4-component vector of float)
-0:291          exp2 ( temp 4-component vector of float)
-0:291            'inF0' ( in 4-component vector of float)
-0:292      Sequence
-0:292        move second child to first child ( temp 4-component vector of float)
-0:292          'r031' ( temp 4-component vector of float)
-0:292          face-forward ( temp 4-component vector of float)
-0:292            'inF0' ( in 4-component vector of float)
-0:292            'inF1' ( in 4-component vector of float)
-0:292            'inF2' ( in 4-component vector of float)
-0:293      Sequence
-0:293        move second child to first child ( temp 4-component vector of uint)
-0:293          'r032' ( temp 4-component vector of uint)
+0:290          'r025' ( temp 4-component vector of float)
+0:290          Construct vec4 ( temp 4-component vector of float)
+0:290            Constant:
+0:290              1.000000
+0:290            component-wise multiply ( temp float)
+0:290              direct index ( temp float)
+0:290                'inF0' ( in 4-component vector of float)
+0:290                Constant:
+0:290                  1 (const int)
+0:290              direct index ( temp float)
+0:290                'inF1' ( in 4-component vector of float)
+0:290                Constant:
+0:290                  1 (const int)
+0:290            direct index ( temp float)
+0:290              'inF0' ( in 4-component vector of float)
+0:290              Constant:
+0:290                2 (const int)
+0:290            direct index ( temp float)
+0:290              'inF1' ( in 4-component vector of float)
+0:290              Constant:
+0:290                3 (const int)
+0:294      Sequence
+0:294        move second child to first child ( temp 4-component vector of float)
+0:294          'r029' ( temp 4-component vector of float)
+0:294          exp ( temp 4-component vector of float)
+0:294            'inF0' ( in 4-component vector of float)
+0:295      Sequence
+0:295        move second child to first child ( temp 4-component vector of float)
+0:295          'r030' ( temp 4-component vector of float)
+0:295          exp2 ( temp 4-component vector of float)
+0:295            'inF0' ( in 4-component vector of float)
+0:296      Sequence
+0:296        move second child to first child ( temp 4-component vector of float)
+0:296          'r031' ( temp 4-component vector of float)
+0:296          face-forward ( temp 4-component vector of float)
+0:296            'inF0' ( in 4-component vector of float)
+0:296            'inF1' ( in 4-component vector of float)
+0:296            'inF2' ( in 4-component vector of float)
+0:297      Sequence
+0:297        move second child to first child ( temp 4-component vector of uint)
+0:297          'r032' ( temp 4-component vector of uint)
 0:?           findMSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:294      Sequence
-0:294        move second child to first child ( temp 4-component vector of uint)
-0:294          'r033' ( temp 4-component vector of uint)
+0:298      Sequence
+0:298        move second child to first child ( temp 4-component vector of uint)
+0:298          'r033' ( temp 4-component vector of uint)
 0:?           findLSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:295      Sequence
-0:295        move second child to first child ( temp 4-component vector of float)
-0:295          'r034' ( temp 4-component vector of float)
-0:295          Floor ( temp 4-component vector of float)
-0:295            'inF0' ( in 4-component vector of float)
-0:297      Sequence
-0:297        move second child to first child ( temp 4-component vector of float)
-0:297          'r036' ( temp 4-component vector of float)
-0:297          mod ( temp 4-component vector of float)
-0:297            'inF0' ( in 4-component vector of float)
-0:297            'inF1' ( in 4-component vector of float)
-0:298      Sequence
-0:298        move second child to first child ( temp 4-component vector of float)
-0:298          'r037' ( temp 4-component vector of float)
-0:298          Fraction ( temp 4-component vector of float)
-0:298            'inF0' ( in 4-component vector of float)
 0:299      Sequence
 0:299        move second child to first child ( temp 4-component vector of float)
-0:299          'r039' ( temp 4-component vector of float)
-0:299          fwidth ( temp 4-component vector of float)
+0:299          'r034' ( temp 4-component vector of float)
+0:299          Floor ( temp 4-component vector of float)
 0:299            'inF0' ( in 4-component vector of float)
-0:300      Sequence
-0:300        move second child to first child ( temp 4-component vector of bool)
-0:300          'r040' ( temp 4-component vector of bool)
-0:300          isinf ( temp 4-component vector of bool)
-0:300            'inF0' ( in 4-component vector of float)
 0:301      Sequence
-0:301        move second child to first child ( temp 4-component vector of bool)
-0:301          'r041' ( temp 4-component vector of bool)
-0:301          isnan ( temp 4-component vector of bool)
+0:301        move second child to first child ( temp 4-component vector of float)
+0:301          'r036' ( temp 4-component vector of float)
+0:301          mod ( temp 4-component vector of float)
 0:301            'inF0' ( in 4-component vector of float)
+0:301            'inF1' ( in 4-component vector of float)
 0:302      Sequence
 0:302        move second child to first child ( temp 4-component vector of float)
-0:302          'r042' ( temp 4-component vector of float)
-0:302          ldexp ( temp 4-component vector of float)
+0:302          'r037' ( temp 4-component vector of float)
+0:302          Fraction ( temp 4-component vector of float)
 0:302            'inF0' ( in 4-component vector of float)
-0:302            'inF1' ( in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child ( temp 4-component vector of float)
-0:303          'r039a' ( temp 4-component vector of float)
-0:303          mix ( temp 4-component vector of float)
+0:303          'r039' ( temp 4-component vector of float)
+0:303          fwidth ( temp 4-component vector of float)
 0:303            'inF0' ( in 4-component vector of float)
-0:303            'inF1' ( in 4-component vector of float)
-0:303            'inF2' ( in 4-component vector of float)
 0:304      Sequence
-0:304        move second child to first child ( temp float)
-0:304          'r043' ( temp float)
-0:304          length ( temp float)
+0:304        move second child to first child ( temp 4-component vector of bool)
+0:304          'r040' ( temp 4-component vector of bool)
+0:304          isinf ( temp 4-component vector of bool)
 0:304            'inF0' ( in 4-component vector of float)
 0:305      Sequence
-0:305        move second child to first child ( temp 4-component vector of float)
-0:305          'r044' ( temp 4-component vector of float)
-0:305          log ( temp 4-component vector of float)
+0:305        move second child to first child ( temp 4-component vector of bool)
+0:305          'r041' ( temp 4-component vector of bool)
+0:305          isnan ( temp 4-component vector of bool)
 0:305            'inF0' ( in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child ( temp 4-component vector of float)
-0:306          'r045' ( temp 4-component vector of float)
-0:306          vector-scale ( temp 4-component vector of float)
-0:306            log2 ( temp 4-component vector of float)
-0:306              'inF0' ( in 4-component vector of float)
-0:306            Constant:
-0:306              0.301030
+0:306          'r042' ( temp 4-component vector of float)
+0:306          ldexp ( temp 4-component vector of float)
+0:306            'inF0' ( in 4-component vector of float)
+0:306            'inF1' ( in 4-component vector of float)
 0:307      Sequence
 0:307        move second child to first child ( temp 4-component vector of float)
-0:307          'r046' ( temp 4-component vector of float)
-0:307          log2 ( temp 4-component vector of float)
+0:307          'r039a' ( temp 4-component vector of float)
+0:307          mix ( temp 4-component vector of float)
 0:307            'inF0' ( in 4-component vector of float)
+0:307            'inF1' ( in 4-component vector of float)
+0:307            'inF2' ( in 4-component vector of float)
 0:308      Sequence
-0:308        move second child to first child ( temp 4-component vector of float)
-0:308          'r047' ( temp 4-component vector of float)
-0:308          max ( temp 4-component vector of float)
+0:308        move second child to first child ( temp float)
+0:308          'r043' ( temp float)
+0:308          length ( temp float)
 0:308            'inF0' ( in 4-component vector of float)
-0:308            'inF1' ( in 4-component vector of float)
 0:309      Sequence
 0:309        move second child to first child ( temp 4-component vector of float)
-0:309          'r048' ( temp 4-component vector of float)
-0:309          min ( temp 4-component vector of float)
+0:309          'r044' ( temp 4-component vector of float)
+0:309          log ( temp 4-component vector of float)
 0:309            'inF0' ( in 4-component vector of float)
-0:309            'inF1' ( in 4-component vector of float)
 0:310      Sequence
 0:310        move second child to first child ( temp 4-component vector of float)
-0:310          'r049' ( temp 4-component vector of float)
-0:310          normalize ( temp 4-component vector of float)
-0:310            'inF0' ( in 4-component vector of float)
+0:310          'r045' ( temp 4-component vector of float)
+0:310          vector-scale ( temp 4-component vector of float)
+0:310            log2 ( temp 4-component vector of float)
+0:310              'inF0' ( in 4-component vector of float)
+0:310            Constant:
+0:310              0.301030
 0:311      Sequence
 0:311        move second child to first child ( temp 4-component vector of float)
-0:311          'r050' ( temp 4-component vector of float)
-0:311          pow ( temp 4-component vector of float)
+0:311          'r046' ( temp 4-component vector of float)
+0:311          log2 ( temp 4-component vector of float)
 0:311            'inF0' ( in 4-component vector of float)
-0:311            'inF1' ( in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child ( temp 4-component vector of float)
-0:312          'r051' ( temp 4-component vector of float)
-0:312          radians ( temp 4-component vector of float)
+0:312          'r047' ( temp 4-component vector of float)
+0:312          max ( temp 4-component vector of float)
 0:312            'inF0' ( in 4-component vector of float)
+0:312            'inF1' ( in 4-component vector of float)
 0:313      Sequence
 0:313        move second child to first child ( temp 4-component vector of float)
-0:313          'r052' ( temp 4-component vector of float)
-0:313          divide ( temp 4-component vector of float)
-0:313            Constant:
-0:313              1.000000
+0:313          'r048' ( temp 4-component vector of float)
+0:313          min ( temp 4-component vector of float)
 0:313            'inF0' ( in 4-component vector of float)
+0:313            'inF1' ( in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child ( temp 4-component vector of float)
-0:314          'r053' ( temp 4-component vector of float)
-0:314          reflect ( temp 4-component vector of float)
+0:314          'r049' ( temp 4-component vector of float)
+0:314          normalize ( temp 4-component vector of float)
 0:314            'inF0' ( in 4-component vector of float)
-0:314            'inF1' ( in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child ( temp 4-component vector of float)
-0:315          'r054' ( temp 4-component vector of float)
-0:315          refract ( temp 4-component vector of float)
+0:315          'r050' ( temp 4-component vector of float)
+0:315          pow ( temp 4-component vector of float)
 0:315            'inF0' ( in 4-component vector of float)
 0:315            'inF1' ( in 4-component vector of float)
-0:315            Constant:
-0:315              2.000000
 0:316      Sequence
-0:316        move second child to first child ( temp 4-component vector of uint)
-0:316          'r055' ( temp 4-component vector of uint)
+0:316        move second child to first child ( temp 4-component vector of float)
+0:316          'r051' ( temp 4-component vector of float)
+0:316          radians ( temp 4-component vector of float)
+0:316            'inF0' ( in 4-component vector of float)
+0:317      Sequence
+0:317        move second child to first child ( temp 4-component vector of float)
+0:317          'r052' ( temp 4-component vector of float)
+0:317          divide ( temp 4-component vector of float)
+0:317            Constant:
+0:317              1.000000
+0:317            'inF0' ( in 4-component vector of float)
+0:318      Sequence
+0:318        move second child to first child ( temp 4-component vector of float)
+0:318          'r053' ( temp 4-component vector of float)
+0:318          reflect ( temp 4-component vector of float)
+0:318            'inF0' ( in 4-component vector of float)
+0:318            'inF1' ( in 4-component vector of float)
+0:319      Sequence
+0:319        move second child to first child ( temp 4-component vector of float)
+0:319          'r054' ( temp 4-component vector of float)
+0:319          refract ( temp 4-component vector of float)
+0:319            'inF0' ( in 4-component vector of float)
+0:319            'inF1' ( in 4-component vector of float)
+0:319            Constant:
+0:319              2.000000
+0:320      Sequence
+0:320        move second child to first child ( temp 4-component vector of uint)
+0:320          'r055' ( temp 4-component vector of uint)
 0:?           bitFieldReverse ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:317      Sequence
-0:317        move second child to first child ( temp 4-component vector of float)
-0:317          'r056' ( temp 4-component vector of float)
-0:317          roundEven ( temp 4-component vector of float)
-0:317            'inF0' ( in 4-component vector of float)
-0:318      Sequence
-0:318        move second child to first child ( temp 4-component vector of float)
-0:318          'r057' ( temp 4-component vector of float)
-0:318          inverse sqrt ( temp 4-component vector of float)
-0:318            'inF0' ( in 4-component vector of float)
-0:319      Sequence
-0:319        move second child to first child ( temp 4-component vector of float)
-0:319          'r058' ( temp 4-component vector of float)
-0:319          clamp ( temp 4-component vector of float)
-0:319            'inF0' ( in 4-component vector of float)
-0:319            Constant:
-0:319              0.000000
-0:319            Constant:
-0:319              1.000000
-0:320      Sequence
-0:320        move second child to first child ( temp 4-component vector of float)
-0:320          'r059' ( temp 4-component vector of float)
-0:320          Sign ( temp 4-component vector of float)
-0:320            'inF0' ( in 4-component vector of float)
 0:321      Sequence
 0:321        move second child to first child ( temp 4-component vector of float)
-0:321          'r060' ( temp 4-component vector of float)
-0:321          sine ( temp 4-component vector of float)
+0:321          'r056' ( temp 4-component vector of float)
+0:321          roundEven ( temp 4-component vector of float)
 0:321            'inF0' ( in 4-component vector of float)
 0:322      Sequence
 0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'inF1' ( in 4-component vector of float)
-0:322          sine ( temp 4-component vector of float)
-0:322            'inF0' ( in 4-component vector of float)
-0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'inF2' ( in 4-component vector of float)
-0:322          cosine ( temp 4-component vector of float)
+0:322          'r057' ( temp 4-component vector of float)
+0:322          inverse sqrt ( temp 4-component vector of float)
 0:322            'inF0' ( in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child ( temp 4-component vector of float)
-0:323          'r061' ( temp 4-component vector of float)
-0:323          hyp. sine ( temp 4-component vector of float)
+0:323          'r058' ( temp 4-component vector of float)
+0:323          clamp ( temp 4-component vector of float)
 0:323            'inF0' ( in 4-component vector of float)
+0:323            Constant:
+0:323              0.000000
+0:323            Constant:
+0:323              1.000000
 0:324      Sequence
 0:324        move second child to first child ( temp 4-component vector of float)
-0:324          'r062' ( temp 4-component vector of float)
-0:324          smoothstep ( temp 4-component vector of float)
+0:324          'r059' ( temp 4-component vector of float)
+0:324          Sign ( temp 4-component vector of float)
 0:324            'inF0' ( in 4-component vector of float)
-0:324            'inF1' ( in 4-component vector of float)
-0:324            'inF2' ( in 4-component vector of float)
 0:325      Sequence
 0:325        move second child to first child ( temp 4-component vector of float)
-0:325          'r063' ( temp 4-component vector of float)
-0:325          sqrt ( temp 4-component vector of float)
+0:325          'r060' ( temp 4-component vector of float)
+0:325          sine ( temp 4-component vector of float)
 0:325            'inF0' ( in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'r064' ( temp 4-component vector of float)
-0:326          step ( temp 4-component vector of float)
+0:326          'inF1' ( in 4-component vector of float)
+0:326          sine ( temp 4-component vector of float)
 0:326            'inF0' ( in 4-component vector of float)
-0:326            'inF1' ( in 4-component vector of float)
+0:326        move second child to first child ( temp 4-component vector of float)
+0:326          'inF2' ( in 4-component vector of float)
+0:326          cosine ( temp 4-component vector of float)
+0:326            'inF0' ( in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'r065' ( temp 4-component vector of float)
-0:327          tangent ( temp 4-component vector of float)
+0:327          'r061' ( temp 4-component vector of float)
+0:327          hyp. sine ( temp 4-component vector of float)
 0:327            'inF0' ( in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child ( temp 4-component vector of float)
-0:328          'r066' ( temp 4-component vector of float)
-0:328          hyp. tangent ( temp 4-component vector of float)
+0:328          'r062' ( temp 4-component vector of float)
+0:328          smoothstep ( temp 4-component vector of float)
 0:328            'inF0' ( in 4-component vector of float)
+0:328            'inF1' ( in 4-component vector of float)
+0:328            'inF2' ( in 4-component vector of float)
+0:329      Sequence
+0:329        move second child to first child ( temp 4-component vector of float)
+0:329          'r063' ( temp 4-component vector of float)
+0:329          sqrt ( temp 4-component vector of float)
+0:329            'inF0' ( in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child ( temp 4-component vector of float)
-0:330          'r067' ( temp 4-component vector of float)
-0:330          trunc ( temp 4-component vector of float)
+0:330          'r064' ( temp 4-component vector of float)
+0:330          step ( temp 4-component vector of float)
 0:330            'inF0' ( in 4-component vector of float)
-0:333      Branch: Return with expression
+0:330            'inF1' ( in 4-component vector of float)
+0:331      Sequence
+0:331        move second child to first child ( temp 4-component vector of float)
+0:331          'r065' ( temp 4-component vector of float)
+0:331          tangent ( temp 4-component vector of float)
+0:331            'inF0' ( in 4-component vector of float)
+0:332      Sequence
+0:332        move second child to first child ( temp 4-component vector of float)
+0:332          'r066' ( temp 4-component vector of float)
+0:332          hyp. tangent ( temp 4-component vector of float)
+0:332            'inF0' ( in 4-component vector of float)
+0:334      Sequence
+0:334        move second child to first child ( temp 4-component vector of float)
+0:334          'r067' ( temp 4-component vector of float)
+0:334          trunc ( temp 4-component vector of float)
+0:334            'inF0' ( in 4-component vector of float)
+0:337      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:396  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:396    Function Parameters: 
-0:396      'inF0' ( in 2X2 matrix of float)
-0:396      'inF1' ( in 2X2 matrix of float)
-0:396      'inF2' ( in 2X2 matrix of float)
+0:400  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:400    Function Parameters: 
+0:400      'inF0' ( in 2X2 matrix of float)
+0:400      'inF1' ( in 2X2 matrix of float)
+0:400      'inF2' ( in 2X2 matrix of float)
 0:?     Sequence
-0:398      Sequence
-0:398        move second child to first child ( temp bool)
-0:398          'r000' ( temp bool)
-0:398          all ( temp bool)
-0:398            Convert float to bool ( temp 2X2 matrix of bool)
-0:398              'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r001' ( temp 2X2 matrix of float)
-0:398          Absolute value ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      arc cosine ( temp 2X2 matrix of float)
-0:398        'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp bool)
-0:398          'r003' ( temp bool)
-0:398          any ( temp bool)
-0:398            Convert float to bool ( temp 2X2 matrix of bool)
-0:398              'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r004' ( temp 2X2 matrix of float)
-0:398          arc sine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r005' ( temp 2X2 matrix of float)
-0:398          arc tangent ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r006' ( temp 2X2 matrix of float)
-0:398          arc tangent ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r007' ( temp 2X2 matrix of float)
-0:398          Ceiling ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Test condition and select ( temp void)
-0:398        Condition
-0:398        any ( temp bool)
-0:398          Compare Less Than ( temp 2X2 matrix of bool)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            Constant:
-0:398              0.000000
-0:398              0.000000
-0:398              0.000000
-0:398              0.000000
-0:398        true case
-0:398        Branch: Kill
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r008' ( temp 2X2 matrix of float)
-0:398          clamp ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398            'inF2' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r009' ( temp 2X2 matrix of float)
-0:398          cosine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r010' ( temp 2X2 matrix of float)
-0:398          hyp. cosine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r011' ( temp 2X2 matrix of float)
-0:398          dPdx ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r012' ( temp 2X2 matrix of float)
-0:398          dPdxCoarse ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r013' ( temp 2X2 matrix of float)
-0:398          dPdxFine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r014' ( temp 2X2 matrix of float)
-0:398          dPdy ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r015' ( temp 2X2 matrix of float)
-0:398          dPdyCoarse ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r016' ( temp 2X2 matrix of float)
-0:398          dPdyFine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r017' ( temp 2X2 matrix of float)
-0:398          degrees ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp float)
-0:398          'r018' ( temp float)
-0:398          determinant ( temp float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r019' ( temp 2X2 matrix of float)
-0:398          exp ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'R020' ( temp 2X2 matrix of float)
-0:398          exp2 ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r021' ( temp 2X2 matrix of float)
-0:398          Floor ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r022' ( temp 2X2 matrix of float)
-0:398          mod ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r023' ( temp 2X2 matrix of float)
-0:398          Fraction ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r025' ( temp 2X2 matrix of float)
-0:398          fwidth ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r026' ( temp 2X2 matrix of float)
-0:398          ldexp ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r026a' ( temp 2X2 matrix of float)
-0:398          mix ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398            'inF2' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r027' ( temp 2X2 matrix of float)
-0:398          log ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r028' ( temp 2X2 matrix of float)
-0:398          matrix-scale ( temp 2X2 matrix of float)
-0:398            log2 ( temp 2X2 matrix of float)
-0:398              'inF0' ( in 2X2 matrix of float)
-0:398            Constant:
-0:398              0.301030
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r029' ( temp 2X2 matrix of float)
-0:398          log2 ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r030' ( temp 2X2 matrix of float)
-0:398          max ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r031' ( temp 2X2 matrix of float)
-0:398          min ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r032' ( temp 2X2 matrix of float)
-0:398          pow ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r033' ( temp 2X2 matrix of float)
-0:398          radians ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r034' ( temp 2X2 matrix of float)
-0:398          roundEven ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r035' ( temp 2X2 matrix of float)
-0:398          inverse sqrt ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r036' ( temp 2X2 matrix of float)
-0:398          clamp ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            Constant:
-0:398              0.000000
-0:398            Constant:
-0:398              1.000000
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r037' ( temp 2X2 matrix of float)
-0:398          Sign ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r038' ( temp 2X2 matrix of float)
-0:398          sine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'inF1' ( in 2X2 matrix of float)
-0:398          sine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'inF2' ( in 2X2 matrix of float)
-0:398          cosine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r039' ( temp 2X2 matrix of float)
-0:398          hyp. sine ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r049' ( temp 2X2 matrix of float)
-0:398          smoothstep ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398            'inF2' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r041' ( temp 2X2 matrix of float)
-0:398          sqrt ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r042' ( temp 2X2 matrix of float)
-0:398          step ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398            'inF1' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r043' ( temp 2X2 matrix of float)
-0:398          tangent ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r044' ( temp 2X2 matrix of float)
-0:398          hyp. tangent ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:398      transpose ( temp 2X2 matrix of float)
-0:398        'inF0' ( in 2X2 matrix of float)
-0:398      Sequence
-0:398        move second child to first child ( temp 2X2 matrix of float)
-0:398          'r046' ( temp 2X2 matrix of float)
-0:398          trunc ( temp 2X2 matrix of float)
-0:398            'inF0' ( in 2X2 matrix of float)
-0:401      Branch: Return with expression
+0:402      Sequence
+0:402        move second child to first child ( temp bool)
+0:402          'r000' ( temp bool)
+0:402          all ( temp bool)
+0:402            Convert float to bool ( temp 2X2 matrix of bool)
+0:402              'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r001' ( temp 2X2 matrix of float)
+0:402          Absolute value ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      arc cosine ( temp 2X2 matrix of float)
+0:402        'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp bool)
+0:402          'r003' ( temp bool)
+0:402          any ( temp bool)
+0:402            Convert float to bool ( temp 2X2 matrix of bool)
+0:402              'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r004' ( temp 2X2 matrix of float)
+0:402          arc sine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r005' ( temp 2X2 matrix of float)
+0:402          arc tangent ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r006' ( temp 2X2 matrix of float)
+0:402          arc tangent ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r007' ( temp 2X2 matrix of float)
+0:402          Ceiling ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Test condition and select ( temp void)
+0:402        Condition
+0:402        any ( temp bool)
+0:402          Compare Less Than ( temp 2X2 matrix of bool)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            Constant:
+0:402              0.000000
+0:402              0.000000
+0:402              0.000000
+0:402              0.000000
+0:402        true case
+0:402        Branch: Kill
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r008' ( temp 2X2 matrix of float)
+0:402          clamp ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402            'inF2' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r009' ( temp 2X2 matrix of float)
+0:402          cosine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r010' ( temp 2X2 matrix of float)
+0:402          hyp. cosine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r011' ( temp 2X2 matrix of float)
+0:402          dPdx ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r012' ( temp 2X2 matrix of float)
+0:402          dPdxCoarse ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r013' ( temp 2X2 matrix of float)
+0:402          dPdxFine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r014' ( temp 2X2 matrix of float)
+0:402          dPdy ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r015' ( temp 2X2 matrix of float)
+0:402          dPdyCoarse ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r016' ( temp 2X2 matrix of float)
+0:402          dPdyFine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r017' ( temp 2X2 matrix of float)
+0:402          degrees ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp float)
+0:402          'r018' ( temp float)
+0:402          determinant ( temp float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r019' ( temp 2X2 matrix of float)
+0:402          exp ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'R020' ( temp 2X2 matrix of float)
+0:402          exp2 ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r021' ( temp 2X2 matrix of float)
+0:402          Floor ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r022' ( temp 2X2 matrix of float)
+0:402          mod ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r023' ( temp 2X2 matrix of float)
+0:402          Fraction ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r025' ( temp 2X2 matrix of float)
+0:402          fwidth ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r026' ( temp 2X2 matrix of float)
+0:402          ldexp ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r026a' ( temp 2X2 matrix of float)
+0:402          mix ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402            'inF2' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r027' ( temp 2X2 matrix of float)
+0:402          log ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r028' ( temp 2X2 matrix of float)
+0:402          matrix-scale ( temp 2X2 matrix of float)
+0:402            log2 ( temp 2X2 matrix of float)
+0:402              'inF0' ( in 2X2 matrix of float)
+0:402            Constant:
+0:402              0.301030
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r029' ( temp 2X2 matrix of float)
+0:402          log2 ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r030' ( temp 2X2 matrix of float)
+0:402          max ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r031' ( temp 2X2 matrix of float)
+0:402          min ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r032' ( temp 2X2 matrix of float)
+0:402          pow ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r033' ( temp 2X2 matrix of float)
+0:402          radians ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r034' ( temp 2X2 matrix of float)
+0:402          roundEven ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r035' ( temp 2X2 matrix of float)
+0:402          inverse sqrt ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r036' ( temp 2X2 matrix of float)
+0:402          clamp ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            Constant:
+0:402              0.000000
+0:402            Constant:
+0:402              1.000000
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r037' ( temp 2X2 matrix of float)
+0:402          Sign ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r038' ( temp 2X2 matrix of float)
+0:402          sine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'inF1' ( in 2X2 matrix of float)
+0:402          sine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'inF2' ( in 2X2 matrix of float)
+0:402          cosine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r039' ( temp 2X2 matrix of float)
+0:402          hyp. sine ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r049' ( temp 2X2 matrix of float)
+0:402          smoothstep ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402            'inF2' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r041' ( temp 2X2 matrix of float)
+0:402          sqrt ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r042' ( temp 2X2 matrix of float)
+0:402          step ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402            'inF1' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r043' ( temp 2X2 matrix of float)
+0:402          tangent ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r044' ( temp 2X2 matrix of float)
+0:402          hyp. tangent ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:402      transpose ( temp 2X2 matrix of float)
+0:402        'inF0' ( in 2X2 matrix of float)
+0:402      Sequence
+0:402        move second child to first child ( temp 2X2 matrix of float)
+0:402          'r046' ( temp 2X2 matrix of float)
+0:402          trunc ( temp 2X2 matrix of float)
+0:402            'inF0' ( in 2X2 matrix of float)
+0:405      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:405  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:405    Function Parameters: 
-0:405      'inF0' ( in 3X3 matrix of float)
-0:405      'inF1' ( in 3X3 matrix of float)
-0:405      'inF2' ( in 3X3 matrix of float)
+0:409  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:409    Function Parameters: 
+0:409      'inF0' ( in 3X3 matrix of float)
+0:409      'inF1' ( in 3X3 matrix of float)
+0:409      'inF2' ( in 3X3 matrix of float)
 0:?     Sequence
-0:407      Sequence
-0:407        move second child to first child ( temp bool)
-0:407          'r000' ( temp bool)
-0:407          all ( temp bool)
-0:407            Convert float to bool ( temp 3X3 matrix of bool)
-0:407              'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r001' ( temp 3X3 matrix of float)
-0:407          Absolute value ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      arc cosine ( temp 3X3 matrix of float)
-0:407        'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp bool)
-0:407          'r003' ( temp bool)
-0:407          any ( temp bool)
-0:407            Convert float to bool ( temp 3X3 matrix of bool)
-0:407              'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r004' ( temp 3X3 matrix of float)
-0:407          arc sine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r005' ( temp 3X3 matrix of float)
-0:407          arc tangent ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r006' ( temp 3X3 matrix of float)
-0:407          arc tangent ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r007' ( temp 3X3 matrix of float)
-0:407          Ceiling ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Test condition and select ( temp void)
-0:407        Condition
-0:407        any ( temp bool)
-0:407          Compare Less Than ( temp 3X3 matrix of bool)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            Constant:
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407              0.000000
-0:407        true case
-0:407        Branch: Kill
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r008' ( temp 3X3 matrix of float)
-0:407          clamp ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407            'inF2' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r009' ( temp 3X3 matrix of float)
-0:407          cosine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r010' ( temp 3X3 matrix of float)
-0:407          hyp. cosine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r011' ( temp 3X3 matrix of float)
-0:407          dPdx ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r012' ( temp 3X3 matrix of float)
-0:407          dPdxCoarse ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r013' ( temp 3X3 matrix of float)
-0:407          dPdxFine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r014' ( temp 3X3 matrix of float)
-0:407          dPdy ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r015' ( temp 3X3 matrix of float)
-0:407          dPdyCoarse ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r016' ( temp 3X3 matrix of float)
-0:407          dPdyFine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r017' ( temp 3X3 matrix of float)
-0:407          degrees ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp float)
-0:407          'r018' ( temp float)
-0:407          determinant ( temp float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r019' ( temp 3X3 matrix of float)
-0:407          exp ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'R020' ( temp 3X3 matrix of float)
-0:407          exp2 ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r021' ( temp 3X3 matrix of float)
-0:407          Floor ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r022' ( temp 3X3 matrix of float)
-0:407          mod ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r023' ( temp 3X3 matrix of float)
-0:407          Fraction ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r025' ( temp 3X3 matrix of float)
-0:407          fwidth ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r026' ( temp 3X3 matrix of float)
-0:407          ldexp ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r026a' ( temp 3X3 matrix of float)
-0:407          mix ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407            'inF2' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r027' ( temp 3X3 matrix of float)
-0:407          log ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r028' ( temp 3X3 matrix of float)
-0:407          matrix-scale ( temp 3X3 matrix of float)
-0:407            log2 ( temp 3X3 matrix of float)
-0:407              'inF0' ( in 3X3 matrix of float)
-0:407            Constant:
-0:407              0.301030
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r029' ( temp 3X3 matrix of float)
-0:407          log2 ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r030' ( temp 3X3 matrix of float)
-0:407          max ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r031' ( temp 3X3 matrix of float)
-0:407          min ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r032' ( temp 3X3 matrix of float)
-0:407          pow ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r033' ( temp 3X3 matrix of float)
-0:407          radians ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r034' ( temp 3X3 matrix of float)
-0:407          roundEven ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r035' ( temp 3X3 matrix of float)
-0:407          inverse sqrt ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r036' ( temp 3X3 matrix of float)
-0:407          clamp ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            Constant:
-0:407              0.000000
-0:407            Constant:
-0:407              1.000000
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r037' ( temp 3X3 matrix of float)
-0:407          Sign ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r038' ( temp 3X3 matrix of float)
-0:407          sine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'inF1' ( in 3X3 matrix of float)
-0:407          sine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'inF2' ( in 3X3 matrix of float)
-0:407          cosine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r039' ( temp 3X3 matrix of float)
-0:407          hyp. sine ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r049' ( temp 3X3 matrix of float)
-0:407          smoothstep ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407            'inF2' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r041' ( temp 3X3 matrix of float)
-0:407          sqrt ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r042' ( temp 3X3 matrix of float)
-0:407          step ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407            'inF1' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r043' ( temp 3X3 matrix of float)
-0:407          tangent ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r044' ( temp 3X3 matrix of float)
-0:407          hyp. tangent ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:407      transpose ( temp 3X3 matrix of float)
-0:407        'inF0' ( in 3X3 matrix of float)
-0:407      Sequence
-0:407        move second child to first child ( temp 3X3 matrix of float)
-0:407          'r046' ( temp 3X3 matrix of float)
-0:407          trunc ( temp 3X3 matrix of float)
-0:407            'inF0' ( in 3X3 matrix of float)
-0:410      Branch: Return with expression
+0:411      Sequence
+0:411        move second child to first child ( temp bool)
+0:411          'r000' ( temp bool)
+0:411          all ( temp bool)
+0:411            Convert float to bool ( temp 3X3 matrix of bool)
+0:411              'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r001' ( temp 3X3 matrix of float)
+0:411          Absolute value ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      arc cosine ( temp 3X3 matrix of float)
+0:411        'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp bool)
+0:411          'r003' ( temp bool)
+0:411          any ( temp bool)
+0:411            Convert float to bool ( temp 3X3 matrix of bool)
+0:411              'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r004' ( temp 3X3 matrix of float)
+0:411          arc sine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r005' ( temp 3X3 matrix of float)
+0:411          arc tangent ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r006' ( temp 3X3 matrix of float)
+0:411          arc tangent ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r007' ( temp 3X3 matrix of float)
+0:411          Ceiling ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Test condition and select ( temp void)
+0:411        Condition
+0:411        any ( temp bool)
+0:411          Compare Less Than ( temp 3X3 matrix of bool)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            Constant:
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411              0.000000
+0:411        true case
+0:411        Branch: Kill
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r008' ( temp 3X3 matrix of float)
+0:411          clamp ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411            'inF2' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r009' ( temp 3X3 matrix of float)
+0:411          cosine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r010' ( temp 3X3 matrix of float)
+0:411          hyp. cosine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r011' ( temp 3X3 matrix of float)
+0:411          dPdx ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r012' ( temp 3X3 matrix of float)
+0:411          dPdxCoarse ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r013' ( temp 3X3 matrix of float)
+0:411          dPdxFine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r014' ( temp 3X3 matrix of float)
+0:411          dPdy ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r015' ( temp 3X3 matrix of float)
+0:411          dPdyCoarse ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r016' ( temp 3X3 matrix of float)
+0:411          dPdyFine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r017' ( temp 3X3 matrix of float)
+0:411          degrees ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp float)
+0:411          'r018' ( temp float)
+0:411          determinant ( temp float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r019' ( temp 3X3 matrix of float)
+0:411          exp ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'R020' ( temp 3X3 matrix of float)
+0:411          exp2 ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r021' ( temp 3X3 matrix of float)
+0:411          Floor ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r022' ( temp 3X3 matrix of float)
+0:411          mod ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r023' ( temp 3X3 matrix of float)
+0:411          Fraction ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r025' ( temp 3X3 matrix of float)
+0:411          fwidth ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r026' ( temp 3X3 matrix of float)
+0:411          ldexp ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r026a' ( temp 3X3 matrix of float)
+0:411          mix ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411            'inF2' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r027' ( temp 3X3 matrix of float)
+0:411          log ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r028' ( temp 3X3 matrix of float)
+0:411          matrix-scale ( temp 3X3 matrix of float)
+0:411            log2 ( temp 3X3 matrix of float)
+0:411              'inF0' ( in 3X3 matrix of float)
+0:411            Constant:
+0:411              0.301030
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r029' ( temp 3X3 matrix of float)
+0:411          log2 ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r030' ( temp 3X3 matrix of float)
+0:411          max ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r031' ( temp 3X3 matrix of float)
+0:411          min ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r032' ( temp 3X3 matrix of float)
+0:411          pow ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r033' ( temp 3X3 matrix of float)
+0:411          radians ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r034' ( temp 3X3 matrix of float)
+0:411          roundEven ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r035' ( temp 3X3 matrix of float)
+0:411          inverse sqrt ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r036' ( temp 3X3 matrix of float)
+0:411          clamp ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            Constant:
+0:411              0.000000
+0:411            Constant:
+0:411              1.000000
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r037' ( temp 3X3 matrix of float)
+0:411          Sign ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r038' ( temp 3X3 matrix of float)
+0:411          sine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'inF1' ( in 3X3 matrix of float)
+0:411          sine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'inF2' ( in 3X3 matrix of float)
+0:411          cosine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r039' ( temp 3X3 matrix of float)
+0:411          hyp. sine ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r049' ( temp 3X3 matrix of float)
+0:411          smoothstep ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411            'inF2' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r041' ( temp 3X3 matrix of float)
+0:411          sqrt ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r042' ( temp 3X3 matrix of float)
+0:411          step ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411            'inF1' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r043' ( temp 3X3 matrix of float)
+0:411          tangent ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r044' ( temp 3X3 matrix of float)
+0:411          hyp. tangent ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:411      transpose ( temp 3X3 matrix of float)
+0:411        'inF0' ( in 3X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child ( temp 3X3 matrix of float)
+0:411          'r046' ( temp 3X3 matrix of float)
+0:411          trunc ( temp 3X3 matrix of float)
+0:411            'inF0' ( in 3X3 matrix of float)
+0:414      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -4898,297 +4980,297 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:414  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:414    Function Parameters: 
-0:414      'inF0' ( in 4X4 matrix of float)
-0:414      'inF1' ( in 4X4 matrix of float)
-0:414      'inF2' ( in 4X4 matrix of float)
+0:418  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:418    Function Parameters: 
+0:418      'inF0' ( in 4X4 matrix of float)
+0:418      'inF1' ( in 4X4 matrix of float)
+0:418      'inF2' ( in 4X4 matrix of float)
 0:?     Sequence
-0:416      Sequence
-0:416        move second child to first child ( temp bool)
-0:416          'r000' ( temp bool)
-0:416          all ( temp bool)
-0:416            Convert float to bool ( temp 4X4 matrix of bool)
-0:416              'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r001' ( temp 4X4 matrix of float)
-0:416          Absolute value ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      arc cosine ( temp 4X4 matrix of float)
-0:416        'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp bool)
-0:416          'r003' ( temp bool)
-0:416          any ( temp bool)
-0:416            Convert float to bool ( temp 4X4 matrix of bool)
-0:416              'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r004' ( temp 4X4 matrix of float)
-0:416          arc sine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r005' ( temp 4X4 matrix of float)
-0:416          arc tangent ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r006' ( temp 4X4 matrix of float)
-0:416          arc tangent ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r007' ( temp 4X4 matrix of float)
-0:416          Ceiling ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Test condition and select ( temp void)
-0:416        Condition
-0:416        any ( temp bool)
-0:416          Compare Less Than ( temp 4X4 matrix of bool)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            Constant:
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416              0.000000
-0:416        true case
-0:416        Branch: Kill
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r008' ( temp 4X4 matrix of float)
-0:416          clamp ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416            'inF2' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r009' ( temp 4X4 matrix of float)
-0:416          cosine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r010' ( temp 4X4 matrix of float)
-0:416          hyp. cosine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r011' ( temp 4X4 matrix of float)
-0:416          dPdx ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r012' ( temp 4X4 matrix of float)
-0:416          dPdxCoarse ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r013' ( temp 4X4 matrix of float)
-0:416          dPdxFine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r014' ( temp 4X4 matrix of float)
-0:416          dPdy ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r015' ( temp 4X4 matrix of float)
-0:416          dPdyCoarse ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r016' ( temp 4X4 matrix of float)
-0:416          dPdyFine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r017' ( temp 4X4 matrix of float)
-0:416          degrees ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp float)
-0:416          'r018' ( temp float)
-0:416          determinant ( temp float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r019' ( temp 4X4 matrix of float)
-0:416          exp ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'R020' ( temp 4X4 matrix of float)
-0:416          exp2 ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r021' ( temp 4X4 matrix of float)
-0:416          Floor ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r022' ( temp 4X4 matrix of float)
-0:416          mod ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r023' ( temp 4X4 matrix of float)
-0:416          Fraction ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r025' ( temp 4X4 matrix of float)
-0:416          fwidth ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r026' ( temp 4X4 matrix of float)
-0:416          ldexp ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r026a' ( temp 4X4 matrix of float)
-0:416          mix ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416            'inF2' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r027' ( temp 4X4 matrix of float)
-0:416          log ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r028' ( temp 4X4 matrix of float)
-0:416          matrix-scale ( temp 4X4 matrix of float)
-0:416            log2 ( temp 4X4 matrix of float)
-0:416              'inF0' ( in 4X4 matrix of float)
-0:416            Constant:
-0:416              0.301030
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r029' ( temp 4X4 matrix of float)
-0:416          log2 ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r030' ( temp 4X4 matrix of float)
-0:416          max ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r031' ( temp 4X4 matrix of float)
-0:416          min ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r032' ( temp 4X4 matrix of float)
-0:416          pow ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r033' ( temp 4X4 matrix of float)
-0:416          radians ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r034' ( temp 4X4 matrix of float)
-0:416          roundEven ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r035' ( temp 4X4 matrix of float)
-0:416          inverse sqrt ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r036' ( temp 4X4 matrix of float)
-0:416          clamp ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            Constant:
-0:416              0.000000
-0:416            Constant:
-0:416              1.000000
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r037' ( temp 4X4 matrix of float)
-0:416          Sign ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r038' ( temp 4X4 matrix of float)
-0:416          sine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'inF1' ( in 4X4 matrix of float)
-0:416          sine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'inF2' ( in 4X4 matrix of float)
-0:416          cosine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r039' ( temp 4X4 matrix of float)
-0:416          hyp. sine ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r049' ( temp 4X4 matrix of float)
-0:416          smoothstep ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416            'inF2' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r041' ( temp 4X4 matrix of float)
-0:416          sqrt ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r042' ( temp 4X4 matrix of float)
-0:416          step ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416            'inF1' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r043' ( temp 4X4 matrix of float)
-0:416          tangent ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r044' ( temp 4X4 matrix of float)
-0:416          hyp. tangent ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:416      transpose ( temp 4X4 matrix of float)
-0:416        'inF0' ( in 4X4 matrix of float)
-0:416      Sequence
-0:416        move second child to first child ( temp 4X4 matrix of float)
-0:416          'r046' ( temp 4X4 matrix of float)
-0:416          trunc ( temp 4X4 matrix of float)
-0:416            'inF0' ( in 4X4 matrix of float)
-0:419      Branch: Return with expression
+0:420      Sequence
+0:420        move second child to first child ( temp bool)
+0:420          'r000' ( temp bool)
+0:420          all ( temp bool)
+0:420            Convert float to bool ( temp 4X4 matrix of bool)
+0:420              'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r001' ( temp 4X4 matrix of float)
+0:420          Absolute value ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      arc cosine ( temp 4X4 matrix of float)
+0:420        'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp bool)
+0:420          'r003' ( temp bool)
+0:420          any ( temp bool)
+0:420            Convert float to bool ( temp 4X4 matrix of bool)
+0:420              'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r004' ( temp 4X4 matrix of float)
+0:420          arc sine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r005' ( temp 4X4 matrix of float)
+0:420          arc tangent ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r006' ( temp 4X4 matrix of float)
+0:420          arc tangent ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r007' ( temp 4X4 matrix of float)
+0:420          Ceiling ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Test condition and select ( temp void)
+0:420        Condition
+0:420        any ( temp bool)
+0:420          Compare Less Than ( temp 4X4 matrix of bool)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            Constant:
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420              0.000000
+0:420        true case
+0:420        Branch: Kill
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r008' ( temp 4X4 matrix of float)
+0:420          clamp ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420            'inF2' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r009' ( temp 4X4 matrix of float)
+0:420          cosine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r010' ( temp 4X4 matrix of float)
+0:420          hyp. cosine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r011' ( temp 4X4 matrix of float)
+0:420          dPdx ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r012' ( temp 4X4 matrix of float)
+0:420          dPdxCoarse ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r013' ( temp 4X4 matrix of float)
+0:420          dPdxFine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r014' ( temp 4X4 matrix of float)
+0:420          dPdy ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r015' ( temp 4X4 matrix of float)
+0:420          dPdyCoarse ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r016' ( temp 4X4 matrix of float)
+0:420          dPdyFine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r017' ( temp 4X4 matrix of float)
+0:420          degrees ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp float)
+0:420          'r018' ( temp float)
+0:420          determinant ( temp float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r019' ( temp 4X4 matrix of float)
+0:420          exp ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'R020' ( temp 4X4 matrix of float)
+0:420          exp2 ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r021' ( temp 4X4 matrix of float)
+0:420          Floor ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r022' ( temp 4X4 matrix of float)
+0:420          mod ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r023' ( temp 4X4 matrix of float)
+0:420          Fraction ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r025' ( temp 4X4 matrix of float)
+0:420          fwidth ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r026' ( temp 4X4 matrix of float)
+0:420          ldexp ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r026a' ( temp 4X4 matrix of float)
+0:420          mix ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420            'inF2' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r027' ( temp 4X4 matrix of float)
+0:420          log ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r028' ( temp 4X4 matrix of float)
+0:420          matrix-scale ( temp 4X4 matrix of float)
+0:420            log2 ( temp 4X4 matrix of float)
+0:420              'inF0' ( in 4X4 matrix of float)
+0:420            Constant:
+0:420              0.301030
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r029' ( temp 4X4 matrix of float)
+0:420          log2 ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r030' ( temp 4X4 matrix of float)
+0:420          max ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r031' ( temp 4X4 matrix of float)
+0:420          min ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r032' ( temp 4X4 matrix of float)
+0:420          pow ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r033' ( temp 4X4 matrix of float)
+0:420          radians ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r034' ( temp 4X4 matrix of float)
+0:420          roundEven ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r035' ( temp 4X4 matrix of float)
+0:420          inverse sqrt ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r036' ( temp 4X4 matrix of float)
+0:420          clamp ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            Constant:
+0:420              0.000000
+0:420            Constant:
+0:420              1.000000
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r037' ( temp 4X4 matrix of float)
+0:420          Sign ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r038' ( temp 4X4 matrix of float)
+0:420          sine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'inF1' ( in 4X4 matrix of float)
+0:420          sine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'inF2' ( in 4X4 matrix of float)
+0:420          cosine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r039' ( temp 4X4 matrix of float)
+0:420          hyp. sine ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r049' ( temp 4X4 matrix of float)
+0:420          smoothstep ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420            'inF2' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r041' ( temp 4X4 matrix of float)
+0:420          sqrt ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r042' ( temp 4X4 matrix of float)
+0:420          step ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420            'inF1' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r043' ( temp 4X4 matrix of float)
+0:420          tangent ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r044' ( temp 4X4 matrix of float)
+0:420          hyp. tangent ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:420      transpose ( temp 4X4 matrix of float)
+0:420        'inF0' ( in 4X4 matrix of float)
+0:420      Sequence
+0:420        move second child to first child ( temp 4X4 matrix of float)
+0:420          'r046' ( temp 4X4 matrix of float)
+0:420          trunc ( temp 4X4 matrix of float)
+0:420            'inF0' ( in 4X4 matrix of float)
+0:423      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -5206,334 +5288,334 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:437  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:437    Function Parameters: 
-0:437      'inF0' ( in float)
-0:437      'inF1' ( in float)
-0:437      'inFV0' ( in 2-component vector of float)
-0:437      'inFV1' ( in 2-component vector of float)
-0:437      'inFM0' ( in 2X2 matrix of float)
-0:437      'inFM1' ( in 2X2 matrix of float)
+0:441  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:441    Function Parameters: 
+0:441      'inF0' ( in float)
+0:441      'inF1' ( in float)
+0:441      'inFV0' ( in 2-component vector of float)
+0:441      'inFV1' ( in 2-component vector of float)
+0:441      'inFM0' ( in 2X2 matrix of float)
+0:441      'inFM1' ( in 2X2 matrix of float)
 0:?     Sequence
-0:438      Sequence
-0:438        move second child to first child ( temp float)
-0:438          'r0' ( temp float)
-0:438          component-wise multiply ( temp float)
-0:438            'inF1' ( in float)
-0:438            'inF0' ( in float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2-component vector of float)
-0:438          'r1' ( temp 2-component vector of float)
-0:438          vector-scale ( temp 2-component vector of float)
-0:438            'inF0' ( in float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2-component vector of float)
-0:438          'r2' ( temp 2-component vector of float)
-0:438          vector-scale ( temp 2-component vector of float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438            'inF0' ( in float)
-0:438      Sequence
-0:438        move second child to first child ( temp float)
-0:438          'r3' ( temp float)
-0:438          dot-product ( temp float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438            'inFV1' ( in 2-component vector of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2-component vector of float)
-0:438          'r4' ( temp 2-component vector of float)
-0:438          vector-times-matrix ( temp 2-component vector of float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2-component vector of float)
-0:438          'r5' ( temp 2-component vector of float)
-0:438          matrix-times-vector ( temp 2-component vector of float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:438            'inFV0' ( in 2-component vector of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2X2 matrix of float)
-0:438          'r6' ( temp 2X2 matrix of float)
-0:438          matrix-scale ( temp 2X2 matrix of float)
-0:438            'inF0' ( in float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2X2 matrix of float)
-0:438          'r7' ( temp 2X2 matrix of float)
-0:438          matrix-scale ( temp 2X2 matrix of float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:438            'inF0' ( in float)
-0:438      Sequence
-0:438        move second child to first child ( temp 2X2 matrix of float)
-0:438          'r8' ( temp 2X2 matrix of float)
-0:438          matrix-multiply ( temp 2X2 matrix of float)
-0:438            'inFM1' ( in 2X2 matrix of float)
-0:438            'inFM0' ( in 2X2 matrix of float)
-0:444  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:444    Function Parameters: 
-0:444      'inF0' ( in float)
-0:444      'inF1' ( in float)
-0:444      'inFV0' ( in 3-component vector of float)
-0:444      'inFV1' ( in 3-component vector of float)
-0:444      'inFM0' ( in 3X3 matrix of float)
-0:444      'inFM1' ( in 3X3 matrix of float)
+0:442      Sequence
+0:442        move second child to first child ( temp float)
+0:442          'r0' ( temp float)
+0:442          component-wise multiply ( temp float)
+0:442            'inF1' ( in float)
+0:442            'inF0' ( in float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2-component vector of float)
+0:442          'r1' ( temp 2-component vector of float)
+0:442          vector-scale ( temp 2-component vector of float)
+0:442            'inF0' ( in float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2-component vector of float)
+0:442          'r2' ( temp 2-component vector of float)
+0:442          vector-scale ( temp 2-component vector of float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442            'inF0' ( in float)
+0:442      Sequence
+0:442        move second child to first child ( temp float)
+0:442          'r3' ( temp float)
+0:442          dot-product ( temp float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442            'inFV1' ( in 2-component vector of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2-component vector of float)
+0:442          'r4' ( temp 2-component vector of float)
+0:442          vector-times-matrix ( temp 2-component vector of float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2-component vector of float)
+0:442          'r5' ( temp 2-component vector of float)
+0:442          matrix-times-vector ( temp 2-component vector of float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:442            'inFV0' ( in 2-component vector of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2X2 matrix of float)
+0:442          'r6' ( temp 2X2 matrix of float)
+0:442          matrix-scale ( temp 2X2 matrix of float)
+0:442            'inF0' ( in float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2X2 matrix of float)
+0:442          'r7' ( temp 2X2 matrix of float)
+0:442          matrix-scale ( temp 2X2 matrix of float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:442            'inF0' ( in float)
+0:442      Sequence
+0:442        move second child to first child ( temp 2X2 matrix of float)
+0:442          'r8' ( temp 2X2 matrix of float)
+0:442          matrix-multiply ( temp 2X2 matrix of float)
+0:442            'inFM1' ( in 2X2 matrix of float)
+0:442            'inFM0' ( in 2X2 matrix of float)
+0:448  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:448    Function Parameters: 
+0:448      'inF0' ( in float)
+0:448      'inF1' ( in float)
+0:448      'inFV0' ( in 3-component vector of float)
+0:448      'inFV1' ( in 3-component vector of float)
+0:448      'inFM0' ( in 3X3 matrix of float)
+0:448      'inFM1' ( in 3X3 matrix of float)
 0:?     Sequence
-0:445      Sequence
-0:445        move second child to first child ( temp float)
-0:445          'r0' ( temp float)
-0:445          component-wise multiply ( temp float)
-0:445            'inF1' ( in float)
-0:445            'inF0' ( in float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3-component vector of float)
-0:445          'r1' ( temp 3-component vector of float)
-0:445          vector-scale ( temp 3-component vector of float)
-0:445            'inF0' ( in float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3-component vector of float)
-0:445          'r2' ( temp 3-component vector of float)
-0:445          vector-scale ( temp 3-component vector of float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445            'inF0' ( in float)
-0:445      Sequence
-0:445        move second child to first child ( temp float)
-0:445          'r3' ( temp float)
-0:445          dot-product ( temp float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445            'inFV1' ( in 3-component vector of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3-component vector of float)
-0:445          'r4' ( temp 3-component vector of float)
-0:445          vector-times-matrix ( temp 3-component vector of float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3-component vector of float)
-0:445          'r5' ( temp 3-component vector of float)
-0:445          matrix-times-vector ( temp 3-component vector of float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:445            'inFV0' ( in 3-component vector of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3X3 matrix of float)
-0:445          'r6' ( temp 3X3 matrix of float)
-0:445          matrix-scale ( temp 3X3 matrix of float)
-0:445            'inF0' ( in float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3X3 matrix of float)
-0:445          'r7' ( temp 3X3 matrix of float)
-0:445          matrix-scale ( temp 3X3 matrix of float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:445            'inF0' ( in float)
-0:445      Sequence
-0:445        move second child to first child ( temp 3X3 matrix of float)
-0:445          'r8' ( temp 3X3 matrix of float)
-0:445          matrix-multiply ( temp 3X3 matrix of float)
-0:445            'inFM1' ( in 3X3 matrix of float)
-0:445            'inFM0' ( in 3X3 matrix of float)
-0:451  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:451    Function Parameters: 
-0:451      'inF0' ( in float)
-0:451      'inF1' ( in float)
-0:451      'inFV0' ( in 4-component vector of float)
-0:451      'inFV1' ( in 4-component vector of float)
-0:451      'inFM0' ( in 4X4 matrix of float)
-0:451      'inFM1' ( in 4X4 matrix of float)
+0:449      Sequence
+0:449        move second child to first child ( temp float)
+0:449          'r0' ( temp float)
+0:449          component-wise multiply ( temp float)
+0:449            'inF1' ( in float)
+0:449            'inF0' ( in float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3-component vector of float)
+0:449          'r1' ( temp 3-component vector of float)
+0:449          vector-scale ( temp 3-component vector of float)
+0:449            'inF0' ( in float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3-component vector of float)
+0:449          'r2' ( temp 3-component vector of float)
+0:449          vector-scale ( temp 3-component vector of float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449            'inF0' ( in float)
+0:449      Sequence
+0:449        move second child to first child ( temp float)
+0:449          'r3' ( temp float)
+0:449          dot-product ( temp float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449            'inFV1' ( in 3-component vector of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3-component vector of float)
+0:449          'r4' ( temp 3-component vector of float)
+0:449          vector-times-matrix ( temp 3-component vector of float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3-component vector of float)
+0:449          'r5' ( temp 3-component vector of float)
+0:449          matrix-times-vector ( temp 3-component vector of float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:449            'inFV0' ( in 3-component vector of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3X3 matrix of float)
+0:449          'r6' ( temp 3X3 matrix of float)
+0:449          matrix-scale ( temp 3X3 matrix of float)
+0:449            'inF0' ( in float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3X3 matrix of float)
+0:449          'r7' ( temp 3X3 matrix of float)
+0:449          matrix-scale ( temp 3X3 matrix of float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:449            'inF0' ( in float)
+0:449      Sequence
+0:449        move second child to first child ( temp 3X3 matrix of float)
+0:449          'r8' ( temp 3X3 matrix of float)
+0:449          matrix-multiply ( temp 3X3 matrix of float)
+0:449            'inFM1' ( in 3X3 matrix of float)
+0:449            'inFM0' ( in 3X3 matrix of float)
+0:455  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:455    Function Parameters: 
+0:455      'inF0' ( in float)
+0:455      'inF1' ( in float)
+0:455      'inFV0' ( in 4-component vector of float)
+0:455      'inFV1' ( in 4-component vector of float)
+0:455      'inFM0' ( in 4X4 matrix of float)
+0:455      'inFM1' ( in 4X4 matrix of float)
 0:?     Sequence
-0:452      Sequence
-0:452        move second child to first child ( temp float)
-0:452          'r0' ( temp float)
-0:452          component-wise multiply ( temp float)
-0:452            'inF1' ( in float)
-0:452            'inF0' ( in float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4-component vector of float)
-0:452          'r1' ( temp 4-component vector of float)
-0:452          vector-scale ( temp 4-component vector of float)
-0:452            'inF0' ( in float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4-component vector of float)
-0:452          'r2' ( temp 4-component vector of float)
-0:452          vector-scale ( temp 4-component vector of float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452            'inF0' ( in float)
-0:452      Sequence
-0:452        move second child to first child ( temp float)
-0:452          'r3' ( temp float)
-0:452          dot-product ( temp float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452            'inFV1' ( in 4-component vector of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4-component vector of float)
-0:452          'r4' ( temp 4-component vector of float)
-0:452          vector-times-matrix ( temp 4-component vector of float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4-component vector of float)
-0:452          'r5' ( temp 4-component vector of float)
-0:452          matrix-times-vector ( temp 4-component vector of float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:452            'inFV0' ( in 4-component vector of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4X4 matrix of float)
-0:452          'r6' ( temp 4X4 matrix of float)
-0:452          matrix-scale ( temp 4X4 matrix of float)
-0:452            'inF0' ( in float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4X4 matrix of float)
-0:452          'r7' ( temp 4X4 matrix of float)
-0:452          matrix-scale ( temp 4X4 matrix of float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:452            'inF0' ( in float)
-0:452      Sequence
-0:452        move second child to first child ( temp 4X4 matrix of float)
-0:452          'r8' ( temp 4X4 matrix of float)
-0:452          matrix-multiply ( temp 4X4 matrix of float)
-0:452            'inFM1' ( in 4X4 matrix of float)
-0:452            'inFM0' ( in 4X4 matrix of float)
-0:461  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:461    Function Parameters: 
-0:461      'inF0' ( in float)
-0:461      'inF1' ( in float)
-0:461      'inFV2' ( in 2-component vector of float)
-0:461      'inFV3' ( in 3-component vector of float)
-0:461      'inFM2x3' ( in 2X3 matrix of float)
-0:461      'inFM3x2' ( in 3X2 matrix of float)
-0:461      'inFM3x3' ( in 3X3 matrix of float)
-0:461      'inFM3x4' ( in 3X4 matrix of float)
-0:461      'inFM2x4' ( in 2X4 matrix of float)
+0:456      Sequence
+0:456        move second child to first child ( temp float)
+0:456          'r0' ( temp float)
+0:456          component-wise multiply ( temp float)
+0:456            'inF1' ( in float)
+0:456            'inF0' ( in float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4-component vector of float)
+0:456          'r1' ( temp 4-component vector of float)
+0:456          vector-scale ( temp 4-component vector of float)
+0:456            'inF0' ( in float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4-component vector of float)
+0:456          'r2' ( temp 4-component vector of float)
+0:456          vector-scale ( temp 4-component vector of float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456            'inF0' ( in float)
+0:456      Sequence
+0:456        move second child to first child ( temp float)
+0:456          'r3' ( temp float)
+0:456          dot-product ( temp float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456            'inFV1' ( in 4-component vector of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4-component vector of float)
+0:456          'r4' ( temp 4-component vector of float)
+0:456          vector-times-matrix ( temp 4-component vector of float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4-component vector of float)
+0:456          'r5' ( temp 4-component vector of float)
+0:456          matrix-times-vector ( temp 4-component vector of float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:456            'inFV0' ( in 4-component vector of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4X4 matrix of float)
+0:456          'r6' ( temp 4X4 matrix of float)
+0:456          matrix-scale ( temp 4X4 matrix of float)
+0:456            'inF0' ( in float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4X4 matrix of float)
+0:456          'r7' ( temp 4X4 matrix of float)
+0:456          matrix-scale ( temp 4X4 matrix of float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:456            'inF0' ( in float)
+0:456      Sequence
+0:456        move second child to first child ( temp 4X4 matrix of float)
+0:456          'r8' ( temp 4X4 matrix of float)
+0:456          matrix-multiply ( temp 4X4 matrix of float)
+0:456            'inFM1' ( in 4X4 matrix of float)
+0:456            'inFM0' ( in 4X4 matrix of float)
+0:465  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:465    Function Parameters: 
+0:465      'inF0' ( in float)
+0:465      'inF1' ( in float)
+0:465      'inFV2' ( in 2-component vector of float)
+0:465      'inFV3' ( in 3-component vector of float)
+0:465      'inFM2x3' ( in 2X3 matrix of float)
+0:465      'inFM3x2' ( in 3X2 matrix of float)
+0:465      'inFM3x3' ( in 3X3 matrix of float)
+0:465      'inFM3x4' ( in 3X4 matrix of float)
+0:465      'inFM2x4' ( in 2X4 matrix of float)
 0:?     Sequence
-0:462      Sequence
-0:462        move second child to first child ( temp float)
-0:462          'r00' ( temp float)
-0:462          component-wise multiply ( temp float)
-0:462            'inF1' ( in float)
-0:462            'inF0' ( in float)
-0:463      Sequence
-0:463        move second child to first child ( temp 2-component vector of float)
-0:463          'r01' ( temp 2-component vector of float)
-0:463          vector-scale ( temp 2-component vector of float)
-0:463            'inF0' ( in float)
-0:463            'inFV2' ( in 2-component vector of float)
-0:464      Sequence
-0:464        move second child to first child ( temp 3-component vector of float)
-0:464          'r02' ( temp 3-component vector of float)
-0:464          vector-scale ( temp 3-component vector of float)
-0:464            'inF0' ( in float)
-0:464            'inFV3' ( in 3-component vector of float)
-0:465      Sequence
-0:465        move second child to first child ( temp 2-component vector of float)
-0:465          'r03' ( temp 2-component vector of float)
-0:465          vector-scale ( temp 2-component vector of float)
-0:465            'inFV2' ( in 2-component vector of float)
-0:465            'inF0' ( in float)
 0:466      Sequence
-0:466        move second child to first child ( temp 3-component vector of float)
-0:466          'r04' ( temp 3-component vector of float)
-0:466          vector-scale ( temp 3-component vector of float)
-0:466            'inFV3' ( in 3-component vector of float)
+0:466        move second child to first child ( temp float)
+0:466          'r00' ( temp float)
+0:466          component-wise multiply ( temp float)
+0:466            'inF1' ( in float)
 0:466            'inF0' ( in float)
 0:467      Sequence
-0:467        move second child to first child ( temp float)
-0:467          'r05' ( temp float)
-0:467          dot-product ( temp float)
-0:467            'inFV2' ( in 2-component vector of float)
+0:467        move second child to first child ( temp 2-component vector of float)
+0:467          'r01' ( temp 2-component vector of float)
+0:467          vector-scale ( temp 2-component vector of float)
+0:467            'inF0' ( in float)
 0:467            'inFV2' ( in 2-component vector of float)
 0:468      Sequence
-0:468        move second child to first child ( temp float)
-0:468          'r06' ( temp float)
-0:468          dot-product ( temp float)
-0:468            'inFV3' ( in 3-component vector of float)
+0:468        move second child to first child ( temp 3-component vector of float)
+0:468          'r02' ( temp 3-component vector of float)
+0:468          vector-scale ( temp 3-component vector of float)
+0:468            'inF0' ( in float)
 0:468            'inFV3' ( in 3-component vector of float)
 0:469      Sequence
-0:469        move second child to first child ( temp 3-component vector of float)
-0:469          'r07' ( temp 3-component vector of float)
-0:469          matrix-times-vector ( temp 3-component vector of float)
-0:469            'inFM2x3' ( in 2X3 matrix of float)
+0:469        move second child to first child ( temp 2-component vector of float)
+0:469          'r03' ( temp 2-component vector of float)
+0:469          vector-scale ( temp 2-component vector of float)
 0:469            'inFV2' ( in 2-component vector of float)
+0:469            'inF0' ( in float)
 0:470      Sequence
-0:470        move second child to first child ( temp 2-component vector of float)
-0:470          'r08' ( temp 2-component vector of float)
-0:470          matrix-times-vector ( temp 2-component vector of float)
-0:470            'inFM3x2' ( in 3X2 matrix of float)
+0:470        move second child to first child ( temp 3-component vector of float)
+0:470          'r04' ( temp 3-component vector of float)
+0:470          vector-scale ( temp 3-component vector of float)
 0:470            'inFV3' ( in 3-component vector of float)
+0:470            'inF0' ( in float)
 0:471      Sequence
-0:471        move second child to first child ( temp 2-component vector of float)
-0:471          'r09' ( temp 2-component vector of float)
-0:471          vector-times-matrix ( temp 2-component vector of float)
-0:471            'inFV3' ( in 3-component vector of float)
-0:471            'inFM2x3' ( in 2X3 matrix of float)
+0:471        move second child to first child ( temp float)
+0:471          'r05' ( temp float)
+0:471          dot-product ( temp float)
+0:471            'inFV2' ( in 2-component vector of float)
+0:471            'inFV2' ( in 2-component vector of float)
 0:472      Sequence
-0:472        move second child to first child ( temp 3-component vector of float)
-0:472          'r10' ( temp 3-component vector of float)
-0:472          vector-times-matrix ( temp 3-component vector of float)
-0:472            'inFV2' ( in 2-component vector of float)
-0:472            'inFM3x2' ( in 3X2 matrix of float)
+0:472        move second child to first child ( temp float)
+0:472          'r06' ( temp float)
+0:472          dot-product ( temp float)
+0:472            'inFV3' ( in 3-component vector of float)
+0:472            'inFV3' ( in 3-component vector of float)
 0:473      Sequence
-0:473        move second child to first child ( temp 2X3 matrix of float)
-0:473          'r11' ( temp 2X3 matrix of float)
-0:473          matrix-scale ( temp 2X3 matrix of float)
-0:473            'inF0' ( in float)
+0:473        move second child to first child ( temp 3-component vector of float)
+0:473          'r07' ( temp 3-component vector of float)
+0:473          matrix-times-vector ( temp 3-component vector of float)
 0:473            'inFM2x3' ( in 2X3 matrix of float)
+0:473            'inFV2' ( in 2-component vector of float)
 0:474      Sequence
-0:474        move second child to first child ( temp 3X2 matrix of float)
-0:474          'r12' ( temp 3X2 matrix of float)
-0:474          matrix-scale ( temp 3X2 matrix of float)
-0:474            'inF0' ( in float)
+0:474        move second child to first child ( temp 2-component vector of float)
+0:474          'r08' ( temp 2-component vector of float)
+0:474          matrix-times-vector ( temp 2-component vector of float)
 0:474            'inFM3x2' ( in 3X2 matrix of float)
+0:474            'inFV3' ( in 3-component vector of float)
 0:475      Sequence
-0:475        move second child to first child ( temp 2X2 matrix of float)
-0:475          'r13' ( temp 2X2 matrix of float)
-0:475          matrix-multiply ( temp 2X2 matrix of float)
-0:475            'inFM3x2' ( in 3X2 matrix of float)
+0:475        move second child to first child ( temp 2-component vector of float)
+0:475          'r09' ( temp 2-component vector of float)
+0:475          vector-times-matrix ( temp 2-component vector of float)
+0:475            'inFV3' ( in 3-component vector of float)
 0:475            'inFM2x3' ( in 2X3 matrix of float)
 0:476      Sequence
-0:476        move second child to first child ( temp 2X3 matrix of float)
-0:476          'r14' ( temp 2X3 matrix of float)
-0:476          matrix-multiply ( temp 2X3 matrix of float)
-0:476            'inFM3x3' ( in 3X3 matrix of float)
-0:476            'inFM2x3' ( in 2X3 matrix of float)
+0:476        move second child to first child ( temp 3-component vector of float)
+0:476          'r10' ( temp 3-component vector of float)
+0:476          vector-times-matrix ( temp 3-component vector of float)
+0:476            'inFV2' ( in 2-component vector of float)
+0:476            'inFM3x2' ( in 3X2 matrix of float)
 0:477      Sequence
-0:477        move second child to first child ( temp 2X4 matrix of float)
-0:477          'r15' ( temp 2X4 matrix of float)
-0:477          matrix-multiply ( temp 2X4 matrix of float)
-0:477            'inFM3x4' ( in 3X4 matrix of float)
+0:477        move second child to first child ( temp 2X3 matrix of float)
+0:477          'r11' ( temp 2X3 matrix of float)
+0:477          matrix-scale ( temp 2X3 matrix of float)
+0:477            'inF0' ( in float)
 0:477            'inFM2x3' ( in 2X3 matrix of float)
 0:478      Sequence
-0:478        move second child to first child ( temp 3X4 matrix of float)
-0:478          'r16' ( temp 3X4 matrix of float)
-0:478          matrix-multiply ( temp 3X4 matrix of float)
-0:478            'inFM2x4' ( in 2X4 matrix of float)
+0:478        move second child to first child ( temp 3X2 matrix of float)
+0:478          'r12' ( temp 3X2 matrix of float)
+0:478          matrix-scale ( temp 3X2 matrix of float)
+0:478            'inF0' ( in float)
 0:478            'inFM3x2' ( in 3X2 matrix of float)
-0:484  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:484    Function Parameters: 
+0:479      Sequence
+0:479        move second child to first child ( temp 2X2 matrix of float)
+0:479          'r13' ( temp 2X2 matrix of float)
+0:479          matrix-multiply ( temp 2X2 matrix of float)
+0:479            'inFM3x2' ( in 3X2 matrix of float)
+0:479            'inFM2x3' ( in 2X3 matrix of float)
+0:480      Sequence
+0:480        move second child to first child ( temp 2X3 matrix of float)
+0:480          'r14' ( temp 2X3 matrix of float)
+0:480          matrix-multiply ( temp 2X3 matrix of float)
+0:480            'inFM3x3' ( in 3X3 matrix of float)
+0:480            'inFM2x3' ( in 2X3 matrix of float)
+0:481      Sequence
+0:481        move second child to first child ( temp 2X4 matrix of float)
+0:481          'r15' ( temp 2X4 matrix of float)
+0:481          matrix-multiply ( temp 2X4 matrix of float)
+0:481            'inFM3x4' ( in 3X4 matrix of float)
+0:481            'inFM2x3' ( in 2X3 matrix of float)
+0:482      Sequence
+0:482        move second child to first child ( temp 3X4 matrix of float)
+0:482          'r16' ( temp 3X4 matrix of float)
+0:482          matrix-multiply ( temp 3X4 matrix of float)
+0:482            'inFM2x4' ( in 2X4 matrix of float)
+0:482            'inFM3x2' ( in 3X2 matrix of float)
+0:488  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:488    Function Parameters: 
 0:?     Sequence
-0:486      move second child to first child ( temp 4-component vector of float)
-0:486        color: direct index for structure ( temp 4-component vector of float)
-0:486          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:486          Constant:
-0:486            0 (const int)
-0:486        Constant:
-0:486          1.000000
-0:486          1.000000
-0:486          1.000000
-0:486          1.000000
-0:487      Branch: Return with expression
-0:487        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:484  Function Definition: main( ( temp void)
-0:484    Function Parameters: 
+0:490      move second child to first child ( temp 4-component vector of float)
+0:490        color: direct index for structure ( temp 4-component vector of float)
+0:490          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:490          Constant:
+0:490            0 (const int)
+0:490        Constant:
+0:490          1.000000
+0:490          1.000000
+0:490          1.000000
+0:490          1.000000
+0:491      Branch: Return with expression
+0:491        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:488  Function Definition: main( ( temp void)
+0:488    Function Parameters: 
 0:?     Sequence
-0:484      Sequence
-0:484        move second child to first child ( temp 4-component vector of float)
+0:488      Sequence
+0:488        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:484          color: direct index for structure ( temp 4-component vector of float)
-0:484            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:484            Constant:
-0:484              0 (const int)
+0:488          color: direct index for structure ( temp 4-component vector of float)
+0:488            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:488            Constant:
+0:488              0 (const int)
 0:?   Linker Objects
 0:?     'gs_ua' ( shared uint)
 0:?     'gs_ub' ( shared uint)
@@ -5550,14 +5632,14 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 1805
+// Generated by (magic number): 80002
+// Id's are bound by 1832
 
                               Capability Shader
                               Capability DerivativeControl
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 1786
+                              EntryPoint Fragment 4  "main" 1813
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -5647,432 +5729,432 @@
                               Name 169  "r010"
                               Name 173  "r011"
                               Name 176  "r012"
-                              Name 186  "r014"
-                              Name 189  "r015"
-                              Name 192  "r016"
-                              Name 195  "r017"
-                              Name 198  "r018"
-                              Name 201  "r019"
-                              Name 204  "r020"
-                              Name 207  "r021"
-                              Name 210  "r022"
-                              Name 213  "r023"
-                              Name 216  "r027"
-                              Name 219  "r028"
-                              Name 222  "r029"
-                              Name 225  "r030"
-                              Name 228  "r031"
-                              Name 231  "r033"
-                              Name 235  "r034"
-                              Name 238  "r036"
-                              Name 241  "r037"
-                              Name 244  "r038"
-                              Name 247  "r039"
-                              Name 251  "r039a"
-                              Name 256  "r040"
-                              Name 259  "r041"
-                              Name 264  "r042"
-                              Name 267  "r043"
-                              Name 271  "r044"
-                              Name 275  "r045"
-                              Name 279  "r046"
-                              Name 282  "r047"
-                              Name 286  "r048"
-                              Name 290  "r049"
-                              Name 293  "r050"
-                              Name 296  "r051"
-                              Name 299  "r052"
-                              Name 302  "r053"
-                              Name 309  "r055"
-                              Name 312  "r056"
-                              Name 317  "r057"
-                              Name 320  "r058"
-                              Name 324  "r059"
-                              Name 327  "r060"
-                              Name 330  "r061"
-                              Name 337  "r000"
-                              Name 343  "r001"
-                              Name 346  "r002"
-                              Name 349  "r003"
-                              Name 353  "r004"
-                              Name 358  "r005"
-                              Name 361  "r006"
-                              Name 364  "r007"
-                              Name 367  "r009"
-                              Name 370  "r010"
-                              Name 374  "r011"
-                              Name 377  "r012"
-                              Name 388  "r013"
-                              Name 391  "r015"
-                              Name 394  "r016"
-                              Name 398  "r017"
-                              Name 401  "r018"
-                              Name 404  "r019"
-                              Name 407  "r020"
-                              Name 410  "r021"
-                              Name 413  "r022"
-                              Name 416  "r023"
-                              Name 419  "r026"
-                              Name 423  "r027"
-                              Name 427  "r028"
-                              Name 430  "r029"
-                              Name 433  "r030"
-                              Name 438  "r031"
-                              Name 443  "r032"
-                              Name 445  "r033"
-                              Name 448  "r035"
-                              Name 452  "r036"
-                              Name 455  "r038"
-                              Name 459  "r039"
-                              Name 462  "r040"
-                              Name 465  "r041"
-                              Name 469  "r039a"
-                              Name 474  "r042"
-                              Name 477  "r043"
-                              Name 480  "r044"
-                              Name 484  "r045"
-                              Name 487  "r046"
-                              Name 491  "r047"
-                              Name 495  "r048"
-                              Name 498  "r049"
-                              Name 502  "r050"
-                              Name 505  "r051"
-                              Name 509  "r052"
-                              Name 513  "r053"
-                              Name 518  "r054"
-                              Name 523  "r055"
-                              Name 526  "r056"
-                              Name 529  "r057"
-                              Name 534  "r058"
-                              Name 537  "r059"
-                              Name 544  "r060"
-                              Name 547  "r061"
-                              Name 552  "r062"
-                              Name 555  "r063"
-                              Name 559  "r064"
-                              Name 562  "r065"
-                              Name 565  "r066"
-                              Name 571  "r000"
-                              Name 577  "r001"
-                              Name 580  "r002"
-                              Name 583  "r003"
-                              Name 587  "r004"
-                              Name 592  "r005"
-                              Name 595  "r006"
-                              Name 598  "r007"
-                              Name 601  "r009"
-                              Name 604  "r010"
-                              Name 608  "r011"
-                              Name 611  "r012"
-                              Name 622  "r013"
-                              Name 625  "r014"
-                              Name 628  "r015"
-                              Name 633  "r016"
-                              Name 637  "r017"
-                              Name 640  "r018"
-                              Name 643  "r019"
-                              Name 646  "r020"
-                              Name 649  "r021"
-                              Name 652  "r022"
-                              Name 655  "r023"
-                              Name 658  "r024"
-                              Name 662  "r025"
-                              Name 666  "r029"
-                              Name 669  "r030"
-                              Name 672  "r031"
-                              Name 677  "r032"
-                              Name 681  "r033"
-                              Name 683  "r034"
-                              Name 686  "r036"
-                              Name 690  "r037"
-                              Name 693  "r039"
-                              Name 697  "r040"
-                              Name 700  "r041"
-                              Name 703  "r042"
-                              Name 707  "r039a"
-                              Name 712  "r039b"
-                              Name 718  "r043"
-                              Name 721  "r044"
-                              Name 724  "r045"
-                              Name 728  "r046"
-                              Name 731  "r047"
-                              Name 735  "r048"
-                              Name 739  "r049"
-                              Name 742  "r050"
-                              Name 746  "r051"
-                              Name 749  "r052"
-                              Name 753  "r053"
-                              Name 757  "r054"
-                              Name 761  "r055"
-                              Name 764  "r056"
-                              Name 767  "r057"
-                              Name 770  "r058"
-                              Name 775  "r059"
-                              Name 778  "r060"
-                              Name 785  "r061"
-                              Name 788  "r062"
-                              Name 793  "r063"
-                              Name 796  "r064"
-                              Name 800  "r065"
-                              Name 803  "r066"
-                              Name 806  "r067"
-                              Name 813  "r000"
-                              Name 819  "r001"
-                              Name 822  "r002"
-                              Name 825  "r003"
-                              Name 829  "r004"
-                              Name 834  "r005"
-                              Name 837  "r006"
-                              Name 840  "r007"
-                              Name 843  "r009"
-                              Name 846  "r010"
-                              Name 850  "r011"
-                              Name 853  "r012"
-                              Name 864  "r013"
-                              Name 867  "r014"
-                              Name 870  "r015"
-                              Name 873  "r016"
-                              Name 876  "r017"
-                              Name 879  "r018"
-                              Name 882  "r019"
-                              Name 885  "r020"
-                              Name 888  "r021"
-                              Name 891  "r022"
-                              Name 894  "r023"
-                              Name 898  "r024"
-                              Name 902  "r025"
-                              Name 913  "r029"
-                              Name 916  "r030"
-                              Name 919  "r031"
-                              Name 924  "r032"
-                              Name 929  "r033"
-                              Name 931  "r034"
-                              Name 934  "r036"
-                              Name 938  "r037"
-                              Name 941  "r039"
-                              Name 945  "r040"
-                              Name 948  "r041"
-                              Name 951  "r042"
-                              Name 955  "r039a"
-                              Name 960  "r043"
-                              Name 963  "r044"
-                              Name 966  "r045"
-                              Name 970  "r046"
-                              Name 973  "r047"
-                              Name 977  "r048"
-                              Name 981  "r049"
-                              Name 984  "r050"
-                              Name 988  "r051"
-                              Name 991  "r052"
-                              Name 995  "r053"
-                              Name 999  "r054"
-                              Name 1003  "r055"
-                              Name 1006  "r056"
-                              Name 1009  "r057"
-                              Name 1012  "r058"
-                              Name 1017  "r059"
-                              Name 1020  "r060"
-                              Name 1027  "r061"
-                              Name 1030  "r062"
-                              Name 1035  "r063"
-                              Name 1038  "r064"
-                              Name 1042  "r065"
-                              Name 1045  "r066"
-                              Name 1048  "r067"
-                              Name 1055  "r000"
-                              Name 1060  "r001"
-                              Name 1065  "r003"
-                              Name 1069  "r004"
-                              Name 1072  "r005"
-                              Name 1075  "r006"
-                              Name 1079  "r007"
-                              Name 1089  "r008"
-                              Name 1094  "r009"
-                              Name 1097  "r010"
-                              Name 1100  "r011"
-                              Name 1103  "r012"
-                              Name 1106  "r013"
-                              Name 1109  "r014"
-                              Name 1112  "r015"
-                              Name 1115  "r016"
-                              Name 1118  "r017"
-                              Name 1121  "r018"
-                              Name 1124  "r019"
-                              Name 1127  "R020"
-                              Name 1130  "r021"
-                              Name 1133  "r022"
-                              Name 1143  "r023"
-                              Name 1146  "r025"
-                              Name 1149  "r026"
-                              Name 1153  "r026a"
-                              Name 1158  "r027"
-                              Name 1161  "r028"
-                              Name 1165  "r029"
-                              Name 1168  "r030"
-                              Name 1172  "r031"
-                              Name 1176  "r032"
-                              Name 1180  "r033"
-                              Name 1183  "r034"
-                              Name 1186  "r035"
-                              Name 1189  "r036"
-                              Name 1194  "r037"
-                              Name 1197  "r038"
-                              Name 1204  "r039"
-                              Name 1207  "r049"
-                              Name 1212  "r041"
-                              Name 1215  "r042"
-                              Name 1219  "r043"
-                              Name 1222  "r044"
-                              Name 1227  "r046"
-                              Name 1234  "r000"
-                              Name 1239  "r001"
-                              Name 1244  "r003"
-                              Name 1248  "r004"
-                              Name 1251  "r005"
-                              Name 1254  "r006"
-                              Name 1258  "r007"
-                              Name 1268  "r008"
-                              Name 1273  "r009"
-                              Name 1276  "r010"
-                              Name 1279  "r011"
-                              Name 1282  "r012"
-                              Name 1285  "r013"
-                              Name 1288  "r014"
-                              Name 1291  "r015"
-                              Name 1294  "r016"
-                              Name 1297  "r017"
-                              Name 1300  "r018"
-                              Name 1303  "r019"
-                              Name 1306  "R020"
-                              Name 1309  "r021"
-                              Name 1312  "r022"
-                              Name 1325  "r023"
-                              Name 1328  "r025"
-                              Name 1331  "r026"
-                              Name 1335  "r026a"
-                              Name 1340  "r027"
-                              Name 1343  "r028"
-                              Name 1347  "r029"
-                              Name 1350  "r030"
-                              Name 1354  "r031"
-                              Name 1358  "r032"
-                              Name 1362  "r033"
-                              Name 1365  "r034"
-                              Name 1368  "r035"
-                              Name 1371  "r036"
-                              Name 1376  "r037"
-                              Name 1379  "r038"
-                              Name 1386  "r039"
-                              Name 1389  "r049"
-                              Name 1394  "r041"
-                              Name 1397  "r042"
-                              Name 1401  "r043"
-                              Name 1404  "r044"
-                              Name 1409  "r046"
-                              Name 1416  "r000"
-                              Name 1421  "r001"
-                              Name 1426  "r003"
-                              Name 1430  "r004"
-                              Name 1433  "r005"
-                              Name 1436  "r006"
-                              Name 1440  "r007"
-                              Name 1450  "r008"
-                              Name 1455  "r009"
-                              Name 1458  "r010"
-                              Name 1461  "r011"
-                              Name 1464  "r012"
-                              Name 1467  "r013"
-                              Name 1470  "r014"
-                              Name 1473  "r015"
-                              Name 1476  "r016"
-                              Name 1479  "r017"
-                              Name 1482  "r018"
-                              Name 1485  "r019"
-                              Name 1488  "R020"
-                              Name 1491  "r021"
-                              Name 1494  "r022"
-                              Name 1510  "r023"
-                              Name 1513  "r025"
-                              Name 1516  "r026"
-                              Name 1520  "r026a"
-                              Name 1525  "r027"
-                              Name 1528  "r028"
-                              Name 1532  "r029"
-                              Name 1535  "r030"
-                              Name 1539  "r031"
-                              Name 1543  "r032"
-                              Name 1547  "r033"
-                              Name 1550  "r034"
-                              Name 1553  "r035"
-                              Name 1556  "r036"
-                              Name 1561  "r037"
-                              Name 1564  "r038"
-                              Name 1571  "r039"
-                              Name 1574  "r049"
-                              Name 1579  "r041"
-                              Name 1582  "r042"
-                              Name 1586  "r043"
-                              Name 1589  "r044"
-                              Name 1594  "r046"
-                              Name 1601  "r0"
-                              Name 1605  "r1"
-                              Name 1609  "r2"
-                              Name 1613  "r3"
-                              Name 1617  "r4"
-                              Name 1621  "r5"
-                              Name 1625  "r6"
-                              Name 1629  "r7"
-                              Name 1633  "r8"
-                              Name 1637  "r0"
-                              Name 1641  "r1"
-                              Name 1645  "r2"
-                              Name 1649  "r3"
-                              Name 1653  "r4"
-                              Name 1657  "r5"
-                              Name 1661  "r6"
-                              Name 1665  "r7"
-                              Name 1669  "r8"
-                              Name 1673  "r0"
-                              Name 1677  "r1"
-                              Name 1681  "r2"
-                              Name 1685  "r3"
-                              Name 1689  "r4"
-                              Name 1693  "r5"
-                              Name 1697  "r6"
-                              Name 1701  "r7"
-                              Name 1705  "r8"
-                              Name 1709  "r00"
-                              Name 1713  "r01"
-                              Name 1717  "r02"
-                              Name 1721  "r03"
-                              Name 1725  "r04"
-                              Name 1729  "r05"
-                              Name 1733  "r06"
-                              Name 1737  "r07"
-                              Name 1741  "r08"
-                              Name 1745  "r09"
-                              Name 1749  "r10"
-                              Name 1753  "r11"
-                              Name 1757  "r12"
-                              Name 1761  "r13"
-                              Name 1765  "r14"
-                              Name 1769  "r15"
-                              Name 1773  "r16"
-                              Name 1778  "ps_output"
-                              Name 1786  "@entryPointOutput.color"
-                              Name 1790  "gs_ua"
-                              Name 1791  "gs_ub"
-                              Name 1792  "gs_uc"
-                              Name 1794  "gs_ua2"
-                              Name 1795  "gs_ub2"
-                              Name 1796  "gs_uc2"
-                              Name 1798  "gs_ua3"
-                              Name 1799  "gs_ub3"
-                              Name 1800  "gs_uc3"
-                              Name 1802  "gs_ua4"
-                              Name 1803  "gs_ub4"
-                              Name 1804  "gs_uc4"
-                              Decorate 1786(@entryPointOutput.color) Location 0
+                              Name 192  "r014"
+                              Name 195  "r015"
+                              Name 198  "r016"
+                              Name 201  "r017"
+                              Name 204  "r018"
+                              Name 207  "r019"
+                              Name 210  "r020"
+                              Name 213  "r021"
+                              Name 216  "r022"
+                              Name 219  "r023"
+                              Name 222  "r027"
+                              Name 225  "r028"
+                              Name 228  "r029"
+                              Name 231  "r030"
+                              Name 234  "r031"
+                              Name 237  "r033"
+                              Name 241  "r034"
+                              Name 244  "r036"
+                              Name 247  "r037"
+                              Name 250  "r038"
+                              Name 253  "r039"
+                              Name 257  "r039a"
+                              Name 262  "r040"
+                              Name 265  "r041"
+                              Name 270  "r042"
+                              Name 273  "r043"
+                              Name 277  "r044"
+                              Name 281  "r045"
+                              Name 285  "r046"
+                              Name 288  "r047"
+                              Name 292  "r048"
+                              Name 296  "r049"
+                              Name 299  "r050"
+                              Name 302  "r051"
+                              Name 305  "r052"
+                              Name 308  "r053"
+                              Name 315  "r055"
+                              Name 318  "r056"
+                              Name 323  "r057"
+                              Name 326  "r058"
+                              Name 330  "r059"
+                              Name 333  "r060"
+                              Name 336  "r061"
+                              Name 343  "r000"
+                              Name 349  "r001"
+                              Name 352  "r002"
+                              Name 355  "r003"
+                              Name 359  "r004"
+                              Name 364  "r005"
+                              Name 367  "r006"
+                              Name 370  "r007"
+                              Name 373  "r009"
+                              Name 376  "r010"
+                              Name 380  "r011"
+                              Name 383  "r012"
+                              Name 402  "r013"
+                              Name 405  "r015"
+                              Name 408  "r016"
+                              Name 412  "r017"
+                              Name 415  "r018"
+                              Name 418  "r019"
+                              Name 421  "r020"
+                              Name 424  "r021"
+                              Name 427  "r022"
+                              Name 430  "r023"
+                              Name 433  "r026"
+                              Name 437  "r027"
+                              Name 441  "r028"
+                              Name 444  "r029"
+                              Name 447  "r030"
+                              Name 452  "r031"
+                              Name 457  "r032"
+                              Name 459  "r033"
+                              Name 462  "r035"
+                              Name 466  "r036"
+                              Name 469  "r038"
+                              Name 473  "r039"
+                              Name 476  "r040"
+                              Name 479  "r041"
+                              Name 483  "r039a"
+                              Name 488  "r042"
+                              Name 491  "r043"
+                              Name 494  "r044"
+                              Name 498  "r045"
+                              Name 501  "r046"
+                              Name 505  "r047"
+                              Name 509  "r048"
+                              Name 512  "r049"
+                              Name 516  "r050"
+                              Name 519  "r051"
+                              Name 523  "r052"
+                              Name 527  "r053"
+                              Name 532  "r054"
+                              Name 537  "r055"
+                              Name 540  "r056"
+                              Name 543  "r057"
+                              Name 548  "r058"
+                              Name 551  "r059"
+                              Name 558  "r060"
+                              Name 561  "r061"
+                              Name 566  "r062"
+                              Name 569  "r063"
+                              Name 573  "r064"
+                              Name 576  "r065"
+                              Name 579  "r066"
+                              Name 585  "r000"
+                              Name 591  "r001"
+                              Name 594  "r002"
+                              Name 597  "r003"
+                              Name 601  "r004"
+                              Name 606  "r005"
+                              Name 609  "r006"
+                              Name 612  "r007"
+                              Name 615  "r009"
+                              Name 618  "r010"
+                              Name 622  "r011"
+                              Name 625  "r012"
+                              Name 643  "r013"
+                              Name 646  "r014"
+                              Name 649  "r015"
+                              Name 654  "r016"
+                              Name 658  "r017"
+                              Name 661  "r018"
+                              Name 664  "r019"
+                              Name 667  "r020"
+                              Name 670  "r021"
+                              Name 673  "r022"
+                              Name 676  "r023"
+                              Name 679  "r024"
+                              Name 683  "r025"
+                              Name 687  "r029"
+                              Name 690  "r030"
+                              Name 693  "r031"
+                              Name 698  "r032"
+                              Name 702  "r033"
+                              Name 704  "r034"
+                              Name 707  "r036"
+                              Name 711  "r037"
+                              Name 714  "r039"
+                              Name 718  "r040"
+                              Name 721  "r041"
+                              Name 724  "r042"
+                              Name 728  "r039a"
+                              Name 733  "r039b"
+                              Name 739  "r043"
+                              Name 742  "r044"
+                              Name 745  "r045"
+                              Name 749  "r046"
+                              Name 752  "r047"
+                              Name 756  "r048"
+                              Name 760  "r049"
+                              Name 763  "r050"
+                              Name 767  "r051"
+                              Name 770  "r052"
+                              Name 774  "r053"
+                              Name 778  "r054"
+                              Name 782  "r055"
+                              Name 785  "r056"
+                              Name 788  "r057"
+                              Name 791  "r058"
+                              Name 796  "r059"
+                              Name 799  "r060"
+                              Name 806  "r061"
+                              Name 809  "r062"
+                              Name 814  "r063"
+                              Name 817  "r064"
+                              Name 821  "r065"
+                              Name 824  "r066"
+                              Name 827  "r067"
+                              Name 834  "r000"
+                              Name 840  "r001"
+                              Name 843  "r002"
+                              Name 846  "r003"
+                              Name 850  "r004"
+                              Name 855  "r005"
+                              Name 858  "r006"
+                              Name 861  "r007"
+                              Name 864  "r009"
+                              Name 867  "r010"
+                              Name 871  "r011"
+                              Name 874  "r012"
+                              Name 892  "r013"
+                              Name 895  "r014"
+                              Name 898  "r015"
+                              Name 901  "r016"
+                              Name 904  "r017"
+                              Name 907  "r018"
+                              Name 910  "r019"
+                              Name 913  "r020"
+                              Name 916  "r021"
+                              Name 919  "r022"
+                              Name 922  "r023"
+                              Name 926  "r024"
+                              Name 930  "r025"
+                              Name 941  "r029"
+                              Name 944  "r030"
+                              Name 947  "r031"
+                              Name 952  "r032"
+                              Name 957  "r033"
+                              Name 959  "r034"
+                              Name 962  "r036"
+                              Name 966  "r037"
+                              Name 969  "r039"
+                              Name 973  "r040"
+                              Name 976  "r041"
+                              Name 979  "r042"
+                              Name 983  "r039a"
+                              Name 988  "r043"
+                              Name 991  "r044"
+                              Name 994  "r045"
+                              Name 998  "r046"
+                              Name 1001  "r047"
+                              Name 1005  "r048"
+                              Name 1009  "r049"
+                              Name 1012  "r050"
+                              Name 1016  "r051"
+                              Name 1019  "r052"
+                              Name 1023  "r053"
+                              Name 1027  "r054"
+                              Name 1031  "r055"
+                              Name 1034  "r056"
+                              Name 1037  "r057"
+                              Name 1040  "r058"
+                              Name 1045  "r059"
+                              Name 1048  "r060"
+                              Name 1055  "r061"
+                              Name 1058  "r062"
+                              Name 1063  "r063"
+                              Name 1066  "r064"
+                              Name 1070  "r065"
+                              Name 1073  "r066"
+                              Name 1076  "r067"
+                              Name 1083  "r000"
+                              Name 1088  "r001"
+                              Name 1093  "r003"
+                              Name 1097  "r004"
+                              Name 1100  "r005"
+                              Name 1103  "r006"
+                              Name 1107  "r007"
+                              Name 1117  "r008"
+                              Name 1122  "r009"
+                              Name 1125  "r010"
+                              Name 1128  "r011"
+                              Name 1131  "r012"
+                              Name 1134  "r013"
+                              Name 1137  "r014"
+                              Name 1140  "r015"
+                              Name 1143  "r016"
+                              Name 1146  "r017"
+                              Name 1149  "r018"
+                              Name 1152  "r019"
+                              Name 1155  "R020"
+                              Name 1158  "r021"
+                              Name 1161  "r022"
+                              Name 1171  "r023"
+                              Name 1174  "r025"
+                              Name 1177  "r026"
+                              Name 1181  "r026a"
+                              Name 1186  "r027"
+                              Name 1189  "r028"
+                              Name 1193  "r029"
+                              Name 1196  "r030"
+                              Name 1200  "r031"
+                              Name 1204  "r032"
+                              Name 1208  "r033"
+                              Name 1211  "r034"
+                              Name 1214  "r035"
+                              Name 1217  "r036"
+                              Name 1222  "r037"
+                              Name 1225  "r038"
+                              Name 1232  "r039"
+                              Name 1235  "r049"
+                              Name 1240  "r041"
+                              Name 1243  "r042"
+                              Name 1247  "r043"
+                              Name 1250  "r044"
+                              Name 1255  "r046"
+                              Name 1262  "r000"
+                              Name 1267  "r001"
+                              Name 1272  "r003"
+                              Name 1276  "r004"
+                              Name 1279  "r005"
+                              Name 1282  "r006"
+                              Name 1286  "r007"
+                              Name 1296  "r008"
+                              Name 1301  "r009"
+                              Name 1304  "r010"
+                              Name 1307  "r011"
+                              Name 1310  "r012"
+                              Name 1313  "r013"
+                              Name 1316  "r014"
+                              Name 1319  "r015"
+                              Name 1322  "r016"
+                              Name 1325  "r017"
+                              Name 1328  "r018"
+                              Name 1331  "r019"
+                              Name 1334  "R020"
+                              Name 1337  "r021"
+                              Name 1340  "r022"
+                              Name 1353  "r023"
+                              Name 1356  "r025"
+                              Name 1359  "r026"
+                              Name 1363  "r026a"
+                              Name 1368  "r027"
+                              Name 1371  "r028"
+                              Name 1375  "r029"
+                              Name 1378  "r030"
+                              Name 1382  "r031"
+                              Name 1386  "r032"
+                              Name 1390  "r033"
+                              Name 1393  "r034"
+                              Name 1396  "r035"
+                              Name 1399  "r036"
+                              Name 1404  "r037"
+                              Name 1407  "r038"
+                              Name 1414  "r039"
+                              Name 1417  "r049"
+                              Name 1422  "r041"
+                              Name 1425  "r042"
+                              Name 1429  "r043"
+                              Name 1432  "r044"
+                              Name 1437  "r046"
+                              Name 1444  "r000"
+                              Name 1449  "r001"
+                              Name 1454  "r003"
+                              Name 1458  "r004"
+                              Name 1461  "r005"
+                              Name 1464  "r006"
+                              Name 1468  "r007"
+                              Name 1478  "r008"
+                              Name 1483  "r009"
+                              Name 1486  "r010"
+                              Name 1489  "r011"
+                              Name 1492  "r012"
+                              Name 1495  "r013"
+                              Name 1498  "r014"
+                              Name 1501  "r015"
+                              Name 1504  "r016"
+                              Name 1507  "r017"
+                              Name 1510  "r018"
+                              Name 1513  "r019"
+                              Name 1516  "R020"
+                              Name 1519  "r021"
+                              Name 1522  "r022"
+                              Name 1538  "r023"
+                              Name 1541  "r025"
+                              Name 1544  "r026"
+                              Name 1548  "r026a"
+                              Name 1553  "r027"
+                              Name 1556  "r028"
+                              Name 1560  "r029"
+                              Name 1563  "r030"
+                              Name 1567  "r031"
+                              Name 1571  "r032"
+                              Name 1575  "r033"
+                              Name 1578  "r034"
+                              Name 1581  "r035"
+                              Name 1584  "r036"
+                              Name 1589  "r037"
+                              Name 1592  "r038"
+                              Name 1599  "r039"
+                              Name 1602  "r049"
+                              Name 1607  "r041"
+                              Name 1610  "r042"
+                              Name 1614  "r043"
+                              Name 1617  "r044"
+                              Name 1622  "r046"
+                              Name 1629  "r0"
+                              Name 1633  "r1"
+                              Name 1637  "r2"
+                              Name 1641  "r3"
+                              Name 1645  "r4"
+                              Name 1649  "r5"
+                              Name 1653  "r6"
+                              Name 1657  "r7"
+                              Name 1661  "r8"
+                              Name 1665  "r0"
+                              Name 1669  "r1"
+                              Name 1673  "r2"
+                              Name 1677  "r3"
+                              Name 1681  "r4"
+                              Name 1685  "r5"
+                              Name 1689  "r6"
+                              Name 1693  "r7"
+                              Name 1697  "r8"
+                              Name 1701  "r0"
+                              Name 1705  "r1"
+                              Name 1709  "r2"
+                              Name 1713  "r3"
+                              Name 1717  "r4"
+                              Name 1721  "r5"
+                              Name 1725  "r6"
+                              Name 1729  "r7"
+                              Name 1733  "r8"
+                              Name 1737  "r00"
+                              Name 1741  "r01"
+                              Name 1745  "r02"
+                              Name 1749  "r03"
+                              Name 1753  "r04"
+                              Name 1757  "r05"
+                              Name 1761  "r06"
+                              Name 1765  "r07"
+                              Name 1769  "r08"
+                              Name 1773  "r09"
+                              Name 1777  "r10"
+                              Name 1781  "r11"
+                              Name 1785  "r12"
+                              Name 1789  "r13"
+                              Name 1793  "r14"
+                              Name 1797  "r15"
+                              Name 1801  "r16"
+                              Name 1806  "ps_output"
+                              Name 1813  "@entryPointOutput.color"
+                              Name 1817  "gs_ua"
+                              Name 1818  "gs_ub"
+                              Name 1819  "gs_uc"
+                              Name 1821  "gs_ua2"
+                              Name 1822  "gs_ub2"
+                              Name 1823  "gs_uc2"
+                              Name 1825  "gs_ua3"
+                              Name 1826  "gs_ub3"
+                              Name 1827  "gs_uc3"
+                              Name 1829  "gs_ua4"
+                              Name 1830  "gs_ub4"
+                              Name 1831  "gs_uc4"
+                              Decorate 1813(@entryPointOutput.color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -6124,89 +6206,93 @@
              139:    6(float) Constant 0
              155:             TypeInt 32 1
              156:             TypePointer Function 155(int)
-             193:    155(int) Constant 7
-             262:    6(float) Constant 1050288283
-             283:    6(float) Constant 1065353216
-             287:    155(int) Constant 2
-             339:             TypeVector 135(bool) 2
-             340:   24(fvec2) ConstantComposite 139 139
-             356:             TypeVector 155(int) 2
-             357:             TypePointer Function 356(ivec2)
-             395:    155(int) Constant 3
-             396:  356(ivec2) ConstantComposite 193 395
-             439:      8(int) Constant 7
-             440:      8(int) Constant 8
-             441:   26(ivec2) ConstantComposite 439 440
-             458:             TypePointer Function 339(bvec2)
-             516:    6(float) Constant 1073741824
-             519:      8(int) Constant 1
-             520:      8(int) Constant 2
-             521:   26(ivec2) ConstantComposite 519 520
-             568:   24(fvec2) ConstantComposite 283 516
-             573:             TypeVector 135(bool) 3
-             574:   36(fvec3) ConstantComposite 139 139 139
-             590:             TypeVector 155(int) 3
-             591:             TypePointer Function 590(ivec3)
-             629:      8(int) Constant 3
-             630:      8(int) Constant 5
-             631:   38(ivec3) ConstantComposite 439 629 630
-             678:      8(int) Constant 4
-             679:   38(ivec3) ConstantComposite 520 629 678
-             696:             TypePointer Function 573(bvec3)
-             715:    6(float) Constant 1050253722
-             762:   38(ivec3) ConstantComposite 519 520 629
-             809:    6(float) Constant 1077936128
-             810:   36(fvec3) ConstantComposite 283 516 809
-             815:             TypeVector 135(bool) 4
-             816:   48(fvec4) ConstantComposite 139 139 139 139
-             832:             TypeVector 155(int) 4
-             833:             TypePointer Function 832(ivec4)
-             871:   50(ivec4) ConstantComposite 439 629 630 520
-             925:      8(int) Constant 9
-             926:      8(int) Constant 10
-             927:   50(ivec4) ConstantComposite 439 440 925 926
-             944:             TypePointer Function 815(bvec4)
-            1004:   50(ivec4) ConstantComposite 519 520 629 678
-            1051:    6(float) Constant 1082130432
-            1052:   48(fvec4) ConstantComposite 283 516 809 1051
-            1057:             TypeMatrix 339(bvec2) 2
-            1083:          60 ConstantComposite 340 340
-            1230:   24(fvec2) ConstantComposite 516 516
-            1231:          60 ConstantComposite 1230 1230
-            1236:             TypeMatrix 573(bvec3) 3
-            1262:          68 ConstantComposite 574 574 574
-            1412:   36(fvec3) ConstantComposite 809 809 809
-            1413:          68 ConstantComposite 1412 1412 1412
-            1418:             TypeMatrix 815(bvec4) 4
-            1444:          76 ConstantComposite 816 816 816 816
-            1597:   48(fvec4) ConstantComposite 1051 1051 1051 1051
-            1598:          76 ConstantComposite 1597 1597 1597 1597
-            1777:             TypePointer Function 131(PS_OUTPUT)
-            1779:    155(int) Constant 0
-            1780:   48(fvec4) ConstantComposite 283 283 283 283
-            1785:             TypePointer Output 48(fvec4)
-1786(@entryPointOutput.color):   1785(ptr) Variable Output
-            1789:             TypePointer Workgroup 8(int)
-     1790(gs_ua):   1789(ptr) Variable Workgroup
-     1791(gs_ub):   1789(ptr) Variable Workgroup
-     1792(gs_uc):   1789(ptr) Variable Workgroup
-            1793:             TypePointer Workgroup 26(ivec2)
-    1794(gs_ua2):   1793(ptr) Variable Workgroup
-    1795(gs_ub2):   1793(ptr) Variable Workgroup
-    1796(gs_uc2):   1793(ptr) Variable Workgroup
-            1797:             TypePointer Workgroup 38(ivec3)
-    1798(gs_ua3):   1797(ptr) Variable Workgroup
-    1799(gs_ub3):   1797(ptr) Variable Workgroup
-    1800(gs_uc3):   1797(ptr) Variable Workgroup
-            1801:             TypePointer Workgroup 50(ivec4)
-    1802(gs_ua4):   1801(ptr) Variable Workgroup
-    1803(gs_ub4):   1801(ptr) Variable Workgroup
-    1804(gs_uc4):   1801(ptr) Variable Workgroup
+             187:    155(int) Constant 0
+             199:    155(int) Constant 7
+             268:    6(float) Constant 1050288283
+             289:    6(float) Constant 1065353216
+             293:    155(int) Constant 2
+             345:             TypeVector 135(bool) 2
+             346:   24(fvec2) ConstantComposite 139 139
+             362:             TypeVector 155(int) 2
+             363:             TypePointer Function 362(ivec2)
+             395:      8(int) Constant 0
+             396:   26(ivec2) ConstantComposite 395 395
+             409:    155(int) Constant 3
+             410:  362(ivec2) ConstantComposite 199 409
+             453:      8(int) Constant 7
+             454:      8(int) Constant 8
+             455:   26(ivec2) ConstantComposite 453 454
+             472:             TypePointer Function 345(bvec2)
+             530:    6(float) Constant 1073741824
+             533:      8(int) Constant 1
+             534:      8(int) Constant 2
+             535:   26(ivec2) ConstantComposite 533 534
+             582:   24(fvec2) ConstantComposite 289 530
+             587:             TypeVector 135(bool) 3
+             588:   36(fvec3) ConstantComposite 139 139 139
+             604:             TypeVector 155(int) 3
+             605:             TypePointer Function 604(ivec3)
+             637:   38(ivec3) ConstantComposite 395 395 395
+             650:      8(int) Constant 3
+             651:      8(int) Constant 5
+             652:   38(ivec3) ConstantComposite 453 650 651
+             699:      8(int) Constant 4
+             700:   38(ivec3) ConstantComposite 534 650 699
+             717:             TypePointer Function 587(bvec3)
+             736:    6(float) Constant 1050253722
+             783:   38(ivec3) ConstantComposite 533 534 650
+             830:    6(float) Constant 1077936128
+             831:   36(fvec3) ConstantComposite 289 530 830
+             836:             TypeVector 135(bool) 4
+             837:   48(fvec4) ConstantComposite 139 139 139 139
+             853:             TypeVector 155(int) 4
+             854:             TypePointer Function 853(ivec4)
+             886:   50(ivec4) ConstantComposite 395 395 395 395
+             899:   50(ivec4) ConstantComposite 453 650 651 534
+             953:      8(int) Constant 9
+             954:      8(int) Constant 10
+             955:   50(ivec4) ConstantComposite 453 454 953 954
+             972:             TypePointer Function 836(bvec4)
+            1032:   50(ivec4) ConstantComposite 533 534 650 699
+            1079:    6(float) Constant 1082130432
+            1080:   48(fvec4) ConstantComposite 289 530 830 1079
+            1085:             TypeMatrix 345(bvec2) 2
+            1111:          60 ConstantComposite 346 346
+            1258:   24(fvec2) ConstantComposite 530 530
+            1259:          60 ConstantComposite 1258 1258
+            1264:             TypeMatrix 587(bvec3) 3
+            1290:          68 ConstantComposite 588 588 588
+            1440:   36(fvec3) ConstantComposite 830 830 830
+            1441:          68 ConstantComposite 1440 1440 1440
+            1446:             TypeMatrix 836(bvec4) 4
+            1472:          76 ConstantComposite 837 837 837 837
+            1625:   48(fvec4) ConstantComposite 1079 1079 1079 1079
+            1626:          76 ConstantComposite 1625 1625 1625 1625
+            1805:             TypePointer Function 131(PS_OUTPUT)
+            1807:   48(fvec4) ConstantComposite 289 289 289 289
+            1812:             TypePointer Output 48(fvec4)
+1813(@entryPointOutput.color):   1812(ptr) Variable Output
+            1816:             TypePointer Workgroup 8(int)
+     1817(gs_ua):   1816(ptr) Variable Workgroup
+     1818(gs_ub):   1816(ptr) Variable Workgroup
+     1819(gs_uc):   1816(ptr) Variable Workgroup
+            1820:             TypePointer Workgroup 26(ivec2)
+    1821(gs_ua2):   1820(ptr) Variable Workgroup
+    1822(gs_ub2):   1820(ptr) Variable Workgroup
+    1823(gs_uc2):   1820(ptr) Variable Workgroup
+            1824:             TypePointer Workgroup 38(ivec3)
+    1825(gs_ua3):   1824(ptr) Variable Workgroup
+    1826(gs_ub3):   1824(ptr) Variable Workgroup
+    1827(gs_uc3):   1824(ptr) Variable Workgroup
+            1828:             TypePointer Workgroup 50(ivec4)
+    1829(gs_ua4):   1828(ptr) Variable Workgroup
+    1830(gs_ub4):   1828(ptr) Variable Workgroup
+    1831(gs_uc4):   1828(ptr) Variable Workgroup
          4(main):           2 Function None 3
                5:             Label
-            1787:131(PS_OUTPUT) FunctionCall 133(@main()
-            1788:   48(fvec4) CompositeExtract 1787 0
-                              Store 1786(@entryPointOutput.color) 1788
+            1814:131(PS_OUTPUT) FunctionCall 133(@main()
+            1815:   48(fvec4) CompositeExtract 1814 0
+                              Store 1813(@entryPointOutput.color) 1815
                               Return
                               FunctionEnd
 16(PixelShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
@@ -6228,49 +6314,49 @@
        169(r010):      7(ptr) Variable Function
        173(r011):      7(ptr) Variable Function
        176(r012):      7(ptr) Variable Function
-       186(r014):      7(ptr) Variable Function
-       189(r015):      7(ptr) Variable Function
-       192(r016):    156(ptr) Variable Function
-       195(r017):      7(ptr) Variable Function
-       198(r018):      7(ptr) Variable Function
-       201(r019):      7(ptr) Variable Function
-       204(r020):      7(ptr) Variable Function
-       207(r021):      7(ptr) Variable Function
-       210(r022):      7(ptr) Variable Function
-       213(r023):      7(ptr) Variable Function
-       216(r027):      7(ptr) Variable Function
-       219(r028):      7(ptr) Variable Function
-       222(r029):      9(ptr) Variable Function
-       225(r030):      9(ptr) Variable Function
-       228(r031):      7(ptr) Variable Function
-       231(r033):      7(ptr) Variable Function
-       235(r034):      7(ptr) Variable Function
-       238(r036):      7(ptr) Variable Function
-       241(r037):    136(ptr) Variable Function
-       244(r038):    136(ptr) Variable Function
-       247(r039):      7(ptr) Variable Function
-      251(r039a):      7(ptr) Variable Function
-       256(r040):      7(ptr) Variable Function
-       259(r041):      7(ptr) Variable Function
-       264(r042):      7(ptr) Variable Function
-       267(r043):      7(ptr) Variable Function
-       271(r044):      7(ptr) Variable Function
-       275(r045):      7(ptr) Variable Function
-       279(r046):      7(ptr) Variable Function
-       282(r047):      7(ptr) Variable Function
-       286(r048):      9(ptr) Variable Function
-       290(r049):      7(ptr) Variable Function
-       293(r050):      7(ptr) Variable Function
-       296(r051):      7(ptr) Variable Function
-       299(r052):      7(ptr) Variable Function
-       302(r053):      7(ptr) Variable Function
-       309(r055):      7(ptr) Variable Function
-       312(r056):      7(ptr) Variable Function
-       317(r057):      7(ptr) Variable Function
-       320(r058):      7(ptr) Variable Function
-       324(r059):      7(ptr) Variable Function
-       327(r060):      7(ptr) Variable Function
-       330(r061):      7(ptr) Variable Function
+       192(r014):      7(ptr) Variable Function
+       195(r015):      7(ptr) Variable Function
+       198(r016):    156(ptr) Variable Function
+       201(r017):      7(ptr) Variable Function
+       204(r018):      7(ptr) Variable Function
+       207(r019):      7(ptr) Variable Function
+       210(r020):      7(ptr) Variable Function
+       213(r021):      7(ptr) Variable Function
+       216(r022):      7(ptr) Variable Function
+       219(r023):      7(ptr) Variable Function
+       222(r027):      7(ptr) Variable Function
+       225(r028):      7(ptr) Variable Function
+       228(r029):      9(ptr) Variable Function
+       231(r030):      9(ptr) Variable Function
+       234(r031):      7(ptr) Variable Function
+       237(r033):      7(ptr) Variable Function
+       241(r034):      7(ptr) Variable Function
+       244(r036):      7(ptr) Variable Function
+       247(r037):    136(ptr) Variable Function
+       250(r038):    136(ptr) Variable Function
+       253(r039):      7(ptr) Variable Function
+      257(r039a):      7(ptr) Variable Function
+       262(r040):      7(ptr) Variable Function
+       265(r041):      7(ptr) Variable Function
+       270(r042):      7(ptr) Variable Function
+       273(r043):      7(ptr) Variable Function
+       277(r044):      7(ptr) Variable Function
+       281(r045):      7(ptr) Variable Function
+       285(r046):      7(ptr) Variable Function
+       288(r047):      7(ptr) Variable Function
+       292(r048):      9(ptr) Variable Function
+       296(r049):      7(ptr) Variable Function
+       299(r050):      7(ptr) Variable Function
+       302(r051):      7(ptr) Variable Function
+       305(r052):      7(ptr) Variable Function
+       308(r053):      7(ptr) Variable Function
+       315(r055):      7(ptr) Variable Function
+       318(r056):      7(ptr) Variable Function
+       323(r057):      7(ptr) Variable Function
+       326(r058):      7(ptr) Variable Function
+       330(r059):      7(ptr) Variable Function
+       333(r060):      7(ptr) Variable Function
+       336(r061):      7(ptr) Variable Function
              138:    6(float) Load 11(inF0)
              140:   135(bool) FOrdNotEqual 138 139
              141:   135(bool) All 140
@@ -6319,151 +6405,158 @@
              183:               Label
                                 Kill
              184:             Label
-             187:    6(float) Load 11(inF0)
-             188:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 187
-                              Store 186(r014) 188
-             190:    6(float) Load 11(inF0)
-             191:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 190
-                              Store 189(r015) 191
-             194:    155(int) BitCount 193
-                              Store 192(r016) 194
+             186:    155(int) Load 157(r005)
+             188:   135(bool) SLessThan 186 187
+                              SelectionMerge 190 None
+                              BranchConditional 188 189 190
+             189:               Label
+                                Kill
+             190:             Label
+             193:    6(float) Load 11(inF0)
+             194:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 193
+                              Store 192(r014) 194
              196:    6(float) Load 11(inF0)
-             197:    6(float) DPdx 196
-                              Store 195(r017) 197
-             199:    6(float) Load 11(inF0)
-             200:    6(float) DPdxCoarse 199
-                              Store 198(r018) 200
+             197:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 196
+                              Store 195(r015) 197
+             200:    155(int) BitCount 199
+                              Store 198(r016) 200
              202:    6(float) Load 11(inF0)
-             203:    6(float) DPdxFine 202
-                              Store 201(r019) 203
+             203:    6(float) DPdx 202
+                              Store 201(r017) 203
              205:    6(float) Load 11(inF0)
-             206:    6(float) DPdy 205
-                              Store 204(r020) 206
+             206:    6(float) DPdxCoarse 205
+                              Store 204(r018) 206
              208:    6(float) Load 11(inF0)
-             209:    6(float) DPdyCoarse 208
-                              Store 207(r021) 209
+             209:    6(float) DPdxFine 208
+                              Store 207(r019) 209
              211:    6(float) Load 11(inF0)
-             212:    6(float) DPdyFine 211
-                              Store 210(r022) 212
+             212:    6(float) DPdy 211
+                              Store 210(r020) 212
              214:    6(float) Load 11(inF0)
-             215:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 214
-                              Store 213(r023) 215
+             215:    6(float) DPdyCoarse 214
+                              Store 213(r021) 215
              217:    6(float) Load 11(inF0)
-             218:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 217
-                              Store 216(r027) 218
+             218:    6(float) DPdyFine 217
+                              Store 216(r022) 218
              220:    6(float) Load 11(inF0)
-             221:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 220
-                              Store 219(r028) 221
-             223:    155(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 193
-             224:      8(int) Bitcast 223
-                              Store 222(r029) 224
-             226:    155(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 193
-             227:      8(int) Bitcast 226
-                              Store 225(r030) 227
-             229:    6(float) Load 11(inF0)
-             230:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 229
-                              Store 228(r031) 230
-             232:    6(float) Load 11(inF0)
-             233:    6(float) Load 12(inF1)
-             234:    6(float) FMod 232 233
-                              Store 231(r033) 234
-             236:    6(float) Load 11(inF0)
-             237:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 236
-                              Store 235(r034) 237
-             239:    6(float) Load 11(inF0)
-             240:    6(float) Fwidth 239
-                              Store 238(r036) 240
+             221:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 220
+                              Store 219(r023) 221
+             223:    6(float) Load 11(inF0)
+             224:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 223
+                              Store 222(r027) 224
+             226:    6(float) Load 11(inF0)
+             227:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 226
+                              Store 225(r028) 227
+             229:    155(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 199
+             230:      8(int) Bitcast 229
+                              Store 228(r029) 230
+             232:    155(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 199
+             233:      8(int) Bitcast 232
+                              Store 231(r030) 233
+             235:    6(float) Load 11(inF0)
+             236:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 235
+                              Store 234(r031) 236
+             238:    6(float) Load 11(inF0)
+             239:    6(float) Load 12(inF1)
+             240:    6(float) FMod 238 239
+                              Store 237(r033) 240
              242:    6(float) Load 11(inF0)
-             243:   135(bool) IsInf 242
-                              Store 241(r037) 243
+             243:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 242
+                              Store 241(r034) 243
              245:    6(float) Load 11(inF0)
-             246:   135(bool) IsNan 245
-                              Store 244(r038) 246
+             246:    6(float) Fwidth 245
+                              Store 244(r036) 246
              248:    6(float) Load 11(inF0)
-             249:    6(float) Load 12(inF1)
-             250:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 248 249
-                              Store 247(r039) 250
-             252:    6(float) Load 11(inF0)
-             253:    6(float) Load 12(inF1)
-             254:    6(float) Load 13(inF2)
-             255:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 252 253 254
-                              Store 251(r039a) 255
-             257:    6(float) Load 11(inF0)
-             258:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 257
-                              Store 256(r040) 258
-             260:    6(float) Load 11(inF0)
-             261:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 260
-             263:    6(float) FMul 261 262
-                              Store 259(r041) 263
-             265:    6(float) Load 11(inF0)
-             266:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 265
-                              Store 264(r042) 266
-             268:    6(float) Load 11(inF0)
-             269:    6(float) Load 12(inF1)
-             270:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 268 269
-                              Store 267(r043) 270
-             272:    6(float) Load 11(inF0)
-             273:    6(float) Load 12(inF1)
-             274:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 272 273
-                              Store 271(r044) 274
-             276:    6(float) Load 11(inF0)
-             277:    6(float) Load 12(inF1)
-             278:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 276 277
-                              Store 275(r045) 278
-             280:    6(float) Load 11(inF0)
-             281:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 280
-                              Store 279(r046) 281
-             284:    6(float) Load 11(inF0)
-             285:    6(float) FDiv 283 284
-                              Store 282(r047) 285
-             288:    155(int) BitReverse 287
-             289:      8(int) Bitcast 288
-                              Store 286(r048) 289
-             291:    6(float) Load 11(inF0)
-             292:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 291
-                              Store 290(r049) 292
-             294:    6(float) Load 11(inF0)
-             295:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 294
-                              Store 293(r050) 295
+             249:   135(bool) IsInf 248
+                              Store 247(r037) 249
+             251:    6(float) Load 11(inF0)
+             252:   135(bool) IsNan 251
+                              Store 250(r038) 252
+             254:    6(float) Load 11(inF0)
+             255:    6(float) Load 12(inF1)
+             256:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 254 255
+                              Store 253(r039) 256
+             258:    6(float) Load 11(inF0)
+             259:    6(float) Load 12(inF1)
+             260:    6(float) Load 13(inF2)
+             261:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 258 259 260
+                              Store 257(r039a) 261
+             263:    6(float) Load 11(inF0)
+             264:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 263
+                              Store 262(r040) 264
+             266:    6(float) Load 11(inF0)
+             267:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 266
+             269:    6(float) FMul 267 268
+                              Store 265(r041) 269
+             271:    6(float) Load 11(inF0)
+             272:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 271
+                              Store 270(r042) 272
+             274:    6(float) Load 11(inF0)
+             275:    6(float) Load 12(inF1)
+             276:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 274 275
+                              Store 273(r043) 276
+             278:    6(float) Load 11(inF0)
+             279:    6(float) Load 12(inF1)
+             280:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 278 279
+                              Store 277(r044) 280
+             282:    6(float) Load 11(inF0)
+             283:    6(float) Load 12(inF1)
+             284:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 282 283
+                              Store 281(r045) 284
+             286:    6(float) Load 11(inF0)
+             287:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 286
+                              Store 285(r046) 287
+             290:    6(float) Load 11(inF0)
+             291:    6(float) FDiv 289 290
+                              Store 288(r047) 291
+             294:    155(int) BitReverse 293
+             295:      8(int) Bitcast 294
+                              Store 292(r048) 295
              297:    6(float) Load 11(inF0)
-             298:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 297 139 283
-                              Store 296(r051) 298
+             298:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 297
+                              Store 296(r049) 298
              300:    6(float) Load 11(inF0)
-             301:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 300
-                              Store 299(r052) 301
+             301:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 300
+                              Store 299(r050) 301
              303:    6(float) Load 11(inF0)
-             304:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 303
-                              Store 302(r053) 304
-             305:    6(float) Load 11(inF0)
-             306:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 305
-                              Store 12(inF1) 306
-             307:    6(float) Load 11(inF0)
-             308:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 307
-                              Store 13(inF2) 308
-             310:    6(float) Load 11(inF0)
-             311:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 310
-                              Store 309(r055) 311
+             304:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 303 139 289
+                              Store 302(r051) 304
+             306:    6(float) Load 11(inF0)
+             307:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 306
+                              Store 305(r052) 307
+             309:    6(float) Load 11(inF0)
+             310:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 309
+                              Store 308(r053) 310
+             311:    6(float) Load 11(inF0)
+             312:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 311
+                              Store 12(inF1) 312
              313:    6(float) Load 11(inF0)
-             314:    6(float) Load 12(inF1)
-             315:    6(float) Load 13(inF2)
-             316:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 313 314 315
-                              Store 312(r056) 316
-             318:    6(float) Load 11(inF0)
-             319:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 318
-                              Store 317(r057) 319
-             321:    6(float) Load 11(inF0)
-             322:    6(float) Load 12(inF1)
-             323:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 321 322
-                              Store 320(r058) 323
-             325:    6(float) Load 11(inF0)
-             326:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 325
-                              Store 324(r059) 326
-             328:    6(float) Load 11(inF0)
-             329:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 328
-                              Store 327(r060) 329
+             314:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 313
+                              Store 13(inF2) 314
+             316:    6(float) Load 11(inF0)
+             317:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 316
+                              Store 315(r055) 317
+             319:    6(float) Load 11(inF0)
+             320:    6(float) Load 12(inF1)
+             321:    6(float) Load 13(inF2)
+             322:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 319 320 321
+                              Store 318(r056) 322
+             324:    6(float) Load 11(inF0)
+             325:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 324
+                              Store 323(r057) 325
+             327:    6(float) Load 11(inF0)
+             328:    6(float) Load 12(inF1)
+             329:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 327 328
+                              Store 326(r058) 329
              331:    6(float) Load 11(inF0)
-             332:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 331
-                              Store 330(r061) 332
+             332:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 331
+                              Store 330(r059) 332
+             334:    6(float) Load 11(inF0)
+             335:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 334
+                              Store 333(r060) 335
+             337:    6(float) Load 11(inF0)
+             338:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 337
+                              Store 336(r061) 338
                               ReturnValue 139
                               FunctionEnd
 22(PixelShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 18
@@ -6480,290 +6573,298 @@
         32(inU0):     27(ptr) FunctionParameter
         33(inU1):     27(ptr) FunctionParameter
               35:             Label
-       337(r000):    136(ptr) Variable Function
-       343(r001):     25(ptr) Variable Function
-       346(r002):     25(ptr) Variable Function
-       349(r003):    136(ptr) Variable Function
-       353(r004):     25(ptr) Variable Function
-       358(r005):    357(ptr) Variable Function
-       361(r006):     27(ptr) Variable Function
-       364(r007):     25(ptr) Variable Function
-       367(r009):     25(ptr) Variable Function
-       370(r010):     25(ptr) Variable Function
-       374(r011):     25(ptr) Variable Function
-       377(r012):     25(ptr) Variable Function
-       388(r013):     25(ptr) Variable Function
-       391(r015):     25(ptr) Variable Function
-       394(r016):    357(ptr) Variable Function
-       398(r017):     25(ptr) Variable Function
-       401(r018):     25(ptr) Variable Function
-       404(r019):     25(ptr) Variable Function
-       407(r020):     25(ptr) Variable Function
-       410(r021):     25(ptr) Variable Function
-       413(r022):     25(ptr) Variable Function
-       416(r023):     25(ptr) Variable Function
-       419(r026):      7(ptr) Variable Function
-       423(r027):      7(ptr) Variable Function
-       427(r028):     25(ptr) Variable Function
-       430(r029):     25(ptr) Variable Function
-       433(r030):     25(ptr) Variable Function
-       438(r031):     27(ptr) Variable Function
-       443(r032):     27(ptr) Variable Function
-       445(r033):     25(ptr) Variable Function
-       448(r035):     25(ptr) Variable Function
-       452(r036):     25(ptr) Variable Function
-       455(r038):     25(ptr) Variable Function
-       459(r039):    458(ptr) Variable Function
-       462(r040):    458(ptr) Variable Function
-       465(r041):     25(ptr) Variable Function
-      469(r039a):     25(ptr) Variable Function
-       474(r042):      7(ptr) Variable Function
-       477(r043):     25(ptr) Variable Function
-       480(r044):     25(ptr) Variable Function
-       484(r045):     25(ptr) Variable Function
-       487(r046):     25(ptr) Variable Function
-       491(r047):     25(ptr) Variable Function
-       495(r048):     25(ptr) Variable Function
-       498(r049):     25(ptr) Variable Function
-       502(r050):     25(ptr) Variable Function
-       505(r051):     25(ptr) Variable Function
-       509(r052):     25(ptr) Variable Function
-       513(r053):     25(ptr) Variable Function
-       518(r054):     27(ptr) Variable Function
-       523(r055):     25(ptr) Variable Function
-       526(r056):     25(ptr) Variable Function
-       529(r057):     25(ptr) Variable Function
-       534(r058):     25(ptr) Variable Function
-       537(r059):     25(ptr) Variable Function
-       544(r060):     25(ptr) Variable Function
-       547(r061):     25(ptr) Variable Function
-       552(r062):     25(ptr) Variable Function
-       555(r063):     25(ptr) Variable Function
-       559(r064):     25(ptr) Variable Function
-       562(r065):     25(ptr) Variable Function
-       565(r066):     25(ptr) Variable Function
-             338:   24(fvec2) Load 29(inF0)
-             341:  339(bvec2) FOrdNotEqual 338 340
-             342:   135(bool) All 341
-                              Store 337(r000) 342
+       343(r000):    136(ptr) Variable Function
+       349(r001):     25(ptr) Variable Function
+       352(r002):     25(ptr) Variable Function
+       355(r003):    136(ptr) Variable Function
+       359(r004):     25(ptr) Variable Function
+       364(r005):    363(ptr) Variable Function
+       367(r006):     27(ptr) Variable Function
+       370(r007):     25(ptr) Variable Function
+       373(r009):     25(ptr) Variable Function
+       376(r010):     25(ptr) Variable Function
+       380(r011):     25(ptr) Variable Function
+       383(r012):     25(ptr) Variable Function
+       402(r013):     25(ptr) Variable Function
+       405(r015):     25(ptr) Variable Function
+       408(r016):    363(ptr) Variable Function
+       412(r017):     25(ptr) Variable Function
+       415(r018):     25(ptr) Variable Function
+       418(r019):     25(ptr) Variable Function
+       421(r020):     25(ptr) Variable Function
+       424(r021):     25(ptr) Variable Function
+       427(r022):     25(ptr) Variable Function
+       430(r023):     25(ptr) Variable Function
+       433(r026):      7(ptr) Variable Function
+       437(r027):      7(ptr) Variable Function
+       441(r028):     25(ptr) Variable Function
+       444(r029):     25(ptr) Variable Function
+       447(r030):     25(ptr) Variable Function
+       452(r031):     27(ptr) Variable Function
+       457(r032):     27(ptr) Variable Function
+       459(r033):     25(ptr) Variable Function
+       462(r035):     25(ptr) Variable Function
+       466(r036):     25(ptr) Variable Function
+       469(r038):     25(ptr) Variable Function
+       473(r039):    472(ptr) Variable Function
+       476(r040):    472(ptr) Variable Function
+       479(r041):     25(ptr) Variable Function
+      483(r039a):     25(ptr) Variable Function
+       488(r042):      7(ptr) Variable Function
+       491(r043):     25(ptr) Variable Function
+       494(r044):     25(ptr) Variable Function
+       498(r045):     25(ptr) Variable Function
+       501(r046):     25(ptr) Variable Function
+       505(r047):     25(ptr) Variable Function
+       509(r048):     25(ptr) Variable Function
+       512(r049):     25(ptr) Variable Function
+       516(r050):     25(ptr) Variable Function
+       519(r051):     25(ptr) Variable Function
+       523(r052):     25(ptr) Variable Function
+       527(r053):     25(ptr) Variable Function
+       532(r054):     27(ptr) Variable Function
+       537(r055):     25(ptr) Variable Function
+       540(r056):     25(ptr) Variable Function
+       543(r057):     25(ptr) Variable Function
+       548(r058):     25(ptr) Variable Function
+       551(r059):     25(ptr) Variable Function
+       558(r060):     25(ptr) Variable Function
+       561(r061):     25(ptr) Variable Function
+       566(r062):     25(ptr) Variable Function
+       569(r063):     25(ptr) Variable Function
+       573(r064):     25(ptr) Variable Function
+       576(r065):     25(ptr) Variable Function
+       579(r066):     25(ptr) Variable Function
              344:   24(fvec2) Load 29(inF0)
-             345:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 344
-                              Store 343(r001) 345
-             347:   24(fvec2) Load 29(inF0)
-             348:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 347
-                              Store 346(r002) 348
+             347:  345(bvec2) FOrdNotEqual 344 346
+             348:   135(bool) All 347
+                              Store 343(r000) 348
              350:   24(fvec2) Load 29(inF0)
-             351:  339(bvec2) FOrdNotEqual 350 340
-             352:   135(bool) Any 351
-                              Store 349(r003) 352
-             354:   24(fvec2) Load 29(inF0)
-             355:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 354
-                              Store 353(r004) 355
-             359:   24(fvec2) Load 29(inF0)
-             360:  356(ivec2) Bitcast 359
-                              Store 358(r005) 360
-             362:   24(fvec2) Load 29(inF0)
-             363:   26(ivec2) Bitcast 362
-                              Store 361(r006) 363
-             365:   26(ivec2) Load 32(inU0)
-             366:   24(fvec2) Bitcast 365
-                              Store 364(r007) 366
+             351:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 350
+                              Store 349(r001) 351
+             353:   24(fvec2) Load 29(inF0)
+             354:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 353
+                              Store 352(r002) 354
+             356:   24(fvec2) Load 29(inF0)
+             357:  345(bvec2) FOrdNotEqual 356 346
+             358:   135(bool) Any 357
+                              Store 355(r003) 358
+             360:   24(fvec2) Load 29(inF0)
+             361:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 360
+                              Store 359(r004) 361
+             365:   24(fvec2) Load 29(inF0)
+             366:  362(ivec2) Bitcast 365
+                              Store 364(r005) 366
              368:   24(fvec2) Load 29(inF0)
-             369:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 368
-                              Store 367(r009) 369
-             371:   24(fvec2) Load 29(inF0)
-             372:   24(fvec2) Load 30(inF1)
-             373:   24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 371 372
-                              Store 370(r010) 373
-             375:   24(fvec2) Load 29(inF0)
-             376:   24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 375
-                              Store 374(r011) 376
-             378:   24(fvec2) Load 29(inF0)
-             379:   24(fvec2) Load 30(inF1)
-             380:   24(fvec2) Load 31(inF2)
-             381:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 378 379 380
-                              Store 377(r012) 381
-             382:   24(fvec2) Load 29(inF0)
-             383:  339(bvec2) FOrdLessThan 382 340
-             384:   135(bool) Any 383
-                              SelectionMerge 386 None
-                              BranchConditional 384 385 386
-             385:               Label
+             369:   26(ivec2) Bitcast 368
+                              Store 367(r006) 369
+             371:   26(ivec2) Load 32(inU0)
+             372:   24(fvec2) Bitcast 371
+                              Store 370(r007) 372
+             374:   24(fvec2) Load 29(inF0)
+             375:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 374
+                              Store 373(r009) 375
+             377:   24(fvec2) Load 29(inF0)
+             378:   24(fvec2) Load 30(inF1)
+             379:   24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 377 378
+                              Store 376(r010) 379
+             381:   24(fvec2) Load 29(inF0)
+             382:   24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 381
+                              Store 380(r011) 382
+             384:   24(fvec2) Load 29(inF0)
+             385:   24(fvec2) Load 30(inF1)
+             386:   24(fvec2) Load 31(inF2)
+             387:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 384 385 386
+                              Store 383(r012) 387
+             388:   24(fvec2) Load 29(inF0)
+             389:  345(bvec2) FOrdLessThan 388 346
+             390:   135(bool) Any 389
+                              SelectionMerge 392 None
+                              BranchConditional 390 391 392
+             391:               Label
                                 Kill
-             386:             Label
-             389:   24(fvec2) Load 29(inF0)
-             390:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 389
-                              Store 388(r013) 390
-             392:   24(fvec2) Load 29(inF0)
-             393:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 392
-                              Store 391(r015) 393
-             397:  356(ivec2) BitCount 396
-                              Store 394(r016) 397
-             399:   24(fvec2) Load 29(inF0)
-             400:   24(fvec2) DPdx 399
-                              Store 398(r017) 400
-             402:   24(fvec2) Load 29(inF0)
-             403:   24(fvec2) DPdxCoarse 402
-                              Store 401(r018) 403
-             405:   24(fvec2) Load 29(inF0)
-             406:   24(fvec2) DPdxFine 405
-                              Store 404(r019) 406
-             408:   24(fvec2) Load 29(inF0)
-             409:   24(fvec2) DPdy 408
-                              Store 407(r020) 409
-             411:   24(fvec2) Load 29(inF0)
-             412:   24(fvec2) DPdyCoarse 411
-                              Store 410(r021) 412
-             414:   24(fvec2) Load 29(inF0)
-             415:   24(fvec2) DPdyFine 414
-                              Store 413(r022) 415
-             417:   24(fvec2) Load 29(inF0)
-             418:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 417
-                              Store 416(r023) 418
-             420:   24(fvec2) Load 29(inF0)
-             421:   24(fvec2) Load 30(inF1)
-             422:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 420 421
-                              Store 419(r026) 422
-             424:   24(fvec2) Load 29(inF0)
-             425:   24(fvec2) Load 30(inF1)
-             426:    6(float) Dot 424 425
-                              Store 423(r027) 426
+             392:             Label
+             394:   26(ivec2) Load 32(inU0)
+             397:  345(bvec2) ULessThan 394 396
+             398:   135(bool) Any 397
+                              SelectionMerge 400 None
+                              BranchConditional 398 399 400
+             399:               Label
+                                Kill
+             400:             Label
+             403:   24(fvec2) Load 29(inF0)
+             404:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 403
+                              Store 402(r013) 404
+             406:   24(fvec2) Load 29(inF0)
+             407:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 406
+                              Store 405(r015) 407
+             411:  362(ivec2) BitCount 410
+                              Store 408(r016) 411
+             413:   24(fvec2) Load 29(inF0)
+             414:   24(fvec2) DPdx 413
+                              Store 412(r017) 414
+             416:   24(fvec2) Load 29(inF0)
+             417:   24(fvec2) DPdxCoarse 416
+                              Store 415(r018) 417
+             419:   24(fvec2) Load 29(inF0)
+             420:   24(fvec2) DPdxFine 419
+                              Store 418(r019) 420
+             422:   24(fvec2) Load 29(inF0)
+             423:   24(fvec2) DPdy 422
+                              Store 421(r020) 423
+             425:   24(fvec2) Load 29(inF0)
+             426:   24(fvec2) DPdyCoarse 425
+                              Store 424(r021) 426
              428:   24(fvec2) Load 29(inF0)
-             429:   24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 428
-                              Store 427(r028) 429
+             429:   24(fvec2) DPdyFine 428
+                              Store 427(r022) 429
              431:   24(fvec2) Load 29(inF0)
-             432:   24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 431
-                              Store 430(r029) 432
+             432:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 431
+                              Store 430(r023) 432
              434:   24(fvec2) Load 29(inF0)
              435:   24(fvec2) Load 30(inF1)
-             436:   24(fvec2) Load 31(inF2)
-             437:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 434 435 436
-                              Store 433(r030) 437
-             442:   26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 441
-                              Store 438(r031) 442
-             444:   26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 441
-                              Store 443(r032) 444
-             446:   24(fvec2) Load 29(inF0)
-             447:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 446
-                              Store 445(r033) 447
-             449:   24(fvec2) Load 29(inF0)
-             450:   24(fvec2) Load 30(inF1)
-             451:   24(fvec2) FMod 449 450
-                              Store 448(r035) 451
-             453:   24(fvec2) Load 29(inF0)
-             454:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 453
-                              Store 452(r036) 454
-             456:   24(fvec2) Load 29(inF0)
-             457:   24(fvec2) Fwidth 456
-                              Store 455(r038) 457
+             436:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 434 435
+                              Store 433(r026) 436
+             438:   24(fvec2) Load 29(inF0)
+             439:   24(fvec2) Load 30(inF1)
+             440:    6(float) Dot 438 439
+                              Store 437(r027) 440
+             442:   24(fvec2) Load 29(inF0)
+             443:   24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 442
+                              Store 441(r028) 443
+             445:   24(fvec2) Load 29(inF0)
+             446:   24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 445
+                              Store 444(r029) 446
+             448:   24(fvec2) Load 29(inF0)
+             449:   24(fvec2) Load 30(inF1)
+             450:   24(fvec2) Load 31(inF2)
+             451:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 448 449 450
+                              Store 447(r030) 451
+             456:   26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 455
+                              Store 452(r031) 456
+             458:   26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 455
+                              Store 457(r032) 458
              460:   24(fvec2) Load 29(inF0)
-             461:  339(bvec2) IsInf 460
-                              Store 459(r039) 461
+             461:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 460
+                              Store 459(r033) 461
              463:   24(fvec2) Load 29(inF0)
-             464:  339(bvec2) IsNan 463
-                              Store 462(r040) 464
-             466:   24(fvec2) Load 29(inF0)
-             467:   24(fvec2) Load 30(inF1)
-             468:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 466 467
-                              Store 465(r041) 468
+             464:   24(fvec2) Load 30(inF1)
+             465:   24(fvec2) FMod 463 464
+                              Store 462(r035) 465
+             467:   24(fvec2) Load 29(inF0)
+             468:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 467
+                              Store 466(r036) 468
              470:   24(fvec2) Load 29(inF0)
-             471:   24(fvec2) Load 30(inF1)
-             472:   24(fvec2) Load 31(inF2)
-             473:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 470 471 472
-                              Store 469(r039a) 473
-             475:   24(fvec2) Load 29(inF0)
-             476:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 475
-                              Store 474(r042) 476
-             478:   24(fvec2) Load 29(inF0)
-             479:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 478
-                              Store 477(r043) 479
-             481:   24(fvec2) Load 29(inF0)
-             482:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 481
-             483:   24(fvec2) VectorTimesScalar 482 262
-                              Store 480(r044) 483
-             485:   24(fvec2) Load 29(inF0)
-             486:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 485
-                              Store 484(r045) 486
-             488:   24(fvec2) Load 29(inF0)
-             489:   24(fvec2) Load 30(inF1)
-             490:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 488 489
-                              Store 487(r046) 490
+             471:   24(fvec2) Fwidth 470
+                              Store 469(r038) 471
+             474:   24(fvec2) Load 29(inF0)
+             475:  345(bvec2) IsInf 474
+                              Store 473(r039) 475
+             477:   24(fvec2) Load 29(inF0)
+             478:  345(bvec2) IsNan 477
+                              Store 476(r040) 478
+             480:   24(fvec2) Load 29(inF0)
+             481:   24(fvec2) Load 30(inF1)
+             482:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 480 481
+                              Store 479(r041) 482
+             484:   24(fvec2) Load 29(inF0)
+             485:   24(fvec2) Load 30(inF1)
+             486:   24(fvec2) Load 31(inF2)
+             487:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 484 485 486
+                              Store 483(r039a) 487
+             489:   24(fvec2) Load 29(inF0)
+             490:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 489
+                              Store 488(r042) 490
              492:   24(fvec2) Load 29(inF0)
-             493:   24(fvec2) Load 30(inF1)
-             494:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 492 493
-                              Store 491(r047) 494
-             496:   24(fvec2) Load 29(inF0)
-             497:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 496
-                              Store 495(r048) 497
+             493:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 492
+                              Store 491(r043) 493
+             495:   24(fvec2) Load 29(inF0)
+             496:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 495
+             497:   24(fvec2) VectorTimesScalar 496 268
+                              Store 494(r044) 497
              499:   24(fvec2) Load 29(inF0)
-             500:   24(fvec2) Load 30(inF1)
-             501:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 499 500
-                              Store 498(r049) 501
-             503:   24(fvec2) Load 29(inF0)
-             504:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 503
-                              Store 502(r050) 504
+             500:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 499
+                              Store 498(r045) 500
+             502:   24(fvec2) Load 29(inF0)
+             503:   24(fvec2) Load 30(inF1)
+             504:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 502 503
+                              Store 501(r046) 504
              506:   24(fvec2) Load 29(inF0)
-             507:   24(fvec2) CompositeConstruct 283 283
-             508:   24(fvec2) FDiv 507 506
-                              Store 505(r051) 508
+             507:   24(fvec2) Load 30(inF1)
+             508:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 506 507
+                              Store 505(r047) 508
              510:   24(fvec2) Load 29(inF0)
-             511:   24(fvec2) Load 30(inF1)
-             512:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 510 511
-                              Store 509(r052) 512
-             514:   24(fvec2) Load 29(inF0)
-             515:   24(fvec2) Load 30(inF1)
-             517:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 514 515 516
-                              Store 513(r053) 517
-             522:   26(ivec2) BitReverse 521
-                              Store 518(r054) 522
+             511:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 510
+                              Store 509(r048) 511
+             513:   24(fvec2) Load 29(inF0)
+             514:   24(fvec2) Load 30(inF1)
+             515:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 513 514
+                              Store 512(r049) 515
+             517:   24(fvec2) Load 29(inF0)
+             518:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 517
+                              Store 516(r050) 518
+             520:   24(fvec2) Load 29(inF0)
+             521:   24(fvec2) CompositeConstruct 289 289
+             522:   24(fvec2) FDiv 521 520
+                              Store 519(r051) 522
              524:   24(fvec2) Load 29(inF0)
-             525:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 524
-                              Store 523(r055) 525
-             527:   24(fvec2) Load 29(inF0)
-             528:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 527
-                              Store 526(r056) 528
-             530:   24(fvec2) Load 29(inF0)
-             531:   24(fvec2) CompositeConstruct 139 139
-             532:   24(fvec2) CompositeConstruct 283 283
-             533:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 530 531 532
-                              Store 529(r057) 533
-             535:   24(fvec2) Load 29(inF0)
-             536:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 535
-                              Store 534(r058) 536
+             525:   24(fvec2) Load 30(inF1)
+             526:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 524 525
+                              Store 523(r052) 526
+             528:   24(fvec2) Load 29(inF0)
+             529:   24(fvec2) Load 30(inF1)
+             531:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 528 529 530
+                              Store 527(r053) 531
+             536:   26(ivec2) BitReverse 535
+                              Store 532(r054) 536
              538:   24(fvec2) Load 29(inF0)
-             539:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 538
-                              Store 537(r059) 539
-             540:   24(fvec2) Load 29(inF0)
-             541:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 540
-                              Store 30(inF1) 541
-             542:   24(fvec2) Load 29(inF0)
-             543:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 542
-                              Store 31(inF2) 543
-             545:   24(fvec2) Load 29(inF0)
-             546:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 545
-                              Store 544(r060) 546
-             548:   24(fvec2) Load 29(inF0)
-             549:   24(fvec2) Load 30(inF1)
-             550:   24(fvec2) Load 31(inF2)
-             551:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 548 549 550
-                              Store 547(r061) 551
-             553:   24(fvec2) Load 29(inF0)
-             554:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 553
-                              Store 552(r062) 554
+             539:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 538
+                              Store 537(r055) 539
+             541:   24(fvec2) Load 29(inF0)
+             542:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 541
+                              Store 540(r056) 542
+             544:   24(fvec2) Load 29(inF0)
+             545:   24(fvec2) CompositeConstruct 139 139
+             546:   24(fvec2) CompositeConstruct 289 289
+             547:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 544 545 546
+                              Store 543(r057) 547
+             549:   24(fvec2) Load 29(inF0)
+             550:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 549
+                              Store 548(r058) 550
+             552:   24(fvec2) Load 29(inF0)
+             553:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 552
+                              Store 551(r059) 553
+             554:   24(fvec2) Load 29(inF0)
+             555:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 554
+                              Store 30(inF1) 555
              556:   24(fvec2) Load 29(inF0)
-             557:   24(fvec2) Load 30(inF1)
-             558:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 556 557
-                              Store 555(r063) 558
-             560:   24(fvec2) Load 29(inF0)
-             561:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 560
-                              Store 559(r064) 561
-             563:   24(fvec2) Load 29(inF0)
-             564:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 563
-                              Store 562(r065) 564
-             566:   24(fvec2) Load 29(inF0)
-             567:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 566
-                              Store 565(r066) 567
-                              ReturnValue 568
+             557:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 556
+                              Store 31(inF2) 557
+             559:   24(fvec2) Load 29(inF0)
+             560:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 559
+                              Store 558(r060) 560
+             562:   24(fvec2) Load 29(inF0)
+             563:   24(fvec2) Load 30(inF1)
+             564:   24(fvec2) Load 31(inF2)
+             565:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 562 563 564
+                              Store 561(r061) 565
+             567:   24(fvec2) Load 29(inF0)
+             568:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 567
+                              Store 566(r062) 568
+             570:   24(fvec2) Load 29(inF0)
+             571:   24(fvec2) Load 30(inF1)
+             572:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 570 571
+                              Store 569(r063) 572
+             574:   24(fvec2) Load 29(inF0)
+             575:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 574
+                              Store 573(r064) 575
+             577:   24(fvec2) Load 29(inF0)
+             578:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 577
+                              Store 576(r065) 578
+             580:   24(fvec2) Load 29(inF0)
+             581:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 580
+                              Store 579(r066) 581
+                              ReturnValue 582
                               FunctionEnd
 46(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
         41(inF0):     37(ptr) FunctionParameter
@@ -6772,301 +6873,309 @@
         44(inU0):     39(ptr) FunctionParameter
         45(inU1):     39(ptr) FunctionParameter
               47:             Label
-       571(r000):    136(ptr) Variable Function
-       577(r001):     37(ptr) Variable Function
-       580(r002):     37(ptr) Variable Function
-       583(r003):    136(ptr) Variable Function
-       587(r004):     37(ptr) Variable Function
-       592(r005):    591(ptr) Variable Function
-       595(r006):     39(ptr) Variable Function
-       598(r007):     37(ptr) Variable Function
-       601(r009):     37(ptr) Variable Function
-       604(r010):     37(ptr) Variable Function
-       608(r011):     37(ptr) Variable Function
-       611(r012):     37(ptr) Variable Function
-       622(r013):     37(ptr) Variable Function
-       625(r014):     37(ptr) Variable Function
-       628(r015):     39(ptr) Variable Function
-       633(r016):     37(ptr) Variable Function
-       637(r017):     37(ptr) Variable Function
-       640(r018):     37(ptr) Variable Function
-       643(r019):     37(ptr) Variable Function
-       646(r020):     37(ptr) Variable Function
-       649(r021):     37(ptr) Variable Function
-       652(r022):     37(ptr) Variable Function
-       655(r023):     37(ptr) Variable Function
-       658(r024):      7(ptr) Variable Function
-       662(r025):      7(ptr) Variable Function
-       666(r029):     37(ptr) Variable Function
-       669(r030):     37(ptr) Variable Function
-       672(r031):     37(ptr) Variable Function
-       677(r032):     39(ptr) Variable Function
-       681(r033):     39(ptr) Variable Function
-       683(r034):     37(ptr) Variable Function
-       686(r036):     37(ptr) Variable Function
-       690(r037):     37(ptr) Variable Function
-       693(r039):     37(ptr) Variable Function
-       697(r040):    696(ptr) Variable Function
-       700(r041):    696(ptr) Variable Function
-       703(r042):     37(ptr) Variable Function
-      707(r039a):     37(ptr) Variable Function
-      712(r039b):     37(ptr) Variable Function
-       718(r043):      7(ptr) Variable Function
-       721(r044):     37(ptr) Variable Function
-       724(r045):     37(ptr) Variable Function
-       728(r046):     37(ptr) Variable Function
-       731(r047):     37(ptr) Variable Function
-       735(r048):     37(ptr) Variable Function
-       739(r049):     37(ptr) Variable Function
-       742(r050):     37(ptr) Variable Function
-       746(r051):     37(ptr) Variable Function
-       749(r052):     37(ptr) Variable Function
-       753(r053):     37(ptr) Variable Function
-       757(r054):     37(ptr) Variable Function
-       761(r055):     39(ptr) Variable Function
-       764(r056):     37(ptr) Variable Function
-       767(r057):     37(ptr) Variable Function
-       770(r058):     37(ptr) Variable Function
-       775(r059):     37(ptr) Variable Function
-       778(r060):     37(ptr) Variable Function
-       785(r061):     37(ptr) Variable Function
-       788(r062):     37(ptr) Variable Function
-       793(r063):     37(ptr) Variable Function
-       796(r064):     37(ptr) Variable Function
-       800(r065):     37(ptr) Variable Function
-       803(r066):     37(ptr) Variable Function
-       806(r067):     37(ptr) Variable Function
-             572:   36(fvec3) Load 41(inF0)
-             575:  573(bvec3) FOrdNotEqual 572 574
-             576:   135(bool) All 575
-                              Store 571(r000) 576
-             578:   36(fvec3) Load 41(inF0)
-             579:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 578
-                              Store 577(r001) 579
-             581:   36(fvec3) Load 41(inF0)
-             582:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 581
-                              Store 580(r002) 582
-             584:   36(fvec3) Load 41(inF0)
-             585:  573(bvec3) FOrdNotEqual 584 574
-             586:   135(bool) Any 585
-                              Store 583(r003) 586
-             588:   36(fvec3) Load 41(inF0)
-             589:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 588
-                              Store 587(r004) 589
-             593:   36(fvec3) Load 41(inF0)
-             594:  590(ivec3) Bitcast 593
-                              Store 592(r005) 594
-             596:   36(fvec3) Load 41(inF0)
-             597:   38(ivec3) Bitcast 596
-                              Store 595(r006) 597
-             599:   38(ivec3) Load 44(inU0)
-             600:   36(fvec3) Bitcast 599
-                              Store 598(r007) 600
+       585(r000):    136(ptr) Variable Function
+       591(r001):     37(ptr) Variable Function
+       594(r002):     37(ptr) Variable Function
+       597(r003):    136(ptr) Variable Function
+       601(r004):     37(ptr) Variable Function
+       606(r005):    605(ptr) Variable Function
+       609(r006):     39(ptr) Variable Function
+       612(r007):     37(ptr) Variable Function
+       615(r009):     37(ptr) Variable Function
+       618(r010):     37(ptr) Variable Function
+       622(r011):     37(ptr) Variable Function
+       625(r012):     37(ptr) Variable Function
+       643(r013):     37(ptr) Variable Function
+       646(r014):     37(ptr) Variable Function
+       649(r015):     39(ptr) Variable Function
+       654(r016):     37(ptr) Variable Function
+       658(r017):     37(ptr) Variable Function
+       661(r018):     37(ptr) Variable Function
+       664(r019):     37(ptr) Variable Function
+       667(r020):     37(ptr) Variable Function
+       670(r021):     37(ptr) Variable Function
+       673(r022):     37(ptr) Variable Function
+       676(r023):     37(ptr) Variable Function
+       679(r024):      7(ptr) Variable Function
+       683(r025):      7(ptr) Variable Function
+       687(r029):     37(ptr) Variable Function
+       690(r030):     37(ptr) Variable Function
+       693(r031):     37(ptr) Variable Function
+       698(r032):     39(ptr) Variable Function
+       702(r033):     39(ptr) Variable Function
+       704(r034):     37(ptr) Variable Function
+       707(r036):     37(ptr) Variable Function
+       711(r037):     37(ptr) Variable Function
+       714(r039):     37(ptr) Variable Function
+       718(r040):    717(ptr) Variable Function
+       721(r041):    717(ptr) Variable Function
+       724(r042):     37(ptr) Variable Function
+      728(r039a):     37(ptr) Variable Function
+      733(r039b):     37(ptr) Variable Function
+       739(r043):      7(ptr) Variable Function
+       742(r044):     37(ptr) Variable Function
+       745(r045):     37(ptr) Variable Function
+       749(r046):     37(ptr) Variable Function
+       752(r047):     37(ptr) Variable Function
+       756(r048):     37(ptr) Variable Function
+       760(r049):     37(ptr) Variable Function
+       763(r050):     37(ptr) Variable Function
+       767(r051):     37(ptr) Variable Function
+       770(r052):     37(ptr) Variable Function
+       774(r053):     37(ptr) Variable Function
+       778(r054):     37(ptr) Variable Function
+       782(r055):     39(ptr) Variable Function
+       785(r056):     37(ptr) Variable Function
+       788(r057):     37(ptr) Variable Function
+       791(r058):     37(ptr) Variable Function
+       796(r059):     37(ptr) Variable Function
+       799(r060):     37(ptr) Variable Function
+       806(r061):     37(ptr) Variable Function
+       809(r062):     37(ptr) Variable Function
+       814(r063):     37(ptr) Variable Function
+       817(r064):     37(ptr) Variable Function
+       821(r065):     37(ptr) Variable Function
+       824(r066):     37(ptr) Variable Function
+       827(r067):     37(ptr) Variable Function
+             586:   36(fvec3) Load 41(inF0)
+             589:  587(bvec3) FOrdNotEqual 586 588
+             590:   135(bool) All 589
+                              Store 585(r000) 590
+             592:   36(fvec3) Load 41(inF0)
+             593:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 592
+                              Store 591(r001) 593
+             595:   36(fvec3) Load 41(inF0)
+             596:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 595
+                              Store 594(r002) 596
+             598:   36(fvec3) Load 41(inF0)
+             599:  587(bvec3) FOrdNotEqual 598 588
+             600:   135(bool) Any 599
+                              Store 597(r003) 600
              602:   36(fvec3) Load 41(inF0)
-             603:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 602
-                              Store 601(r009) 603
-             605:   36(fvec3) Load 41(inF0)
-             606:   36(fvec3) Load 42(inF1)
-             607:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 605 606
-                              Store 604(r010) 607
-             609:   36(fvec3) Load 41(inF0)
-             610:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 609
-                              Store 608(r011) 610
-             612:   36(fvec3) Load 41(inF0)
-             613:   36(fvec3) Load 42(inF1)
-             614:   36(fvec3) Load 43(inF2)
-             615:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 612 613 614
-                              Store 611(r012) 615
+             603:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 602
+                              Store 601(r004) 603
+             607:   36(fvec3) Load 41(inF0)
+             608:  604(ivec3) Bitcast 607
+                              Store 606(r005) 608
+             610:   36(fvec3) Load 41(inF0)
+             611:   38(ivec3) Bitcast 610
+                              Store 609(r006) 611
+             613:   38(ivec3) Load 44(inU0)
+             614:   36(fvec3) Bitcast 613
+                              Store 612(r007) 614
              616:   36(fvec3) Load 41(inF0)
-             617:  573(bvec3) FOrdLessThan 616 574
-             618:   135(bool) Any 617
-                              SelectionMerge 620 None
-                              BranchConditional 618 619 620
-             619:               Label
-                                Kill
-             620:             Label
+             617:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 616
+                              Store 615(r009) 617
+             619:   36(fvec3) Load 41(inF0)
+             620:   36(fvec3) Load 42(inF1)
+             621:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 619 620
+                              Store 618(r010) 621
              623:   36(fvec3) Load 41(inF0)
-             624:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 623
-                              Store 622(r013) 624
+             624:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 623
+                              Store 622(r011) 624
              626:   36(fvec3) Load 41(inF0)
-             627:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 626
-                              Store 625(r014) 627
-             632:   38(ivec3) BitCount 631
-                              Store 628(r015) 632
-             634:   36(fvec3) Load 41(inF0)
-             635:   36(fvec3) Load 42(inF1)
-             636:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 634 635
-                              Store 633(r016) 636
-             638:   36(fvec3) Load 41(inF0)
-             639:   36(fvec3) DPdx 638
-                              Store 637(r017) 639
-             641:   36(fvec3) Load 41(inF0)
-             642:   36(fvec3) DPdxCoarse 641
-                              Store 640(r018) 642
+             627:   36(fvec3) Load 42(inF1)
+             628:   36(fvec3) Load 43(inF2)
+             629:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 626 627 628
+                              Store 625(r012) 629
+             630:   36(fvec3) Load 41(inF0)
+             631:  587(bvec3) FOrdLessThan 630 588
+             632:   135(bool) Any 631
+                              SelectionMerge 634 None
+                              BranchConditional 632 633 634
+             633:               Label
+                                Kill
+             634:             Label
+             636:   38(ivec3) Load 44(inU0)
+             638:  587(bvec3) ULessThan 636 637
+             639:   135(bool) Any 638
+                              SelectionMerge 641 None
+                              BranchConditional 639 640 641
+             640:               Label
+                                Kill
+             641:             Label
              644:   36(fvec3) Load 41(inF0)
-             645:   36(fvec3) DPdxFine 644
-                              Store 643(r019) 645
+             645:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 644
+                              Store 643(r013) 645
              647:   36(fvec3) Load 41(inF0)
-             648:   36(fvec3) DPdy 647
-                              Store 646(r020) 648
-             650:   36(fvec3) Load 41(inF0)
-             651:   36(fvec3) DPdyCoarse 650
-                              Store 649(r021) 651
-             653:   36(fvec3) Load 41(inF0)
-             654:   36(fvec3) DPdyFine 653
-                              Store 652(r022) 654
-             656:   36(fvec3) Load 41(inF0)
-             657:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 656
-                              Store 655(r023) 657
+             648:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 647
+                              Store 646(r014) 648
+             653:   38(ivec3) BitCount 652
+                              Store 649(r015) 653
+             655:   36(fvec3) Load 41(inF0)
+             656:   36(fvec3) Load 42(inF1)
+             657:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 655 656
+                              Store 654(r016) 657
              659:   36(fvec3) Load 41(inF0)
-             660:   36(fvec3) Load 42(inF1)
-             661:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 659 660
-                              Store 658(r024) 661
-             663:   36(fvec3) Load 41(inF0)
-             664:   36(fvec3) Load 42(inF1)
-             665:    6(float) Dot 663 664
-                              Store 662(r025) 665
-             667:   36(fvec3) Load 41(inF0)
-             668:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 667
-                              Store 666(r029) 668
-             670:   36(fvec3) Load 41(inF0)
-             671:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 670
-                              Store 669(r030) 671
-             673:   36(fvec3) Load 41(inF0)
-             674:   36(fvec3) Load 42(inF1)
-             675:   36(fvec3) Load 43(inF2)
-             676:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 673 674 675
-                              Store 672(r031) 676
-             680:   38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 679
-                              Store 677(r032) 680
-             682:   38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 679
-                              Store 681(r033) 682
+             660:   36(fvec3) DPdx 659
+                              Store 658(r017) 660
+             662:   36(fvec3) Load 41(inF0)
+             663:   36(fvec3) DPdxCoarse 662
+                              Store 661(r018) 663
+             665:   36(fvec3) Load 41(inF0)
+             666:   36(fvec3) DPdxFine 665
+                              Store 664(r019) 666
+             668:   36(fvec3) Load 41(inF0)
+             669:   36(fvec3) DPdy 668
+                              Store 667(r020) 669
+             671:   36(fvec3) Load 41(inF0)
+             672:   36(fvec3) DPdyCoarse 671
+                              Store 670(r021) 672
+             674:   36(fvec3) Load 41(inF0)
+             675:   36(fvec3) DPdyFine 674
+                              Store 673(r022) 675
+             677:   36(fvec3) Load 41(inF0)
+             678:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 677
+                              Store 676(r023) 678
+             680:   36(fvec3) Load 41(inF0)
+             681:   36(fvec3) Load 42(inF1)
+             682:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 680 681
+                              Store 679(r024) 682
              684:   36(fvec3) Load 41(inF0)
-             685:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 684
-                              Store 683(r034) 685
-             687:   36(fvec3) Load 41(inF0)
-             688:   36(fvec3) Load 42(inF1)
-             689:   36(fvec3) FMod 687 688
-                              Store 686(r036) 689
+             685:   36(fvec3) Load 42(inF1)
+             686:    6(float) Dot 684 685
+                              Store 683(r025) 686
+             688:   36(fvec3) Load 41(inF0)
+             689:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 688
+                              Store 687(r029) 689
              691:   36(fvec3) Load 41(inF0)
-             692:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 691
-                              Store 690(r037) 692
+             692:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 691
+                              Store 690(r030) 692
              694:   36(fvec3) Load 41(inF0)
-             695:   36(fvec3) Fwidth 694
-                              Store 693(r039) 695
-             698:   36(fvec3) Load 41(inF0)
-             699:  573(bvec3) IsInf 698
-                              Store 697(r040) 699
-             701:   36(fvec3) Load 41(inF0)
-             702:  573(bvec3) IsNan 701
-                              Store 700(r041) 702
-             704:   36(fvec3) Load 41(inF0)
-             705:   36(fvec3) Load 42(inF1)
-             706:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 704 705
-                              Store 703(r042) 706
+             695:   36(fvec3) Load 42(inF1)
+             696:   36(fvec3) Load 43(inF2)
+             697:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 694 695 696
+                              Store 693(r031) 697
+             701:   38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 700
+                              Store 698(r032) 701
+             703:   38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 700
+                              Store 702(r033) 703
+             705:   36(fvec3) Load 41(inF0)
+             706:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 705
+                              Store 704(r034) 706
              708:   36(fvec3) Load 41(inF0)
              709:   36(fvec3) Load 42(inF1)
-             710:   36(fvec3) Load 43(inF2)
-             711:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 708 709 710
-                              Store 707(r039a) 711
-             713:   36(fvec3) Load 41(inF0)
-             714:   36(fvec3) Load 42(inF1)
-             716:   36(fvec3) CompositeConstruct 715 715 715
-             717:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 713 714 716
-                              Store 712(r039b) 717
+             710:   36(fvec3) FMod 708 709
+                              Store 707(r036) 710
+             712:   36(fvec3) Load 41(inF0)
+             713:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 712
+                              Store 711(r037) 713
+             715:   36(fvec3) Load 41(inF0)
+             716:   36(fvec3) Fwidth 715
+                              Store 714(r039) 716
              719:   36(fvec3) Load 41(inF0)
-             720:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 719
-                              Store 718(r043) 720
+             720:  587(bvec3) IsInf 719
+                              Store 718(r040) 720
              722:   36(fvec3) Load 41(inF0)
-             723:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 722
-                              Store 721(r044) 723
+             723:  587(bvec3) IsNan 722
+                              Store 721(r041) 723
              725:   36(fvec3) Load 41(inF0)
-             726:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 725
-             727:   36(fvec3) VectorTimesScalar 726 262
-                              Store 724(r045) 727
+             726:   36(fvec3) Load 42(inF1)
+             727:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 725 726
+                              Store 724(r042) 727
              729:   36(fvec3) Load 41(inF0)
-             730:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 729
-                              Store 728(r046) 730
-             732:   36(fvec3) Load 41(inF0)
-             733:   36(fvec3) Load 42(inF1)
-             734:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 732 733
-                              Store 731(r047) 734
-             736:   36(fvec3) Load 41(inF0)
-             737:   36(fvec3) Load 42(inF1)
-             738:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 736 737
-                              Store 735(r048) 738
+             730:   36(fvec3) Load 42(inF1)
+             731:   36(fvec3) Load 43(inF2)
+             732:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 729 730 731
+                              Store 728(r039a) 732
+             734:   36(fvec3) Load 41(inF0)
+             735:   36(fvec3) Load 42(inF1)
+             737:   36(fvec3) CompositeConstruct 736 736 736
+             738:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 734 735 737
+                              Store 733(r039b) 738
              740:   36(fvec3) Load 41(inF0)
-             741:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 740
-                              Store 739(r049) 741
+             741:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 740
+                              Store 739(r043) 741
              743:   36(fvec3) Load 41(inF0)
-             744:   36(fvec3) Load 42(inF1)
-             745:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 743 744
-                              Store 742(r050) 745
-             747:   36(fvec3) Load 41(inF0)
-             748:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 747
-                              Store 746(r051) 748
+             744:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 743
+                              Store 742(r044) 744
+             746:   36(fvec3) Load 41(inF0)
+             747:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 746
+             748:   36(fvec3) VectorTimesScalar 747 268
+                              Store 745(r045) 748
              750:   36(fvec3) Load 41(inF0)
-             751:   36(fvec3) CompositeConstruct 283 283 283
-             752:   36(fvec3) FDiv 751 750
-                              Store 749(r052) 752
-             754:   36(fvec3) Load 41(inF0)
-             755:   36(fvec3) Load 42(inF1)
-             756:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 754 755
-                              Store 753(r053) 756
-             758:   36(fvec3) Load 41(inF0)
-             759:   36(fvec3) Load 42(inF1)
-             760:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 758 759 516
-                              Store 757(r054) 760
-             763:   38(ivec3) BitReverse 762
-                              Store 761(r055) 763
-             765:   36(fvec3) Load 41(inF0)
-             766:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 765
-                              Store 764(r056) 766
+             751:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 750
+                              Store 749(r046) 751
+             753:   36(fvec3) Load 41(inF0)
+             754:   36(fvec3) Load 42(inF1)
+             755:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 753 754
+                              Store 752(r047) 755
+             757:   36(fvec3) Load 41(inF0)
+             758:   36(fvec3) Load 42(inF1)
+             759:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 757 758
+                              Store 756(r048) 759
+             761:   36(fvec3) Load 41(inF0)
+             762:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 761
+                              Store 760(r049) 762
+             764:   36(fvec3) Load 41(inF0)
+             765:   36(fvec3) Load 42(inF1)
+             766:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 764 765
+                              Store 763(r050) 766
              768:   36(fvec3) Load 41(inF0)
-             769:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 768
-                              Store 767(r057) 769
+             769:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 768
+                              Store 767(r051) 769
              771:   36(fvec3) Load 41(inF0)
-             772:   36(fvec3) CompositeConstruct 139 139 139
-             773:   36(fvec3) CompositeConstruct 283 283 283
-             774:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 771 772 773
-                              Store 770(r058) 774
-             776:   36(fvec3) Load 41(inF0)
-             777:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 776
-                              Store 775(r059) 777
+             772:   36(fvec3) CompositeConstruct 289 289 289
+             773:   36(fvec3) FDiv 772 771
+                              Store 770(r052) 773
+             775:   36(fvec3) Load 41(inF0)
+             776:   36(fvec3) Load 42(inF1)
+             777:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 775 776
+                              Store 774(r053) 777
              779:   36(fvec3) Load 41(inF0)
-             780:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 779
-                              Store 778(r060) 780
-             781:   36(fvec3) Load 41(inF0)
-             782:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 781
-                              Store 42(inF1) 782
-             783:   36(fvec3) Load 41(inF0)
-             784:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 783
-                              Store 43(inF2) 784
+             780:   36(fvec3) Load 42(inF1)
+             781:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 779 780 530
+                              Store 778(r054) 781
+             784:   38(ivec3) BitReverse 783
+                              Store 782(r055) 784
              786:   36(fvec3) Load 41(inF0)
-             787:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 786
-                              Store 785(r061) 787
+             787:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 786
+                              Store 785(r056) 787
              789:   36(fvec3) Load 41(inF0)
-             790:   36(fvec3) Load 42(inF1)
-             791:   36(fvec3) Load 43(inF2)
-             792:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 789 790 791
-                              Store 788(r062) 792
-             794:   36(fvec3) Load 41(inF0)
-             795:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 794
-                              Store 793(r063) 795
+             790:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 789
+                              Store 788(r057) 790
+             792:   36(fvec3) Load 41(inF0)
+             793:   36(fvec3) CompositeConstruct 139 139 139
+             794:   36(fvec3) CompositeConstruct 289 289 289
+             795:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 792 793 794
+                              Store 791(r058) 795
              797:   36(fvec3) Load 41(inF0)
-             798:   36(fvec3) Load 42(inF1)
-             799:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 797 798
-                              Store 796(r064) 799
-             801:   36(fvec3) Load 41(inF0)
-             802:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 801
-                              Store 800(r065) 802
+             798:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 797
+                              Store 796(r059) 798
+             800:   36(fvec3) Load 41(inF0)
+             801:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 800
+                              Store 799(r060) 801
+             802:   36(fvec3) Load 41(inF0)
+             803:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 802
+                              Store 42(inF1) 803
              804:   36(fvec3) Load 41(inF0)
-             805:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 804
-                              Store 803(r066) 805
+             805:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 804
+                              Store 43(inF2) 805
              807:   36(fvec3) Load 41(inF0)
-             808:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 807
-                              Store 806(r067) 808
-                              ReturnValue 810
+             808:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 807
+                              Store 806(r061) 808
+             810:   36(fvec3) Load 41(inF0)
+             811:   36(fvec3) Load 42(inF1)
+             812:   36(fvec3) Load 43(inF2)
+             813:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 810 811 812
+                              Store 809(r062) 813
+             815:   36(fvec3) Load 41(inF0)
+             816:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 815
+                              Store 814(r063) 816
+             818:   36(fvec3) Load 41(inF0)
+             819:   36(fvec3) Load 42(inF1)
+             820:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 818 819
+                              Store 817(r064) 820
+             822:   36(fvec3) Load 41(inF0)
+             823:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 822
+                              Store 821(r065) 823
+             825:   36(fvec3) Load 41(inF0)
+             826:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 825
+                              Store 824(r066) 826
+             828:   36(fvec3) Load 41(inF0)
+             829:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 828
+                              Store 827(r067) 829
+                              ReturnValue 831
                               FunctionEnd
 58(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;):   48(fvec4) Function None 52
         53(inF0):     49(ptr) FunctionParameter
@@ -7075,998 +7184,1006 @@
         56(inU0):     51(ptr) FunctionParameter
         57(inU1):     51(ptr) FunctionParameter
               59:             Label
-       813(r000):    136(ptr) Variable Function
-       819(r001):     49(ptr) Variable Function
-       822(r002):     49(ptr) Variable Function
-       825(r003):    136(ptr) Variable Function
-       829(r004):     49(ptr) Variable Function
-       834(r005):    833(ptr) Variable Function
-       837(r006):     51(ptr) Variable Function
-       840(r007):     49(ptr) Variable Function
-       843(r009):     49(ptr) Variable Function
-       846(r010):     49(ptr) Variable Function
-       850(r011):     49(ptr) Variable Function
-       853(r012):     49(ptr) Variable Function
-       864(r013):     49(ptr) Variable Function
-       867(r014):     49(ptr) Variable Function
-       870(r015):     51(ptr) Variable Function
-       873(r016):     49(ptr) Variable Function
-       876(r017):     49(ptr) Variable Function
-       879(r018):     49(ptr) Variable Function
-       882(r019):     49(ptr) Variable Function
-       885(r020):     49(ptr) Variable Function
-       888(r021):     49(ptr) Variable Function
-       891(r022):     49(ptr) Variable Function
-       894(r023):      7(ptr) Variable Function
-       898(r024):      7(ptr) Variable Function
-       902(r025):     49(ptr) Variable Function
-       913(r029):     49(ptr) Variable Function
-       916(r030):     49(ptr) Variable Function
-       919(r031):     49(ptr) Variable Function
-       924(r032):     51(ptr) Variable Function
-       929(r033):     51(ptr) Variable Function
-       931(r034):     49(ptr) Variable Function
-       934(r036):     49(ptr) Variable Function
-       938(r037):     49(ptr) Variable Function
-       941(r039):     49(ptr) Variable Function
-       945(r040):    944(ptr) Variable Function
-       948(r041):    944(ptr) Variable Function
-       951(r042):     49(ptr) Variable Function
-      955(r039a):     49(ptr) Variable Function
-       960(r043):      7(ptr) Variable Function
-       963(r044):     49(ptr) Variable Function
-       966(r045):     49(ptr) Variable Function
-       970(r046):     49(ptr) Variable Function
-       973(r047):     49(ptr) Variable Function
-       977(r048):     49(ptr) Variable Function
-       981(r049):     49(ptr) Variable Function
-       984(r050):     49(ptr) Variable Function
-       988(r051):     49(ptr) Variable Function
-       991(r052):     49(ptr) Variable Function
-       995(r053):     49(ptr) Variable Function
-       999(r054):     49(ptr) Variable Function
-      1003(r055):     51(ptr) Variable Function
-      1006(r056):     49(ptr) Variable Function
-      1009(r057):     49(ptr) Variable Function
-      1012(r058):     49(ptr) Variable Function
-      1017(r059):     49(ptr) Variable Function
-      1020(r060):     49(ptr) Variable Function
-      1027(r061):     49(ptr) Variable Function
-      1030(r062):     49(ptr) Variable Function
-      1035(r063):     49(ptr) Variable Function
-      1038(r064):     49(ptr) Variable Function
-      1042(r065):     49(ptr) Variable Function
-      1045(r066):     49(ptr) Variable Function
-      1048(r067):     49(ptr) Variable Function
-             814:   48(fvec4) Load 53(inF0)
-             817:  815(bvec4) FOrdNotEqual 814 816
-             818:   135(bool) All 817
-                              Store 813(r000) 818
-             820:   48(fvec4) Load 53(inF0)
-             821:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 820
-                              Store 819(r001) 821
-             823:   48(fvec4) Load 53(inF0)
-             824:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 823
-                              Store 822(r002) 824
-             826:   48(fvec4) Load 53(inF0)
-             827:  815(bvec4) FOrdNotEqual 826 816
-             828:   135(bool) Any 827
-                              Store 825(r003) 828
-             830:   48(fvec4) Load 53(inF0)
-             831:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 830
-                              Store 829(r004) 831
+       834(r000):    136(ptr) Variable Function
+       840(r001):     49(ptr) Variable Function
+       843(r002):     49(ptr) Variable Function
+       846(r003):    136(ptr) Variable Function
+       850(r004):     49(ptr) Variable Function
+       855(r005):    854(ptr) Variable Function
+       858(r006):     51(ptr) Variable Function
+       861(r007):     49(ptr) Variable Function
+       864(r009):     49(ptr) Variable Function
+       867(r010):     49(ptr) Variable Function
+       871(r011):     49(ptr) Variable Function
+       874(r012):     49(ptr) Variable Function
+       892(r013):     49(ptr) Variable Function
+       895(r014):     49(ptr) Variable Function
+       898(r015):     51(ptr) Variable Function
+       901(r016):     49(ptr) Variable Function
+       904(r017):     49(ptr) Variable Function
+       907(r018):     49(ptr) Variable Function
+       910(r019):     49(ptr) Variable Function
+       913(r020):     49(ptr) Variable Function
+       916(r021):     49(ptr) Variable Function
+       919(r022):     49(ptr) Variable Function
+       922(r023):      7(ptr) Variable Function
+       926(r024):      7(ptr) Variable Function
+       930(r025):     49(ptr) Variable Function
+       941(r029):     49(ptr) Variable Function
+       944(r030):     49(ptr) Variable Function
+       947(r031):     49(ptr) Variable Function
+       952(r032):     51(ptr) Variable Function
+       957(r033):     51(ptr) Variable Function
+       959(r034):     49(ptr) Variable Function
+       962(r036):     49(ptr) Variable Function
+       966(r037):     49(ptr) Variable Function
+       969(r039):     49(ptr) Variable Function
+       973(r040):    972(ptr) Variable Function
+       976(r041):    972(ptr) Variable Function
+       979(r042):     49(ptr) Variable Function
+      983(r039a):     49(ptr) Variable Function
+       988(r043):      7(ptr) Variable Function
+       991(r044):     49(ptr) Variable Function
+       994(r045):     49(ptr) Variable Function
+       998(r046):     49(ptr) Variable Function
+      1001(r047):     49(ptr) Variable Function
+      1005(r048):     49(ptr) Variable Function
+      1009(r049):     49(ptr) Variable Function
+      1012(r050):     49(ptr) Variable Function
+      1016(r051):     49(ptr) Variable Function
+      1019(r052):     49(ptr) Variable Function
+      1023(r053):     49(ptr) Variable Function
+      1027(r054):     49(ptr) Variable Function
+      1031(r055):     51(ptr) Variable Function
+      1034(r056):     49(ptr) Variable Function
+      1037(r057):     49(ptr) Variable Function
+      1040(r058):     49(ptr) Variable Function
+      1045(r059):     49(ptr) Variable Function
+      1048(r060):     49(ptr) Variable Function
+      1055(r061):     49(ptr) Variable Function
+      1058(r062):     49(ptr) Variable Function
+      1063(r063):     49(ptr) Variable Function
+      1066(r064):     49(ptr) Variable Function
+      1070(r065):     49(ptr) Variable Function
+      1073(r066):     49(ptr) Variable Function
+      1076(r067):     49(ptr) Variable Function
              835:   48(fvec4) Load 53(inF0)
-             836:  832(ivec4) Bitcast 835
-                              Store 834(r005) 836
-             838:   48(fvec4) Load 53(inF0)
-             839:   50(ivec4) Bitcast 838
-                              Store 837(r006) 839
-             841:   50(ivec4) Load 56(inU0)
-             842:   48(fvec4) Bitcast 841
-                              Store 840(r007) 842
+             838:  836(bvec4) FOrdNotEqual 835 837
+             839:   135(bool) All 838
+                              Store 834(r000) 839
+             841:   48(fvec4) Load 53(inF0)
+             842:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 841
+                              Store 840(r001) 842
              844:   48(fvec4) Load 53(inF0)
-             845:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 844
-                              Store 843(r009) 845
+             845:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 844
+                              Store 843(r002) 845
              847:   48(fvec4) Load 53(inF0)
-             848:   48(fvec4) Load 54(inF1)
-             849:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 847 848
-                              Store 846(r010) 849
+             848:  836(bvec4) FOrdNotEqual 847 837
+             849:   135(bool) Any 848
+                              Store 846(r003) 849
              851:   48(fvec4) Load 53(inF0)
-             852:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 851
-                              Store 850(r011) 852
-             854:   48(fvec4) Load 53(inF0)
-             855:   48(fvec4) Load 54(inF1)
-             856:   48(fvec4) Load 55(inF2)
-             857:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 854 855 856
-                              Store 853(r012) 857
-             858:   48(fvec4) Load 53(inF0)
-             859:  815(bvec4) FOrdLessThan 858 816
-             860:   135(bool) Any 859
-                              SelectionMerge 862 None
-                              BranchConditional 860 861 862
-             861:               Label
-                                Kill
-             862:             Label
+             852:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 851
+                              Store 850(r004) 852
+             856:   48(fvec4) Load 53(inF0)
+             857:  853(ivec4) Bitcast 856
+                              Store 855(r005) 857
+             859:   48(fvec4) Load 53(inF0)
+             860:   50(ivec4) Bitcast 859
+                              Store 858(r006) 860
+             862:   50(ivec4) Load 56(inU0)
+             863:   48(fvec4) Bitcast 862
+                              Store 861(r007) 863
              865:   48(fvec4) Load 53(inF0)
-             866:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 865
-                              Store 864(r013) 866
+             866:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 865
+                              Store 864(r009) 866
              868:   48(fvec4) Load 53(inF0)
-             869:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 868
-                              Store 867(r014) 869
-             872:   50(ivec4) BitCount 871
-                              Store 870(r015) 872
-             874:   48(fvec4) Load 53(inF0)
-             875:   48(fvec4) DPdx 874
-                              Store 873(r016) 875
-             877:   48(fvec4) Load 53(inF0)
-             878:   48(fvec4) DPdxCoarse 877
-                              Store 876(r017) 878
-             880:   48(fvec4) Load 53(inF0)
-             881:   48(fvec4) DPdxFine 880
-                              Store 879(r018) 881
-             883:   48(fvec4) Load 53(inF0)
-             884:   48(fvec4) DPdy 883
-                              Store 882(r019) 884
-             886:   48(fvec4) Load 53(inF0)
-             887:   48(fvec4) DPdyCoarse 886
-                              Store 885(r020) 887
-             889:   48(fvec4) Load 53(inF0)
-             890:   48(fvec4) DPdyFine 889
-                              Store 888(r021) 890
-             892:   48(fvec4) Load 53(inF0)
-             893:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 892
-                              Store 891(r022) 893
-             895:   48(fvec4) Load 53(inF0)
-             896:   48(fvec4) Load 54(inF1)
-             897:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 895 896
-                              Store 894(r023) 897
-             899:   48(fvec4) Load 53(inF0)
-             900:   48(fvec4) Load 54(inF1)
-             901:    6(float) Dot 899 900
-                              Store 898(r024) 901
-             903:      7(ptr) AccessChain 53(inF0) 519
-             904:    6(float) Load 903
-             905:      7(ptr) AccessChain 54(inF1) 519
-             906:    6(float) Load 905
-             907:    6(float) FMul 904 906
-             908:      7(ptr) AccessChain 53(inF0) 520
-             909:    6(float) Load 908
-             910:      7(ptr) AccessChain 54(inF1) 629
-             911:    6(float) Load 910
-             912:   48(fvec4) CompositeConstruct 283 907 909 911
-                              Store 902(r025) 912
+             869:   48(fvec4) Load 54(inF1)
+             870:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 868 869
+                              Store 867(r010) 870
+             872:   48(fvec4) Load 53(inF0)
+             873:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 872
+                              Store 871(r011) 873
+             875:   48(fvec4) Load 53(inF0)
+             876:   48(fvec4) Load 54(inF1)
+             877:   48(fvec4) Load 55(inF2)
+             878:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 875 876 877
+                              Store 874(r012) 878
+             879:   48(fvec4) Load 53(inF0)
+             880:  836(bvec4) FOrdLessThan 879 837
+             881:   135(bool) Any 880
+                              SelectionMerge 883 None
+                              BranchConditional 881 882 883
+             882:               Label
+                                Kill
+             883:             Label
+             885:   50(ivec4) Load 56(inU0)
+             887:  836(bvec4) ULessThan 885 886
+             888:   135(bool) Any 887
+                              SelectionMerge 890 None
+                              BranchConditional 888 889 890
+             889:               Label
+                                Kill
+             890:             Label
+             893:   48(fvec4) Load 53(inF0)
+             894:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 893
+                              Store 892(r013) 894
+             896:   48(fvec4) Load 53(inF0)
+             897:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 896
+                              Store 895(r014) 897
+             900:   50(ivec4) BitCount 899
+                              Store 898(r015) 900
+             902:   48(fvec4) Load 53(inF0)
+             903:   48(fvec4) DPdx 902
+                              Store 901(r016) 903
+             905:   48(fvec4) Load 53(inF0)
+             906:   48(fvec4) DPdxCoarse 905
+                              Store 904(r017) 906
+             908:   48(fvec4) Load 53(inF0)
+             909:   48(fvec4) DPdxFine 908
+                              Store 907(r018) 909
+             911:   48(fvec4) Load 53(inF0)
+             912:   48(fvec4) DPdy 911
+                              Store 910(r019) 912
              914:   48(fvec4) Load 53(inF0)
-             915:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 914
-                              Store 913(r029) 915
+             915:   48(fvec4) DPdyCoarse 914
+                              Store 913(r020) 915
              917:   48(fvec4) Load 53(inF0)
-             918:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 917
-                              Store 916(r030) 918
+             918:   48(fvec4) DPdyFine 917
+                              Store 916(r021) 918
              920:   48(fvec4) Load 53(inF0)
-             921:   48(fvec4) Load 54(inF1)
-             922:   48(fvec4) Load 55(inF2)
-             923:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 920 921 922
-                              Store 919(r031) 923
-             928:   50(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 927
-                              Store 924(r032) 928
-             930:   50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 927
-                              Store 929(r033) 930
-             932:   48(fvec4) Load 53(inF0)
-             933:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 932
-                              Store 931(r034) 933
-             935:   48(fvec4) Load 53(inF0)
-             936:   48(fvec4) Load 54(inF1)
-             937:   48(fvec4) FMod 935 936
-                              Store 934(r036) 937
-             939:   48(fvec4) Load 53(inF0)
-             940:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 939
-                              Store 938(r037) 940
+             921:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 920
+                              Store 919(r022) 921
+             923:   48(fvec4) Load 53(inF0)
+             924:   48(fvec4) Load 54(inF1)
+             925:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 923 924
+                              Store 922(r023) 925
+             927:   48(fvec4) Load 53(inF0)
+             928:   48(fvec4) Load 54(inF1)
+             929:    6(float) Dot 927 928
+                              Store 926(r024) 929
+             931:      7(ptr) AccessChain 53(inF0) 533
+             932:    6(float) Load 931
+             933:      7(ptr) AccessChain 54(inF1) 533
+             934:    6(float) Load 933
+             935:    6(float) FMul 932 934
+             936:      7(ptr) AccessChain 53(inF0) 534
+             937:    6(float) Load 936
+             938:      7(ptr) AccessChain 54(inF1) 650
+             939:    6(float) Load 938
+             940:   48(fvec4) CompositeConstruct 289 935 937 939
+                              Store 930(r025) 940
              942:   48(fvec4) Load 53(inF0)
-             943:   48(fvec4) Fwidth 942
-                              Store 941(r039) 943
-             946:   48(fvec4) Load 53(inF0)
-             947:  815(bvec4) IsInf 946
-                              Store 945(r040) 947
-             949:   48(fvec4) Load 53(inF0)
-             950:  815(bvec4) IsNan 949
-                              Store 948(r041) 950
-             952:   48(fvec4) Load 53(inF0)
-             953:   48(fvec4) Load 54(inF1)
-             954:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 952 953
-                              Store 951(r042) 954
-             956:   48(fvec4) Load 53(inF0)
-             957:   48(fvec4) Load 54(inF1)
-             958:   48(fvec4) Load 55(inF2)
-             959:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 956 957 958
-                              Store 955(r039a) 959
-             961:   48(fvec4) Load 53(inF0)
-             962:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 961
-                              Store 960(r043) 962
-             964:   48(fvec4) Load 53(inF0)
-             965:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 964
-                              Store 963(r044) 965
+             943:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 942
+                              Store 941(r029) 943
+             945:   48(fvec4) Load 53(inF0)
+             946:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 945
+                              Store 944(r030) 946
+             948:   48(fvec4) Load 53(inF0)
+             949:   48(fvec4) Load 54(inF1)
+             950:   48(fvec4) Load 55(inF2)
+             951:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 948 949 950
+                              Store 947(r031) 951
+             956:   50(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 955
+                              Store 952(r032) 956
+             958:   50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 955
+                              Store 957(r033) 958
+             960:   48(fvec4) Load 53(inF0)
+             961:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 960
+                              Store 959(r034) 961
+             963:   48(fvec4) Load 53(inF0)
+             964:   48(fvec4) Load 54(inF1)
+             965:   48(fvec4) FMod 963 964
+                              Store 962(r036) 965
              967:   48(fvec4) Load 53(inF0)
-             968:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 967
-             969:   48(fvec4) VectorTimesScalar 968 262
-                              Store 966(r045) 969
-             971:   48(fvec4) Load 53(inF0)
-             972:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 971
-                              Store 970(r046) 972
+             968:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 967
+                              Store 966(r037) 968
+             970:   48(fvec4) Load 53(inF0)
+             971:   48(fvec4) Fwidth 970
+                              Store 969(r039) 971
              974:   48(fvec4) Load 53(inF0)
-             975:   48(fvec4) Load 54(inF1)
-             976:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 974 975
-                              Store 973(r047) 976
-             978:   48(fvec4) Load 53(inF0)
-             979:   48(fvec4) Load 54(inF1)
-             980:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 978 979
-                              Store 977(r048) 980
-             982:   48(fvec4) Load 53(inF0)
-             983:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 982
-                              Store 981(r049) 983
-             985:   48(fvec4) Load 53(inF0)
-             986:   48(fvec4) Load 54(inF1)
-             987:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 985 986
-                              Store 984(r050) 987
+             975:  836(bvec4) IsInf 974
+                              Store 973(r040) 975
+             977:   48(fvec4) Load 53(inF0)
+             978:  836(bvec4) IsNan 977
+                              Store 976(r041) 978
+             980:   48(fvec4) Load 53(inF0)
+             981:   48(fvec4) Load 54(inF1)
+             982:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 980 981
+                              Store 979(r042) 982
+             984:   48(fvec4) Load 53(inF0)
+             985:   48(fvec4) Load 54(inF1)
+             986:   48(fvec4) Load 55(inF2)
+             987:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 984 985 986
+                              Store 983(r039a) 987
              989:   48(fvec4) Load 53(inF0)
-             990:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 989
-                              Store 988(r051) 990
+             990:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 989
+                              Store 988(r043) 990
              992:   48(fvec4) Load 53(inF0)
-             993:   48(fvec4) CompositeConstruct 283 283 283 283
-             994:   48(fvec4) FDiv 993 992
-                              Store 991(r052) 994
-             996:   48(fvec4) Load 53(inF0)
-             997:   48(fvec4) Load 54(inF1)
-             998:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 996 997
-                              Store 995(r053) 998
-            1000:   48(fvec4) Load 53(inF0)
-            1001:   48(fvec4) Load 54(inF1)
-            1002:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1000 1001 516
-                              Store 999(r054) 1002
-            1005:   50(ivec4) BitReverse 1004
-                              Store 1003(r055) 1005
-            1007:   48(fvec4) Load 53(inF0)
-            1008:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1007
-                              Store 1006(r056) 1008
+             993:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 992
+                              Store 991(r044) 993
+             995:   48(fvec4) Load 53(inF0)
+             996:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 995
+             997:   48(fvec4) VectorTimesScalar 996 268
+                              Store 994(r045) 997
+             999:   48(fvec4) Load 53(inF0)
+            1000:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 999
+                              Store 998(r046) 1000
+            1002:   48(fvec4) Load 53(inF0)
+            1003:   48(fvec4) Load 54(inF1)
+            1004:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 1002 1003
+                              Store 1001(r047) 1004
+            1006:   48(fvec4) Load 53(inF0)
+            1007:   48(fvec4) Load 54(inF1)
+            1008:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 1006 1007
+                              Store 1005(r048) 1008
             1010:   48(fvec4) Load 53(inF0)
-            1011:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1010
-                              Store 1009(r057) 1011
+            1011:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1010
+                              Store 1009(r049) 1011
             1013:   48(fvec4) Load 53(inF0)
-            1014:   48(fvec4) CompositeConstruct 139 139 139 139
-            1015:   48(fvec4) CompositeConstruct 283 283 283 283
-            1016:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1013 1014 1015
-                              Store 1012(r058) 1016
-            1018:   48(fvec4) Load 53(inF0)
-            1019:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1018
-                              Store 1017(r059) 1019
-            1021:   48(fvec4) Load 53(inF0)
-            1022:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1021
-                              Store 1020(r060) 1022
-            1023:   48(fvec4) Load 53(inF0)
-            1024:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1023
-                              Store 54(inF1) 1024
-            1025:   48(fvec4) Load 53(inF0)
-            1026:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1025
-                              Store 55(inF2) 1026
+            1014:   48(fvec4) Load 54(inF1)
+            1015:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1013 1014
+                              Store 1012(r050) 1015
+            1017:   48(fvec4) Load 53(inF0)
+            1018:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1017
+                              Store 1016(r051) 1018
+            1020:   48(fvec4) Load 53(inF0)
+            1021:   48(fvec4) CompositeConstruct 289 289 289 289
+            1022:   48(fvec4) FDiv 1021 1020
+                              Store 1019(r052) 1022
+            1024:   48(fvec4) Load 53(inF0)
+            1025:   48(fvec4) Load 54(inF1)
+            1026:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1024 1025
+                              Store 1023(r053) 1026
             1028:   48(fvec4) Load 53(inF0)
-            1029:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1028
-                              Store 1027(r061) 1029
-            1031:   48(fvec4) Load 53(inF0)
-            1032:   48(fvec4) Load 54(inF1)
-            1033:   48(fvec4) Load 55(inF2)
-            1034:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1031 1032 1033
-                              Store 1030(r062) 1034
-            1036:   48(fvec4) Load 53(inF0)
-            1037:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1036
-                              Store 1035(r063) 1037
-            1039:   48(fvec4) Load 53(inF0)
-            1040:   48(fvec4) Load 54(inF1)
-            1041:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1039 1040
-                              Store 1038(r064) 1041
-            1043:   48(fvec4) Load 53(inF0)
-            1044:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1043
-                              Store 1042(r065) 1044
+            1029:   48(fvec4) Load 54(inF1)
+            1030:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1028 1029 530
+                              Store 1027(r054) 1030
+            1033:   50(ivec4) BitReverse 1032
+                              Store 1031(r055) 1033
+            1035:   48(fvec4) Load 53(inF0)
+            1036:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1035
+                              Store 1034(r056) 1036
+            1038:   48(fvec4) Load 53(inF0)
+            1039:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1038
+                              Store 1037(r057) 1039
+            1041:   48(fvec4) Load 53(inF0)
+            1042:   48(fvec4) CompositeConstruct 139 139 139 139
+            1043:   48(fvec4) CompositeConstruct 289 289 289 289
+            1044:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1041 1042 1043
+                              Store 1040(r058) 1044
             1046:   48(fvec4) Load 53(inF0)
-            1047:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1046
-                              Store 1045(r066) 1047
+            1047:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1046
+                              Store 1045(r059) 1047
             1049:   48(fvec4) Load 53(inF0)
-            1050:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1049
-                              Store 1048(r067) 1050
-                              ReturnValue 1052
+            1050:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1049
+                              Store 1048(r060) 1050
+            1051:   48(fvec4) Load 53(inF0)
+            1052:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1051
+                              Store 54(inF1) 1052
+            1053:   48(fvec4) Load 53(inF0)
+            1054:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1053
+                              Store 55(inF2) 1054
+            1056:   48(fvec4) Load 53(inF0)
+            1057:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1056
+                              Store 1055(r061) 1057
+            1059:   48(fvec4) Load 53(inF0)
+            1060:   48(fvec4) Load 54(inF1)
+            1061:   48(fvec4) Load 55(inF2)
+            1062:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1059 1060 1061
+                              Store 1058(r062) 1062
+            1064:   48(fvec4) Load 53(inF0)
+            1065:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1064
+                              Store 1063(r063) 1065
+            1067:   48(fvec4) Load 53(inF0)
+            1068:   48(fvec4) Load 54(inF1)
+            1069:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1067 1068
+                              Store 1066(r064) 1069
+            1071:   48(fvec4) Load 53(inF0)
+            1072:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1071
+                              Store 1070(r065) 1072
+            1074:   48(fvec4) Load 53(inF0)
+            1075:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1074
+                              Store 1073(r066) 1075
+            1077:   48(fvec4) Load 53(inF0)
+            1078:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1077
+                              Store 1076(r067) 1078
+                              ReturnValue 1080
                               FunctionEnd
 66(PixelShaderFunction2x2(mf22;mf22;mf22;):          60 Function None 62
         63(inF0):     61(ptr) FunctionParameter
         64(inF1):     61(ptr) FunctionParameter
         65(inF2):     61(ptr) FunctionParameter
               67:             Label
-      1055(r000):    136(ptr) Variable Function
-      1060(r001):     61(ptr) Variable Function
-      1065(r003):    136(ptr) Variable Function
-      1069(r004):     61(ptr) Variable Function
-      1072(r005):     61(ptr) Variable Function
-      1075(r006):     61(ptr) Variable Function
-      1079(r007):     61(ptr) Variable Function
-      1089(r008):     61(ptr) Variable Function
-      1094(r009):     61(ptr) Variable Function
-      1097(r010):     61(ptr) Variable Function
-      1100(r011):     61(ptr) Variable Function
-      1103(r012):     61(ptr) Variable Function
-      1106(r013):     61(ptr) Variable Function
-      1109(r014):     61(ptr) Variable Function
-      1112(r015):     61(ptr) Variable Function
-      1115(r016):     61(ptr) Variable Function
-      1118(r017):     61(ptr) Variable Function
-      1121(r018):      7(ptr) Variable Function
-      1124(r019):     61(ptr) Variable Function
-      1127(R020):     61(ptr) Variable Function
-      1130(r021):     61(ptr) Variable Function
-      1133(r022):     61(ptr) Variable Function
-      1143(r023):     61(ptr) Variable Function
-      1146(r025):     61(ptr) Variable Function
-      1149(r026):     61(ptr) Variable Function
-     1153(r026a):     61(ptr) Variable Function
-      1158(r027):     61(ptr) Variable Function
-      1161(r028):     61(ptr) Variable Function
-      1165(r029):     61(ptr) Variable Function
-      1168(r030):     61(ptr) Variable Function
-      1172(r031):     61(ptr) Variable Function
-      1176(r032):     61(ptr) Variable Function
-      1180(r033):     61(ptr) Variable Function
-      1183(r034):     61(ptr) Variable Function
-      1186(r035):     61(ptr) Variable Function
-      1189(r036):     61(ptr) Variable Function
-      1194(r037):     61(ptr) Variable Function
-      1197(r038):     61(ptr) Variable Function
-      1204(r039):     61(ptr) Variable Function
-      1207(r049):     61(ptr) Variable Function
-      1212(r041):     61(ptr) Variable Function
-      1215(r042):     61(ptr) Variable Function
-      1219(r043):     61(ptr) Variable Function
-      1222(r044):     61(ptr) Variable Function
-      1227(r046):     61(ptr) Variable Function
-            1056:          60 Load 63(inF0)
-            1058:        1057 FOrdNotEqual 1056 139
-            1059:   135(bool) All 1058
-                              Store 1055(r000) 1059
-            1061:          60 Load 63(inF0)
-            1062:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 1061
-                              Store 1060(r001) 1062
-            1063:          60 Load 63(inF0)
-            1064:          60 ExtInst 1(GLSL.std.450) 17(Acos) 1063
-            1066:          60 Load 63(inF0)
-            1067:        1057 FOrdNotEqual 1066 139
-            1068:   135(bool) Any 1067
-                              Store 1065(r003) 1068
-            1070:          60 Load 63(inF0)
-            1071:          60 ExtInst 1(GLSL.std.450) 16(Asin) 1070
-                              Store 1069(r004) 1071
-            1073:          60 Load 63(inF0)
-            1074:          60 ExtInst 1(GLSL.std.450) 18(Atan) 1073
-                              Store 1072(r005) 1074
-            1076:          60 Load 63(inF0)
-            1077:          60 Load 64(inF1)
-            1078:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 1076 1077
-                              Store 1075(r006) 1078
-            1080:          60 Load 63(inF0)
-            1081:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 1080
-                              Store 1079(r007) 1081
-            1082:          60 Load 63(inF0)
-            1084:        1057 FOrdLessThan 1082 1083
-            1085:   135(bool) Any 1084
-                              SelectionMerge 1087 None
-                              BranchConditional 1085 1086 1087
-            1086:               Label
-                                Kill
-            1087:             Label
-            1090:          60 Load 63(inF0)
-            1091:          60 Load 64(inF1)
-            1092:          60 Load 65(inF2)
-            1093:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1090 1091 1092
-                              Store 1089(r008) 1093
-            1095:          60 Load 63(inF0)
-            1096:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1095
-                              Store 1094(r009) 1096
+      1083(r000):    136(ptr) Variable Function
+      1088(r001):     61(ptr) Variable Function
+      1093(r003):    136(ptr) Variable Function
+      1097(r004):     61(ptr) Variable Function
+      1100(r005):     61(ptr) Variable Function
+      1103(r006):     61(ptr) Variable Function
+      1107(r007):     61(ptr) Variable Function
+      1117(r008):     61(ptr) Variable Function
+      1122(r009):     61(ptr) Variable Function
+      1125(r010):     61(ptr) Variable Function
+      1128(r011):     61(ptr) Variable Function
+      1131(r012):     61(ptr) Variable Function
+      1134(r013):     61(ptr) Variable Function
+      1137(r014):     61(ptr) Variable Function
+      1140(r015):     61(ptr) Variable Function
+      1143(r016):     61(ptr) Variable Function
+      1146(r017):     61(ptr) Variable Function
+      1149(r018):      7(ptr) Variable Function
+      1152(r019):     61(ptr) Variable Function
+      1155(R020):     61(ptr) Variable Function
+      1158(r021):     61(ptr) Variable Function
+      1161(r022):     61(ptr) Variable Function
+      1171(r023):     61(ptr) Variable Function
+      1174(r025):     61(ptr) Variable Function
+      1177(r026):     61(ptr) Variable Function
+     1181(r026a):     61(ptr) Variable Function
+      1186(r027):     61(ptr) Variable Function
+      1189(r028):     61(ptr) Variable Function
+      1193(r029):     61(ptr) Variable Function
+      1196(r030):     61(ptr) Variable Function
+      1200(r031):     61(ptr) Variable Function
+      1204(r032):     61(ptr) Variable Function
+      1208(r033):     61(ptr) Variable Function
+      1211(r034):     61(ptr) Variable Function
+      1214(r035):     61(ptr) Variable Function
+      1217(r036):     61(ptr) Variable Function
+      1222(r037):     61(ptr) Variable Function
+      1225(r038):     61(ptr) Variable Function
+      1232(r039):     61(ptr) Variable Function
+      1235(r049):     61(ptr) Variable Function
+      1240(r041):     61(ptr) Variable Function
+      1243(r042):     61(ptr) Variable Function
+      1247(r043):     61(ptr) Variable Function
+      1250(r044):     61(ptr) Variable Function
+      1255(r046):     61(ptr) Variable Function
+            1084:          60 Load 63(inF0)
+            1086:        1085 FOrdNotEqual 1084 139
+            1087:   135(bool) All 1086
+                              Store 1083(r000) 1087
+            1089:          60 Load 63(inF0)
+            1090:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 1089
+                              Store 1088(r001) 1090
+            1091:          60 Load 63(inF0)
+            1092:          60 ExtInst 1(GLSL.std.450) 17(Acos) 1091
+            1094:          60 Load 63(inF0)
+            1095:        1085 FOrdNotEqual 1094 139
+            1096:   135(bool) Any 1095
+                              Store 1093(r003) 1096
             1098:          60 Load 63(inF0)
-            1099:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 1098
-                              Store 1097(r010) 1099
+            1099:          60 ExtInst 1(GLSL.std.450) 16(Asin) 1098
+                              Store 1097(r004) 1099
             1101:          60 Load 63(inF0)
-            1102:          60 DPdx 1101
-                              Store 1100(r011) 1102
+            1102:          60 ExtInst 1(GLSL.std.450) 18(Atan) 1101
+                              Store 1100(r005) 1102
             1104:          60 Load 63(inF0)
-            1105:          60 DPdxCoarse 1104
-                              Store 1103(r012) 1105
-            1107:          60 Load 63(inF0)
-            1108:          60 DPdxFine 1107
-                              Store 1106(r013) 1108
+            1105:          60 Load 64(inF1)
+            1106:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 1104 1105
+                              Store 1103(r006) 1106
+            1108:          60 Load 63(inF0)
+            1109:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 1108
+                              Store 1107(r007) 1109
             1110:          60 Load 63(inF0)
-            1111:          60 DPdy 1110
-                              Store 1109(r014) 1111
-            1113:          60 Load 63(inF0)
-            1114:          60 DPdyCoarse 1113
-                              Store 1112(r015) 1114
-            1116:          60 Load 63(inF0)
-            1117:          60 DPdyFine 1116
-                              Store 1115(r016) 1117
-            1119:          60 Load 63(inF0)
-            1120:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 1119
-                              Store 1118(r017) 1120
-            1122:          60 Load 63(inF0)
-            1123:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1122
-                              Store 1121(r018) 1123
-            1125:          60 Load 63(inF0)
-            1126:          60 ExtInst 1(GLSL.std.450) 27(Exp) 1125
-                              Store 1124(r019) 1126
-            1128:          60 Load 63(inF0)
-            1129:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 1128
-                              Store 1127(R020) 1129
-            1131:          60 Load 63(inF0)
-            1132:          60 ExtInst 1(GLSL.std.450) 8(Floor) 1131
-                              Store 1130(r021) 1132
-            1134:          60 Load 63(inF0)
-            1135:          60 Load 64(inF1)
-            1136:   24(fvec2) CompositeExtract 1134 0
-            1137:   24(fvec2) CompositeExtract 1135 0
-            1138:   24(fvec2) FMod 1136 1137
-            1139:   24(fvec2) CompositeExtract 1134 1
-            1140:   24(fvec2) CompositeExtract 1135 1
-            1141:   24(fvec2) FMod 1139 1140
-            1142:          60 CompositeConstruct 1138 1141
-                              Store 1133(r022) 1142
+            1112:        1085 FOrdLessThan 1110 1111
+            1113:   135(bool) Any 1112
+                              SelectionMerge 1115 None
+                              BranchConditional 1113 1114 1115
+            1114:               Label
+                                Kill
+            1115:             Label
+            1118:          60 Load 63(inF0)
+            1119:          60 Load 64(inF1)
+            1120:          60 Load 65(inF2)
+            1121:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1118 1119 1120
+                              Store 1117(r008) 1121
+            1123:          60 Load 63(inF0)
+            1124:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1123
+                              Store 1122(r009) 1124
+            1126:          60 Load 63(inF0)
+            1127:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 1126
+                              Store 1125(r010) 1127
+            1129:          60 Load 63(inF0)
+            1130:          60 DPdx 1129
+                              Store 1128(r011) 1130
+            1132:          60 Load 63(inF0)
+            1133:          60 DPdxCoarse 1132
+                              Store 1131(r012) 1133
+            1135:          60 Load 63(inF0)
+            1136:          60 DPdxFine 1135
+                              Store 1134(r013) 1136
+            1138:          60 Load 63(inF0)
+            1139:          60 DPdy 1138
+                              Store 1137(r014) 1139
+            1141:          60 Load 63(inF0)
+            1142:          60 DPdyCoarse 1141
+                              Store 1140(r015) 1142
             1144:          60 Load 63(inF0)
-            1145:          60 ExtInst 1(GLSL.std.450) 10(Fract) 1144
-                              Store 1143(r023) 1145
+            1145:          60 DPdyFine 1144
+                              Store 1143(r016) 1145
             1147:          60 Load 63(inF0)
-            1148:          60 Fwidth 1147
-                              Store 1146(r025) 1148
+            1148:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 1147
+                              Store 1146(r017) 1148
             1150:          60 Load 63(inF0)
-            1151:          60 Load 64(inF1)
-            1152:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 1150 1151
-                              Store 1149(r026) 1152
-            1154:          60 Load 63(inF0)
-            1155:          60 Load 64(inF1)
-            1156:          60 Load 65(inF2)
-            1157:          60 ExtInst 1(GLSL.std.450) 46(FMix) 1154 1155 1156
-                              Store 1153(r026a) 1157
+            1151:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1150
+                              Store 1149(r018) 1151
+            1153:          60 Load 63(inF0)
+            1154:          60 ExtInst 1(GLSL.std.450) 27(Exp) 1153
+                              Store 1152(r019) 1154
+            1156:          60 Load 63(inF0)
+            1157:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 1156
+                              Store 1155(R020) 1157
             1159:          60 Load 63(inF0)
-            1160:          60 ExtInst 1(GLSL.std.450) 28(Log) 1159
-                              Store 1158(r027) 1160
+            1160:          60 ExtInst 1(GLSL.std.450) 8(Floor) 1159
+                              Store 1158(r021) 1160
             1162:          60 Load 63(inF0)
-            1163:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1162
-            1164:          60 MatrixTimesScalar 1163 262
-                              Store 1161(r028) 1164
-            1166:          60 Load 63(inF0)
-            1167:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1166
-                              Store 1165(r029) 1167
-            1169:          60 Load 63(inF0)
-            1170:          60 Load 64(inF1)
-            1171:          60 ExtInst 1(GLSL.std.450) 40(FMax) 1169 1170
-                              Store 1168(r030) 1171
-            1173:          60 Load 63(inF0)
-            1174:          60 Load 64(inF1)
-            1175:          60 ExtInst 1(GLSL.std.450) 37(FMin) 1173 1174
-                              Store 1172(r031) 1175
-            1177:          60 Load 63(inF0)
-            1178:          60 Load 64(inF1)
-            1179:          60 ExtInst 1(GLSL.std.450) 26(Pow) 1177 1178
-                              Store 1176(r032) 1179
-            1181:          60 Load 63(inF0)
-            1182:          60 ExtInst 1(GLSL.std.450) 11(Radians) 1181
-                              Store 1180(r033) 1182
-            1184:          60 Load 63(inF0)
-            1185:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 1184
-                              Store 1183(r034) 1185
+            1163:          60 Load 64(inF1)
+            1164:   24(fvec2) CompositeExtract 1162 0
+            1165:   24(fvec2) CompositeExtract 1163 0
+            1166:   24(fvec2) FMod 1164 1165
+            1167:   24(fvec2) CompositeExtract 1162 1
+            1168:   24(fvec2) CompositeExtract 1163 1
+            1169:   24(fvec2) FMod 1167 1168
+            1170:          60 CompositeConstruct 1166 1169
+                              Store 1161(r022) 1170
+            1172:          60 Load 63(inF0)
+            1173:          60 ExtInst 1(GLSL.std.450) 10(Fract) 1172
+                              Store 1171(r023) 1173
+            1175:          60 Load 63(inF0)
+            1176:          60 Fwidth 1175
+                              Store 1174(r025) 1176
+            1178:          60 Load 63(inF0)
+            1179:          60 Load 64(inF1)
+            1180:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 1178 1179
+                              Store 1177(r026) 1180
+            1182:          60 Load 63(inF0)
+            1183:          60 Load 64(inF1)
+            1184:          60 Load 65(inF2)
+            1185:          60 ExtInst 1(GLSL.std.450) 46(FMix) 1182 1183 1184
+                              Store 1181(r026a) 1185
             1187:          60 Load 63(inF0)
-            1188:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1187
-                              Store 1186(r035) 1188
+            1188:          60 ExtInst 1(GLSL.std.450) 28(Log) 1187
+                              Store 1186(r027) 1188
             1190:          60 Load 63(inF0)
-            1191:   24(fvec2) CompositeConstruct 139 139
-            1192:   24(fvec2) CompositeConstruct 283 283
-            1193:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1190 1191 1192
-                              Store 1189(r036) 1193
-            1195:          60 Load 63(inF0)
-            1196:          60 ExtInst 1(GLSL.std.450) 6(FSign) 1195
-                              Store 1194(r037) 1196
-            1198:          60 Load 63(inF0)
-            1199:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1198
-                              Store 1197(r038) 1199
-            1200:          60 Load 63(inF0)
-            1201:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1200
-                              Store 64(inF1) 1201
-            1202:          60 Load 63(inF0)
-            1203:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1202
-                              Store 65(inF2) 1203
+            1191:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1190
+            1192:          60 MatrixTimesScalar 1191 268
+                              Store 1189(r028) 1192
+            1194:          60 Load 63(inF0)
+            1195:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1194
+                              Store 1193(r029) 1195
+            1197:          60 Load 63(inF0)
+            1198:          60 Load 64(inF1)
+            1199:          60 ExtInst 1(GLSL.std.450) 40(FMax) 1197 1198
+                              Store 1196(r030) 1199
+            1201:          60 Load 63(inF0)
+            1202:          60 Load 64(inF1)
+            1203:          60 ExtInst 1(GLSL.std.450) 37(FMin) 1201 1202
+                              Store 1200(r031) 1203
             1205:          60 Load 63(inF0)
-            1206:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 1205
-                              Store 1204(r039) 1206
-            1208:          60 Load 63(inF0)
-            1209:          60 Load 64(inF1)
-            1210:          60 Load 65(inF2)
-            1211:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1208 1209 1210
-                              Store 1207(r049) 1211
-            1213:          60 Load 63(inF0)
-            1214:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1213
-                              Store 1212(r041) 1214
-            1216:          60 Load 63(inF0)
-            1217:          60 Load 64(inF1)
-            1218:          60 ExtInst 1(GLSL.std.450) 48(Step) 1216 1217
-                              Store 1215(r042) 1218
-            1220:          60 Load 63(inF0)
-            1221:          60 ExtInst 1(GLSL.std.450) 15(Tan) 1220
-                              Store 1219(r043) 1221
+            1206:          60 Load 64(inF1)
+            1207:          60 ExtInst 1(GLSL.std.450) 26(Pow) 1205 1206
+                              Store 1204(r032) 1207
+            1209:          60 Load 63(inF0)
+            1210:          60 ExtInst 1(GLSL.std.450) 11(Radians) 1209
+                              Store 1208(r033) 1210
+            1212:          60 Load 63(inF0)
+            1213:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 1212
+                              Store 1211(r034) 1213
+            1215:          60 Load 63(inF0)
+            1216:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1215
+                              Store 1214(r035) 1216
+            1218:          60 Load 63(inF0)
+            1219:   24(fvec2) CompositeConstruct 139 139
+            1220:   24(fvec2) CompositeConstruct 289 289
+            1221:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 1218 1219 1220
+                              Store 1217(r036) 1221
             1223:          60 Load 63(inF0)
-            1224:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 1223
-                              Store 1222(r044) 1224
-            1225:          60 Load 63(inF0)
-            1226:          60 Transpose 1225
+            1224:          60 ExtInst 1(GLSL.std.450) 6(FSign) 1223
+                              Store 1222(r037) 1224
+            1226:          60 Load 63(inF0)
+            1227:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1226
+                              Store 1225(r038) 1227
             1228:          60 Load 63(inF0)
-            1229:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 1228
-                              Store 1227(r046) 1229
-                              ReturnValue 1231
+            1229:          60 ExtInst 1(GLSL.std.450) 13(Sin) 1228
+                              Store 64(inF1) 1229
+            1230:          60 Load 63(inF0)
+            1231:          60 ExtInst 1(GLSL.std.450) 14(Cos) 1230
+                              Store 65(inF2) 1231
+            1233:          60 Load 63(inF0)
+            1234:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 1233
+                              Store 1232(r039) 1234
+            1236:          60 Load 63(inF0)
+            1237:          60 Load 64(inF1)
+            1238:          60 Load 65(inF2)
+            1239:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1236 1237 1238
+                              Store 1235(r049) 1239
+            1241:          60 Load 63(inF0)
+            1242:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 1241
+                              Store 1240(r041) 1242
+            1244:          60 Load 63(inF0)
+            1245:          60 Load 64(inF1)
+            1246:          60 ExtInst 1(GLSL.std.450) 48(Step) 1244 1245
+                              Store 1243(r042) 1246
+            1248:          60 Load 63(inF0)
+            1249:          60 ExtInst 1(GLSL.std.450) 15(Tan) 1248
+                              Store 1247(r043) 1249
+            1251:          60 Load 63(inF0)
+            1252:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 1251
+                              Store 1250(r044) 1252
+            1253:          60 Load 63(inF0)
+            1254:          60 Transpose 1253
+            1256:          60 Load 63(inF0)
+            1257:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 1256
+                              Store 1255(r046) 1257
+                              ReturnValue 1259
                               FunctionEnd
 74(PixelShaderFunction3x3(mf33;mf33;mf33;):          68 Function None 70
         71(inF0):     69(ptr) FunctionParameter
         72(inF1):     69(ptr) FunctionParameter
         73(inF2):     69(ptr) FunctionParameter
               75:             Label
-      1234(r000):    136(ptr) Variable Function
-      1239(r001):     69(ptr) Variable Function
-      1244(r003):    136(ptr) Variable Function
-      1248(r004):     69(ptr) Variable Function
-      1251(r005):     69(ptr) Variable Function
-      1254(r006):     69(ptr) Variable Function
-      1258(r007):     69(ptr) Variable Function
-      1268(r008):     69(ptr) Variable Function
-      1273(r009):     69(ptr) Variable Function
-      1276(r010):     69(ptr) Variable Function
-      1279(r011):     69(ptr) Variable Function
-      1282(r012):     69(ptr) Variable Function
-      1285(r013):     69(ptr) Variable Function
-      1288(r014):     69(ptr) Variable Function
-      1291(r015):     69(ptr) Variable Function
-      1294(r016):     69(ptr) Variable Function
-      1297(r017):     69(ptr) Variable Function
-      1300(r018):      7(ptr) Variable Function
-      1303(r019):     69(ptr) Variable Function
-      1306(R020):     69(ptr) Variable Function
-      1309(r021):     69(ptr) Variable Function
-      1312(r022):     69(ptr) Variable Function
-      1325(r023):     69(ptr) Variable Function
-      1328(r025):     69(ptr) Variable Function
-      1331(r026):     69(ptr) Variable Function
-     1335(r026a):     69(ptr) Variable Function
-      1340(r027):     69(ptr) Variable Function
-      1343(r028):     69(ptr) Variable Function
-      1347(r029):     69(ptr) Variable Function
-      1350(r030):     69(ptr) Variable Function
-      1354(r031):     69(ptr) Variable Function
-      1358(r032):     69(ptr) Variable Function
-      1362(r033):     69(ptr) Variable Function
-      1365(r034):     69(ptr) Variable Function
-      1368(r035):     69(ptr) Variable Function
-      1371(r036):     69(ptr) Variable Function
-      1376(r037):     69(ptr) Variable Function
-      1379(r038):     69(ptr) Variable Function
-      1386(r039):     69(ptr) Variable Function
-      1389(r049):     69(ptr) Variable Function
-      1394(r041):     69(ptr) Variable Function
-      1397(r042):     69(ptr) Variable Function
-      1401(r043):     69(ptr) Variable Function
-      1404(r044):     69(ptr) Variable Function
-      1409(r046):     69(ptr) Variable Function
-            1235:          68 Load 71(inF0)
-            1237:        1236 FOrdNotEqual 1235 139
-            1238:   135(bool) All 1237
-                              Store 1234(r000) 1238
-            1240:          68 Load 71(inF0)
-            1241:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 1240
-                              Store 1239(r001) 1241
-            1242:          68 Load 71(inF0)
-            1243:          68 ExtInst 1(GLSL.std.450) 17(Acos) 1242
-            1245:          68 Load 71(inF0)
-            1246:        1236 FOrdNotEqual 1245 139
-            1247:   135(bool) Any 1246
-                              Store 1244(r003) 1247
-            1249:          68 Load 71(inF0)
-            1250:          68 ExtInst 1(GLSL.std.450) 16(Asin) 1249
-                              Store 1248(r004) 1250
-            1252:          68 Load 71(inF0)
-            1253:          68 ExtInst 1(GLSL.std.450) 18(Atan) 1252
-                              Store 1251(r005) 1253
-            1255:          68 Load 71(inF0)
-            1256:          68 Load 72(inF1)
-            1257:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 1255 1256
-                              Store 1254(r006) 1257
-            1259:          68 Load 71(inF0)
-            1260:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 1259
-                              Store 1258(r007) 1260
-            1261:          68 Load 71(inF0)
-            1263:        1236 FOrdLessThan 1261 1262
-            1264:   135(bool) Any 1263
-                              SelectionMerge 1266 None
-                              BranchConditional 1264 1265 1266
-            1265:               Label
-                                Kill
-            1266:             Label
-            1269:          68 Load 71(inF0)
-            1270:          68 Load 72(inF1)
-            1271:          68 Load 73(inF2)
-            1272:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1269 1270 1271
-                              Store 1268(r008) 1272
-            1274:          68 Load 71(inF0)
-            1275:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1274
-                              Store 1273(r009) 1275
+      1262(r000):    136(ptr) Variable Function
+      1267(r001):     69(ptr) Variable Function
+      1272(r003):    136(ptr) Variable Function
+      1276(r004):     69(ptr) Variable Function
+      1279(r005):     69(ptr) Variable Function
+      1282(r006):     69(ptr) Variable Function
+      1286(r007):     69(ptr) Variable Function
+      1296(r008):     69(ptr) Variable Function
+      1301(r009):     69(ptr) Variable Function
+      1304(r010):     69(ptr) Variable Function
+      1307(r011):     69(ptr) Variable Function
+      1310(r012):     69(ptr) Variable Function
+      1313(r013):     69(ptr) Variable Function
+      1316(r014):     69(ptr) Variable Function
+      1319(r015):     69(ptr) Variable Function
+      1322(r016):     69(ptr) Variable Function
+      1325(r017):     69(ptr) Variable Function
+      1328(r018):      7(ptr) Variable Function
+      1331(r019):     69(ptr) Variable Function
+      1334(R020):     69(ptr) Variable Function
+      1337(r021):     69(ptr) Variable Function
+      1340(r022):     69(ptr) Variable Function
+      1353(r023):     69(ptr) Variable Function
+      1356(r025):     69(ptr) Variable Function
+      1359(r026):     69(ptr) Variable Function
+     1363(r026a):     69(ptr) Variable Function
+      1368(r027):     69(ptr) Variable Function
+      1371(r028):     69(ptr) Variable Function
+      1375(r029):     69(ptr) Variable Function
+      1378(r030):     69(ptr) Variable Function
+      1382(r031):     69(ptr) Variable Function
+      1386(r032):     69(ptr) Variable Function
+      1390(r033):     69(ptr) Variable Function
+      1393(r034):     69(ptr) Variable Function
+      1396(r035):     69(ptr) Variable Function
+      1399(r036):     69(ptr) Variable Function
+      1404(r037):     69(ptr) Variable Function
+      1407(r038):     69(ptr) Variable Function
+      1414(r039):     69(ptr) Variable Function
+      1417(r049):     69(ptr) Variable Function
+      1422(r041):     69(ptr) Variable Function
+      1425(r042):     69(ptr) Variable Function
+      1429(r043):     69(ptr) Variable Function
+      1432(r044):     69(ptr) Variable Function
+      1437(r046):     69(ptr) Variable Function
+            1263:          68 Load 71(inF0)
+            1265:        1264 FOrdNotEqual 1263 139
+            1266:   135(bool) All 1265
+                              Store 1262(r000) 1266
+            1268:          68 Load 71(inF0)
+            1269:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 1268
+                              Store 1267(r001) 1269
+            1270:          68 Load 71(inF0)
+            1271:          68 ExtInst 1(GLSL.std.450) 17(Acos) 1270
+            1273:          68 Load 71(inF0)
+            1274:        1264 FOrdNotEqual 1273 139
+            1275:   135(bool) Any 1274
+                              Store 1272(r003) 1275
             1277:          68 Load 71(inF0)
-            1278:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 1277
-                              Store 1276(r010) 1278
+            1278:          68 ExtInst 1(GLSL.std.450) 16(Asin) 1277
+                              Store 1276(r004) 1278
             1280:          68 Load 71(inF0)
-            1281:          68 DPdx 1280
-                              Store 1279(r011) 1281
+            1281:          68 ExtInst 1(GLSL.std.450) 18(Atan) 1280
+                              Store 1279(r005) 1281
             1283:          68 Load 71(inF0)
-            1284:          68 DPdxCoarse 1283
-                              Store 1282(r012) 1284
-            1286:          68 Load 71(inF0)
-            1287:          68 DPdxFine 1286
-                              Store 1285(r013) 1287
+            1284:          68 Load 72(inF1)
+            1285:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 1283 1284
+                              Store 1282(r006) 1285
+            1287:          68 Load 71(inF0)
+            1288:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 1287
+                              Store 1286(r007) 1288
             1289:          68 Load 71(inF0)
-            1290:          68 DPdy 1289
-                              Store 1288(r014) 1290
-            1292:          68 Load 71(inF0)
-            1293:          68 DPdyCoarse 1292
-                              Store 1291(r015) 1293
-            1295:          68 Load 71(inF0)
-            1296:          68 DPdyFine 1295
-                              Store 1294(r016) 1296
-            1298:          68 Load 71(inF0)
-            1299:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 1298
-                              Store 1297(r017) 1299
-            1301:          68 Load 71(inF0)
-            1302:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1301
-                              Store 1300(r018) 1302
-            1304:          68 Load 71(inF0)
-            1305:          68 ExtInst 1(GLSL.std.450) 27(Exp) 1304
-                              Store 1303(r019) 1305
-            1307:          68 Load 71(inF0)
-            1308:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 1307
-                              Store 1306(R020) 1308
-            1310:          68 Load 71(inF0)
-            1311:          68 ExtInst 1(GLSL.std.450) 8(Floor) 1310
-                              Store 1309(r021) 1311
-            1313:          68 Load 71(inF0)
-            1314:          68 Load 72(inF1)
-            1315:   36(fvec3) CompositeExtract 1313 0
-            1316:   36(fvec3) CompositeExtract 1314 0
-            1317:   36(fvec3) FMod 1315 1316
-            1318:   36(fvec3) CompositeExtract 1313 1
-            1319:   36(fvec3) CompositeExtract 1314 1
-            1320:   36(fvec3) FMod 1318 1319
-            1321:   36(fvec3) CompositeExtract 1313 2
-            1322:   36(fvec3) CompositeExtract 1314 2
-            1323:   36(fvec3) FMod 1321 1322
-            1324:          68 CompositeConstruct 1317 1320 1323
-                              Store 1312(r022) 1324
+            1291:        1264 FOrdLessThan 1289 1290
+            1292:   135(bool) Any 1291
+                              SelectionMerge 1294 None
+                              BranchConditional 1292 1293 1294
+            1293:               Label
+                                Kill
+            1294:             Label
+            1297:          68 Load 71(inF0)
+            1298:          68 Load 72(inF1)
+            1299:          68 Load 73(inF2)
+            1300:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1297 1298 1299
+                              Store 1296(r008) 1300
+            1302:          68 Load 71(inF0)
+            1303:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1302
+                              Store 1301(r009) 1303
+            1305:          68 Load 71(inF0)
+            1306:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 1305
+                              Store 1304(r010) 1306
+            1308:          68 Load 71(inF0)
+            1309:          68 DPdx 1308
+                              Store 1307(r011) 1309
+            1311:          68 Load 71(inF0)
+            1312:          68 DPdxCoarse 1311
+                              Store 1310(r012) 1312
+            1314:          68 Load 71(inF0)
+            1315:          68 DPdxFine 1314
+                              Store 1313(r013) 1315
+            1317:          68 Load 71(inF0)
+            1318:          68 DPdy 1317
+                              Store 1316(r014) 1318
+            1320:          68 Load 71(inF0)
+            1321:          68 DPdyCoarse 1320
+                              Store 1319(r015) 1321
+            1323:          68 Load 71(inF0)
+            1324:          68 DPdyFine 1323
+                              Store 1322(r016) 1324
             1326:          68 Load 71(inF0)
-            1327:          68 ExtInst 1(GLSL.std.450) 10(Fract) 1326
-                              Store 1325(r023) 1327
+            1327:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 1326
+                              Store 1325(r017) 1327
             1329:          68 Load 71(inF0)
-            1330:          68 Fwidth 1329
-                              Store 1328(r025) 1330
+            1330:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1329
+                              Store 1328(r018) 1330
             1332:          68 Load 71(inF0)
-            1333:          68 Load 72(inF1)
-            1334:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 1332 1333
-                              Store 1331(r026) 1334
-            1336:          68 Load 71(inF0)
-            1337:          68 Load 72(inF1)
-            1338:          68 Load 73(inF2)
-            1339:          68 ExtInst 1(GLSL.std.450) 46(FMix) 1336 1337 1338
-                              Store 1335(r026a) 1339
+            1333:          68 ExtInst 1(GLSL.std.450) 27(Exp) 1332
+                              Store 1331(r019) 1333
+            1335:          68 Load 71(inF0)
+            1336:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 1335
+                              Store 1334(R020) 1336
+            1338:          68 Load 71(inF0)
+            1339:          68 ExtInst 1(GLSL.std.450) 8(Floor) 1338
+                              Store 1337(r021) 1339
             1341:          68 Load 71(inF0)
-            1342:          68 ExtInst 1(GLSL.std.450) 28(Log) 1341
-                              Store 1340(r027) 1342
-            1344:          68 Load 71(inF0)
-            1345:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1344
-            1346:          68 MatrixTimesScalar 1345 262
-                              Store 1343(r028) 1346
-            1348:          68 Load 71(inF0)
-            1349:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1348
-                              Store 1347(r029) 1349
-            1351:          68 Load 71(inF0)
-            1352:          68 Load 72(inF1)
-            1353:          68 ExtInst 1(GLSL.std.450) 40(FMax) 1351 1352
-                              Store 1350(r030) 1353
-            1355:          68 Load 71(inF0)
-            1356:          68 Load 72(inF1)
-            1357:          68 ExtInst 1(GLSL.std.450) 37(FMin) 1355 1356
-                              Store 1354(r031) 1357
-            1359:          68 Load 71(inF0)
-            1360:          68 Load 72(inF1)
-            1361:          68 ExtInst 1(GLSL.std.450) 26(Pow) 1359 1360
-                              Store 1358(r032) 1361
-            1363:          68 Load 71(inF0)
-            1364:          68 ExtInst 1(GLSL.std.450) 11(Radians) 1363
-                              Store 1362(r033) 1364
-            1366:          68 Load 71(inF0)
-            1367:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 1366
-                              Store 1365(r034) 1367
+            1342:          68 Load 72(inF1)
+            1343:   36(fvec3) CompositeExtract 1341 0
+            1344:   36(fvec3) CompositeExtract 1342 0
+            1345:   36(fvec3) FMod 1343 1344
+            1346:   36(fvec3) CompositeExtract 1341 1
+            1347:   36(fvec3) CompositeExtract 1342 1
+            1348:   36(fvec3) FMod 1346 1347
+            1349:   36(fvec3) CompositeExtract 1341 2
+            1350:   36(fvec3) CompositeExtract 1342 2
+            1351:   36(fvec3) FMod 1349 1350
+            1352:          68 CompositeConstruct 1345 1348 1351
+                              Store 1340(r022) 1352
+            1354:          68 Load 71(inF0)
+            1355:          68 ExtInst 1(GLSL.std.450) 10(Fract) 1354
+                              Store 1353(r023) 1355
+            1357:          68 Load 71(inF0)
+            1358:          68 Fwidth 1357
+                              Store 1356(r025) 1358
+            1360:          68 Load 71(inF0)
+            1361:          68 Load 72(inF1)
+            1362:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 1360 1361
+                              Store 1359(r026) 1362
+            1364:          68 Load 71(inF0)
+            1365:          68 Load 72(inF1)
+            1366:          68 Load 73(inF2)
+            1367:          68 ExtInst 1(GLSL.std.450) 46(FMix) 1364 1365 1366
+                              Store 1363(r026a) 1367
             1369:          68 Load 71(inF0)
-            1370:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1369
-                              Store 1368(r035) 1370
+            1370:          68 ExtInst 1(GLSL.std.450) 28(Log) 1369
+                              Store 1368(r027) 1370
             1372:          68 Load 71(inF0)
-            1373:   36(fvec3) CompositeConstruct 139 139 139
-            1374:   36(fvec3) CompositeConstruct 283 283 283
-            1375:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1372 1373 1374
-                              Store 1371(r036) 1375
-            1377:          68 Load 71(inF0)
-            1378:          68 ExtInst 1(GLSL.std.450) 6(FSign) 1377
-                              Store 1376(r037) 1378
-            1380:          68 Load 71(inF0)
-            1381:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1380
-                              Store 1379(r038) 1381
-            1382:          68 Load 71(inF0)
-            1383:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1382
-                              Store 72(inF1) 1383
-            1384:          68 Load 71(inF0)
-            1385:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1384
-                              Store 73(inF2) 1385
+            1373:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1372
+            1374:          68 MatrixTimesScalar 1373 268
+                              Store 1371(r028) 1374
+            1376:          68 Load 71(inF0)
+            1377:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1376
+                              Store 1375(r029) 1377
+            1379:          68 Load 71(inF0)
+            1380:          68 Load 72(inF1)
+            1381:          68 ExtInst 1(GLSL.std.450) 40(FMax) 1379 1380
+                              Store 1378(r030) 1381
+            1383:          68 Load 71(inF0)
+            1384:          68 Load 72(inF1)
+            1385:          68 ExtInst 1(GLSL.std.450) 37(FMin) 1383 1384
+                              Store 1382(r031) 1385
             1387:          68 Load 71(inF0)
-            1388:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 1387
-                              Store 1386(r039) 1388
-            1390:          68 Load 71(inF0)
-            1391:          68 Load 72(inF1)
-            1392:          68 Load 73(inF2)
-            1393:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1390 1391 1392
-                              Store 1389(r049) 1393
-            1395:          68 Load 71(inF0)
-            1396:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 1395
-                              Store 1394(r041) 1396
-            1398:          68 Load 71(inF0)
-            1399:          68 Load 72(inF1)
-            1400:          68 ExtInst 1(GLSL.std.450) 48(Step) 1398 1399
-                              Store 1397(r042) 1400
-            1402:          68 Load 71(inF0)
-            1403:          68 ExtInst 1(GLSL.std.450) 15(Tan) 1402
-                              Store 1401(r043) 1403
+            1388:          68 Load 72(inF1)
+            1389:          68 ExtInst 1(GLSL.std.450) 26(Pow) 1387 1388
+                              Store 1386(r032) 1389
+            1391:          68 Load 71(inF0)
+            1392:          68 ExtInst 1(GLSL.std.450) 11(Radians) 1391
+                              Store 1390(r033) 1392
+            1394:          68 Load 71(inF0)
+            1395:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 1394
+                              Store 1393(r034) 1395
+            1397:          68 Load 71(inF0)
+            1398:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1397
+                              Store 1396(r035) 1398
+            1400:          68 Load 71(inF0)
+            1401:   36(fvec3) CompositeConstruct 139 139 139
+            1402:   36(fvec3) CompositeConstruct 289 289 289
+            1403:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 1400 1401 1402
+                              Store 1399(r036) 1403
             1405:          68 Load 71(inF0)
-            1406:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 1405
-                              Store 1404(r044) 1406
-            1407:          68 Load 71(inF0)
-            1408:          68 Transpose 1407
+            1406:          68 ExtInst 1(GLSL.std.450) 6(FSign) 1405
+                              Store 1404(r037) 1406
+            1408:          68 Load 71(inF0)
+            1409:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1408
+                              Store 1407(r038) 1409
             1410:          68 Load 71(inF0)
-            1411:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 1410
-                              Store 1409(r046) 1411
-                              ReturnValue 1413
+            1411:          68 ExtInst 1(GLSL.std.450) 13(Sin) 1410
+                              Store 72(inF1) 1411
+            1412:          68 Load 71(inF0)
+            1413:          68 ExtInst 1(GLSL.std.450) 14(Cos) 1412
+                              Store 73(inF2) 1413
+            1415:          68 Load 71(inF0)
+            1416:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 1415
+                              Store 1414(r039) 1416
+            1418:          68 Load 71(inF0)
+            1419:          68 Load 72(inF1)
+            1420:          68 Load 73(inF2)
+            1421:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1418 1419 1420
+                              Store 1417(r049) 1421
+            1423:          68 Load 71(inF0)
+            1424:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 1423
+                              Store 1422(r041) 1424
+            1426:          68 Load 71(inF0)
+            1427:          68 Load 72(inF1)
+            1428:          68 ExtInst 1(GLSL.std.450) 48(Step) 1426 1427
+                              Store 1425(r042) 1428
+            1430:          68 Load 71(inF0)
+            1431:          68 ExtInst 1(GLSL.std.450) 15(Tan) 1430
+                              Store 1429(r043) 1431
+            1433:          68 Load 71(inF0)
+            1434:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 1433
+                              Store 1432(r044) 1434
+            1435:          68 Load 71(inF0)
+            1436:          68 Transpose 1435
+            1438:          68 Load 71(inF0)
+            1439:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 1438
+                              Store 1437(r046) 1439
+                              ReturnValue 1441
                               FunctionEnd
 82(PixelShaderFunction4x4(mf44;mf44;mf44;):          76 Function None 78
         79(inF0):     77(ptr) FunctionParameter
         80(inF1):     77(ptr) FunctionParameter
         81(inF2):     77(ptr) FunctionParameter
               83:             Label
-      1416(r000):    136(ptr) Variable Function
-      1421(r001):     77(ptr) Variable Function
-      1426(r003):    136(ptr) Variable Function
-      1430(r004):     77(ptr) Variable Function
-      1433(r005):     77(ptr) Variable Function
-      1436(r006):     77(ptr) Variable Function
-      1440(r007):     77(ptr) Variable Function
-      1450(r008):     77(ptr) Variable Function
-      1455(r009):     77(ptr) Variable Function
-      1458(r010):     77(ptr) Variable Function
-      1461(r011):     77(ptr) Variable Function
-      1464(r012):     77(ptr) Variable Function
-      1467(r013):     77(ptr) Variable Function
-      1470(r014):     77(ptr) Variable Function
-      1473(r015):     77(ptr) Variable Function
-      1476(r016):     77(ptr) Variable Function
-      1479(r017):     77(ptr) Variable Function
-      1482(r018):      7(ptr) Variable Function
-      1485(r019):     77(ptr) Variable Function
-      1488(R020):     77(ptr) Variable Function
-      1491(r021):     77(ptr) Variable Function
-      1494(r022):     77(ptr) Variable Function
-      1510(r023):     77(ptr) Variable Function
-      1513(r025):     77(ptr) Variable Function
-      1516(r026):     77(ptr) Variable Function
-     1520(r026a):     77(ptr) Variable Function
-      1525(r027):     77(ptr) Variable Function
-      1528(r028):     77(ptr) Variable Function
-      1532(r029):     77(ptr) Variable Function
-      1535(r030):     77(ptr) Variable Function
-      1539(r031):     77(ptr) Variable Function
-      1543(r032):     77(ptr) Variable Function
-      1547(r033):     77(ptr) Variable Function
-      1550(r034):     77(ptr) Variable Function
-      1553(r035):     77(ptr) Variable Function
-      1556(r036):     77(ptr) Variable Function
-      1561(r037):     77(ptr) Variable Function
-      1564(r038):     77(ptr) Variable Function
-      1571(r039):     77(ptr) Variable Function
-      1574(r049):     77(ptr) Variable Function
-      1579(r041):     77(ptr) Variable Function
-      1582(r042):     77(ptr) Variable Function
-      1586(r043):     77(ptr) Variable Function
-      1589(r044):     77(ptr) Variable Function
-      1594(r046):     77(ptr) Variable Function
-            1417:          76 Load 79(inF0)
-            1419:        1418 FOrdNotEqual 1417 139
-            1420:   135(bool) All 1419
-                              Store 1416(r000) 1420
-            1422:          76 Load 79(inF0)
-            1423:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 1422
-                              Store 1421(r001) 1423
-            1424:          76 Load 79(inF0)
-            1425:          76 ExtInst 1(GLSL.std.450) 17(Acos) 1424
-            1427:          76 Load 79(inF0)
-            1428:        1418 FOrdNotEqual 1427 139
-            1429:   135(bool) Any 1428
-                              Store 1426(r003) 1429
-            1431:          76 Load 79(inF0)
-            1432:          76 ExtInst 1(GLSL.std.450) 16(Asin) 1431
-                              Store 1430(r004) 1432
-            1434:          76 Load 79(inF0)
-            1435:          76 ExtInst 1(GLSL.std.450) 18(Atan) 1434
-                              Store 1433(r005) 1435
-            1437:          76 Load 79(inF0)
-            1438:          76 Load 80(inF1)
-            1439:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 1437 1438
-                              Store 1436(r006) 1439
-            1441:          76 Load 79(inF0)
-            1442:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 1441
-                              Store 1440(r007) 1442
-            1443:          76 Load 79(inF0)
-            1445:        1418 FOrdLessThan 1443 1444
-            1446:   135(bool) Any 1445
-                              SelectionMerge 1448 None
-                              BranchConditional 1446 1447 1448
-            1447:               Label
-                                Kill
-            1448:             Label
-            1451:          76 Load 79(inF0)
-            1452:          76 Load 80(inF1)
-            1453:          76 Load 81(inF2)
-            1454:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1451 1452 1453
-                              Store 1450(r008) 1454
-            1456:          76 Load 79(inF0)
-            1457:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1456
-                              Store 1455(r009) 1457
+      1444(r000):    136(ptr) Variable Function
+      1449(r001):     77(ptr) Variable Function
+      1454(r003):    136(ptr) Variable Function
+      1458(r004):     77(ptr) Variable Function
+      1461(r005):     77(ptr) Variable Function
+      1464(r006):     77(ptr) Variable Function
+      1468(r007):     77(ptr) Variable Function
+      1478(r008):     77(ptr) Variable Function
+      1483(r009):     77(ptr) Variable Function
+      1486(r010):     77(ptr) Variable Function
+      1489(r011):     77(ptr) Variable Function
+      1492(r012):     77(ptr) Variable Function
+      1495(r013):     77(ptr) Variable Function
+      1498(r014):     77(ptr) Variable Function
+      1501(r015):     77(ptr) Variable Function
+      1504(r016):     77(ptr) Variable Function
+      1507(r017):     77(ptr) Variable Function
+      1510(r018):      7(ptr) Variable Function
+      1513(r019):     77(ptr) Variable Function
+      1516(R020):     77(ptr) Variable Function
+      1519(r021):     77(ptr) Variable Function
+      1522(r022):     77(ptr) Variable Function
+      1538(r023):     77(ptr) Variable Function
+      1541(r025):     77(ptr) Variable Function
+      1544(r026):     77(ptr) Variable Function
+     1548(r026a):     77(ptr) Variable Function
+      1553(r027):     77(ptr) Variable Function
+      1556(r028):     77(ptr) Variable Function
+      1560(r029):     77(ptr) Variable Function
+      1563(r030):     77(ptr) Variable Function
+      1567(r031):     77(ptr) Variable Function
+      1571(r032):     77(ptr) Variable Function
+      1575(r033):     77(ptr) Variable Function
+      1578(r034):     77(ptr) Variable Function
+      1581(r035):     77(ptr) Variable Function
+      1584(r036):     77(ptr) Variable Function
+      1589(r037):     77(ptr) Variable Function
+      1592(r038):     77(ptr) Variable Function
+      1599(r039):     77(ptr) Variable Function
+      1602(r049):     77(ptr) Variable Function
+      1607(r041):     77(ptr) Variable Function
+      1610(r042):     77(ptr) Variable Function
+      1614(r043):     77(ptr) Variable Function
+      1617(r044):     77(ptr) Variable Function
+      1622(r046):     77(ptr) Variable Function
+            1445:          76 Load 79(inF0)
+            1447:        1446 FOrdNotEqual 1445 139
+            1448:   135(bool) All 1447
+                              Store 1444(r000) 1448
+            1450:          76 Load 79(inF0)
+            1451:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 1450
+                              Store 1449(r001) 1451
+            1452:          76 Load 79(inF0)
+            1453:          76 ExtInst 1(GLSL.std.450) 17(Acos) 1452
+            1455:          76 Load 79(inF0)
+            1456:        1446 FOrdNotEqual 1455 139
+            1457:   135(bool) Any 1456
+                              Store 1454(r003) 1457
             1459:          76 Load 79(inF0)
-            1460:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 1459
-                              Store 1458(r010) 1460
+            1460:          76 ExtInst 1(GLSL.std.450) 16(Asin) 1459
+                              Store 1458(r004) 1460
             1462:          76 Load 79(inF0)
-            1463:          76 DPdx 1462
-                              Store 1461(r011) 1463
+            1463:          76 ExtInst 1(GLSL.std.450) 18(Atan) 1462
+                              Store 1461(r005) 1463
             1465:          76 Load 79(inF0)
-            1466:          76 DPdxCoarse 1465
-                              Store 1464(r012) 1466
-            1468:          76 Load 79(inF0)
-            1469:          76 DPdxFine 1468
-                              Store 1467(r013) 1469
+            1466:          76 Load 80(inF1)
+            1467:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 1465 1466
+                              Store 1464(r006) 1467
+            1469:          76 Load 79(inF0)
+            1470:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 1469
+                              Store 1468(r007) 1470
             1471:          76 Load 79(inF0)
-            1472:          76 DPdy 1471
-                              Store 1470(r014) 1472
-            1474:          76 Load 79(inF0)
-            1475:          76 DPdyCoarse 1474
-                              Store 1473(r015) 1475
-            1477:          76 Load 79(inF0)
-            1478:          76 DPdyFine 1477
-                              Store 1476(r016) 1478
-            1480:          76 Load 79(inF0)
-            1481:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 1480
-                              Store 1479(r017) 1481
-            1483:          76 Load 79(inF0)
-            1484:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1483
-                              Store 1482(r018) 1484
-            1486:          76 Load 79(inF0)
-            1487:          76 ExtInst 1(GLSL.std.450) 27(Exp) 1486
-                              Store 1485(r019) 1487
-            1489:          76 Load 79(inF0)
-            1490:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 1489
-                              Store 1488(R020) 1490
-            1492:          76 Load 79(inF0)
-            1493:          76 ExtInst 1(GLSL.std.450) 8(Floor) 1492
-                              Store 1491(r021) 1493
-            1495:          76 Load 79(inF0)
-            1496:          76 Load 80(inF1)
-            1497:   48(fvec4) CompositeExtract 1495 0
-            1498:   48(fvec4) CompositeExtract 1496 0
-            1499:   48(fvec4) FMod 1497 1498
-            1500:   48(fvec4) CompositeExtract 1495 1
-            1501:   48(fvec4) CompositeExtract 1496 1
-            1502:   48(fvec4) FMod 1500 1501
-            1503:   48(fvec4) CompositeExtract 1495 2
-            1504:   48(fvec4) CompositeExtract 1496 2
-            1505:   48(fvec4) FMod 1503 1504
-            1506:   48(fvec4) CompositeExtract 1495 3
-            1507:   48(fvec4) CompositeExtract 1496 3
-            1508:   48(fvec4) FMod 1506 1507
-            1509:          76 CompositeConstruct 1499 1502 1505 1508
-                              Store 1494(r022) 1509
+            1473:        1446 FOrdLessThan 1471 1472
+            1474:   135(bool) Any 1473
+                              SelectionMerge 1476 None
+                              BranchConditional 1474 1475 1476
+            1475:               Label
+                                Kill
+            1476:             Label
+            1479:          76 Load 79(inF0)
+            1480:          76 Load 80(inF1)
+            1481:          76 Load 81(inF2)
+            1482:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1479 1480 1481
+                              Store 1478(r008) 1482
+            1484:          76 Load 79(inF0)
+            1485:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1484
+                              Store 1483(r009) 1485
+            1487:          76 Load 79(inF0)
+            1488:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 1487
+                              Store 1486(r010) 1488
+            1490:          76 Load 79(inF0)
+            1491:          76 DPdx 1490
+                              Store 1489(r011) 1491
+            1493:          76 Load 79(inF0)
+            1494:          76 DPdxCoarse 1493
+                              Store 1492(r012) 1494
+            1496:          76 Load 79(inF0)
+            1497:          76 DPdxFine 1496
+                              Store 1495(r013) 1497
+            1499:          76 Load 79(inF0)
+            1500:          76 DPdy 1499
+                              Store 1498(r014) 1500
+            1502:          76 Load 79(inF0)
+            1503:          76 DPdyCoarse 1502
+                              Store 1501(r015) 1503
+            1505:          76 Load 79(inF0)
+            1506:          76 DPdyFine 1505
+                              Store 1504(r016) 1506
+            1508:          76 Load 79(inF0)
+            1509:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 1508
+                              Store 1507(r017) 1509
             1511:          76 Load 79(inF0)
-            1512:          76 ExtInst 1(GLSL.std.450) 10(Fract) 1511
-                              Store 1510(r023) 1512
+            1512:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1511
+                              Store 1510(r018) 1512
             1514:          76 Load 79(inF0)
-            1515:          76 Fwidth 1514
-                              Store 1513(r025) 1515
+            1515:          76 ExtInst 1(GLSL.std.450) 27(Exp) 1514
+                              Store 1513(r019) 1515
             1517:          76 Load 79(inF0)
-            1518:          76 Load 80(inF1)
-            1519:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1517 1518
-                              Store 1516(r026) 1519
-            1521:          76 Load 79(inF0)
-            1522:          76 Load 80(inF1)
-            1523:          76 Load 81(inF2)
-            1524:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1521 1522 1523
-                              Store 1520(r026a) 1524
-            1526:          76 Load 79(inF0)
-            1527:          76 ExtInst 1(GLSL.std.450) 28(Log) 1526
-                              Store 1525(r027) 1527
-            1529:          76 Load 79(inF0)
-            1530:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1529
-            1531:          76 MatrixTimesScalar 1530 262
-                              Store 1528(r028) 1531
-            1533:          76 Load 79(inF0)
-            1534:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1533
-                              Store 1532(r029) 1534
-            1536:          76 Load 79(inF0)
-            1537:          76 Load 80(inF1)
-            1538:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1536 1537
-                              Store 1535(r030) 1538
-            1540:          76 Load 79(inF0)
-            1541:          76 Load 80(inF1)
-            1542:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1540 1541
-                              Store 1539(r031) 1542
-            1544:          76 Load 79(inF0)
-            1545:          76 Load 80(inF1)
-            1546:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1544 1545
-                              Store 1543(r032) 1546
-            1548:          76 Load 79(inF0)
-            1549:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1548
-                              Store 1547(r033) 1549
-            1551:          76 Load 79(inF0)
-            1552:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1551
-                              Store 1550(r034) 1552
+            1518:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 1517
+                              Store 1516(R020) 1518
+            1520:          76 Load 79(inF0)
+            1521:          76 ExtInst 1(GLSL.std.450) 8(Floor) 1520
+                              Store 1519(r021) 1521
+            1523:          76 Load 79(inF0)
+            1524:          76 Load 80(inF1)
+            1525:   48(fvec4) CompositeExtract 1523 0
+            1526:   48(fvec4) CompositeExtract 1524 0
+            1527:   48(fvec4) FMod 1525 1526
+            1528:   48(fvec4) CompositeExtract 1523 1
+            1529:   48(fvec4) CompositeExtract 1524 1
+            1530:   48(fvec4) FMod 1528 1529
+            1531:   48(fvec4) CompositeExtract 1523 2
+            1532:   48(fvec4) CompositeExtract 1524 2
+            1533:   48(fvec4) FMod 1531 1532
+            1534:   48(fvec4) CompositeExtract 1523 3
+            1535:   48(fvec4) CompositeExtract 1524 3
+            1536:   48(fvec4) FMod 1534 1535
+            1537:          76 CompositeConstruct 1527 1530 1533 1536
+                              Store 1522(r022) 1537
+            1539:          76 Load 79(inF0)
+            1540:          76 ExtInst 1(GLSL.std.450) 10(Fract) 1539
+                              Store 1538(r023) 1540
+            1542:          76 Load 79(inF0)
+            1543:          76 Fwidth 1542
+                              Store 1541(r025) 1543
+            1545:          76 Load 79(inF0)
+            1546:          76 Load 80(inF1)
+            1547:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 1545 1546
+                              Store 1544(r026) 1547
+            1549:          76 Load 79(inF0)
+            1550:          76 Load 80(inF1)
+            1551:          76 Load 81(inF2)
+            1552:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1549 1550 1551
+                              Store 1548(r026a) 1552
             1554:          76 Load 79(inF0)
-            1555:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1554
-                              Store 1553(r035) 1555
+            1555:          76 ExtInst 1(GLSL.std.450) 28(Log) 1554
+                              Store 1553(r027) 1555
             1557:          76 Load 79(inF0)
-            1558:   48(fvec4) CompositeConstruct 139 139 139 139
-            1559:   48(fvec4) CompositeConstruct 283 283 283 283
-            1560:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1557 1558 1559
-                              Store 1556(r036) 1560
-            1562:          76 Load 79(inF0)
-            1563:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1562
-                              Store 1561(r037) 1563
-            1565:          76 Load 79(inF0)
-            1566:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1565
-                              Store 1564(r038) 1566
-            1567:          76 Load 79(inF0)
-            1568:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1567
-                              Store 80(inF1) 1568
-            1569:          76 Load 79(inF0)
-            1570:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1569
-                              Store 81(inF2) 1570
+            1558:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1557
+            1559:          76 MatrixTimesScalar 1558 268
+                              Store 1556(r028) 1559
+            1561:          76 Load 79(inF0)
+            1562:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1561
+                              Store 1560(r029) 1562
+            1564:          76 Load 79(inF0)
+            1565:          76 Load 80(inF1)
+            1566:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1564 1565
+                              Store 1563(r030) 1566
+            1568:          76 Load 79(inF0)
+            1569:          76 Load 80(inF1)
+            1570:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1568 1569
+                              Store 1567(r031) 1570
             1572:          76 Load 79(inF0)
-            1573:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1572
-                              Store 1571(r039) 1573
-            1575:          76 Load 79(inF0)
-            1576:          76 Load 80(inF1)
-            1577:          76 Load 81(inF2)
-            1578:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1575 1576 1577
-                              Store 1574(r049) 1578
-            1580:          76 Load 79(inF0)
-            1581:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1580
-                              Store 1579(r041) 1581
-            1583:          76 Load 79(inF0)
-            1584:          76 Load 80(inF1)
-            1585:          76 ExtInst 1(GLSL.std.450) 48(Step) 1583 1584
-                              Store 1582(r042) 1585
-            1587:          76 Load 79(inF0)
-            1588:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1587
-                              Store 1586(r043) 1588
+            1573:          76 Load 80(inF1)
+            1574:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1572 1573
+                              Store 1571(r032) 1574
+            1576:          76 Load 79(inF0)
+            1577:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1576
+                              Store 1575(r033) 1577
+            1579:          76 Load 79(inF0)
+            1580:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1579
+                              Store 1578(r034) 1580
+            1582:          76 Load 79(inF0)
+            1583:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1582
+                              Store 1581(r035) 1583
+            1585:          76 Load 79(inF0)
+            1586:   48(fvec4) CompositeConstruct 139 139 139 139
+            1587:   48(fvec4) CompositeConstruct 289 289 289 289
+            1588:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1585 1586 1587
+                              Store 1584(r036) 1588
             1590:          76 Load 79(inF0)
-            1591:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1590
-                              Store 1589(r044) 1591
-            1592:          76 Load 79(inF0)
-            1593:          76 Transpose 1592
+            1591:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1590
+                              Store 1589(r037) 1591
+            1593:          76 Load 79(inF0)
+            1594:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1593
+                              Store 1592(r038) 1594
             1595:          76 Load 79(inF0)
-            1596:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1595
-                              Store 1594(r046) 1596
-                              ReturnValue 1598
+            1596:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1595
+                              Store 80(inF1) 1596
+            1597:          76 Load 79(inF0)
+            1598:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1597
+                              Store 81(inF2) 1598
+            1600:          76 Load 79(inF0)
+            1601:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1600
+                              Store 1599(r039) 1601
+            1603:          76 Load 79(inF0)
+            1604:          76 Load 80(inF1)
+            1605:          76 Load 81(inF2)
+            1606:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1603 1604 1605
+                              Store 1602(r049) 1606
+            1608:          76 Load 79(inF0)
+            1609:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1608
+                              Store 1607(r041) 1609
+            1611:          76 Load 79(inF0)
+            1612:          76 Load 80(inF1)
+            1613:          76 ExtInst 1(GLSL.std.450) 48(Step) 1611 1612
+                              Store 1610(r042) 1613
+            1615:          76 Load 79(inF0)
+            1616:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1615
+                              Store 1614(r043) 1616
+            1618:          76 Load 79(inF0)
+            1619:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1618
+                              Store 1617(r044) 1619
+            1620:          76 Load 79(inF0)
+            1621:          76 Transpose 1620
+            1623:          76 Load 79(inF0)
+            1624:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1623
+                              Store 1622(r046) 1624
+                              ReturnValue 1626
                               FunctionEnd
 91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 84
         85(inF0):      7(ptr) FunctionParameter
@@ -8076,51 +8193,51 @@
        89(inFM0):     61(ptr) FunctionParameter
        90(inFM1):     61(ptr) FunctionParameter
               92:             Label
-        1601(r0):      7(ptr) Variable Function
-        1605(r1):     25(ptr) Variable Function
-        1609(r2):     25(ptr) Variable Function
-        1613(r3):      7(ptr) Variable Function
-        1617(r4):     25(ptr) Variable Function
-        1621(r5):     25(ptr) Variable Function
-        1625(r6):     61(ptr) Variable Function
-        1629(r7):     61(ptr) Variable Function
-        1633(r8):     61(ptr) Variable Function
-            1602:    6(float) Load 86(inF1)
-            1603:    6(float) Load 85(inF0)
-            1604:    6(float) FMul 1602 1603
-                              Store 1601(r0) 1604
-            1606:    6(float) Load 85(inF0)
-            1607:   24(fvec2) Load 87(inFV0)
-            1608:   24(fvec2) VectorTimesScalar 1607 1606
-                              Store 1605(r1) 1608
-            1610:   24(fvec2) Load 87(inFV0)
-            1611:    6(float) Load 85(inF0)
-            1612:   24(fvec2) VectorTimesScalar 1610 1611
-                              Store 1609(r2) 1612
-            1614:   24(fvec2) Load 87(inFV0)
-            1615:   24(fvec2) Load 88(inFV1)
-            1616:    6(float) Dot 1614 1615
-                              Store 1613(r3) 1616
-            1618:   24(fvec2) Load 87(inFV0)
-            1619:          60 Load 89(inFM0)
-            1620:   24(fvec2) VectorTimesMatrix 1618 1619
-                              Store 1617(r4) 1620
-            1622:          60 Load 89(inFM0)
-            1623:   24(fvec2) Load 87(inFV0)
-            1624:   24(fvec2) MatrixTimesVector 1622 1623
-                              Store 1621(r5) 1624
-            1626:    6(float) Load 85(inF0)
-            1627:          60 Load 89(inFM0)
-            1628:          60 MatrixTimesScalar 1627 1626
-                              Store 1625(r6) 1628
-            1630:          60 Load 89(inFM0)
+        1629(r0):      7(ptr) Variable Function
+        1633(r1):     25(ptr) Variable Function
+        1637(r2):     25(ptr) Variable Function
+        1641(r3):      7(ptr) Variable Function
+        1645(r4):     25(ptr) Variable Function
+        1649(r5):     25(ptr) Variable Function
+        1653(r6):     61(ptr) Variable Function
+        1657(r7):     61(ptr) Variable Function
+        1661(r8):     61(ptr) Variable Function
+            1630:    6(float) Load 86(inF1)
             1631:    6(float) Load 85(inF0)
-            1632:          60 MatrixTimesScalar 1630 1631
-                              Store 1629(r7) 1632
-            1634:          60 Load 90(inFM1)
-            1635:          60 Load 89(inFM0)
-            1636:          60 MatrixTimesMatrix 1634 1635
-                              Store 1633(r8) 1636
+            1632:    6(float) FMul 1630 1631
+                              Store 1629(r0) 1632
+            1634:    6(float) Load 85(inF0)
+            1635:   24(fvec2) Load 87(inFV0)
+            1636:   24(fvec2) VectorTimesScalar 1635 1634
+                              Store 1633(r1) 1636
+            1638:   24(fvec2) Load 87(inFV0)
+            1639:    6(float) Load 85(inF0)
+            1640:   24(fvec2) VectorTimesScalar 1638 1639
+                              Store 1637(r2) 1640
+            1642:   24(fvec2) Load 87(inFV0)
+            1643:   24(fvec2) Load 88(inFV1)
+            1644:    6(float) Dot 1642 1643
+                              Store 1641(r3) 1644
+            1646:   24(fvec2) Load 87(inFV0)
+            1647:          60 Load 89(inFM0)
+            1648:   24(fvec2) VectorTimesMatrix 1646 1647
+                              Store 1645(r4) 1648
+            1650:          60 Load 89(inFM0)
+            1651:   24(fvec2) Load 87(inFV0)
+            1652:   24(fvec2) MatrixTimesVector 1650 1651
+                              Store 1649(r5) 1652
+            1654:    6(float) Load 85(inF0)
+            1655:          60 Load 89(inFM0)
+            1656:          60 MatrixTimesScalar 1655 1654
+                              Store 1653(r6) 1656
+            1658:          60 Load 89(inFM0)
+            1659:    6(float) Load 85(inF0)
+            1660:          60 MatrixTimesScalar 1658 1659
+                              Store 1657(r7) 1660
+            1662:          60 Load 90(inFM1)
+            1663:          60 Load 89(inFM0)
+            1664:          60 MatrixTimesMatrix 1662 1663
+                              Store 1661(r8) 1664
                               Return
                               FunctionEnd
 100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 93
@@ -8131,51 +8248,51 @@
        98(inFM0):     69(ptr) FunctionParameter
        99(inFM1):     69(ptr) FunctionParameter
              101:             Label
-        1637(r0):      7(ptr) Variable Function
-        1641(r1):     37(ptr) Variable Function
-        1645(r2):     37(ptr) Variable Function
-        1649(r3):      7(ptr) Variable Function
-        1653(r4):     37(ptr) Variable Function
-        1657(r5):     37(ptr) Variable Function
-        1661(r6):     69(ptr) Variable Function
-        1665(r7):     69(ptr) Variable Function
-        1669(r8):     69(ptr) Variable Function
-            1638:    6(float) Load 95(inF1)
-            1639:    6(float) Load 94(inF0)
-            1640:    6(float) FMul 1638 1639
-                              Store 1637(r0) 1640
-            1642:    6(float) Load 94(inF0)
-            1643:   36(fvec3) Load 96(inFV0)
-            1644:   36(fvec3) VectorTimesScalar 1643 1642
-                              Store 1641(r1) 1644
-            1646:   36(fvec3) Load 96(inFV0)
-            1647:    6(float) Load 94(inF0)
-            1648:   36(fvec3) VectorTimesScalar 1646 1647
-                              Store 1645(r2) 1648
-            1650:   36(fvec3) Load 96(inFV0)
-            1651:   36(fvec3) Load 97(inFV1)
-            1652:    6(float) Dot 1650 1651
-                              Store 1649(r3) 1652
-            1654:   36(fvec3) Load 96(inFV0)
-            1655:          68 Load 98(inFM0)
-            1656:   36(fvec3) VectorTimesMatrix 1654 1655
-                              Store 1653(r4) 1656
-            1658:          68 Load 98(inFM0)
-            1659:   36(fvec3) Load 96(inFV0)
-            1660:   36(fvec3) MatrixTimesVector 1658 1659
-                              Store 1657(r5) 1660
-            1662:    6(float) Load 94(inF0)
-            1663:          68 Load 98(inFM0)
-            1664:          68 MatrixTimesScalar 1663 1662
-                              Store 1661(r6) 1664
-            1666:          68 Load 98(inFM0)
+        1665(r0):      7(ptr) Variable Function
+        1669(r1):     37(ptr) Variable Function
+        1673(r2):     37(ptr) Variable Function
+        1677(r3):      7(ptr) Variable Function
+        1681(r4):     37(ptr) Variable Function
+        1685(r5):     37(ptr) Variable Function
+        1689(r6):     69(ptr) Variable Function
+        1693(r7):     69(ptr) Variable Function
+        1697(r8):     69(ptr) Variable Function
+            1666:    6(float) Load 95(inF1)
             1667:    6(float) Load 94(inF0)
-            1668:          68 MatrixTimesScalar 1666 1667
-                              Store 1665(r7) 1668
-            1670:          68 Load 99(inFM1)
-            1671:          68 Load 98(inFM0)
-            1672:          68 MatrixTimesMatrix 1670 1671
-                              Store 1669(r8) 1672
+            1668:    6(float) FMul 1666 1667
+                              Store 1665(r0) 1668
+            1670:    6(float) Load 94(inF0)
+            1671:   36(fvec3) Load 96(inFV0)
+            1672:   36(fvec3) VectorTimesScalar 1671 1670
+                              Store 1669(r1) 1672
+            1674:   36(fvec3) Load 96(inFV0)
+            1675:    6(float) Load 94(inF0)
+            1676:   36(fvec3) VectorTimesScalar 1674 1675
+                              Store 1673(r2) 1676
+            1678:   36(fvec3) Load 96(inFV0)
+            1679:   36(fvec3) Load 97(inFV1)
+            1680:    6(float) Dot 1678 1679
+                              Store 1677(r3) 1680
+            1682:   36(fvec3) Load 96(inFV0)
+            1683:          68 Load 98(inFM0)
+            1684:   36(fvec3) VectorTimesMatrix 1682 1683
+                              Store 1681(r4) 1684
+            1686:          68 Load 98(inFM0)
+            1687:   36(fvec3) Load 96(inFV0)
+            1688:   36(fvec3) MatrixTimesVector 1686 1687
+                              Store 1685(r5) 1688
+            1690:    6(float) Load 94(inF0)
+            1691:          68 Load 98(inFM0)
+            1692:          68 MatrixTimesScalar 1691 1690
+                              Store 1689(r6) 1692
+            1694:          68 Load 98(inFM0)
+            1695:    6(float) Load 94(inF0)
+            1696:          68 MatrixTimesScalar 1694 1695
+                              Store 1693(r7) 1696
+            1698:          68 Load 99(inFM1)
+            1699:          68 Load 98(inFM0)
+            1700:          68 MatrixTimesMatrix 1698 1699
+                              Store 1697(r8) 1700
                               Return
                               FunctionEnd
 109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 102
@@ -8186,51 +8303,51 @@
       107(inFM0):     77(ptr) FunctionParameter
       108(inFM1):     77(ptr) FunctionParameter
              110:             Label
-        1673(r0):      7(ptr) Variable Function
-        1677(r1):     49(ptr) Variable Function
-        1681(r2):     49(ptr) Variable Function
-        1685(r3):      7(ptr) Variable Function
-        1689(r4):     49(ptr) Variable Function
-        1693(r5):     49(ptr) Variable Function
-        1697(r6):     77(ptr) Variable Function
-        1701(r7):     77(ptr) Variable Function
-        1705(r8):     77(ptr) Variable Function
-            1674:    6(float) Load 104(inF1)
-            1675:    6(float) Load 103(inF0)
-            1676:    6(float) FMul 1674 1675
-                              Store 1673(r0) 1676
-            1678:    6(float) Load 103(inF0)
-            1679:   48(fvec4) Load 105(inFV0)
-            1680:   48(fvec4) VectorTimesScalar 1679 1678
-                              Store 1677(r1) 1680
-            1682:   48(fvec4) Load 105(inFV0)
-            1683:    6(float) Load 103(inF0)
-            1684:   48(fvec4) VectorTimesScalar 1682 1683
-                              Store 1681(r2) 1684
-            1686:   48(fvec4) Load 105(inFV0)
-            1687:   48(fvec4) Load 106(inFV1)
-            1688:    6(float) Dot 1686 1687
-                              Store 1685(r3) 1688
-            1690:   48(fvec4) Load 105(inFV0)
-            1691:          76 Load 107(inFM0)
-            1692:   48(fvec4) VectorTimesMatrix 1690 1691
-                              Store 1689(r4) 1692
-            1694:          76 Load 107(inFM0)
-            1695:   48(fvec4) Load 105(inFV0)
-            1696:   48(fvec4) MatrixTimesVector 1694 1695
-                              Store 1693(r5) 1696
-            1698:    6(float) Load 103(inF0)
-            1699:          76 Load 107(inFM0)
-            1700:          76 MatrixTimesScalar 1699 1698
-                              Store 1697(r6) 1700
-            1702:          76 Load 107(inFM0)
+        1701(r0):      7(ptr) Variable Function
+        1705(r1):     49(ptr) Variable Function
+        1709(r2):     49(ptr) Variable Function
+        1713(r3):      7(ptr) Variable Function
+        1717(r4):     49(ptr) Variable Function
+        1721(r5):     49(ptr) Variable Function
+        1725(r6):     77(ptr) Variable Function
+        1729(r7):     77(ptr) Variable Function
+        1733(r8):     77(ptr) Variable Function
+            1702:    6(float) Load 104(inF1)
             1703:    6(float) Load 103(inF0)
-            1704:          76 MatrixTimesScalar 1702 1703
-                              Store 1701(r7) 1704
-            1706:          76 Load 108(inFM1)
-            1707:          76 Load 107(inFM0)
-            1708:          76 MatrixTimesMatrix 1706 1707
-                              Store 1705(r8) 1708
+            1704:    6(float) FMul 1702 1703
+                              Store 1701(r0) 1704
+            1706:    6(float) Load 103(inF0)
+            1707:   48(fvec4) Load 105(inFV0)
+            1708:   48(fvec4) VectorTimesScalar 1707 1706
+                              Store 1705(r1) 1708
+            1710:   48(fvec4) Load 105(inFV0)
+            1711:    6(float) Load 103(inF0)
+            1712:   48(fvec4) VectorTimesScalar 1710 1711
+                              Store 1709(r2) 1712
+            1714:   48(fvec4) Load 105(inFV0)
+            1715:   48(fvec4) Load 106(inFV1)
+            1716:    6(float) Dot 1714 1715
+                              Store 1713(r3) 1716
+            1718:   48(fvec4) Load 105(inFV0)
+            1719:          76 Load 107(inFM0)
+            1720:   48(fvec4) VectorTimesMatrix 1718 1719
+                              Store 1717(r4) 1720
+            1722:          76 Load 107(inFM0)
+            1723:   48(fvec4) Load 105(inFV0)
+            1724:   48(fvec4) MatrixTimesVector 1722 1723
+                              Store 1721(r5) 1724
+            1726:    6(float) Load 103(inF0)
+            1727:          76 Load 107(inFM0)
+            1728:          76 MatrixTimesScalar 1727 1726
+                              Store 1725(r6) 1728
+            1730:          76 Load 107(inFM0)
+            1731:    6(float) Load 103(inF0)
+            1732:          76 MatrixTimesScalar 1730 1731
+                              Store 1729(r7) 1732
+            1734:          76 Load 108(inFM1)
+            1735:          76 Load 107(inFM0)
+            1736:          76 MatrixTimesMatrix 1734 1735
+                              Store 1733(r8) 1736
                               Return
                               FunctionEnd
 129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 119
@@ -8244,98 +8361,98 @@
     127(inFM3x4):    116(ptr) FunctionParameter
     128(inFM2x4):    118(ptr) FunctionParameter
              130:             Label
-       1709(r00):      7(ptr) Variable Function
-       1713(r01):     25(ptr) Variable Function
-       1717(r02):     37(ptr) Variable Function
-       1721(r03):     25(ptr) Variable Function
-       1725(r04):     37(ptr) Variable Function
-       1729(r05):      7(ptr) Variable Function
-       1733(r06):      7(ptr) Variable Function
-       1737(r07):     37(ptr) Variable Function
-       1741(r08):     25(ptr) Variable Function
-       1745(r09):     25(ptr) Variable Function
-       1749(r10):     37(ptr) Variable Function
-       1753(r11):    112(ptr) Variable Function
-       1757(r12):    114(ptr) Variable Function
-       1761(r13):     61(ptr) Variable Function
-       1765(r14):    112(ptr) Variable Function
-       1769(r15):    118(ptr) Variable Function
-       1773(r16):    116(ptr) Variable Function
-            1710:    6(float) Load 121(inF1)
-            1711:    6(float) Load 120(inF0)
-            1712:    6(float) FMul 1710 1711
-                              Store 1709(r00) 1712
-            1714:    6(float) Load 120(inF0)
-            1715:   24(fvec2) Load 122(inFV2)
-            1716:   24(fvec2) VectorTimesScalar 1715 1714
-                              Store 1713(r01) 1716
-            1718:    6(float) Load 120(inF0)
-            1719:   36(fvec3) Load 123(inFV3)
-            1720:   36(fvec3) VectorTimesScalar 1719 1718
-                              Store 1717(r02) 1720
-            1722:   24(fvec2) Load 122(inFV2)
-            1723:    6(float) Load 120(inF0)
-            1724:   24(fvec2) VectorTimesScalar 1722 1723
-                              Store 1721(r03) 1724
-            1726:   36(fvec3) Load 123(inFV3)
-            1727:    6(float) Load 120(inF0)
-            1728:   36(fvec3) VectorTimesScalar 1726 1727
-                              Store 1725(r04) 1728
-            1730:   24(fvec2) Load 122(inFV2)
-            1731:   24(fvec2) Load 122(inFV2)
-            1732:    6(float) Dot 1730 1731
-                              Store 1729(r05) 1732
-            1734:   36(fvec3) Load 123(inFV3)
-            1735:   36(fvec3) Load 123(inFV3)
-            1736:    6(float) Dot 1734 1735
-                              Store 1733(r06) 1736
-            1738:         111 Load 124(inFM2x3)
-            1739:   24(fvec2) Load 122(inFV2)
-            1740:   36(fvec3) MatrixTimesVector 1738 1739
-                              Store 1737(r07) 1740
-            1742:         113 Load 125(inFM3x2)
-            1743:   36(fvec3) Load 123(inFV3)
-            1744:   24(fvec2) MatrixTimesVector 1742 1743
-                              Store 1741(r08) 1744
-            1746:   36(fvec3) Load 123(inFV3)
-            1747:         111 Load 124(inFM2x3)
-            1748:   24(fvec2) VectorTimesMatrix 1746 1747
-                              Store 1745(r09) 1748
+       1737(r00):      7(ptr) Variable Function
+       1741(r01):     25(ptr) Variable Function
+       1745(r02):     37(ptr) Variable Function
+       1749(r03):     25(ptr) Variable Function
+       1753(r04):     37(ptr) Variable Function
+       1757(r05):      7(ptr) Variable Function
+       1761(r06):      7(ptr) Variable Function
+       1765(r07):     37(ptr) Variable Function
+       1769(r08):     25(ptr) Variable Function
+       1773(r09):     25(ptr) Variable Function
+       1777(r10):     37(ptr) Variable Function
+       1781(r11):    112(ptr) Variable Function
+       1785(r12):    114(ptr) Variable Function
+       1789(r13):     61(ptr) Variable Function
+       1793(r14):    112(ptr) Variable Function
+       1797(r15):    118(ptr) Variable Function
+       1801(r16):    116(ptr) Variable Function
+            1738:    6(float) Load 121(inF1)
+            1739:    6(float) Load 120(inF0)
+            1740:    6(float) FMul 1738 1739
+                              Store 1737(r00) 1740
+            1742:    6(float) Load 120(inF0)
+            1743:   24(fvec2) Load 122(inFV2)
+            1744:   24(fvec2) VectorTimesScalar 1743 1742
+                              Store 1741(r01) 1744
+            1746:    6(float) Load 120(inF0)
+            1747:   36(fvec3) Load 123(inFV3)
+            1748:   36(fvec3) VectorTimesScalar 1747 1746
+                              Store 1745(r02) 1748
             1750:   24(fvec2) Load 122(inFV2)
-            1751:         113 Load 125(inFM3x2)
-            1752:   36(fvec3) VectorTimesMatrix 1750 1751
-                              Store 1749(r10) 1752
-            1754:    6(float) Load 120(inF0)
-            1755:         111 Load 124(inFM2x3)
-            1756:         111 MatrixTimesScalar 1755 1754
-                              Store 1753(r11) 1756
-            1758:    6(float) Load 120(inF0)
-            1759:         113 Load 125(inFM3x2)
-            1760:         113 MatrixTimesScalar 1759 1758
-                              Store 1757(r12) 1760
-            1762:         113 Load 125(inFM3x2)
-            1763:         111 Load 124(inFM2x3)
-            1764:          60 MatrixTimesMatrix 1762 1763
-                              Store 1761(r13) 1764
-            1766:          68 Load 126(inFM3x3)
-            1767:         111 Load 124(inFM2x3)
-            1768:         111 MatrixTimesMatrix 1766 1767
-                              Store 1765(r14) 1768
-            1770:         115 Load 127(inFM3x4)
-            1771:         111 Load 124(inFM2x3)
-            1772:         117 MatrixTimesMatrix 1770 1771
-                              Store 1769(r15) 1772
-            1774:         117 Load 128(inFM2x4)
-            1775:         113 Load 125(inFM3x2)
-            1776:         115 MatrixTimesMatrix 1774 1775
-                              Store 1773(r16) 1776
+            1751:    6(float) Load 120(inF0)
+            1752:   24(fvec2) VectorTimesScalar 1750 1751
+                              Store 1749(r03) 1752
+            1754:   36(fvec3) Load 123(inFV3)
+            1755:    6(float) Load 120(inF0)
+            1756:   36(fvec3) VectorTimesScalar 1754 1755
+                              Store 1753(r04) 1756
+            1758:   24(fvec2) Load 122(inFV2)
+            1759:   24(fvec2) Load 122(inFV2)
+            1760:    6(float) Dot 1758 1759
+                              Store 1757(r05) 1760
+            1762:   36(fvec3) Load 123(inFV3)
+            1763:   36(fvec3) Load 123(inFV3)
+            1764:    6(float) Dot 1762 1763
+                              Store 1761(r06) 1764
+            1766:         111 Load 124(inFM2x3)
+            1767:   24(fvec2) Load 122(inFV2)
+            1768:   36(fvec3) MatrixTimesVector 1766 1767
+                              Store 1765(r07) 1768
+            1770:         113 Load 125(inFM3x2)
+            1771:   36(fvec3) Load 123(inFV3)
+            1772:   24(fvec2) MatrixTimesVector 1770 1771
+                              Store 1769(r08) 1772
+            1774:   36(fvec3) Load 123(inFV3)
+            1775:         111 Load 124(inFM2x3)
+            1776:   24(fvec2) VectorTimesMatrix 1774 1775
+                              Store 1773(r09) 1776
+            1778:   24(fvec2) Load 122(inFV2)
+            1779:         113 Load 125(inFM3x2)
+            1780:   36(fvec3) VectorTimesMatrix 1778 1779
+                              Store 1777(r10) 1780
+            1782:    6(float) Load 120(inF0)
+            1783:         111 Load 124(inFM2x3)
+            1784:         111 MatrixTimesScalar 1783 1782
+                              Store 1781(r11) 1784
+            1786:    6(float) Load 120(inF0)
+            1787:         113 Load 125(inFM3x2)
+            1788:         113 MatrixTimesScalar 1787 1786
+                              Store 1785(r12) 1788
+            1790:         113 Load 125(inFM3x2)
+            1791:         111 Load 124(inFM2x3)
+            1792:          60 MatrixTimesMatrix 1790 1791
+                              Store 1789(r13) 1792
+            1794:          68 Load 126(inFM3x3)
+            1795:         111 Load 124(inFM2x3)
+            1796:         111 MatrixTimesMatrix 1794 1795
+                              Store 1793(r14) 1796
+            1798:         115 Load 127(inFM3x4)
+            1799:         111 Load 124(inFM2x3)
+            1800:         117 MatrixTimesMatrix 1798 1799
+                              Store 1797(r15) 1800
+            1802:         117 Load 128(inFM2x4)
+            1803:         113 Load 125(inFM3x2)
+            1804:         115 MatrixTimesMatrix 1802 1803
+                              Store 1801(r16) 1804
                               Return
                               FunctionEnd
      133(@main():131(PS_OUTPUT) Function None 132
              134:             Label
- 1778(ps_output):   1777(ptr) Variable Function
-            1781:     49(ptr) AccessChain 1778(ps_output) 1779
-                              Store 1781 1780
-            1782:131(PS_OUTPUT) Load 1778(ps_output)
-                              ReturnValue 1782
+ 1806(ps_output):   1805(ptr) Variable Function
+            1808:     49(ptr) AccessChain 1806(ps_output) 187
+                              Store 1808 1807
+            1809:131(PS_OUTPUT) Load 1806(ps_output)
+                              ReturnValue 1809
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.lit.frag.out b/Test/baseResults/hlsl.intrinsics.lit.frag.out
index 61024f4..a280db1 100644
--- a/Test/baseResults/hlsl.intrinsics.lit.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.lit.frag.out
@@ -118,7 +118,7 @@
 0:?     'm' (layout( location=2) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out
index 176cf23..ce8947d 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out
@@ -180,7 +180,7 @@
 0:?     'inI0' (layout( location=3) in 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out
index aabcda8..31e3ec4 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out
@@ -308,7 +308,7 @@
 0:?     'inI0' (layout( location=3) in 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
index d6bd3df..8df57aa 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -104,7 +104,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out
index 107de38..6df1915 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -888,7 +888,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 322
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index 649f7ca..703d9f6 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -204,7 +204,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index ee85a9d..e92a8a7 100644
--- a/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.vert.out
@@ -2779,7 +2779,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 1225
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.isfinite.frag.out b/Test/baseResults/hlsl.isfinite.frag.out
index 7eebb85..9968e6b 100644
--- a/Test/baseResults/hlsl.isfinite.frag.out
+++ b/Test/baseResults/hlsl.isfinite.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 85
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out
index bfbfaaf..de614d2 100755
--- a/Test/baseResults/hlsl.layout.frag.out
+++ b/Test/baseResults/hlsl.layout.frag.out
@@ -67,7 +67,7 @@
 0:?     'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index b5d0466..634b6e8 100644
--- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -356,7 +356,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index 9bfc678..09c05d8 100644
--- a/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -386,7 +386,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 159
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index 20110a5..144d1a8 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -488,7 +488,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 179
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index 619bfda..e8bcd66 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -452,7 +452,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 171
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 0e876ab..9f873af 100644
--- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -164,7 +164,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index 2b7440f..085778d 100644
--- a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -170,7 +170,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index 9f77ec0..7cd6b01 100644
--- a/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -560,7 +560,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 201
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index 2e4eca9..df03bfc 100644
--- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -434,7 +434,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 174
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index 851f824..4bfc56a 100644
--- a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -110,7 +110,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index 1093100..d4960ad 100644
--- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -206,7 +206,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 119
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index 1347a51..e86fc35 100644
--- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -242,7 +242,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 132
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.localStructuredBuffer.comp.out b/Test/baseResults/hlsl.localStructuredBuffer.comp.out
new file mode 100644
index 0000000..98257f4
--- /dev/null
+++ b/Test/baseResults/hlsl.localStructuredBuffer.comp.out
@@ -0,0 +1,64 @@
+hlsl.localStructuredBuffer.comp
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:2  Function Definition: @main( ( temp void)
+0:2    Function Parameters: 
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:2  Function Definition: @main( ( temp void)
+0:2    Function Parameters: 
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 14
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 6  "@main("
+                              Name 11  "srt0"
+                              MemberName 11(srt0) 0  "@data"
+                              Name 13  "srt0"
+                              Decorate 10 ArrayStride 4
+                              MemberDecorate 11(srt0) 0 Offset 0
+                              Decorate 11(srt0) BufferBlock
+                              Decorate 13(srt0) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               9:             TypeInt 32 0
+              10:             TypeRuntimeArray 9(int)
+        11(srt0):             TypeStruct 10
+              12:             TypePointer Uniform 11(srt0)
+        13(srt0):     12(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+               8:           2 FunctionCall 6(@main()
+                              Return
+                              FunctionEnd
+       6(@main():           2 Function None 3
+               7:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
index 1df6ae4..de1b3f3 100644
--- a/Test/baseResults/hlsl.logical.binary.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.frag.out
@@ -128,7 +128,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
index 53fa2c1..2409b0e 100644
--- a/Test/baseResults/hlsl.logical.binary.vec.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -254,7 +254,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.unary.frag.out b/Test/baseResults/hlsl.logical.unary.frag.out
index a27b0bd..7d7cbf7 100644
--- a/Test/baseResults/hlsl.logical.unary.frag.out
+++ b/Test/baseResults/hlsl.logical.unary.frag.out
@@ -184,7 +184,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logicalConvert.frag.out b/Test/baseResults/hlsl.logicalConvert.frag.out
index b51a43c..733ca26 100755
--- a/Test/baseResults/hlsl.logicalConvert.frag.out
+++ b/Test/baseResults/hlsl.logicalConvert.frag.out
@@ -254,7 +254,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.loopattr.frag.out b/Test/baseResults/hlsl.loopattr.frag.out
index 81b6c29..38282a5 100644
--- a/Test/baseResults/hlsl.loopattr.frag.out
+++ b/Test/baseResults/hlsl.loopattr.frag.out
@@ -136,7 +136,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matNx1.frag.out b/Test/baseResults/hlsl.matNx1.frag.out
index f3b5dd2..74c4fb6 100644
--- a/Test/baseResults/hlsl.matNx1.frag.out
+++ b/Test/baseResults/hlsl.matNx1.frag.out
@@ -152,7 +152,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 77
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out
index 894f203..aff329b 100644
--- a/Test/baseResults/hlsl.matType.bool.frag.out
+++ b/Test/baseResults/hlsl.matType.bool.frag.out
@@ -232,7 +232,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out
index d76d55c..1d892b5 100755
--- a/Test/baseResults/hlsl.matType.frag.out
+++ b/Test/baseResults/hlsl.matType.frag.out
@@ -31,7 +31,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 1-component vector of float f1,  uniform 1X1 matrix of float fmat11,  uniform 4X1 matrix of float fmat41,  uniform 1X2 matrix of float fmat12,  uniform 2X3 matrix of double dmat23,  uniform 4X4 matrix of int int44})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out
index 7aa3a5d..807b8b9 100644
--- a/Test/baseResults/hlsl.matType.int.frag.out
+++ b/Test/baseResults/hlsl.matType.int.frag.out
@@ -398,7 +398,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-1.frag.out b/Test/baseResults/hlsl.matpack-1.frag.out
index 761c8c3..1370c19 100644
--- a/Test/baseResults/hlsl.matpack-1.frag.out
+++ b/Test/baseResults/hlsl.matpack-1.frag.out
@@ -100,7 +100,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-pragma.frag.out b/Test/baseResults/hlsl.matpack-pragma.frag.out
index 761ab9a..187f5d0 100644
--- a/Test/baseResults/hlsl.matpack-pragma.frag.out
+++ b/Test/baseResults/hlsl.matpack-pragma.frag.out
@@ -170,7 +170,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matrixSwizzle.vert.out b/Test/baseResults/hlsl.matrixSwizzle.vert.out
index 7e792b4..64c21cd 100755
--- a/Test/baseResults/hlsl.matrixSwizzle.vert.out
+++ b/Test/baseResults/hlsl.matrixSwizzle.vert.out
@@ -677,7 +677,7 @@
 
 Missing functionality: matrix swizzle
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matrixindex.frag.out b/Test/baseResults/hlsl.matrixindex.frag.out
index c5c96a3..8d3910c 100644
--- a/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/Test/baseResults/hlsl.matrixindex.frag.out
@@ -272,7 +272,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out
index 2c74d72..4200373 100755
--- a/Test/baseResults/hlsl.max.frag.out
+++ b/Test/baseResults/hlsl.max.frag.out
@@ -66,7 +66,7 @@
 0:?     'input2' (layout( location=1) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.memberFunCall.frag.out b/Test/baseResults/hlsl.memberFunCall.frag.out
index 9774360..0a0219b 100755
--- a/Test/baseResults/hlsl.memberFunCall.frag.out
+++ b/Test/baseResults/hlsl.memberFunCall.frag.out
@@ -152,7 +152,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out
index 74bb655..3c058ea 100644
--- a/Test/baseResults/hlsl.mintypes.frag.out
+++ b/Test/baseResults/hlsl.mintypes.frag.out
@@ -98,7 +98,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mip.operator.frag.out b/Test/baseResults/hlsl.mip.operator.frag.out
index 3c68fd9..804f3b2 100644
--- a/Test/baseResults/hlsl.mip.operator.frag.out
+++ b/Test/baseResults/hlsl.mip.operator.frag.out
@@ -128,7 +128,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiDescriptorSet.frag.out b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
index 1c0e503..8311338 100644
--- a/Test/baseResults/hlsl.multiDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
@@ -1,6 +1,6 @@
 hlsl.multiDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 92
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out
index 8a309da..5ee84b3 100755
--- a/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/Test/baseResults/hlsl.multiEntry.vert.out
@@ -70,7 +70,7 @@
 0:?     'Index' ( in uint VertexIndex)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 41
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiReturn.frag.out b/Test/baseResults/hlsl.multiReturn.frag.out
index 588645c..d00c35e 100755
--- a/Test/baseResults/hlsl.multiReturn.frag.out
+++ b/Test/baseResults/hlsl.multiReturn.frag.out
@@ -48,7 +48,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{ temp float f,  temp 3-component vector of float v,  temp 3X3 matrix of float m} s})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.namespace.frag.out b/Test/baseResults/hlsl.namespace.frag.out
index 82fbb6e..f86a0a0 100755
--- a/Test/baseResults/hlsl.namespace.frag.out
+++ b/Test/baseResults/hlsl.namespace.frag.out
@@ -102,7 +102,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.nonint-index.frag.out b/Test/baseResults/hlsl.nonint-index.frag.out
index 3684cf3..f512dbe 100644
--- a/Test/baseResults/hlsl.nonint-index.frag.out
+++ b/Test/baseResults/hlsl.nonint-index.frag.out
@@ -88,7 +88,7 @@
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
index 27326c6..d1d99ca 100755
--- a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
+++ b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
@@ -268,7 +268,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 111
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out
index 6b7b88c..9fcceac 100644
--- a/Test/baseResults/hlsl.numericsuffixes.frag.out
+++ b/Test/baseResults/hlsl.numericsuffixes.frag.out
@@ -192,7 +192,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.numthreads.comp.out b/Test/baseResults/hlsl.numthreads.comp.out
index fc1345f..3d69af4 100644
--- a/Test/baseResults/hlsl.numthreads.comp.out
+++ b/Test/baseResults/hlsl.numthreads.comp.out
@@ -44,7 +44,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.opaque-type-bug.frag.out b/Test/baseResults/hlsl.opaque-type-bug.frag.out
new file mode 100644
index 0000000..95b39b3
--- /dev/null
+++ b/Test/baseResults/hlsl.opaque-type-bug.frag.out
@@ -0,0 +1,112 @@
+hlsl.opaque-type-bug.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6  Function Definition: TexFunc(t21;vf3; ( temp void)
+0:6    Function Parameters: 
+0:6      't2D' ( const (read only) texture2D)
+0:6      'RGB' ( out 3-component vector of float)
+0:?     Sequence
+0:7      move second child to first child ( temp 3-component vector of float)
+0:7        'RGB' ( out 3-component vector of float)
+0:7        Constant:
+0:7          0.000000
+0:7          0.000000
+0:7          0.000000
+0:12  Function Definition: @main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:15      Function Call: TexFunc(t21;vf3; ( temp void)
+0:15        'MyTexture' (layout( binding=0) uniform texture2D)
+0:15        'final_RGB' ( temp 3-component vector of float)
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'MyTexture' (layout( binding=0) uniform texture2D)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6  Function Definition: TexFunc(t21;vf3; ( temp void)
+0:6    Function Parameters: 
+0:6      't2D' ( const (read only) texture2D)
+0:6      'RGB' ( out 3-component vector of float)
+0:?     Sequence
+0:7      move second child to first child ( temp 3-component vector of float)
+0:7        'RGB' ( out 3-component vector of float)
+0:7        Constant:
+0:7          0.000000
+0:7          0.000000
+0:7          0.000000
+0:12  Function Definition: @main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:15      Function Call: TexFunc(t21;vf3; ( temp void)
+0:15        'MyTexture' (layout( binding=0) uniform texture2D)
+0:15        'final_RGB' ( temp 3-component vector of float)
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'MyTexture' (layout( binding=0) uniform texture2D)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 27
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 13  "TexFunc(t21;vf3;"
+                              Name 11  "t2D"
+                              Name 12  "RGB"
+                              Name 15  "@main("
+                              Name 20  "MyTexture"
+                              Name 22  "final_RGB"
+                              Name 23  "param"
+                              Decorate 20(MyTexture) DescriptorSet 0
+                              Decorate 20(MyTexture) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 2D sampled format:Unknown
+               8:             TypeVector 6(float) 3
+               9:             TypePointer Function 8(fvec3)
+              10:             TypeFunction 2 7 9(ptr)
+              17:    6(float) Constant 0
+              18:    8(fvec3) ConstantComposite 17 17 17
+              19:             TypePointer UniformConstant 7
+   20(MyTexture):     19(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+              26:           2 FunctionCall 15(@main()
+                              Return
+                              FunctionEnd
+13(TexFunc(t21;vf3;):           2 Function None 10
+         11(t2D):           7 FunctionParameter
+         12(RGB):      9(ptr) FunctionParameter
+              14:             Label
+                              Store 12(RGB) 18
+                              Return
+                              FunctionEnd
+      15(@main():           2 Function None 3
+              16:             Label
+   22(final_RGB):      9(ptr) Variable Function
+       23(param):      9(ptr) Variable Function
+              21:           7 Load 20(MyTexture)
+              24:           2 FunctionCall 13(TexFunc(t21;vf3;) 21 23(param)
+              25:    8(fvec3) Load 23(param)
+                              Store 22(final_RGB) 25
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out
index b390526..e2f6773 100755
--- a/Test/baseResults/hlsl.overload.frag.out
+++ b/Test/baseResults/hlsl.overload.frag.out
@@ -734,7 +734,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 520
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.params.default.frag.out b/Test/baseResults/hlsl.params.default.frag.out
index 3643c23..ae67f1e 100644
--- a/Test/baseResults/hlsl.params.default.frag.out
+++ b/Test/baseResults/hlsl.params.default.frag.out
@@ -376,7 +376,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 178
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
new file mode 100755
index 0000000..7847c08
--- /dev/null
+++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
@@ -0,0 +1,366 @@
+hlsl.partialFlattenLocal.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+0:? Sequence
+0:12  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:12    Function Parameters: 
+0:12      'pos' ( in 4-component vector of float)
+0:?     Sequence
+0:14      move second child to first child ( temp texture2D)
+0:?         'packed.tex' ( temp texture2D)
+0:14        'tex' ( uniform texture2D)
+0:15      move second child to first child ( temp 3-component vector of float)
+0:15        direct index ( temp 3-component vector of float)
+0:?           'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:15          Constant:
+0:15            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:16      move second child to first child ( temp 2-component vector of float)
+0:16        direct index ( temp 2-component vector of float)
+0:?           'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:16          Constant:
+0:16            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           1.000000
+0:17      move second child to first child ( temp float)
+0:?         'packed.x' ( temp float)
+0:17        Constant:
+0:17          1.000000
+0:18      move second child to first child ( temp int)
+0:?         'packed.n' ( temp int)
+0:18        Constant:
+0:18          3 (const int)
+0:20      Sequence
+0:20        move second child to first child ( temp int)
+0:20          'i' ( temp int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        Loop with condition tested first
+0:20          Loop Condition
+0:20          Compare Less Than ( temp bool)
+0:20            'i' ( temp int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Loop Body
+0:?           Sequence
+0:21            add second child into first child ( temp 2-component vector of float)
+0:21              vector swizzle ( temp 2-component vector of float)
+0:21                indirect index ( temp 3-component vector of float)
+0:?                   'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:21                  'i' ( temp int)
+0:21                Sequence
+0:21                  Constant:
+0:21                    0 (const int)
+0:21                  Constant:
+0:21                    1 (const int)
+0:21              indirect index ( temp 2-component vector of float)
+0:?                 'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:21                'i' ( temp int)
+0:20          Loop Terminal Expression
+0:20          Pre-Increment ( temp int)
+0:20            'i' ( temp int)
+0:24      Sequence
+0:24        Sequence
+0:24          move second child to first child ( temp texture2D)
+0:?             'packed2.tex' ( temp texture2D)
+0:?             'packed.tex' ( temp texture2D)
+0:24          move second child to first child ( temp 3-element array of 3-component vector of float)
+0:?             'packed2.pos' ( temp 3-element array of 3-component vector of float)
+0:?             'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:24          move second child to first child ( temp 2-element array of 2-component vector of float)
+0:?             'packed2.uv' ( temp 2-element array of 2-component vector of float)
+0:?             'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:24          move second child to first child ( temp float)
+0:?             'packed2.x' ( temp float)
+0:?             'packed.x' ( temp float)
+0:24          move second child to first child ( temp int)
+0:?             'packed2.n' ( temp int)
+0:?             'packed.n' ( temp int)
+0:26      Branch: Return with expression
+0:26        add ( temp 4-component vector of float)
+0:26          'pos' ( in 4-component vector of float)
+0:?           Construct vec4 ( temp 4-component vector of float)
+0:26            direct index ( temp 3-component vector of float)
+0:?               'packed2.pos' ( temp 3-element array of 3-component vector of float)
+0:26              Constant:
+0:26                0 (const int)
+0:26            Constant:
+0:26              0.000000
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'pos' (layout( location=0) in 4-component vector of float)
+0:12      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' ( out 4-component vector of float Position)
+0:12        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'pos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'tex' ( uniform texture2D)
+0:?     '@entryPointOutput' ( out 4-component vector of float Position)
+0:?     'pos' (layout( location=0) in 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:12  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:12    Function Parameters: 
+0:12      'pos' ( in 4-component vector of float)
+0:?     Sequence
+0:14      move second child to first child ( temp texture2D)
+0:?         'packed.tex' ( temp texture2D)
+0:14        'tex' ( uniform texture2D)
+0:15      move second child to first child ( temp 3-component vector of float)
+0:15        direct index ( temp 3-component vector of float)
+0:?           'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:15          Constant:
+0:15            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           0.000000
+0:?           0.000000
+0:16      move second child to first child ( temp 2-component vector of float)
+0:16        direct index ( temp 2-component vector of float)
+0:?           'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:16          Constant:
+0:16            0 (const int)
+0:?         Constant:
+0:?           0.000000
+0:?           1.000000
+0:17      move second child to first child ( temp float)
+0:?         'packed.x' ( temp float)
+0:17        Constant:
+0:17          1.000000
+0:18      move second child to first child ( temp int)
+0:?         'packed.n' ( temp int)
+0:18        Constant:
+0:18          3 (const int)
+0:20      Sequence
+0:20        move second child to first child ( temp int)
+0:20          'i' ( temp int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        Loop with condition tested first
+0:20          Loop Condition
+0:20          Compare Less Than ( temp bool)
+0:20            'i' ( temp int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Loop Body
+0:?           Sequence
+0:21            add second child into first child ( temp 2-component vector of float)
+0:21              vector swizzle ( temp 2-component vector of float)
+0:21                indirect index ( temp 3-component vector of float)
+0:?                   'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:21                  'i' ( temp int)
+0:21                Sequence
+0:21                  Constant:
+0:21                    0 (const int)
+0:21                  Constant:
+0:21                    1 (const int)
+0:21              indirect index ( temp 2-component vector of float)
+0:?                 'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:21                'i' ( temp int)
+0:20          Loop Terminal Expression
+0:20          Pre-Increment ( temp int)
+0:20            'i' ( temp int)
+0:24      Sequence
+0:24        Sequence
+0:24          move second child to first child ( temp texture2D)
+0:?             'packed2.tex' ( temp texture2D)
+0:?             'packed.tex' ( temp texture2D)
+0:24          move second child to first child ( temp 3-element array of 3-component vector of float)
+0:?             'packed2.pos' ( temp 3-element array of 3-component vector of float)
+0:?             'packed.pos' ( temp 3-element array of 3-component vector of float)
+0:24          move second child to first child ( temp 2-element array of 2-component vector of float)
+0:?             'packed2.uv' ( temp 2-element array of 2-component vector of float)
+0:?             'packed.uv' ( temp 2-element array of 2-component vector of float)
+0:24          move second child to first child ( temp float)
+0:?             'packed2.x' ( temp float)
+0:?             'packed.x' ( temp float)
+0:24          move second child to first child ( temp int)
+0:?             'packed2.n' ( temp int)
+0:?             'packed.n' ( temp int)
+0:26      Branch: Return with expression
+0:26        add ( temp 4-component vector of float)
+0:26          'pos' ( in 4-component vector of float)
+0:?           Construct vec4 ( temp 4-component vector of float)
+0:26            direct index ( temp 3-component vector of float)
+0:?               'packed2.pos' ( temp 3-element array of 3-component vector of float)
+0:26              Constant:
+0:26                0 (const int)
+0:26            Constant:
+0:26              0.000000
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'pos' (layout( location=0) in 4-component vector of float)
+0:12      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' ( out 4-component vector of float Position)
+0:12        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'pos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'tex' ( uniform texture2D)
+0:?     '@entryPointOutput' ( out 4-component vector of float Position)
+0:?     'pos' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 97
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 90 93
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "pos"
+                              Name 15  "packed.tex"
+                              Name 17  "tex"
+                              Name 24  "packed.pos"
+                              Name 35  "packed.uv"
+                              Name 41  "packed.x"
+                              Name 43  "packed.n"
+                              Name 45  "i"
+                              Name 68  "packed2.tex"
+                              Name 70  "packed2.pos"
+                              Name 72  "packed2.uv"
+                              Name 74  "packed2.x"
+                              Name 76  "packed2.n"
+                              Name 88  "pos"
+                              Name 90  "pos"
+                              Name 93  "@entryPointOutput"
+                              Name 94  "param"
+                              Decorate 17(tex) DescriptorSet 0
+                              Decorate 90(pos) Location 0
+                              Decorate 93(@entryPointOutput) BuiltIn Position
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              13:             TypeImage 6(float) 2D sampled format:Unknown
+              14:             TypePointer Function 13
+              16:             TypePointer UniformConstant 13
+         17(tex):     16(ptr) Variable UniformConstant
+              19:             TypeVector 6(float) 3
+              20:             TypeInt 32 0
+              21:     20(int) Constant 3
+              22:             TypeArray 19(fvec3) 21
+              23:             TypePointer Function 22
+              25:             TypeInt 32 1
+              26:     25(int) Constant 0
+              27:    6(float) Constant 0
+              28:   19(fvec3) ConstantComposite 27 27 27
+              29:             TypePointer Function 19(fvec3)
+              31:             TypeVector 6(float) 2
+              32:     20(int) Constant 2
+              33:             TypeArray 31(fvec2) 32
+              34:             TypePointer Function 33
+              36:    6(float) Constant 1065353216
+              37:   31(fvec2) ConstantComposite 27 36
+              38:             TypePointer Function 31(fvec2)
+              40:             TypePointer Function 6(float)
+              42:             TypePointer Function 25(int)
+              44:     25(int) Constant 3
+              52:     25(int) Constant 1
+              53:             TypeBool
+              89:             TypePointer Input 7(fvec4)
+         90(pos):     89(ptr) Variable Input
+              92:             TypePointer Output 7(fvec4)
+93(@entryPointOutput):     92(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+         88(pos):      8(ptr) Variable Function
+       94(param):      8(ptr) Variable Function
+              91:    7(fvec4) Load 90(pos)
+                              Store 88(pos) 91
+              95:    7(fvec4) Load 88(pos)
+                              Store 94(param) 95
+              96:    7(fvec4) FunctionCall 11(@main(vf4;) 94(param)
+                              Store 93(@entryPointOutput) 96
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):    7(fvec4) Function None 9
+         10(pos):      8(ptr) FunctionParameter
+              12:             Label
+  15(packed.tex):     14(ptr) Variable Function
+  24(packed.pos):     23(ptr) Variable Function
+   35(packed.uv):     34(ptr) Variable Function
+    41(packed.x):     40(ptr) Variable Function
+    43(packed.n):     42(ptr) Variable Function
+           45(i):     42(ptr) Variable Function
+ 68(packed2.tex):     14(ptr) Variable Function
+ 70(packed2.pos):     23(ptr) Variable Function
+  72(packed2.uv):     34(ptr) Variable Function
+   74(packed2.x):     40(ptr) Variable Function
+   76(packed2.n):     42(ptr) Variable Function
+              18:          13 Load 17(tex)
+                              Store 15(packed.tex) 18
+              30:     29(ptr) AccessChain 24(packed.pos) 26
+                              Store 30 28
+              39:     38(ptr) AccessChain 35(packed.uv) 26
+                              Store 39 37
+                              Store 41(packed.x) 36
+                              Store 43(packed.n) 44
+                              Store 45(i) 26
+                              Branch 46
+              46:             Label
+                              LoopMerge 48 49 None
+                              Branch 50
+              50:             Label
+              51:     25(int) Load 45(i)
+              54:    53(bool) SLessThan 51 52
+                              BranchConditional 54 47 48
+              47:               Label
+              55:     25(int)   Load 45(i)
+              56:     25(int)   Load 45(i)
+              57:     38(ptr)   AccessChain 35(packed.uv) 56
+              58:   31(fvec2)   Load 57
+              59:     29(ptr)   AccessChain 24(packed.pos) 55
+              60:   19(fvec3)   Load 59
+              61:   31(fvec2)   VectorShuffle 60 60 0 1
+              62:   31(fvec2)   FAdd 61 58
+              63:     29(ptr)   AccessChain 24(packed.pos) 55
+              64:   19(fvec3)   Load 63
+              65:   19(fvec3)   VectorShuffle 64 62 3 4 2
+                                Store 63 65
+                                Branch 49
+              49:               Label
+              66:     25(int)   Load 45(i)
+              67:     25(int)   IAdd 66 52
+                                Store 45(i) 67
+                                Branch 46
+              48:             Label
+              69:          13 Load 15(packed.tex)
+                              Store 68(packed2.tex) 69
+              71:          22 Load 24(packed.pos)
+                              Store 70(packed2.pos) 71
+              73:          33 Load 35(packed.uv)
+                              Store 72(packed2.uv) 73
+              75:    6(float) Load 41(packed.x)
+                              Store 74(packed2.x) 75
+              77:     25(int) Load 43(packed.n)
+                              Store 76(packed2.n) 77
+              78:    7(fvec4) Load 10(pos)
+              79:     29(ptr) AccessChain 70(packed2.pos) 26
+              80:   19(fvec3) Load 79
+              81:    6(float) CompositeExtract 80 0
+              82:    6(float) CompositeExtract 80 1
+              83:    6(float) CompositeExtract 80 2
+              84:    7(fvec4) CompositeConstruct 81 82 83 27
+              85:    7(fvec4) FAdd 78 84
+                              ReturnValue 85
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
new file mode 100755
index 0000000..50c8cb9
--- /dev/null
+++ b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
@@ -0,0 +1,150 @@
+hlsl.partialFlattenMixed.vert
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+0:? Sequence
+0:10  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:10    Function Parameters: 
+0:10      'pos' ( in 4-component vector of float)
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child ( temp texture2D)
+0:13          direct index ( temp texture2D)
+0:?             'packed.membTex' ( temp 2-element array of texture2D)
+0:13            Constant:
+0:13              0 (const int)
+0:?           'tex[0]' ( uniform texture2D)
+0:13        move second child to first child ( temp texture2D)
+0:13          direct index ( temp texture2D)
+0:?             'packed.membTex' ( temp 2-element array of texture2D)
+0:13            Constant:
+0:13              1 (const int)
+0:?           'tex[1]' ( uniform texture2D)
+0:15      Branch: Return with expression
+0:15        'pos' ( in 4-component vector of float)
+0:10  Function Definition: main( ( temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'pos' (layout( location=0) in 4-component vector of float)
+0:10      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' ( out 4-component vector of float Position)
+0:10        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'pos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'tex[0]' ( uniform texture2D)
+0:?     'tex[1]' ( uniform texture2D)
+0:?     '@entryPointOutput' ( out 4-component vector of float Position)
+0:?     'pos' (layout( location=0) in 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:10  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:10    Function Parameters: 
+0:10      'pos' ( in 4-component vector of float)
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child ( temp texture2D)
+0:13          direct index ( temp texture2D)
+0:?             'packed.membTex' ( temp 2-element array of texture2D)
+0:13            Constant:
+0:13              0 (const int)
+0:?           'tex[0]' ( uniform texture2D)
+0:13        move second child to first child ( temp texture2D)
+0:13          direct index ( temp texture2D)
+0:?             'packed.membTex' ( temp 2-element array of texture2D)
+0:13            Constant:
+0:13              1 (const int)
+0:?           'tex[1]' ( uniform texture2D)
+0:15      Branch: Return with expression
+0:15        'pos' ( in 4-component vector of float)
+0:10  Function Definition: main( ( temp void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:10      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'pos' (layout( location=0) in 4-component vector of float)
+0:10      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' ( out 4-component vector of float Position)
+0:10        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'pos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'tex[0]' ( uniform texture2D)
+0:?     'tex[1]' ( uniform texture2D)
+0:?     '@entryPointOutput' ( out 4-component vector of float Position)
+0:?     'pos' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 42
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 35 38
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "pos"
+                              Name 18  "packed.membTex"
+                              Name 22  "tex[0]"
+                              Name 27  "tex[1]"
+                              Name 33  "pos"
+                              Name 35  "pos"
+                              Name 38  "@entryPointOutput"
+                              Name 39  "param"
+                              Decorate 22(tex[0]) DescriptorSet 0
+                              Decorate 27(tex[1]) DescriptorSet 0
+                              Decorate 35(pos) Location 0
+                              Decorate 38(@entryPointOutput) BuiltIn Position
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+              13:             TypeImage 6(float) 2D sampled format:Unknown
+              14:             TypeInt 32 0
+              15:     14(int) Constant 2
+              16:             TypeArray 13 15
+              17:             TypePointer Function 16
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:             TypePointer UniformConstant 13
+      22(tex[0]):     21(ptr) Variable UniformConstant
+              24:             TypePointer Function 13
+              26:     19(int) Constant 1
+      27(tex[1]):     21(ptr) Variable UniformConstant
+              34:             TypePointer Input 7(fvec4)
+         35(pos):     34(ptr) Variable Input
+              37:             TypePointer Output 7(fvec4)
+38(@entryPointOutput):     37(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+         33(pos):      8(ptr) Variable Function
+       39(param):      8(ptr) Variable Function
+              36:    7(fvec4) Load 35(pos)
+                              Store 33(pos) 36
+              40:    7(fvec4) Load 33(pos)
+                              Store 39(param) 40
+              41:    7(fvec4) FunctionCall 11(@main(vf4;) 39(param)
+                              Store 38(@entryPointOutput) 41
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):    7(fvec4) Function None 9
+         10(pos):      8(ptr) FunctionParameter
+              12:             Label
+18(packed.membTex):     17(ptr) Variable Function
+              23:          13 Load 22(tex[0])
+              25:     24(ptr) AccessChain 18(packed.membTex) 20
+                              Store 25 23
+              28:          13 Load 27(tex[1])
+              29:     24(ptr) AccessChain 18(packed.membTex) 26
+                              Store 29 28
+              30:    7(fvec4) Load 10(pos)
+                              ReturnValue 30
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
index db70518..c0882fd 100755
--- a/Test/baseResults/hlsl.partialInit.frag.out
+++ b/Test/baseResults/hlsl.partialInit.frag.out
@@ -399,7 +399,7 @@
 0:?       0 (const int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line.frag.out b/Test/baseResults/hlsl.pp.line.frag.out
index 638e7b0..864df87 100644
--- a/Test/baseResults/hlsl.pp.line.frag.out
+++ b/Test/baseResults/hlsl.pp.line.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out
index 5518636..4282184 100755
--- a/Test/baseResults/hlsl.pp.vert.out
+++ b/Test/baseResults/hlsl.pp.vert.out
@@ -26,7 +26,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int goodGlobal1,  uniform int goodGlobal2})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 13
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out
index a46c6fb..0c898cc 100755
--- a/Test/baseResults/hlsl.precedence.frag.out
+++ b/Test/baseResults/hlsl.precedence.frag.out
@@ -148,7 +148,7 @@
 0:?     'a4' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out
index cd223a6..343240f 100755
--- a/Test/baseResults/hlsl.precedence2.frag.out
+++ b/Test/baseResults/hlsl.precedence2.frag.out
@@ -114,7 +114,7 @@
 0:?     'a4' (layout( location=3) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precise.frag.out b/Test/baseResults/hlsl.precise.frag.out
index 72f9cec..66da1d6 100644
--- a/Test/baseResults/hlsl.precise.frag.out
+++ b/Test/baseResults/hlsl.precise.frag.out
@@ -76,7 +76,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.preprocessor.frag.out b/Test/baseResults/hlsl.preprocessor.frag.out
index 1db7c24..cbcd66f 100644
--- a/Test/baseResults/hlsl.preprocessor.frag.out
+++ b/Test/baseResults/hlsl.preprocessor.frag.out
@@ -94,7 +94,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out
index ead4fe3..2d4bd6e 100644
--- a/Test/baseResults/hlsl.promote.atomic.frag.out
+++ b/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.binary.frag.out b/Test/baseResults/hlsl.promote.binary.frag.out
index 50ba644..bc91ad9 100644
--- a/Test/baseResults/hlsl.promote.binary.frag.out
+++ b/Test/baseResults/hlsl.promote.binary.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.vec1.frag.out b/Test/baseResults/hlsl.promote.vec1.frag.out
index b0536bd..ac0e44e 100644
--- a/Test/baseResults/hlsl.promote.vec1.frag.out
+++ b/Test/baseResults/hlsl.promote.vec1.frag.out
@@ -80,7 +80,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out
index 6270715..5383959 100644
--- a/Test/baseResults/hlsl.promotions.frag.out
+++ b/Test/baseResults/hlsl.promotions.frag.out
@@ -1582,7 +1582,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 596
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out
index 99c4174..ae84db0 100644
--- a/Test/baseResults/hlsl.rw.atomics.frag.out
+++ b/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -3946,7 +3946,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 1147
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
index 7804e33..c92eedc 100644
--- a/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -1744,7 +1744,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 607
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out
index 5464ac2..f8409f7 100644
--- a/Test/baseResults/hlsl.rw.register.frag.out
+++ b/Test/baseResults/hlsl.rw.register.frag.out
@@ -98,7 +98,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
index 7ff34fa..484fd90 100644
--- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -1690,7 +1690,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 571
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out
index 4d804e9..f8098a5 100644
--- a/Test/baseResults/hlsl.rw.swizzle.frag.out
+++ b/Test/baseResults/hlsl.rw.swizzle.frag.out
@@ -202,7 +202,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
index 980c82b..42e45fc 100644
--- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -1708,7 +1708,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 605
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index c470134..57f2e5f 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -320,7 +320,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 146
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index 11ce999..56bb39a 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -548,7 +548,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index abc7362..e57f839 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -362,7 +362,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index 6d1d67d..ad07c15 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -272,7 +272,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index ffb6a49..5213a03 100644
--- a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -154,7 +154,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index dd99697..8535c2c 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -356,7 +356,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 146
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index 18441e6..919fb80 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -422,7 +422,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 170
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index 59ecdb7..7972bff 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -398,7 +398,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index a18c80e..6e2bc7d 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -296,7 +296,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 299cade..5a61639 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -10,7 +10,7 @@
 0:42          'r10' ( temp float)
 0:42          texture ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42              'g_tTex1df4a' ( uniform texture1DArray)
+0:42              'g_tTex1df4a' ( uniform texture1DArrayShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -23,7 +23,7 @@
 0:43          'r12' ( temp float)
 0:43          texture ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43              'g_tTex1di4a' ( uniform itexture1DArray)
+0:43              'g_tTex1di4a' ( uniform itexture1DArrayShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -36,7 +36,7 @@
 0:44          'r14' ( temp float)
 0:44          texture ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44              'g_tTex1du4a' ( uniform utexture1DArray)
+0:44              'g_tTex1du4a' ( uniform utexture1DArrayShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -49,7 +49,7 @@
 0:47          'r30' ( temp float)
 0:47          texture ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47              'g_tTex2df4a' ( uniform texture2DArray)
+0:47              'g_tTex2df4a' ( uniform texture2DArrayShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -63,7 +63,7 @@
 0:48          'r32' ( temp float)
 0:48          texture ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48              'g_tTex2di4a' ( uniform itexture2DArray)
+0:48              'g_tTex2di4a' ( uniform itexture2DArrayShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -77,7 +77,7 @@
 0:49          'r34' ( temp float)
 0:49          texture ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49              'g_tTex2du4a' ( uniform utexture2DArray)
+0:49              'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -91,7 +91,7 @@
 0:52          'r60' ( temp float)
 0:52          texture ( temp float)
 0:52            Construct combined texture-sampler ( temp samplerCubeArrayShadow)
-0:52              'g_tTexcdf4a' ( uniform textureCubeArray)
+0:52              'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
 0:52              'g_sSamp' (layout( binding=0) uniform sampler)
 0:52            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -106,7 +106,7 @@
 0:53          'r62' ( temp float)
 0:53          texture ( temp float)
 0:53            Construct combined texture-sampler ( temp isamplerCubeArrayShadow)
-0:53              'g_tTexcdi4a' ( uniform itextureCubeArray)
+0:53              'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
 0:53              'g_sSamp' (layout( binding=0) uniform sampler)
 0:53            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -121,7 +121,7 @@
 0:54          'r64' ( temp float)
 0:54          texture ( temp float)
 0:54            Construct combined texture-sampler ( temp usamplerCubeArrayShadow)
-0:54              'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:54              'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
 0:54              'g_sSamp' (layout( binding=0) uniform sampler)
 0:54            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -183,15 +183,15 @@
 0:?     'g_tTexcdf4' ( uniform textureCube)
 0:?     'g_tTexcdi4' ( uniform itextureCube)
 0:?     'g_tTexcdu4' ( uniform utextureCube)
-0:?     'g_tTex1df4a' ( uniform texture1DArray)
-0:?     'g_tTex1di4a' ( uniform itexture1DArray)
-0:?     'g_tTex1du4a' ( uniform utexture1DArray)
-0:?     'g_tTex2df4a' ( uniform texture2DArray)
-0:?     'g_tTex2di4a' ( uniform itexture2DArray)
-0:?     'g_tTex2du4a' ( uniform utexture2DArray)
-0:?     'g_tTexcdf4a' ( uniform textureCubeArray)
-0:?     'g_tTexcdi4a' ( uniform itextureCubeArray)
-0:?     'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:?     'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:?     'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:?     'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:?     'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:?     'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:?     'g_tTex2du4a' ( uniform utexture2DArrayShadow)
+0:?     'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
+0:?     'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
+0:?     'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
@@ -210,7 +210,7 @@
 0:42          'r10' ( temp float)
 0:42          texture ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42              'g_tTex1df4a' ( uniform texture1DArray)
+0:42              'g_tTex1df4a' ( uniform texture1DArrayShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -223,7 +223,7 @@
 0:43          'r12' ( temp float)
 0:43          texture ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43              'g_tTex1di4a' ( uniform itexture1DArray)
+0:43              'g_tTex1di4a' ( uniform itexture1DArrayShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -236,7 +236,7 @@
 0:44          'r14' ( temp float)
 0:44          texture ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44              'g_tTex1du4a' ( uniform utexture1DArray)
+0:44              'g_tTex1du4a' ( uniform utexture1DArrayShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -249,7 +249,7 @@
 0:47          'r30' ( temp float)
 0:47          texture ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47              'g_tTex2df4a' ( uniform texture2DArray)
+0:47              'g_tTex2df4a' ( uniform texture2DArrayShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -263,7 +263,7 @@
 0:48          'r32' ( temp float)
 0:48          texture ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48              'g_tTex2di4a' ( uniform itexture2DArray)
+0:48              'g_tTex2di4a' ( uniform itexture2DArrayShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -277,7 +277,7 @@
 0:49          'r34' ( temp float)
 0:49          texture ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49              'g_tTex2du4a' ( uniform utexture2DArray)
+0:49              'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -291,7 +291,7 @@
 0:52          'r60' ( temp float)
 0:52          texture ( temp float)
 0:52            Construct combined texture-sampler ( temp samplerCubeArrayShadow)
-0:52              'g_tTexcdf4a' ( uniform textureCubeArray)
+0:52              'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
 0:52              'g_sSamp' (layout( binding=0) uniform sampler)
 0:52            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -306,7 +306,7 @@
 0:53          'r62' ( temp float)
 0:53          texture ( temp float)
 0:53            Construct combined texture-sampler ( temp isamplerCubeArrayShadow)
-0:53              'g_tTexcdi4a' ( uniform itextureCubeArray)
+0:53              'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
 0:53              'g_sSamp' (layout( binding=0) uniform sampler)
 0:53            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -321,7 +321,7 @@
 0:54          'r64' ( temp float)
 0:54          texture ( temp float)
 0:54            Construct combined texture-sampler ( temp usamplerCubeArrayShadow)
-0:54              'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:54              'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
 0:54              'g_sSamp' (layout( binding=0) uniform sampler)
 0:54            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -383,28 +383,28 @@
 0:?     'g_tTexcdf4' ( uniform textureCube)
 0:?     'g_tTexcdi4' ( uniform itextureCube)
 0:?     'g_tTexcdu4' ( uniform utextureCube)
-0:?     'g_tTex1df4a' ( uniform texture1DArray)
-0:?     'g_tTex1di4a' ( uniform itexture1DArray)
-0:?     'g_tTex1du4a' ( uniform utexture1DArray)
-0:?     'g_tTex2df4a' ( uniform texture2DArray)
-0:?     'g_tTex2di4a' ( uniform itexture2DArray)
-0:?     'g_tTex2du4a' ( uniform utexture2DArray)
-0:?     'g_tTexcdf4a' ( uniform textureCubeArray)
-0:?     'g_tTexcdi4a' ( uniform itextureCubeArray)
-0:?     'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:?     'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:?     'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:?     'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:?     'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:?     'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:?     'g_tTex2du4a' ( uniform utexture2DArrayShadow)
+0:?     'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
+0:?     'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
+0:?     'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 218
+// Generated by (magic number): 80002
+// Id's are bound by 209
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 175 179
+                              EntryPoint Fragment 4  "main" 166 170
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -415,64 +415,64 @@
                               Name 13  "r10"
                               Name 16  "g_tTex1df4a"
                               Name 20  "g_sSamp"
-                              Name 36  "r12"
-                              Name 40  "g_tTex1di4a"
-                              Name 51  "r14"
-                              Name 55  "g_tTex1du4a"
-                              Name 66  "r30"
-                              Name 69  "g_tTex2df4a"
-                              Name 83  "r32"
-                              Name 86  "g_tTex2di4a"
-                              Name 98  "r34"
-                              Name 101  "g_tTex2du4a"
-                              Name 113  "r60"
-                              Name 116  "g_tTexcdf4a"
-                              Name 130  "r62"
-                              Name 133  "g_tTexcdi4a"
-                              Name 145  "r64"
-                              Name 148  "g_tTexcdu4a"
-                              Name 161  "psout"
-                              Name 172  "flattenTemp"
-                              Name 175  "@entryPointOutput.Color"
-                              Name 179  "@entryPointOutput.Depth"
-                              Name 184  "g_tTex1df4"
-                              Name 187  "g_tTex1di4"
-                              Name 190  "g_tTex1du4"
-                              Name 193  "g_tTex2df4"
-                              Name 196  "g_tTex2di4"
-                              Name 199  "g_tTex2du4"
-                              Name 202  "g_tTex3df4"
-                              Name 205  "g_tTex3di4"
-                              Name 208  "g_tTex3du4"
-                              Name 211  "g_tTexcdf4"
-                              Name 214  "g_tTexcdi4"
-                              Name 217  "g_tTexcdu4"
+                              Name 35  "r12"
+                              Name 39  "g_tTex1di4a"
+                              Name 49  "r14"
+                              Name 53  "g_tTex1du4a"
+                              Name 63  "r30"
+                              Name 66  "g_tTex2df4a"
+                              Name 79  "r32"
+                              Name 82  "g_tTex2di4a"
+                              Name 93  "r34"
+                              Name 96  "g_tTex2du4a"
+                              Name 107  "r60"
+                              Name 110  "g_tTexcdf4a"
+                              Name 123  "r62"
+                              Name 126  "g_tTexcdi4a"
+                              Name 137  "r64"
+                              Name 140  "g_tTexcdu4a"
+                              Name 152  "psout"
+                              Name 163  "flattenTemp"
+                              Name 166  "@entryPointOutput.Color"
+                              Name 170  "@entryPointOutput.Depth"
+                              Name 175  "g_tTex1df4"
+                              Name 178  "g_tTex1di4"
+                              Name 181  "g_tTex1du4"
+                              Name 184  "g_tTex2df4"
+                              Name 187  "g_tTex2di4"
+                              Name 190  "g_tTex2du4"
+                              Name 193  "g_tTex3df4"
+                              Name 196  "g_tTex3di4"
+                              Name 199  "g_tTex3du4"
+                              Name 202  "g_tTexcdf4"
+                              Name 205  "g_tTexcdi4"
+                              Name 208  "g_tTexcdu4"
                               Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 40(g_tTex1di4a) DescriptorSet 0
-                              Decorate 55(g_tTex1du4a) DescriptorSet 0
-                              Decorate 69(g_tTex2df4a) DescriptorSet 0
-                              Decorate 86(g_tTex2di4a) DescriptorSet 0
-                              Decorate 101(g_tTex2du4a) DescriptorSet 0
-                              Decorate 116(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 133(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 148(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 175(@entryPointOutput.Color) Location 0
-                              Decorate 179(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 184(g_tTex1df4) DescriptorSet 0
-                              Decorate 184(g_tTex1df4) Binding 0
-                              Decorate 187(g_tTex1di4) DescriptorSet 0
-                              Decorate 190(g_tTex1du4) DescriptorSet 0
-                              Decorate 193(g_tTex2df4) DescriptorSet 0
-                              Decorate 196(g_tTex2di4) DescriptorSet 0
-                              Decorate 199(g_tTex2du4) DescriptorSet 0
-                              Decorate 202(g_tTex3df4) DescriptorSet 0
-                              Decorate 205(g_tTex3di4) DescriptorSet 0
-                              Decorate 208(g_tTex3du4) DescriptorSet 0
-                              Decorate 211(g_tTexcdf4) DescriptorSet 0
-                              Decorate 214(g_tTexcdi4) DescriptorSet 0
-                              Decorate 217(g_tTexcdu4) DescriptorSet 0
+                              Decorate 39(g_tTex1di4a) DescriptorSet 0
+                              Decorate 53(g_tTex1du4a) DescriptorSet 0
+                              Decorate 66(g_tTex2df4a) DescriptorSet 0
+                              Decorate 82(g_tTex2di4a) DescriptorSet 0
+                              Decorate 96(g_tTex2du4a) DescriptorSet 0
+                              Decorate 110(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 126(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 140(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 166(@entryPointOutput.Color) Location 0
+                              Decorate 170(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 175(g_tTex1df4) DescriptorSet 0
+                              Decorate 175(g_tTex1df4) Binding 0
+                              Decorate 178(g_tTex1di4) DescriptorSet 0
+                              Decorate 181(g_tTex1du4) DescriptorSet 0
+                              Decorate 184(g_tTex2df4) DescriptorSet 0
+                              Decorate 187(g_tTex2di4) DescriptorSet 0
+                              Decorate 190(g_tTex2du4) DescriptorSet 0
+                              Decorate 193(g_tTex3df4) DescriptorSet 0
+                              Decorate 196(g_tTex3di4) DescriptorSet 0
+                              Decorate 199(g_tTex3du4) DescriptorSet 0
+                              Decorate 202(g_tTexcdf4) DescriptorSet 0
+                              Decorate 205(g_tTexcdi4) DescriptorSet 0
+                              Decorate 208(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -480,228 +480,219 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 6(float)
-              14:             TypeImage 6(float) 1D array sampled format:Unknown
+              14:             TypeImage 6(float) 1D depth array sampled format:Unknown
               15:             TypePointer UniformConstant 14
  16(g_tTex1df4a):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
      20(g_sSamp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 1D depth array sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:             TypeVector 6(float) 2
-              26:    6(float) Constant 1036831949
-              27:    6(float) Constant 1045220557
-              28:   25(fvec2) ConstantComposite 26 27
-              29:    6(float) Constant 1061158912
-              30:             TypeVector 6(float) 3
-              37:             TypeInt 32 1
-              38:             TypeImage 37(int) 1D array sampled format:Unknown
-              39:             TypePointer UniformConstant 38
- 40(g_tTex1di4a):     39(ptr) Variable UniformConstant
-              43:             TypeImage 37(int) 1D depth array sampled format:Unknown
-              44:             TypeSampledImage 43
-              52:             TypeInt 32 0
-              53:             TypeImage 52(int) 1D array sampled format:Unknown
-              54:             TypePointer UniformConstant 53
- 55(g_tTex1du4a):     54(ptr) Variable UniformConstant
-              58:             TypeImage 52(int) 1D depth array sampled format:Unknown
-              59:             TypeSampledImage 58
-              67:             TypeImage 6(float) 2D array sampled format:Unknown
-              68:             TypePointer UniformConstant 67
- 69(g_tTex2df4a):     68(ptr) Variable UniformConstant
-              72:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              73:             TypeSampledImage 72
-              75:    6(float) Constant 1050253722
-              76:   30(fvec3) ConstantComposite 26 27 75
-              84:             TypeImage 37(int) 2D array sampled format:Unknown
-              85:             TypePointer UniformConstant 84
- 86(g_tTex2di4a):     85(ptr) Variable UniformConstant
-              89:             TypeImage 37(int) 2D depth array sampled format:Unknown
-              90:             TypeSampledImage 89
-              99:             TypeImage 52(int) 2D array sampled format:Unknown
-             100:             TypePointer UniformConstant 99
-101(g_tTex2du4a):    100(ptr) Variable UniformConstant
-             104:             TypeImage 52(int) 2D depth array sampled format:Unknown
-             105:             TypeSampledImage 104
-             114:             TypeImage 6(float) Cube array sampled format:Unknown
-             115:             TypePointer UniformConstant 114
-116(g_tTexcdf4a):    115(ptr) Variable UniformConstant
-             119:             TypeImage 6(float) Cube depth array sampled format:Unknown
-             120:             TypeSampledImage 119
-             122:    6(float) Constant 1053609165
-             123:    7(fvec4) ConstantComposite 26 27 75 122
-             131:             TypeImage 37(int) Cube array sampled format:Unknown
-             132:             TypePointer UniformConstant 131
-133(g_tTexcdi4a):    132(ptr) Variable UniformConstant
-             136:             TypeImage 37(int) Cube depth array sampled format:Unknown
-             137:             TypeSampledImage 136
-             146:             TypeImage 52(int) Cube array sampled format:Unknown
-             147:             TypePointer UniformConstant 146
-148(g_tTexcdu4a):    147(ptr) Variable UniformConstant
-             151:             TypeImage 52(int) Cube depth array sampled format:Unknown
-             152:             TypeSampledImage 151
-             160:             TypePointer Function 8(PS_OUTPUT)
-             162:     37(int) Constant 0
-             163:    6(float) Constant 1065353216
-             164:    7(fvec4) ConstantComposite 163 163 163 163
-             165:             TypePointer Function 7(fvec4)
-             167:     37(int) Constant 1
-             174:             TypePointer Output 7(fvec4)
-175(@entryPointOutput.Color):    174(ptr) Variable Output
-             178:             TypePointer Output 6(float)
-179(@entryPointOutput.Depth):    178(ptr) Variable Output
-             182:             TypeImage 6(float) 1D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:   24(fvec2) ConstantComposite 25 26
+              28:    6(float) Constant 1061158912
+              29:             TypeVector 6(float) 3
+              36:             TypeInt 32 1
+              37:             TypeImage 36(int) 1D depth array sampled format:Unknown
+              38:             TypePointer UniformConstant 37
+ 39(g_tTex1di4a):     38(ptr) Variable UniformConstant
+              42:             TypeSampledImage 37
+              50:             TypeInt 32 0
+              51:             TypeImage 50(int) 1D depth array sampled format:Unknown
+              52:             TypePointer UniformConstant 51
+ 53(g_tTex1du4a):     52(ptr) Variable UniformConstant
+              56:             TypeSampledImage 51
+              64:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              65:             TypePointer UniformConstant 64
+ 66(g_tTex2df4a):     65(ptr) Variable UniformConstant
+              69:             TypeSampledImage 64
+              71:    6(float) Constant 1050253722
+              72:   29(fvec3) ConstantComposite 25 26 71
+              80:             TypeImage 36(int) 2D depth array sampled format:Unknown
+              81:             TypePointer UniformConstant 80
+ 82(g_tTex2di4a):     81(ptr) Variable UniformConstant
+              85:             TypeSampledImage 80
+              94:             TypeImage 50(int) 2D depth array sampled format:Unknown
+              95:             TypePointer UniformConstant 94
+ 96(g_tTex2du4a):     95(ptr) Variable UniformConstant
+              99:             TypeSampledImage 94
+             108:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             109:             TypePointer UniformConstant 108
+110(g_tTexcdf4a):    109(ptr) Variable UniformConstant
+             113:             TypeSampledImage 108
+             115:    6(float) Constant 1053609165
+             116:    7(fvec4) ConstantComposite 25 26 71 115
+             124:             TypeImage 36(int) Cube depth array sampled format:Unknown
+             125:             TypePointer UniformConstant 124
+126(g_tTexcdi4a):    125(ptr) Variable UniformConstant
+             129:             TypeSampledImage 124
+             138:             TypeImage 50(int) Cube depth array sampled format:Unknown
+             139:             TypePointer UniformConstant 138
+140(g_tTexcdu4a):    139(ptr) Variable UniformConstant
+             143:             TypeSampledImage 138
+             151:             TypePointer Function 8(PS_OUTPUT)
+             153:     36(int) Constant 0
+             154:    6(float) Constant 1065353216
+             155:    7(fvec4) ConstantComposite 154 154 154 154
+             156:             TypePointer Function 7(fvec4)
+             158:     36(int) Constant 1
+             165:             TypePointer Output 7(fvec4)
+166(@entryPointOutput.Color):    165(ptr) Variable Output
+             169:             TypePointer Output 6(float)
+170(@entryPointOutput.Depth):    169(ptr) Variable Output
+             173:             TypeImage 6(float) 1D sampled format:Unknown
+             174:             TypePointer UniformConstant 173
+ 175(g_tTex1df4):    174(ptr) Variable UniformConstant
+             176:             TypeImage 36(int) 1D sampled format:Unknown
+             177:             TypePointer UniformConstant 176
+ 178(g_tTex1di4):    177(ptr) Variable UniformConstant
+             179:             TypeImage 50(int) 1D sampled format:Unknown
+             180:             TypePointer UniformConstant 179
+ 181(g_tTex1du4):    180(ptr) Variable UniformConstant
+             182:             TypeImage 6(float) 2D sampled format:Unknown
              183:             TypePointer UniformConstant 182
- 184(g_tTex1df4):    183(ptr) Variable UniformConstant
-             185:             TypeImage 37(int) 1D sampled format:Unknown
+ 184(g_tTex2df4):    183(ptr) Variable UniformConstant
+             185:             TypeImage 36(int) 2D sampled format:Unknown
              186:             TypePointer UniformConstant 185
- 187(g_tTex1di4):    186(ptr) Variable UniformConstant
-             188:             TypeImage 52(int) 1D sampled format:Unknown
+ 187(g_tTex2di4):    186(ptr) Variable UniformConstant
+             188:             TypeImage 50(int) 2D sampled format:Unknown
              189:             TypePointer UniformConstant 188
- 190(g_tTex1du4):    189(ptr) Variable UniformConstant
-             191:             TypeImage 6(float) 2D sampled format:Unknown
+ 190(g_tTex2du4):    189(ptr) Variable UniformConstant
+             191:             TypeImage 6(float) 3D sampled format:Unknown
              192:             TypePointer UniformConstant 191
- 193(g_tTex2df4):    192(ptr) Variable UniformConstant
-             194:             TypeImage 37(int) 2D sampled format:Unknown
+ 193(g_tTex3df4):    192(ptr) Variable UniformConstant
+             194:             TypeImage 36(int) 3D sampled format:Unknown
              195:             TypePointer UniformConstant 194
- 196(g_tTex2di4):    195(ptr) Variable UniformConstant
-             197:             TypeImage 52(int) 2D sampled format:Unknown
+ 196(g_tTex3di4):    195(ptr) Variable UniformConstant
+             197:             TypeImage 50(int) 3D sampled format:Unknown
              198:             TypePointer UniformConstant 197
- 199(g_tTex2du4):    198(ptr) Variable UniformConstant
-             200:             TypeImage 6(float) 3D sampled format:Unknown
+ 199(g_tTex3du4):    198(ptr) Variable UniformConstant
+             200:             TypeImage 6(float) Cube sampled format:Unknown
              201:             TypePointer UniformConstant 200
- 202(g_tTex3df4):    201(ptr) Variable UniformConstant
-             203:             TypeImage 37(int) 3D sampled format:Unknown
+ 202(g_tTexcdf4):    201(ptr) Variable UniformConstant
+             203:             TypeImage 36(int) Cube sampled format:Unknown
              204:             TypePointer UniformConstant 203
- 205(g_tTex3di4):    204(ptr) Variable UniformConstant
-             206:             TypeImage 52(int) 3D sampled format:Unknown
+ 205(g_tTexcdi4):    204(ptr) Variable UniformConstant
+             206:             TypeImage 50(int) Cube sampled format:Unknown
              207:             TypePointer UniformConstant 206
- 208(g_tTex3du4):    207(ptr) Variable UniformConstant
-             209:             TypeImage 6(float) Cube sampled format:Unknown
-             210:             TypePointer UniformConstant 209
- 211(g_tTexcdf4):    210(ptr) Variable UniformConstant
-             212:             TypeImage 37(int) Cube sampled format:Unknown
-             213:             TypePointer UniformConstant 212
- 214(g_tTexcdi4):    213(ptr) Variable UniformConstant
-             215:             TypeImage 52(int) Cube sampled format:Unknown
-             216:             TypePointer UniformConstant 215
- 217(g_tTexcdu4):    216(ptr) Variable UniformConstant
+ 208(g_tTexcdu4):    207(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-172(flattenTemp):    160(ptr) Variable Function
-             173:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 172(flattenTemp) 173
-             176:    165(ptr) AccessChain 172(flattenTemp) 162
-             177:    7(fvec4) Load 176
-                              Store 175(@entryPointOutput.Color) 177
-             180:     12(ptr) AccessChain 172(flattenTemp) 167
-             181:    6(float) Load 180
-                              Store 179(@entryPointOutput.Depth) 181
+163(flattenTemp):    151(ptr) Variable Function
+             164:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 163(flattenTemp) 164
+             167:    156(ptr) AccessChain 163(flattenTemp) 153
+             168:    7(fvec4) Load 167
+                              Store 166(@entryPointOutput.Color) 168
+             171:     12(ptr) AccessChain 163(flattenTemp) 158
+             172:    6(float) Load 171
+                              Store 170(@entryPointOutput.Depth) 172
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
          13(r10):     12(ptr) Variable Function
-         36(r12):     12(ptr) Variable Function
-         51(r14):     12(ptr) Variable Function
-         66(r30):     12(ptr) Variable Function
-         83(r32):     12(ptr) Variable Function
-         98(r34):     12(ptr) Variable Function
-        113(r60):     12(ptr) Variable Function
-        130(r62):     12(ptr) Variable Function
-        145(r64):     12(ptr) Variable Function
-      161(psout):    160(ptr) Variable Function
+         35(r12):     12(ptr) Variable Function
+         49(r14):     12(ptr) Variable Function
+         63(r30):     12(ptr) Variable Function
+         79(r32):     12(ptr) Variable Function
+         93(r34):     12(ptr) Variable Function
+        107(r60):     12(ptr) Variable Function
+        123(r62):     12(ptr) Variable Function
+        137(r64):     12(ptr) Variable Function
+      152(psout):    151(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4a)
               21:          18 Load 20(g_sSamp)
-              24:          23 SampledImage 17 21
-              31:    6(float) CompositeExtract 28 0
-              32:    6(float) CompositeExtract 28 1
-              33:   30(fvec3) CompositeConstruct 31 32 29
-              34:    6(float) CompositeExtract 33 2
-              35:    6(float) ImageSampleDrefImplicitLod 24 33 34
-                              Store 13(r10) 35
-              41:          38 Load 40(g_tTex1di4a)
-              42:          18 Load 20(g_sSamp)
-              45:          44 SampledImage 41 42
-              46:    6(float) CompositeExtract 28 0
-              47:    6(float) CompositeExtract 28 1
-              48:   30(fvec3) CompositeConstruct 46 47 29
-              49:    6(float) CompositeExtract 48 2
-              50:    6(float) ImageSampleDrefImplicitLod 45 48 49
-                              Store 36(r12) 50
-              56:          53 Load 55(g_tTex1du4a)
-              57:          18 Load 20(g_sSamp)
-              60:          59 SampledImage 56 57
-              61:    6(float) CompositeExtract 28 0
-              62:    6(float) CompositeExtract 28 1
-              63:   30(fvec3) CompositeConstruct 61 62 29
-              64:    6(float) CompositeExtract 63 2
-              65:    6(float) ImageSampleDrefImplicitLod 60 63 64
-                              Store 51(r14) 65
-              70:          67 Load 69(g_tTex2df4a)
-              71:          18 Load 20(g_sSamp)
-              74:          73 SampledImage 70 71
-              77:    6(float) CompositeExtract 76 0
-              78:    6(float) CompositeExtract 76 1
-              79:    6(float) CompositeExtract 76 2
-              80:    7(fvec4) CompositeConstruct 77 78 79 29
-              81:    6(float) CompositeExtract 80 3
-              82:    6(float) ImageSampleDrefImplicitLod 74 80 81
-                              Store 66(r30) 82
-              87:          84 Load 86(g_tTex2di4a)
-              88:          18 Load 20(g_sSamp)
-              91:          90 SampledImage 87 88
-              92:    6(float) CompositeExtract 76 0
-              93:    6(float) CompositeExtract 76 1
-              94:    6(float) CompositeExtract 76 2
-              95:    7(fvec4) CompositeConstruct 92 93 94 29
-              96:    6(float) CompositeExtract 95 3
-              97:    6(float) ImageSampleDrefImplicitLod 91 95 96
-                              Store 83(r32) 97
-             102:          99 Load 101(g_tTex2du4a)
-             103:          18 Load 20(g_sSamp)
-             106:         105 SampledImage 102 103
-             107:    6(float) CompositeExtract 76 0
-             108:    6(float) CompositeExtract 76 1
-             109:    6(float) CompositeExtract 76 2
-             110:    7(fvec4) CompositeConstruct 107 108 109 29
-             111:    6(float) CompositeExtract 110 3
-             112:    6(float) ImageSampleDrefImplicitLod 106 110 111
-                              Store 98(r34) 112
-             117:         114 Load 116(g_tTexcdf4a)
-             118:          18 Load 20(g_sSamp)
-             121:         120 SampledImage 117 118
-             124:    6(float) CompositeExtract 123 0
-             125:    6(float) CompositeExtract 123 1
-             126:    6(float) CompositeExtract 123 2
-             127:    6(float) CompositeExtract 123 3
-             128:    7(fvec4) CompositeConstruct 124 125 126 127
-             129:    6(float) ImageSampleDrefImplicitLod 121 128 29
-                              Store 113(r60) 129
-             134:         131 Load 133(g_tTexcdi4a)
-             135:          18 Load 20(g_sSamp)
-             138:         137 SampledImage 134 135
-             139:    6(float) CompositeExtract 123 0
-             140:    6(float) CompositeExtract 123 1
-             141:    6(float) CompositeExtract 123 2
-             142:    6(float) CompositeExtract 123 3
-             143:    7(fvec4) CompositeConstruct 139 140 141 142
-             144:    6(float) ImageSampleDrefImplicitLod 138 143 29
-                              Store 130(r62) 144
-             149:         146 Load 148(g_tTexcdu4a)
-             150:          18 Load 20(g_sSamp)
-             153:         152 SampledImage 149 150
-             154:    6(float) CompositeExtract 123 0
-             155:    6(float) CompositeExtract 123 1
-             156:    6(float) CompositeExtract 123 2
-             157:    6(float) CompositeExtract 123 3
-             158:    7(fvec4) CompositeConstruct 154 155 156 157
-             159:    6(float) ImageSampleDrefImplicitLod 153 158 29
-                              Store 145(r64) 159
-             166:    165(ptr) AccessChain 161(psout) 162
-                              Store 166 164
-             168:     12(ptr) AccessChain 161(psout) 167
-                              Store 168 163
-             169:8(PS_OUTPUT) Load 161(psout)
-                              ReturnValue 169
+              23:          22 SampledImage 17 21
+              30:    6(float) CompositeExtract 27 0
+              31:    6(float) CompositeExtract 27 1
+              32:   29(fvec3) CompositeConstruct 30 31 28
+              33:    6(float) CompositeExtract 32 2
+              34:    6(float) ImageSampleDrefImplicitLod 23 32 33
+                              Store 13(r10) 34
+              40:          37 Load 39(g_tTex1di4a)
+              41:          18 Load 20(g_sSamp)
+              43:          42 SampledImage 40 41
+              44:    6(float) CompositeExtract 27 0
+              45:    6(float) CompositeExtract 27 1
+              46:   29(fvec3) CompositeConstruct 44 45 28
+              47:    6(float) CompositeExtract 46 2
+              48:    6(float) ImageSampleDrefImplicitLod 43 46 47
+                              Store 35(r12) 48
+              54:          51 Load 53(g_tTex1du4a)
+              55:          18 Load 20(g_sSamp)
+              57:          56 SampledImage 54 55
+              58:    6(float) CompositeExtract 27 0
+              59:    6(float) CompositeExtract 27 1
+              60:   29(fvec3) CompositeConstruct 58 59 28
+              61:    6(float) CompositeExtract 60 2
+              62:    6(float) ImageSampleDrefImplicitLod 57 60 61
+                              Store 49(r14) 62
+              67:          64 Load 66(g_tTex2df4a)
+              68:          18 Load 20(g_sSamp)
+              70:          69 SampledImage 67 68
+              73:    6(float) CompositeExtract 72 0
+              74:    6(float) CompositeExtract 72 1
+              75:    6(float) CompositeExtract 72 2
+              76:    7(fvec4) CompositeConstruct 73 74 75 28
+              77:    6(float) CompositeExtract 76 3
+              78:    6(float) ImageSampleDrefImplicitLod 70 76 77
+                              Store 63(r30) 78
+              83:          80 Load 82(g_tTex2di4a)
+              84:          18 Load 20(g_sSamp)
+              86:          85 SampledImage 83 84
+              87:    6(float) CompositeExtract 72 0
+              88:    6(float) CompositeExtract 72 1
+              89:    6(float) CompositeExtract 72 2
+              90:    7(fvec4) CompositeConstruct 87 88 89 28
+              91:    6(float) CompositeExtract 90 3
+              92:    6(float) ImageSampleDrefImplicitLod 86 90 91
+                              Store 79(r32) 92
+              97:          94 Load 96(g_tTex2du4a)
+              98:          18 Load 20(g_sSamp)
+             100:          99 SampledImage 97 98
+             101:    6(float) CompositeExtract 72 0
+             102:    6(float) CompositeExtract 72 1
+             103:    6(float) CompositeExtract 72 2
+             104:    7(fvec4) CompositeConstruct 101 102 103 28
+             105:    6(float) CompositeExtract 104 3
+             106:    6(float) ImageSampleDrefImplicitLod 100 104 105
+                              Store 93(r34) 106
+             111:         108 Load 110(g_tTexcdf4a)
+             112:          18 Load 20(g_sSamp)
+             114:         113 SampledImage 111 112
+             117:    6(float) CompositeExtract 116 0
+             118:    6(float) CompositeExtract 116 1
+             119:    6(float) CompositeExtract 116 2
+             120:    6(float) CompositeExtract 116 3
+             121:    7(fvec4) CompositeConstruct 117 118 119 120
+             122:    6(float) ImageSampleDrefImplicitLod 114 121 28
+                              Store 107(r60) 122
+             127:         124 Load 126(g_tTexcdi4a)
+             128:          18 Load 20(g_sSamp)
+             130:         129 SampledImage 127 128
+             131:    6(float) CompositeExtract 116 0
+             132:    6(float) CompositeExtract 116 1
+             133:    6(float) CompositeExtract 116 2
+             134:    6(float) CompositeExtract 116 3
+             135:    7(fvec4) CompositeConstruct 131 132 133 134
+             136:    6(float) ImageSampleDrefImplicitLod 130 135 28
+                              Store 123(r62) 136
+             141:         138 Load 140(g_tTexcdu4a)
+             142:          18 Load 20(g_sSamp)
+             144:         143 SampledImage 141 142
+             145:    6(float) CompositeExtract 116 0
+             146:    6(float) CompositeExtract 116 1
+             147:    6(float) CompositeExtract 116 2
+             148:    6(float) CompositeExtract 116 3
+             149:    7(fvec4) CompositeConstruct 145 146 147 148
+             150:    6(float) ImageSampleDrefImplicitLod 144 149 28
+                              Store 137(r64) 150
+             157:    156(ptr) AccessChain 152(psout) 153
+                              Store 157 155
+             159:     12(ptr) AccessChain 152(psout) 158
+                              Store 159 154
+             160:8(PS_OUTPUT) Load 152(psout)
+                              ReturnValue 160
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index d6579ba..729dc36 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -10,7 +10,7 @@
 0:42          'r00' ( temp float)
 0:42          texture ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DShadow)
-0:42              'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42              'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec2 ( temp 2-component vector of float)
 0:42              Constant:
@@ -22,7 +22,7 @@
 0:43          'r02' ( temp float)
 0:43          texture ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DShadow)
-0:43              'g_tTex1di4' ( uniform itexture1D)
+0:43              'g_tTex1di4' ( uniform itexture1DShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec2 ( temp 2-component vector of float)
 0:43              Constant:
@@ -34,7 +34,7 @@
 0:44          'r04' ( temp float)
 0:44          texture ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DShadow)
-0:44              'g_tTex1du4' ( uniform utexture1D)
+0:44              'g_tTex1du4' ( uniform utexture1DShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec2 ( temp 2-component vector of float)
 0:44              Constant:
@@ -46,7 +46,7 @@
 0:47          'r20' ( temp float)
 0:47          texture ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DShadow)
-0:47              'g_tTex2df4' ( uniform texture2D)
+0:47              'g_tTex2df4' ( uniform texture2DShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -59,7 +59,7 @@
 0:48          'r22' ( temp float)
 0:48          texture ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DShadow)
-0:48              'g_tTex2di4' ( uniform itexture2D)
+0:48              'g_tTex2di4' ( uniform itexture2DShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -72,7 +72,7 @@
 0:49          'r24' ( temp float)
 0:49          texture ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DShadow)
-0:49              'g_tTex2du4' ( uniform utexture2D)
+0:49              'g_tTex2du4' ( uniform utexture2DShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -85,7 +85,7 @@
 0:53          'r50' ( temp float)
 0:53          texture ( temp float)
 0:53            Construct combined texture-sampler ( temp samplerCubeShadow)
-0:53              'g_tTexcdf4' ( uniform textureCube)
+0:53              'g_tTexcdf4' ( uniform textureCubeShadow)
 0:53              'g_sSamp' (layout( binding=0) uniform sampler)
 0:53            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -99,7 +99,7 @@
 0:54          'r52' ( temp float)
 0:54          texture ( temp float)
 0:54            Construct combined texture-sampler ( temp isamplerCubeShadow)
-0:54              'g_tTexcdi4' ( uniform itextureCube)
+0:54              'g_tTexcdi4' ( uniform itextureCubeShadow)
 0:54              'g_sSamp' (layout( binding=0) uniform sampler)
 0:54            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -113,7 +113,7 @@
 0:55          'r54' ( temp float)
 0:55          texture ( temp float)
 0:55            Construct combined texture-sampler ( temp usamplerCubeShadow)
-0:55              'g_tTexcdu4' ( uniform utextureCube)
+0:55              'g_tTexcdu4' ( uniform utextureCubeShadow)
 0:55              'g_sSamp' (layout( binding=0) uniform sampler)
 0:55            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -162,18 +162,18 @@
 0:38              1 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout( binding=0) uniform sampler)
-0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:?     'g_tTex1di4' ( uniform itexture1D)
-0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:?     'g_tTex1di4' ( uniform itexture1DShadow)
+0:?     'g_tTex1du4' ( uniform utexture1DShadow)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
-0:?     'g_tTexcdf4' ( uniform textureCube)
-0:?     'g_tTexcdi4' ( uniform itextureCube)
-0:?     'g_tTexcdu4' ( uniform utextureCube)
+0:?     'g_tTexcdf4' ( uniform textureCubeShadow)
+0:?     'g_tTexcdi4' ( uniform itextureCubeShadow)
+0:?     'g_tTexcdu4' ( uniform utextureCubeShadow)
 0:?     'g_tTex1df4a' ( uniform texture1DArray)
 0:?     'g_tTex1di4a' ( uniform itexture1DArray)
 0:?     'g_tTex1du4a' ( uniform utexture1DArray)
@@ -201,7 +201,7 @@
 0:42          'r00' ( temp float)
 0:42          texture ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DShadow)
-0:42              'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42              'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec2 ( temp 2-component vector of float)
 0:42              Constant:
@@ -213,7 +213,7 @@
 0:43          'r02' ( temp float)
 0:43          texture ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DShadow)
-0:43              'g_tTex1di4' ( uniform itexture1D)
+0:43              'g_tTex1di4' ( uniform itexture1DShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec2 ( temp 2-component vector of float)
 0:43              Constant:
@@ -225,7 +225,7 @@
 0:44          'r04' ( temp float)
 0:44          texture ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DShadow)
-0:44              'g_tTex1du4' ( uniform utexture1D)
+0:44              'g_tTex1du4' ( uniform utexture1DShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec2 ( temp 2-component vector of float)
 0:44              Constant:
@@ -237,7 +237,7 @@
 0:47          'r20' ( temp float)
 0:47          texture ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DShadow)
-0:47              'g_tTex2df4' ( uniform texture2D)
+0:47              'g_tTex2df4' ( uniform texture2DShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -250,7 +250,7 @@
 0:48          'r22' ( temp float)
 0:48          texture ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DShadow)
-0:48              'g_tTex2di4' ( uniform itexture2D)
+0:48              'g_tTex2di4' ( uniform itexture2DShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -263,7 +263,7 @@
 0:49          'r24' ( temp float)
 0:49          texture ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DShadow)
-0:49              'g_tTex2du4' ( uniform utexture2D)
+0:49              'g_tTex2du4' ( uniform utexture2DShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -276,7 +276,7 @@
 0:53          'r50' ( temp float)
 0:53          texture ( temp float)
 0:53            Construct combined texture-sampler ( temp samplerCubeShadow)
-0:53              'g_tTexcdf4' ( uniform textureCube)
+0:53              'g_tTexcdf4' ( uniform textureCubeShadow)
 0:53              'g_sSamp' (layout( binding=0) uniform sampler)
 0:53            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -290,7 +290,7 @@
 0:54          'r52' ( temp float)
 0:54          texture ( temp float)
 0:54            Construct combined texture-sampler ( temp isamplerCubeShadow)
-0:54              'g_tTexcdi4' ( uniform itextureCube)
+0:54              'g_tTexcdi4' ( uniform itextureCubeShadow)
 0:54              'g_sSamp' (layout( binding=0) uniform sampler)
 0:54            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -304,7 +304,7 @@
 0:55          'r54' ( temp float)
 0:55          texture ( temp float)
 0:55            Construct combined texture-sampler ( temp usamplerCubeShadow)
-0:55              'g_tTexcdu4' ( uniform utextureCube)
+0:55              'g_tTexcdu4' ( uniform utextureCubeShadow)
 0:55              'g_sSamp' (layout( binding=0) uniform sampler)
 0:55            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -353,18 +353,18 @@
 0:38              1 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout( binding=0) uniform sampler)
-0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:?     'g_tTex1di4' ( uniform itexture1D)
-0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:?     'g_tTex1di4' ( uniform itexture1DShadow)
+0:?     'g_tTex1du4' ( uniform utexture1DShadow)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
-0:?     'g_tTexcdf4' ( uniform textureCube)
-0:?     'g_tTexcdi4' ( uniform itextureCube)
-0:?     'g_tTexcdu4' ( uniform utextureCube)
+0:?     'g_tTexcdf4' ( uniform textureCubeShadow)
+0:?     'g_tTexcdi4' ( uniform itextureCubeShadow)
+0:?     'g_tTexcdu4' ( uniform utextureCubeShadow)
 0:?     'g_tTex1df4a' ( uniform texture1DArray)
 0:?     'g_tTex1di4a' ( uniform itexture1DArray)
 0:?     'g_tTex1du4a' ( uniform utexture1DArray)
@@ -378,15 +378,15 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 207
+// Generated by (magic number): 80002
+// Id's are bound by 198
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 164 168
+                              EntryPoint Fragment 4  "main" 155 159
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -397,64 +397,64 @@
                               Name 13  "r00"
                               Name 16  "g_tTex1df4"
                               Name 20  "g_sSamp"
-                              Name 31  "r02"
-                              Name 35  "g_tTex1di4"
-                              Name 44  "r04"
-                              Name 48  "g_tTex1du4"
-                              Name 57  "r20"
-                              Name 60  "g_tTex2df4"
-                              Name 74  "r22"
-                              Name 77  "g_tTex2di4"
-                              Name 88  "r24"
-                              Name 91  "g_tTex2du4"
-                              Name 102  "r50"
-                              Name 105  "g_tTexcdf4"
-                              Name 119  "r52"
-                              Name 122  "g_tTexcdi4"
-                              Name 134  "r54"
-                              Name 137  "g_tTexcdu4"
-                              Name 150  "psout"
-                              Name 161  "flattenTemp"
-                              Name 164  "@entryPointOutput.Color"
-                              Name 168  "@entryPointOutput.Depth"
-                              Name 173  "g_tTex3df4"
-                              Name 176  "g_tTex3di4"
-                              Name 179  "g_tTex3du4"
-                              Name 182  "g_tTex1df4a"
-                              Name 185  "g_tTex1di4a"
-                              Name 188  "g_tTex1du4a"
-                              Name 191  "g_tTex2df4a"
-                              Name 194  "g_tTex2di4a"
-                              Name 197  "g_tTex2du4a"
-                              Name 200  "g_tTexcdf4a"
-                              Name 203  "g_tTexcdi4a"
-                              Name 206  "g_tTexcdu4a"
+                              Name 30  "r02"
+                              Name 34  "g_tTex1di4"
+                              Name 42  "r04"
+                              Name 46  "g_tTex1du4"
+                              Name 54  "r20"
+                              Name 57  "g_tTex2df4"
+                              Name 70  "r22"
+                              Name 73  "g_tTex2di4"
+                              Name 83  "r24"
+                              Name 86  "g_tTex2du4"
+                              Name 96  "r50"
+                              Name 99  "g_tTexcdf4"
+                              Name 112  "r52"
+                              Name 115  "g_tTexcdi4"
+                              Name 126  "r54"
+                              Name 129  "g_tTexcdu4"
+                              Name 141  "psout"
+                              Name 152  "flattenTemp"
+                              Name 155  "@entryPointOutput.Color"
+                              Name 159  "@entryPointOutput.Depth"
+                              Name 164  "g_tTex3df4"
+                              Name 167  "g_tTex3di4"
+                              Name 170  "g_tTex3du4"
+                              Name 173  "g_tTex1df4a"
+                              Name 176  "g_tTex1di4a"
+                              Name 179  "g_tTex1du4a"
+                              Name 182  "g_tTex2df4a"
+                              Name 185  "g_tTex2di4a"
+                              Name 188  "g_tTex2du4a"
+                              Name 191  "g_tTexcdf4a"
+                              Name 194  "g_tTexcdi4a"
+                              Name 197  "g_tTexcdu4a"
                               Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 35(g_tTex1di4) DescriptorSet 0
-                              Decorate 48(g_tTex1du4) DescriptorSet 0
-                              Decorate 60(g_tTex2df4) DescriptorSet 0
-                              Decorate 77(g_tTex2di4) DescriptorSet 0
-                              Decorate 91(g_tTex2du4) DescriptorSet 0
-                              Decorate 105(g_tTexcdf4) DescriptorSet 0
-                              Decorate 122(g_tTexcdi4) DescriptorSet 0
-                              Decorate 137(g_tTexcdu4) DescriptorSet 0
-                              Decorate 164(@entryPointOutput.Color) Location 0
-                              Decorate 168(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 173(g_tTex3df4) DescriptorSet 0
-                              Decorate 176(g_tTex3di4) DescriptorSet 0
-                              Decorate 179(g_tTex3du4) DescriptorSet 0
-                              Decorate 182(g_tTex1df4a) DescriptorSet 0
-                              Decorate 185(g_tTex1di4a) DescriptorSet 0
-                              Decorate 188(g_tTex1du4a) DescriptorSet 0
-                              Decorate 191(g_tTex2df4a) DescriptorSet 0
-                              Decorate 194(g_tTex2di4a) DescriptorSet 0
-                              Decorate 197(g_tTex2du4a) DescriptorSet 0
-                              Decorate 200(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 203(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 206(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 34(g_tTex1di4) DescriptorSet 0
+                              Decorate 46(g_tTex1du4) DescriptorSet 0
+                              Decorate 57(g_tTex2df4) DescriptorSet 0
+                              Decorate 73(g_tTex2di4) DescriptorSet 0
+                              Decorate 86(g_tTex2du4) DescriptorSet 0
+                              Decorate 99(g_tTexcdf4) DescriptorSet 0
+                              Decorate 115(g_tTexcdi4) DescriptorSet 0
+                              Decorate 129(g_tTexcdu4) DescriptorSet 0
+                              Decorate 155(@entryPointOutput.Color) Location 0
+                              Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 164(g_tTex3df4) DescriptorSet 0
+                              Decorate 167(g_tTex3di4) DescriptorSet 0
+                              Decorate 170(g_tTex3du4) DescriptorSet 0
+                              Decorate 173(g_tTex1df4a) DescriptorSet 0
+                              Decorate 176(g_tTex1di4a) DescriptorSet 0
+                              Decorate 179(g_tTex1du4a) DescriptorSet 0
+                              Decorate 182(g_tTex2df4a) DescriptorSet 0
+                              Decorate 185(g_tTex2di4a) DescriptorSet 0
+                              Decorate 188(g_tTex2du4a) DescriptorSet 0
+                              Decorate 191(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 194(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 197(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -462,217 +462,208 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 6(float)
-              14:             TypeImage 6(float) 1D sampled format:Unknown
+              14:             TypeImage 6(float) 1D depth sampled format:Unknown
               15:             TypePointer UniformConstant 14
   16(g_tTex1df4):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
      20(g_sSamp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 1D depth sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:    6(float) Constant 1036831949
-              26:    6(float) Constant 1061158912
-              27:             TypeVector 6(float) 2
-              32:             TypeInt 32 1
-              33:             TypeImage 32(int) 1D sampled format:Unknown
-              34:             TypePointer UniformConstant 33
-  35(g_tTex1di4):     34(ptr) Variable UniformConstant
-              38:             TypeImage 32(int) 1D depth sampled format:Unknown
-              39:             TypeSampledImage 38
-              45:             TypeInt 32 0
-              46:             TypeImage 45(int) 1D sampled format:Unknown
-              47:             TypePointer UniformConstant 46
-  48(g_tTex1du4):     47(ptr) Variable UniformConstant
-              51:             TypeImage 45(int) 1D depth sampled format:Unknown
-              52:             TypeSampledImage 51
-              58:             TypeImage 6(float) 2D sampled format:Unknown
-              59:             TypePointer UniformConstant 58
-  60(g_tTex2df4):     59(ptr) Variable UniformConstant
-              63:             TypeImage 6(float) 2D depth sampled format:Unknown
-              64:             TypeSampledImage 63
-              66:    6(float) Constant 1045220557
-              67:   27(fvec2) ConstantComposite 25 66
-              68:             TypeVector 6(float) 3
-              75:             TypeImage 32(int) 2D sampled format:Unknown
-              76:             TypePointer UniformConstant 75
-  77(g_tTex2di4):     76(ptr) Variable UniformConstant
-              80:             TypeImage 32(int) 2D depth sampled format:Unknown
-              81:             TypeSampledImage 80
-              89:             TypeImage 45(int) 2D sampled format:Unknown
-              90:             TypePointer UniformConstant 89
-  91(g_tTex2du4):     90(ptr) Variable UniformConstant
-              94:             TypeImage 45(int) 2D depth sampled format:Unknown
-              95:             TypeSampledImage 94
-             103:             TypeImage 6(float) Cube sampled format:Unknown
-             104:             TypePointer UniformConstant 103
- 105(g_tTexcdf4):    104(ptr) Variable UniformConstant
-             108:             TypeImage 6(float) Cube depth sampled format:Unknown
-             109:             TypeSampledImage 108
-             111:    6(float) Constant 1050253722
-             112:   68(fvec3) ConstantComposite 25 66 111
-             120:             TypeImage 32(int) Cube sampled format:Unknown
-             121:             TypePointer UniformConstant 120
- 122(g_tTexcdi4):    121(ptr) Variable UniformConstant
-             125:             TypeImage 32(int) Cube depth sampled format:Unknown
-             126:             TypeSampledImage 125
-             135:             TypeImage 45(int) Cube sampled format:Unknown
-             136:             TypePointer UniformConstant 135
- 137(g_tTexcdu4):    136(ptr) Variable UniformConstant
-             140:             TypeImage 45(int) Cube depth sampled format:Unknown
-             141:             TypeSampledImage 140
-             149:             TypePointer Function 8(PS_OUTPUT)
-             151:     32(int) Constant 0
-             152:    6(float) Constant 1065353216
-             153:    7(fvec4) ConstantComposite 152 152 152 152
-             154:             TypePointer Function 7(fvec4)
-             156:     32(int) Constant 1
-             163:             TypePointer Output 7(fvec4)
-164(@entryPointOutput.Color):    163(ptr) Variable Output
-             167:             TypePointer Output 6(float)
-168(@entryPointOutput.Depth):    167(ptr) Variable Output
-             171:             TypeImage 6(float) 3D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:    6(float) Constant 1036831949
+              25:    6(float) Constant 1061158912
+              26:             TypeVector 6(float) 2
+              31:             TypeInt 32 1
+              32:             TypeImage 31(int) 1D depth sampled format:Unknown
+              33:             TypePointer UniformConstant 32
+  34(g_tTex1di4):     33(ptr) Variable UniformConstant
+              37:             TypeSampledImage 32
+              43:             TypeInt 32 0
+              44:             TypeImage 43(int) 1D depth sampled format:Unknown
+              45:             TypePointer UniformConstant 44
+  46(g_tTex1du4):     45(ptr) Variable UniformConstant
+              49:             TypeSampledImage 44
+              55:             TypeImage 6(float) 2D depth sampled format:Unknown
+              56:             TypePointer UniformConstant 55
+  57(g_tTex2df4):     56(ptr) Variable UniformConstant
+              60:             TypeSampledImage 55
+              62:    6(float) Constant 1045220557
+              63:   26(fvec2) ConstantComposite 24 62
+              64:             TypeVector 6(float) 3
+              71:             TypeImage 31(int) 2D depth sampled format:Unknown
+              72:             TypePointer UniformConstant 71
+  73(g_tTex2di4):     72(ptr) Variable UniformConstant
+              76:             TypeSampledImage 71
+              84:             TypeImage 43(int) 2D depth sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+  86(g_tTex2du4):     85(ptr) Variable UniformConstant
+              89:             TypeSampledImage 84
+              97:             TypeImage 6(float) Cube depth sampled format:Unknown
+              98:             TypePointer UniformConstant 97
+  99(g_tTexcdf4):     98(ptr) Variable UniformConstant
+             102:             TypeSampledImage 97
+             104:    6(float) Constant 1050253722
+             105:   64(fvec3) ConstantComposite 24 62 104
+             113:             TypeImage 31(int) Cube depth sampled format:Unknown
+             114:             TypePointer UniformConstant 113
+ 115(g_tTexcdi4):    114(ptr) Variable UniformConstant
+             118:             TypeSampledImage 113
+             127:             TypeImage 43(int) Cube depth sampled format:Unknown
+             128:             TypePointer UniformConstant 127
+ 129(g_tTexcdu4):    128(ptr) Variable UniformConstant
+             132:             TypeSampledImage 127
+             140:             TypePointer Function 8(PS_OUTPUT)
+             142:     31(int) Constant 0
+             143:    6(float) Constant 1065353216
+             144:    7(fvec4) ConstantComposite 143 143 143 143
+             145:             TypePointer Function 7(fvec4)
+             147:     31(int) Constant 1
+             154:             TypePointer Output 7(fvec4)
+155(@entryPointOutput.Color):    154(ptr) Variable Output
+             158:             TypePointer Output 6(float)
+159(@entryPointOutput.Depth):    158(ptr) Variable Output
+             162:             TypeImage 6(float) 3D sampled format:Unknown
+             163:             TypePointer UniformConstant 162
+ 164(g_tTex3df4):    163(ptr) Variable UniformConstant
+             165:             TypeImage 31(int) 3D sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+ 167(g_tTex3di4):    166(ptr) Variable UniformConstant
+             168:             TypeImage 43(int) 3D sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+ 170(g_tTex3du4):    169(ptr) Variable UniformConstant
+             171:             TypeImage 6(float) 1D array sampled format:Unknown
              172:             TypePointer UniformConstant 171
- 173(g_tTex3df4):    172(ptr) Variable UniformConstant
-             174:             TypeImage 32(int) 3D sampled format:Unknown
+173(g_tTex1df4a):    172(ptr) Variable UniformConstant
+             174:             TypeImage 31(int) 1D array sampled format:Unknown
              175:             TypePointer UniformConstant 174
- 176(g_tTex3di4):    175(ptr) Variable UniformConstant
-             177:             TypeImage 45(int) 3D sampled format:Unknown
+176(g_tTex1di4a):    175(ptr) Variable UniformConstant
+             177:             TypeImage 43(int) 1D array sampled format:Unknown
              178:             TypePointer UniformConstant 177
- 179(g_tTex3du4):    178(ptr) Variable UniformConstant
-             180:             TypeImage 6(float) 1D array sampled format:Unknown
+179(g_tTex1du4a):    178(ptr) Variable UniformConstant
+             180:             TypeImage 6(float) 2D array sampled format:Unknown
              181:             TypePointer UniformConstant 180
-182(g_tTex1df4a):    181(ptr) Variable UniformConstant
-             183:             TypeImage 32(int) 1D array sampled format:Unknown
+182(g_tTex2df4a):    181(ptr) Variable UniformConstant
+             183:             TypeImage 31(int) 2D array sampled format:Unknown
              184:             TypePointer UniformConstant 183
-185(g_tTex1di4a):    184(ptr) Variable UniformConstant
-             186:             TypeImage 45(int) 1D array sampled format:Unknown
+185(g_tTex2di4a):    184(ptr) Variable UniformConstant
+             186:             TypeImage 43(int) 2D array sampled format:Unknown
              187:             TypePointer UniformConstant 186
-188(g_tTex1du4a):    187(ptr) Variable UniformConstant
-             189:             TypeImage 6(float) 2D array sampled format:Unknown
+188(g_tTex2du4a):    187(ptr) Variable UniformConstant
+             189:             TypeImage 6(float) Cube array sampled format:Unknown
              190:             TypePointer UniformConstant 189
-191(g_tTex2df4a):    190(ptr) Variable UniformConstant
-             192:             TypeImage 32(int) 2D array sampled format:Unknown
+191(g_tTexcdf4a):    190(ptr) Variable UniformConstant
+             192:             TypeImage 31(int) Cube array sampled format:Unknown
              193:             TypePointer UniformConstant 192
-194(g_tTex2di4a):    193(ptr) Variable UniformConstant
-             195:             TypeImage 45(int) 2D array sampled format:Unknown
+194(g_tTexcdi4a):    193(ptr) Variable UniformConstant
+             195:             TypeImage 43(int) Cube array sampled format:Unknown
              196:             TypePointer UniformConstant 195
-197(g_tTex2du4a):    196(ptr) Variable UniformConstant
-             198:             TypeImage 6(float) Cube array sampled format:Unknown
-             199:             TypePointer UniformConstant 198
-200(g_tTexcdf4a):    199(ptr) Variable UniformConstant
-             201:             TypeImage 32(int) Cube array sampled format:Unknown
-             202:             TypePointer UniformConstant 201
-203(g_tTexcdi4a):    202(ptr) Variable UniformConstant
-             204:             TypeImage 45(int) Cube array sampled format:Unknown
-             205:             TypePointer UniformConstant 204
-206(g_tTexcdu4a):    205(ptr) Variable UniformConstant
+197(g_tTexcdu4a):    196(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-161(flattenTemp):    149(ptr) Variable Function
-             162:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 161(flattenTemp) 162
-             165:    154(ptr) AccessChain 161(flattenTemp) 151
-             166:    7(fvec4) Load 165
-                              Store 164(@entryPointOutput.Color) 166
-             169:     12(ptr) AccessChain 161(flattenTemp) 156
-             170:    6(float) Load 169
-                              Store 168(@entryPointOutput.Depth) 170
+152(flattenTemp):    140(ptr) Variable Function
+             153:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 152(flattenTemp) 153
+             156:    145(ptr) AccessChain 152(flattenTemp) 142
+             157:    7(fvec4) Load 156
+                              Store 155(@entryPointOutput.Color) 157
+             160:     12(ptr) AccessChain 152(flattenTemp) 147
+             161:    6(float) Load 160
+                              Store 159(@entryPointOutput.Depth) 161
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
          13(r00):     12(ptr) Variable Function
-         31(r02):     12(ptr) Variable Function
-         44(r04):     12(ptr) Variable Function
-         57(r20):     12(ptr) Variable Function
-         74(r22):     12(ptr) Variable Function
-         88(r24):     12(ptr) Variable Function
-        102(r50):     12(ptr) Variable Function
-        119(r52):     12(ptr) Variable Function
-        134(r54):     12(ptr) Variable Function
-      150(psout):    149(ptr) Variable Function
+         30(r02):     12(ptr) Variable Function
+         42(r04):     12(ptr) Variable Function
+         54(r20):     12(ptr) Variable Function
+         70(r22):     12(ptr) Variable Function
+         83(r24):     12(ptr) Variable Function
+         96(r50):     12(ptr) Variable Function
+        112(r52):     12(ptr) Variable Function
+        126(r54):     12(ptr) Variable Function
+      141(psout):    140(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4)
               21:          18 Load 20(g_sSamp)
-              24:          23 SampledImage 17 21
-              28:   27(fvec2) CompositeConstruct 25 26
-              29:    6(float) CompositeExtract 28 1
-              30:    6(float) ImageSampleDrefImplicitLod 24 28 29
-                              Store 13(r00) 30
-              36:          33 Load 35(g_tTex1di4)
-              37:          18 Load 20(g_sSamp)
-              40:          39 SampledImage 36 37
-              41:   27(fvec2) CompositeConstruct 25 26
-              42:    6(float) CompositeExtract 41 1
-              43:    6(float) ImageSampleDrefImplicitLod 40 41 42
-                              Store 31(r02) 43
-              49:          46 Load 48(g_tTex1du4)
-              50:          18 Load 20(g_sSamp)
-              53:          52 SampledImage 49 50
-              54:   27(fvec2) CompositeConstruct 25 26
-              55:    6(float) CompositeExtract 54 1
-              56:    6(float) ImageSampleDrefImplicitLod 53 54 55
-                              Store 44(r04) 56
-              61:          58 Load 60(g_tTex2df4)
-              62:          18 Load 20(g_sSamp)
-              65:          64 SampledImage 61 62
-              69:    6(float) CompositeExtract 67 0
-              70:    6(float) CompositeExtract 67 1
-              71:   68(fvec3) CompositeConstruct 69 70 26
-              72:    6(float) CompositeExtract 71 2
-              73:    6(float) ImageSampleDrefImplicitLod 65 71 72
-                              Store 57(r20) 73
-              78:          75 Load 77(g_tTex2di4)
-              79:          18 Load 20(g_sSamp)
-              82:          81 SampledImage 78 79
-              83:    6(float) CompositeExtract 67 0
-              84:    6(float) CompositeExtract 67 1
-              85:   68(fvec3) CompositeConstruct 83 84 26
-              86:    6(float) CompositeExtract 85 2
-              87:    6(float) ImageSampleDrefImplicitLod 82 85 86
-                              Store 74(r22) 87
-              92:          89 Load 91(g_tTex2du4)
-              93:          18 Load 20(g_sSamp)
-              96:          95 SampledImage 92 93
-              97:    6(float) CompositeExtract 67 0
-              98:    6(float) CompositeExtract 67 1
-              99:   68(fvec3) CompositeConstruct 97 98 26
-             100:    6(float) CompositeExtract 99 2
-             101:    6(float) ImageSampleDrefImplicitLod 96 99 100
-                              Store 88(r24) 101
-             106:         103 Load 105(g_tTexcdf4)
-             107:          18 Load 20(g_sSamp)
-             110:         109 SampledImage 106 107
-             113:    6(float) CompositeExtract 112 0
-             114:    6(float) CompositeExtract 112 1
-             115:    6(float) CompositeExtract 112 2
-             116:    7(fvec4) CompositeConstruct 113 114 115 26
-             117:    6(float) CompositeExtract 116 3
-             118:    6(float) ImageSampleDrefImplicitLod 110 116 117
-                              Store 102(r50) 118
-             123:         120 Load 122(g_tTexcdi4)
-             124:          18 Load 20(g_sSamp)
-             127:         126 SampledImage 123 124
-             128:    6(float) CompositeExtract 112 0
-             129:    6(float) CompositeExtract 112 1
-             130:    6(float) CompositeExtract 112 2
-             131:    7(fvec4) CompositeConstruct 128 129 130 26
-             132:    6(float) CompositeExtract 131 3
-             133:    6(float) ImageSampleDrefImplicitLod 127 131 132
-                              Store 119(r52) 133
-             138:         135 Load 137(g_tTexcdu4)
-             139:          18 Load 20(g_sSamp)
-             142:         141 SampledImage 138 139
-             143:    6(float) CompositeExtract 112 0
-             144:    6(float) CompositeExtract 112 1
-             145:    6(float) CompositeExtract 112 2
-             146:    7(fvec4) CompositeConstruct 143 144 145 26
-             147:    6(float) CompositeExtract 146 3
-             148:    6(float) ImageSampleDrefImplicitLod 142 146 147
-                              Store 134(r54) 148
-             155:    154(ptr) AccessChain 150(psout) 151
-                              Store 155 153
-             157:     12(ptr) AccessChain 150(psout) 156
-                              Store 157 152
-             158:8(PS_OUTPUT) Load 150(psout)
-                              ReturnValue 158
+              23:          22 SampledImage 17 21
+              27:   26(fvec2) CompositeConstruct 24 25
+              28:    6(float) CompositeExtract 27 1
+              29:    6(float) ImageSampleDrefImplicitLod 23 27 28
+                              Store 13(r00) 29
+              35:          32 Load 34(g_tTex1di4)
+              36:          18 Load 20(g_sSamp)
+              38:          37 SampledImage 35 36
+              39:   26(fvec2) CompositeConstruct 24 25
+              40:    6(float) CompositeExtract 39 1
+              41:    6(float) ImageSampleDrefImplicitLod 38 39 40
+                              Store 30(r02) 41
+              47:          44 Load 46(g_tTex1du4)
+              48:          18 Load 20(g_sSamp)
+              50:          49 SampledImage 47 48
+              51:   26(fvec2) CompositeConstruct 24 25
+              52:    6(float) CompositeExtract 51 1
+              53:    6(float) ImageSampleDrefImplicitLod 50 51 52
+                              Store 42(r04) 53
+              58:          55 Load 57(g_tTex2df4)
+              59:          18 Load 20(g_sSamp)
+              61:          60 SampledImage 58 59
+              65:    6(float) CompositeExtract 63 0
+              66:    6(float) CompositeExtract 63 1
+              67:   64(fvec3) CompositeConstruct 65 66 25
+              68:    6(float) CompositeExtract 67 2
+              69:    6(float) ImageSampleDrefImplicitLod 61 67 68
+                              Store 54(r20) 69
+              74:          71 Load 73(g_tTex2di4)
+              75:          18 Load 20(g_sSamp)
+              77:          76 SampledImage 74 75
+              78:    6(float) CompositeExtract 63 0
+              79:    6(float) CompositeExtract 63 1
+              80:   64(fvec3) CompositeConstruct 78 79 25
+              81:    6(float) CompositeExtract 80 2
+              82:    6(float) ImageSampleDrefImplicitLod 77 80 81
+                              Store 70(r22) 82
+              87:          84 Load 86(g_tTex2du4)
+              88:          18 Load 20(g_sSamp)
+              90:          89 SampledImage 87 88
+              91:    6(float) CompositeExtract 63 0
+              92:    6(float) CompositeExtract 63 1
+              93:   64(fvec3) CompositeConstruct 91 92 25
+              94:    6(float) CompositeExtract 93 2
+              95:    6(float) ImageSampleDrefImplicitLod 90 93 94
+                              Store 83(r24) 95
+             100:          97 Load 99(g_tTexcdf4)
+             101:          18 Load 20(g_sSamp)
+             103:         102 SampledImage 100 101
+             106:    6(float) CompositeExtract 105 0
+             107:    6(float) CompositeExtract 105 1
+             108:    6(float) CompositeExtract 105 2
+             109:    7(fvec4) CompositeConstruct 106 107 108 25
+             110:    6(float) CompositeExtract 109 3
+             111:    6(float) ImageSampleDrefImplicitLod 103 109 110
+                              Store 96(r50) 111
+             116:         113 Load 115(g_tTexcdi4)
+             117:          18 Load 20(g_sSamp)
+             119:         118 SampledImage 116 117
+             120:    6(float) CompositeExtract 105 0
+             121:    6(float) CompositeExtract 105 1
+             122:    6(float) CompositeExtract 105 2
+             123:    7(fvec4) CompositeConstruct 120 121 122 25
+             124:    6(float) CompositeExtract 123 3
+             125:    6(float) ImageSampleDrefImplicitLod 119 123 124
+                              Store 112(r52) 125
+             130:         127 Load 129(g_tTexcdu4)
+             131:          18 Load 20(g_sSamp)
+             133:         132 SampledImage 130 131
+             134:    6(float) CompositeExtract 105 0
+             135:    6(float) CompositeExtract 105 1
+             136:    6(float) CompositeExtract 105 2
+             137:    7(fvec4) CompositeConstruct 134 135 136 25
+             138:    6(float) CompositeExtract 137 3
+             139:    6(float) ImageSampleDrefImplicitLod 133 137 138
+                              Store 126(r54) 139
+             146:    145(ptr) AccessChain 141(psout) 142
+                              Store 146 144
+             148:     12(ptr) AccessChain 141(psout) 147
+                              Store 148 143
+             149:8(PS_OUTPUT) Load 141(psout)
+                              ReturnValue 149
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
new file mode 100644
index 0000000..4ac0d77
--- /dev/null
+++ b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
@@ -0,0 +1,157 @@
+hlsl.samplecmp.dualmode.frag
+WARNING: AST will form illegal SPIR-V; need to transform to legalize
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7  Function Definition: @main( ( temp 4-component vector of float)
+0:7    Function Parameters: 
+0:?     Sequence
+0:10      texture ( temp float)
+0:10        Construct combined texture-sampler ( temp sampler1DShadow)
+0:10          'g_tTex' (layout( binding=3) uniform texture1DShadow)
+0:10          'g_sSampCmp' (layout( binding=1) uniform sampler)
+0:10        Construct vec2 ( temp 2-component vector of float)
+0:10          Constant:
+0:10            0.100000
+0:10          Constant:
+0:10            0.750000
+0:11      texture ( temp 4-component vector of float)
+0:11        Construct combined texture-sampler ( temp sampler1D)
+0:11          'g_tTex' (layout( binding=3) uniform texture1D)
+0:11          'g_sSamp' (layout( binding=0) uniform sampler)
+0:11        Constant:
+0:11          0.100000
+0:13      Branch: Return with expression
+0:13        Constant:
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:7  Function Definition: main( ( temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'g_sSamp' (layout( binding=0) uniform sampler)
+0:?     'g_sSampCmp' (layout( binding=1) uniform sampler)
+0:?     'g_tTex' (layout( binding=3) uniform texture1DShadow)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'g_tTex' (layout( binding=3) uniform texture1D)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7  Function Definition: @main( ( temp 4-component vector of float)
+0:7    Function Parameters: 
+0:?     Sequence
+0:10      texture ( temp float)
+0:10        Construct combined texture-sampler ( temp sampler1DShadow)
+0:10          'g_tTex' (layout( binding=3) uniform texture1DShadow)
+0:10          'g_sSampCmp' (layout( binding=1) uniform sampler)
+0:10        Construct vec2 ( temp 2-component vector of float)
+0:10          Constant:
+0:10            0.100000
+0:10          Constant:
+0:10            0.750000
+0:11      texture ( temp 4-component vector of float)
+0:11        Construct combined texture-sampler ( temp sampler1D)
+0:11          'g_tTex' (layout( binding=3) uniform texture1D)
+0:11          'g_sSamp' (layout( binding=0) uniform sampler)
+0:11        Constant:
+0:11          0.100000
+0:13      Branch: Return with expression
+0:13        Constant:
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:7  Function Definition: main( ( temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:7        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'g_sSamp' (layout( binding=0) uniform sampler)
+0:?     'g_sSampCmp' (layout( binding=1) uniform sampler)
+0:?     'g_tTex' (layout( binding=3) uniform texture1DShadow)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'g_tTex' (layout( binding=3) uniform texture1D)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 43
+
+                              Capability Shader
+                              Capability Sampled1D
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 13  "g_tTex"
+                              Name 17  "g_sSampCmp"
+                              Name 29  "g_tTex"
+                              Name 31  "g_sSamp"
+                              Name 41  "@entryPointOutput"
+                              Decorate 13(g_tTex) DescriptorSet 0
+                              Decorate 13(g_tTex) Binding 3
+                              Decorate 17(g_sSampCmp) DescriptorSet 0
+                              Decorate 17(g_sSampCmp) Binding 1
+                              Decorate 29(g_tTex) DescriptorSet 0
+                              Decorate 29(g_tTex) Binding 3
+                              Decorate 31(g_sSamp) DescriptorSet 0
+                              Decorate 31(g_sSamp) Binding 0
+                              Decorate 41(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeImage 6(float) 1D depth sampled format:Unknown
+              12:             TypePointer UniformConstant 11
+      13(g_tTex):     12(ptr) Variable UniformConstant
+              15:             TypeSampler
+              16:             TypePointer UniformConstant 15
+  17(g_sSampCmp):     16(ptr) Variable UniformConstant
+              19:             TypeSampledImage 11
+              21:    6(float) Constant 1036831949
+              22:    6(float) Constant 1061158912
+              23:             TypeVector 6(float) 2
+              27:             TypeImage 6(float) 1D sampled format:Unknown
+              28:             TypePointer UniformConstant 27
+      29(g_tTex):     28(ptr) Variable UniformConstant
+     31(g_sSamp):     16(ptr) Variable UniformConstant
+              33:             TypeSampledImage 27
+              36:    6(float) Constant 0
+              37:    7(fvec4) ConstantComposite 36 36 36 36
+              40:             TypePointer Output 7(fvec4)
+41(@entryPointOutput):     40(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              42:    7(fvec4) FunctionCall 9(@main()
+                              Store 41(@entryPointOutput) 42
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+              14:          11 Load 13(g_tTex)
+              18:          15 Load 17(g_sSampCmp)
+              20:          19 SampledImage 14 18
+              24:   23(fvec2) CompositeConstruct 21 22
+              25:    6(float) CompositeExtract 24 1
+              26:    6(float) ImageSampleDrefImplicitLod 20 24 25
+              30:          27 Load 29(g_tTex)
+              32:          15 Load 31(g_sSamp)
+              34:          33 SampledImage 30 32
+              35:    7(fvec4) ImageSampleImplicitLod 34 21
+                              ReturnValue 37
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.negative.frag.out b/Test/baseResults/hlsl.samplecmp.negative.frag.out
index 99cfdbf..65a69e8 100644
--- a/Test/baseResults/hlsl.samplecmp.negative.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.negative.frag.out
@@ -1,47 +1,48 @@
 hlsl.samplecmp.negative.frag
-ERROR: 0:9: '' : expected: SamplerComparisonState 
+ERROR: 0:10: '' : expected: SamplerComparisonState 
 ERROR: 1 compilation errors.  No code generated.
 
 
 Shader version: 500
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:7  Function Definition: @main( ( temp 4-component vector of float)
-0:7    Function Parameters: 
+0:8  Function Definition: @main( ( temp 4-component vector of float)
+0:8    Function Parameters: 
 0:?     Sequence
-0:8      texture ( temp float)
-0:8        Construct combined texture-sampler ( temp sampler2DShadow)
-0:8          'g_shadowTex' ( uniform texture2D)
-0:8          'g_shadowSamplerComp' ( uniform sampler)
-0:8        Construct vec3 ( temp 3-component vector of float)
+0:9      texture ( temp float)
+0:9        Construct combined texture-sampler ( temp sampler2DShadow)
+0:9          'g_shadowTex' ( uniform texture2DShadow)
+0:9          'g_shadowSamplerComp' ( uniform sampler)
+0:9        Construct vec3 ( temp 3-component vector of float)
 0:?           Constant:
 0:?             0.000000
 0:?             0.000000
-0:8          Constant:
-0:8            0.000000
-0:9      ERROR: Bad aggregation op
+0:9          Constant:
+0:9            0.000000
+0:10      ERROR: Bad aggregation op
  ( temp float)
-0:9        'g_shadowTex' ( uniform texture2D)
-0:9        'g_shadowSampler' ( uniform sampler)
+0:10        'g_nonShadowTex' ( uniform texture2D)
+0:10        'g_shadowSampler' ( uniform sampler)
 0:?         Constant:
 0:?           0.000000
 0:?           0.000000
-0:9        Constant:
-0:9          0.000000
-0:11      Branch: Return with expression
-0:11        Constant:
-0:11          0.000000
-0:11          0.000000
-0:11          0.000000
-0:11          0.000000
-0:7  Function Definition: main( ( temp void)
-0:7    Function Parameters: 
+0:10        Constant:
+0:10          0.000000
+0:12      Branch: Return with expression
+0:12        Constant:
+0:12          0.000000
+0:12          0.000000
+0:12          0.000000
+0:12          0.000000
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
 0:?     Sequence
-0:7      move second child to first child ( temp 4-component vector of float)
+0:8      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:7        Function Call: @main( ( temp 4-component vector of float)
+0:8        Function Call: @main( ( temp 4-component vector of float)
 0:?   Linker Objects
-0:?     'g_shadowTex' ( uniform texture2D)
+0:?     'g_nonShadowTex' ( uniform texture2D)
+0:?     'g_shadowTex' ( uniform texture2DShadow)
 0:?     'g_shadowSampler' ( uniform sampler)
 0:?     'g_shadowSamplerComp' ( uniform sampler)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -53,42 +54,43 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:7  Function Definition: @main( ( temp 4-component vector of float)
-0:7    Function Parameters: 
+0:8  Function Definition: @main( ( temp 4-component vector of float)
+0:8    Function Parameters: 
 0:?     Sequence
-0:8      texture ( temp float)
-0:8        Construct combined texture-sampler ( temp sampler2DShadow)
-0:8          'g_shadowTex' ( uniform texture2D)
-0:8          'g_shadowSamplerComp' ( uniform sampler)
-0:8        Construct vec3 ( temp 3-component vector of float)
+0:9      texture ( temp float)
+0:9        Construct combined texture-sampler ( temp sampler2DShadow)
+0:9          'g_shadowTex' ( uniform texture2DShadow)
+0:9          'g_shadowSamplerComp' ( uniform sampler)
+0:9        Construct vec3 ( temp 3-component vector of float)
 0:?           Constant:
 0:?             0.000000
 0:?             0.000000
-0:8          Constant:
-0:8            0.000000
-0:9      ERROR: Bad aggregation op
+0:9          Constant:
+0:9            0.000000
+0:10      ERROR: Bad aggregation op
  ( temp float)
-0:9        'g_shadowTex' ( uniform texture2D)
-0:9        'g_shadowSampler' ( uniform sampler)
+0:10        'g_nonShadowTex' ( uniform texture2D)
+0:10        'g_shadowSampler' ( uniform sampler)
 0:?         Constant:
 0:?           0.000000
 0:?           0.000000
-0:9        Constant:
-0:9          0.000000
-0:11      Branch: Return with expression
-0:11        Constant:
-0:11          0.000000
-0:11          0.000000
-0:11          0.000000
-0:11          0.000000
-0:7  Function Definition: main( ( temp void)
-0:7    Function Parameters: 
+0:10        Constant:
+0:10          0.000000
+0:12      Branch: Return with expression
+0:12        Constant:
+0:12          0.000000
+0:12          0.000000
+0:12          0.000000
+0:12          0.000000
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
 0:?     Sequence
-0:7      move second child to first child ( temp 4-component vector of float)
+0:8      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:7        Function Call: @main( ( temp 4-component vector of float)
+0:8        Function Call: @main( ( temp 4-component vector of float)
 0:?   Linker Objects
-0:?     'g_shadowTex' ( uniform texture2D)
+0:?     'g_nonShadowTex' ( uniform texture2D)
+0:?     'g_shadowTex' ( uniform texture2DShadow)
 0:?     'g_shadowSampler' ( uniform sampler)
 0:?     'g_shadowSamplerComp' ( uniform sampler)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index d9e1b77..5b59ab8 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -10,7 +10,7 @@
 0:42          'r01' ( temp float)
 0:42          textureOffset ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DShadow)
-0:42              'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42              'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec2 ( temp 2-component vector of float)
 0:42              Constant:
@@ -24,7 +24,7 @@
 0:43          'r03' ( temp float)
 0:43          textureOffset ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DShadow)
-0:43              'g_tTex1di4' ( uniform itexture1D)
+0:43              'g_tTex1di4' ( uniform itexture1DShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec2 ( temp 2-component vector of float)
 0:43              Constant:
@@ -38,7 +38,7 @@
 0:44          'r05' ( temp float)
 0:44          textureOffset ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DShadow)
-0:44              'g_tTex1du4' ( uniform utexture1D)
+0:44              'g_tTex1du4' ( uniform utexture1DShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec2 ( temp 2-component vector of float)
 0:44              Constant:
@@ -52,7 +52,7 @@
 0:47          'r21' ( temp float)
 0:47          textureOffset ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DShadow)
-0:47              'g_tTex2df4' ( uniform texture2D)
+0:47              'g_tTex2df4' ( uniform texture2DShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -68,7 +68,7 @@
 0:48          'r23' ( temp float)
 0:48          textureOffset ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DShadow)
-0:48              'g_tTex2di4' ( uniform itexture2D)
+0:48              'g_tTex2di4' ( uniform itexture2DShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -84,7 +84,7 @@
 0:49          'r25' ( temp float)
 0:49          textureOffset ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DShadow)
-0:49              'g_tTex2du4' ( uniform utexture2D)
+0:49              'g_tTex2du4' ( uniform utexture2DShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -135,12 +135,12 @@
 0:38              1 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout( binding=0) uniform sampler)
-0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:?     'g_tTex1di4' ( uniform itexture1D)
-0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:?     'g_tTex1di4' ( uniform itexture1DShadow)
+0:?     'g_tTex1du4' ( uniform utexture1DShadow)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
@@ -174,7 +174,7 @@
 0:42          'r01' ( temp float)
 0:42          textureOffset ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DShadow)
-0:42              'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42              'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec2 ( temp 2-component vector of float)
 0:42              Constant:
@@ -188,7 +188,7 @@
 0:43          'r03' ( temp float)
 0:43          textureOffset ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DShadow)
-0:43              'g_tTex1di4' ( uniform itexture1D)
+0:43              'g_tTex1di4' ( uniform itexture1DShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec2 ( temp 2-component vector of float)
 0:43              Constant:
@@ -202,7 +202,7 @@
 0:44          'r05' ( temp float)
 0:44          textureOffset ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DShadow)
-0:44              'g_tTex1du4' ( uniform utexture1D)
+0:44              'g_tTex1du4' ( uniform utexture1DShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec2 ( temp 2-component vector of float)
 0:44              Constant:
@@ -216,7 +216,7 @@
 0:47          'r21' ( temp float)
 0:47          textureOffset ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DShadow)
-0:47              'g_tTex2df4' ( uniform texture2D)
+0:47              'g_tTex2df4' ( uniform texture2DShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -232,7 +232,7 @@
 0:48          'r23' ( temp float)
 0:48          textureOffset ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DShadow)
-0:48              'g_tTex2di4' ( uniform itexture2D)
+0:48              'g_tTex2di4' ( uniform itexture2DShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -248,7 +248,7 @@
 0:49          'r25' ( temp float)
 0:49          textureOffset ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DShadow)
-0:49              'g_tTex2du4' ( uniform utexture2D)
+0:49              'g_tTex2du4' ( uniform utexture2DShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -299,12 +299,12 @@
 0:38              1 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout( binding=0) uniform sampler)
-0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:?     'g_tTex1di4' ( uniform itexture1D)
-0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:?     'g_tTex1di4' ( uniform itexture1DShadow)
+0:?     'g_tTex1du4' ( uniform utexture1DShadow)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
@@ -324,15 +324,15 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 173
+// Generated by (magic number): 80002
+// Id's are bound by 167
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 121 125
+                              EntryPoint Fragment 4  "main" 115 119
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -343,61 +343,61 @@
                               Name 13  "r01"
                               Name 16  "g_tTex1df4"
                               Name 20  "g_sSamp"
-                              Name 33  "r03"
-                              Name 36  "g_tTex1di4"
-                              Name 45  "r05"
-                              Name 49  "g_tTex1du4"
-                              Name 58  "r21"
-                              Name 61  "g_tTex2df4"
-                              Name 78  "r23"
-                              Name 81  "g_tTex2di4"
-                              Name 92  "r25"
-                              Name 95  "g_tTex2du4"
-                              Name 107  "psout"
-                              Name 118  "flattenTemp"
-                              Name 121  "@entryPointOutput.Color"
-                              Name 125  "@entryPointOutput.Depth"
-                              Name 130  "g_tTex3df4"
-                              Name 133  "g_tTex3di4"
-                              Name 136  "g_tTex3du4"
-                              Name 139  "g_tTexcdf4"
-                              Name 142  "g_tTexcdi4"
-                              Name 145  "g_tTexcdu4"
-                              Name 148  "g_tTex1df4a"
-                              Name 151  "g_tTex1di4a"
-                              Name 154  "g_tTex1du4a"
-                              Name 157  "g_tTex2df4a"
-                              Name 160  "g_tTex2di4a"
-                              Name 163  "g_tTex2du4a"
-                              Name 166  "g_tTexcdf4a"
-                              Name 169  "g_tTexcdi4a"
-                              Name 172  "g_tTexcdu4a"
+                              Name 32  "r03"
+                              Name 35  "g_tTex1di4"
+                              Name 43  "r05"
+                              Name 47  "g_tTex1du4"
+                              Name 55  "r21"
+                              Name 58  "g_tTex2df4"
+                              Name 74  "r23"
+                              Name 77  "g_tTex2di4"
+                              Name 87  "r25"
+                              Name 90  "g_tTex2du4"
+                              Name 101  "psout"
+                              Name 112  "flattenTemp"
+                              Name 115  "@entryPointOutput.Color"
+                              Name 119  "@entryPointOutput.Depth"
+                              Name 124  "g_tTex3df4"
+                              Name 127  "g_tTex3di4"
+                              Name 130  "g_tTex3du4"
+                              Name 133  "g_tTexcdf4"
+                              Name 136  "g_tTexcdi4"
+                              Name 139  "g_tTexcdu4"
+                              Name 142  "g_tTex1df4a"
+                              Name 145  "g_tTex1di4a"
+                              Name 148  "g_tTex1du4a"
+                              Name 151  "g_tTex2df4a"
+                              Name 154  "g_tTex2di4a"
+                              Name 157  "g_tTex2du4a"
+                              Name 160  "g_tTexcdf4a"
+                              Name 163  "g_tTexcdi4a"
+                              Name 166  "g_tTexcdu4a"
                               Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 36(g_tTex1di4) DescriptorSet 0
-                              Decorate 49(g_tTex1du4) DescriptorSet 0
-                              Decorate 61(g_tTex2df4) DescriptorSet 0
-                              Decorate 81(g_tTex2di4) DescriptorSet 0
-                              Decorate 95(g_tTex2du4) DescriptorSet 0
-                              Decorate 121(@entryPointOutput.Color) Location 0
-                              Decorate 125(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 130(g_tTex3df4) DescriptorSet 0
-                              Decorate 133(g_tTex3di4) DescriptorSet 0
-                              Decorate 136(g_tTex3du4) DescriptorSet 0
-                              Decorate 139(g_tTexcdf4) DescriptorSet 0
-                              Decorate 142(g_tTexcdi4) DescriptorSet 0
-                              Decorate 145(g_tTexcdu4) DescriptorSet 0
-                              Decorate 148(g_tTex1df4a) DescriptorSet 0
-                              Decorate 151(g_tTex1di4a) DescriptorSet 0
-                              Decorate 154(g_tTex1du4a) DescriptorSet 0
-                              Decorate 157(g_tTex2df4a) DescriptorSet 0
-                              Decorate 160(g_tTex2di4a) DescriptorSet 0
-                              Decorate 163(g_tTex2du4a) DescriptorSet 0
-                              Decorate 166(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 169(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 172(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 58(g_tTex2df4) DescriptorSet 0
+                              Decorate 77(g_tTex2di4) DescriptorSet 0
+                              Decorate 90(g_tTex2du4) DescriptorSet 0
+                              Decorate 115(@entryPointOutput.Color) Location 0
+                              Decorate 119(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 124(g_tTex3df4) DescriptorSet 0
+                              Decorate 127(g_tTex3di4) DescriptorSet 0
+                              Decorate 130(g_tTex3du4) DescriptorSet 0
+                              Decorate 133(g_tTexcdf4) DescriptorSet 0
+                              Decorate 136(g_tTexcdi4) DescriptorSet 0
+                              Decorate 139(g_tTexcdu4) DescriptorSet 0
+                              Decorate 142(g_tTex1df4a) DescriptorSet 0
+                              Decorate 145(g_tTex1di4a) DescriptorSet 0
+                              Decorate 148(g_tTex1du4a) DescriptorSet 0
+                              Decorate 151(g_tTex2df4a) DescriptorSet 0
+                              Decorate 154(g_tTex2di4a) DescriptorSet 0
+                              Decorate 157(g_tTex2du4a) DescriptorSet 0
+                              Decorate 160(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 163(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 166(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -405,180 +405,174 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 6(float)
-              14:             TypeImage 6(float) 1D sampled format:Unknown
+              14:             TypeImage 6(float) 1D depth sampled format:Unknown
               15:             TypePointer UniformConstant 14
   16(g_tTex1df4):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
      20(g_sSamp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 1D depth sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:    6(float) Constant 1036831949
-              26:    6(float) Constant 1061158912
-              27:             TypeVector 6(float) 2
-              29:             TypeInt 32 1
-              30:     29(int) Constant 2
-              34:             TypeImage 29(int) 1D sampled format:Unknown
-              35:             TypePointer UniformConstant 34
-  36(g_tTex1di4):     35(ptr) Variable UniformConstant
-              39:             TypeImage 29(int) 1D depth sampled format:Unknown
-              40:             TypeSampledImage 39
-              46:             TypeInt 32 0
-              47:             TypeImage 46(int) 1D sampled format:Unknown
-              48:             TypePointer UniformConstant 47
-  49(g_tTex1du4):     48(ptr) Variable UniformConstant
-              52:             TypeImage 46(int) 1D depth sampled format:Unknown
-              53:             TypeSampledImage 52
-              59:             TypeImage 6(float) 2D sampled format:Unknown
-              60:             TypePointer UniformConstant 59
-  61(g_tTex2df4):     60(ptr) Variable UniformConstant
-              64:             TypeImage 6(float) 2D depth sampled format:Unknown
-              65:             TypeSampledImage 64
-              67:    6(float) Constant 1045220557
-              68:   27(fvec2) ConstantComposite 25 67
-              69:             TypeVector 6(float) 3
-              73:             TypeVector 29(int) 2
-              74:     29(int) Constant 3
-              75:   73(ivec2) ConstantComposite 30 74
-              79:             TypeImage 29(int) 2D sampled format:Unknown
-              80:             TypePointer UniformConstant 79
-  81(g_tTex2di4):     80(ptr) Variable UniformConstant
-              84:             TypeImage 29(int) 2D depth sampled format:Unknown
-              85:             TypeSampledImage 84
-              93:             TypeImage 46(int) 2D sampled format:Unknown
-              94:             TypePointer UniformConstant 93
-  95(g_tTex2du4):     94(ptr) Variable UniformConstant
-              98:             TypeImage 46(int) 2D depth sampled format:Unknown
-              99:             TypeSampledImage 98
-             106:             TypePointer Function 8(PS_OUTPUT)
-             108:     29(int) Constant 0
-             109:    6(float) Constant 1065353216
-             110:    7(fvec4) ConstantComposite 109 109 109 109
-             111:             TypePointer Function 7(fvec4)
-             113:     29(int) Constant 1
-             120:             TypePointer Output 7(fvec4)
-121(@entryPointOutput.Color):    120(ptr) Variable Output
-             124:             TypePointer Output 6(float)
-125(@entryPointOutput.Depth):    124(ptr) Variable Output
-             128:             TypeImage 6(float) 3D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:    6(float) Constant 1036831949
+              25:    6(float) Constant 1061158912
+              26:             TypeVector 6(float) 2
+              28:             TypeInt 32 1
+              29:     28(int) Constant 2
+              33:             TypeImage 28(int) 1D depth sampled format:Unknown
+              34:             TypePointer UniformConstant 33
+  35(g_tTex1di4):     34(ptr) Variable UniformConstant
+              38:             TypeSampledImage 33
+              44:             TypeInt 32 0
+              45:             TypeImage 44(int) 1D depth sampled format:Unknown
+              46:             TypePointer UniformConstant 45
+  47(g_tTex1du4):     46(ptr) Variable UniformConstant
+              50:             TypeSampledImage 45
+              56:             TypeImage 6(float) 2D depth sampled format:Unknown
+              57:             TypePointer UniformConstant 56
+  58(g_tTex2df4):     57(ptr) Variable UniformConstant
+              61:             TypeSampledImage 56
+              63:    6(float) Constant 1045220557
+              64:   26(fvec2) ConstantComposite 24 63
+              65:             TypeVector 6(float) 3
+              69:             TypeVector 28(int) 2
+              70:     28(int) Constant 3
+              71:   69(ivec2) ConstantComposite 29 70
+              75:             TypeImage 28(int) 2D depth sampled format:Unknown
+              76:             TypePointer UniformConstant 75
+  77(g_tTex2di4):     76(ptr) Variable UniformConstant
+              80:             TypeSampledImage 75
+              88:             TypeImage 44(int) 2D depth sampled format:Unknown
+              89:             TypePointer UniformConstant 88
+  90(g_tTex2du4):     89(ptr) Variable UniformConstant
+              93:             TypeSampledImage 88
+             100:             TypePointer Function 8(PS_OUTPUT)
+             102:     28(int) Constant 0
+             103:    6(float) Constant 1065353216
+             104:    7(fvec4) ConstantComposite 103 103 103 103
+             105:             TypePointer Function 7(fvec4)
+             107:     28(int) Constant 1
+             114:             TypePointer Output 7(fvec4)
+115(@entryPointOutput.Color):    114(ptr) Variable Output
+             118:             TypePointer Output 6(float)
+119(@entryPointOutput.Depth):    118(ptr) Variable Output
+             122:             TypeImage 6(float) 3D sampled format:Unknown
+             123:             TypePointer UniformConstant 122
+ 124(g_tTex3df4):    123(ptr) Variable UniformConstant
+             125:             TypeImage 28(int) 3D sampled format:Unknown
+             126:             TypePointer UniformConstant 125
+ 127(g_tTex3di4):    126(ptr) Variable UniformConstant
+             128:             TypeImage 44(int) 3D sampled format:Unknown
              129:             TypePointer UniformConstant 128
- 130(g_tTex3df4):    129(ptr) Variable UniformConstant
-             131:             TypeImage 29(int) 3D sampled format:Unknown
+ 130(g_tTex3du4):    129(ptr) Variable UniformConstant
+             131:             TypeImage 6(float) Cube sampled format:Unknown
              132:             TypePointer UniformConstant 131
- 133(g_tTex3di4):    132(ptr) Variable UniformConstant
-             134:             TypeImage 46(int) 3D sampled format:Unknown
+ 133(g_tTexcdf4):    132(ptr) Variable UniformConstant
+             134:             TypeImage 28(int) Cube sampled format:Unknown
              135:             TypePointer UniformConstant 134
- 136(g_tTex3du4):    135(ptr) Variable UniformConstant
-             137:             TypeImage 6(float) Cube sampled format:Unknown
+ 136(g_tTexcdi4):    135(ptr) Variable UniformConstant
+             137:             TypeImage 44(int) Cube sampled format:Unknown
              138:             TypePointer UniformConstant 137
- 139(g_tTexcdf4):    138(ptr) Variable UniformConstant
-             140:             TypeImage 29(int) Cube sampled format:Unknown
+ 139(g_tTexcdu4):    138(ptr) Variable UniformConstant
+             140:             TypeImage 6(float) 1D array sampled format:Unknown
              141:             TypePointer UniformConstant 140
- 142(g_tTexcdi4):    141(ptr) Variable UniformConstant
-             143:             TypeImage 46(int) Cube sampled format:Unknown
+142(g_tTex1df4a):    141(ptr) Variable UniformConstant
+             143:             TypeImage 28(int) 1D array sampled format:Unknown
              144:             TypePointer UniformConstant 143
- 145(g_tTexcdu4):    144(ptr) Variable UniformConstant
-             146:             TypeImage 6(float) 1D array sampled format:Unknown
+145(g_tTex1di4a):    144(ptr) Variable UniformConstant
+             146:             TypeImage 44(int) 1D array sampled format:Unknown
              147:             TypePointer UniformConstant 146
-148(g_tTex1df4a):    147(ptr) Variable UniformConstant
-             149:             TypeImage 29(int) 1D array sampled format:Unknown
+148(g_tTex1du4a):    147(ptr) Variable UniformConstant
+             149:             TypeImage 6(float) 2D array sampled format:Unknown
              150:             TypePointer UniformConstant 149
-151(g_tTex1di4a):    150(ptr) Variable UniformConstant
-             152:             TypeImage 46(int) 1D array sampled format:Unknown
+151(g_tTex2df4a):    150(ptr) Variable UniformConstant
+             152:             TypeImage 28(int) 2D array sampled format:Unknown
              153:             TypePointer UniformConstant 152
-154(g_tTex1du4a):    153(ptr) Variable UniformConstant
-             155:             TypeImage 6(float) 2D array sampled format:Unknown
+154(g_tTex2di4a):    153(ptr) Variable UniformConstant
+             155:             TypeImage 44(int) 2D array sampled format:Unknown
              156:             TypePointer UniformConstant 155
-157(g_tTex2df4a):    156(ptr) Variable UniformConstant
-             158:             TypeImage 29(int) 2D array sampled format:Unknown
+157(g_tTex2du4a):    156(ptr) Variable UniformConstant
+             158:             TypeImage 6(float) Cube array sampled format:Unknown
              159:             TypePointer UniformConstant 158
-160(g_tTex2di4a):    159(ptr) Variable UniformConstant
-             161:             TypeImage 46(int) 2D array sampled format:Unknown
+160(g_tTexcdf4a):    159(ptr) Variable UniformConstant
+             161:             TypeImage 28(int) Cube array sampled format:Unknown
              162:             TypePointer UniformConstant 161
-163(g_tTex2du4a):    162(ptr) Variable UniformConstant
-             164:             TypeImage 6(float) Cube array sampled format:Unknown
+163(g_tTexcdi4a):    162(ptr) Variable UniformConstant
+             164:             TypeImage 44(int) Cube array sampled format:Unknown
              165:             TypePointer UniformConstant 164
-166(g_tTexcdf4a):    165(ptr) Variable UniformConstant
-             167:             TypeImage 29(int) Cube array sampled format:Unknown
-             168:             TypePointer UniformConstant 167
-169(g_tTexcdi4a):    168(ptr) Variable UniformConstant
-             170:             TypeImage 46(int) Cube array sampled format:Unknown
-             171:             TypePointer UniformConstant 170
-172(g_tTexcdu4a):    171(ptr) Variable UniformConstant
+166(g_tTexcdu4a):    165(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-118(flattenTemp):    106(ptr) Variable Function
-             119:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 118(flattenTemp) 119
-             122:    111(ptr) AccessChain 118(flattenTemp) 108
-             123:    7(fvec4) Load 122
-                              Store 121(@entryPointOutput.Color) 123
-             126:     12(ptr) AccessChain 118(flattenTemp) 113
-             127:    6(float) Load 126
-                              Store 125(@entryPointOutput.Depth) 127
+112(flattenTemp):    100(ptr) Variable Function
+             113:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 112(flattenTemp) 113
+             116:    105(ptr) AccessChain 112(flattenTemp) 102
+             117:    7(fvec4) Load 116
+                              Store 115(@entryPointOutput.Color) 117
+             120:     12(ptr) AccessChain 112(flattenTemp) 107
+             121:    6(float) Load 120
+                              Store 119(@entryPointOutput.Depth) 121
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
          13(r01):     12(ptr) Variable Function
-         33(r03):     12(ptr) Variable Function
-         45(r05):     12(ptr) Variable Function
-         58(r21):     12(ptr) Variable Function
-         78(r23):     12(ptr) Variable Function
-         92(r25):     12(ptr) Variable Function
-      107(psout):    106(ptr) Variable Function
+         32(r03):     12(ptr) Variable Function
+         43(r05):     12(ptr) Variable Function
+         55(r21):     12(ptr) Variable Function
+         74(r23):     12(ptr) Variable Function
+         87(r25):     12(ptr) Variable Function
+      101(psout):    100(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4)
               21:          18 Load 20(g_sSamp)
-              24:          23 SampledImage 17 21
-              28:   27(fvec2) CompositeConstruct 25 26
-              31:    6(float) CompositeExtract 28 1
-              32:    6(float) ImageSampleDrefImplicitLod 24 28 31 ConstOffset 30
-                              Store 13(r01) 32
-              37:          34 Load 36(g_tTex1di4)
-              38:          18 Load 20(g_sSamp)
-              41:          40 SampledImage 37 38
-              42:   27(fvec2) CompositeConstruct 25 26
-              43:    6(float) CompositeExtract 42 1
-              44:    6(float) ImageSampleDrefImplicitLod 41 42 43 ConstOffset 30
-                              Store 33(r03) 44
-              50:          47 Load 49(g_tTex1du4)
-              51:          18 Load 20(g_sSamp)
-              54:          53 SampledImage 50 51
-              55:   27(fvec2) CompositeConstruct 25 26
-              56:    6(float) CompositeExtract 55 1
-              57:    6(float) ImageSampleDrefImplicitLod 54 55 56 ConstOffset 30
-                              Store 45(r05) 57
-              62:          59 Load 61(g_tTex2df4)
-              63:          18 Load 20(g_sSamp)
-              66:          65 SampledImage 62 63
-              70:    6(float) CompositeExtract 68 0
-              71:    6(float) CompositeExtract 68 1
-              72:   69(fvec3) CompositeConstruct 70 71 26
-              76:    6(float) CompositeExtract 72 2
-              77:    6(float) ImageSampleDrefImplicitLod 66 72 76 ConstOffset 75
-                              Store 58(r21) 77
-              82:          79 Load 81(g_tTex2di4)
-              83:          18 Load 20(g_sSamp)
-              86:          85 SampledImage 82 83
-              87:    6(float) CompositeExtract 68 0
-              88:    6(float) CompositeExtract 68 1
-              89:   69(fvec3) CompositeConstruct 87 88 26
-              90:    6(float) CompositeExtract 89 2
-              91:    6(float) ImageSampleDrefImplicitLod 86 89 90 ConstOffset 75
-                              Store 78(r23) 91
-              96:          93 Load 95(g_tTex2du4)
-              97:          18 Load 20(g_sSamp)
-             100:          99 SampledImage 96 97
-             101:    6(float) CompositeExtract 68 0
-             102:    6(float) CompositeExtract 68 1
-             103:   69(fvec3) CompositeConstruct 101 102 26
-             104:    6(float) CompositeExtract 103 2
-             105:    6(float) ImageSampleDrefImplicitLod 100 103 104 ConstOffset 75
-                              Store 92(r25) 105
-             112:    111(ptr) AccessChain 107(psout) 108
-                              Store 112 110
-             114:     12(ptr) AccessChain 107(psout) 113
-                              Store 114 109
-             115:8(PS_OUTPUT) Load 107(psout)
-                              ReturnValue 115
+              23:          22 SampledImage 17 21
+              27:   26(fvec2) CompositeConstruct 24 25
+              30:    6(float) CompositeExtract 27 1
+              31:    6(float) ImageSampleDrefImplicitLod 23 27 30 ConstOffset 29
+                              Store 13(r01) 31
+              36:          33 Load 35(g_tTex1di4)
+              37:          18 Load 20(g_sSamp)
+              39:          38 SampledImage 36 37
+              40:   26(fvec2) CompositeConstruct 24 25
+              41:    6(float) CompositeExtract 40 1
+              42:    6(float) ImageSampleDrefImplicitLod 39 40 41 ConstOffset 29
+                              Store 32(r03) 42
+              48:          45 Load 47(g_tTex1du4)
+              49:          18 Load 20(g_sSamp)
+              51:          50 SampledImage 48 49
+              52:   26(fvec2) CompositeConstruct 24 25
+              53:    6(float) CompositeExtract 52 1
+              54:    6(float) ImageSampleDrefImplicitLod 51 52 53 ConstOffset 29
+                              Store 43(r05) 54
+              59:          56 Load 58(g_tTex2df4)
+              60:          18 Load 20(g_sSamp)
+              62:          61 SampledImage 59 60
+              66:    6(float) CompositeExtract 64 0
+              67:    6(float) CompositeExtract 64 1
+              68:   65(fvec3) CompositeConstruct 66 67 25
+              72:    6(float) CompositeExtract 68 2
+              73:    6(float) ImageSampleDrefImplicitLod 62 68 72 ConstOffset 71
+                              Store 55(r21) 73
+              78:          75 Load 77(g_tTex2di4)
+              79:          18 Load 20(g_sSamp)
+              81:          80 SampledImage 78 79
+              82:    6(float) CompositeExtract 64 0
+              83:    6(float) CompositeExtract 64 1
+              84:   65(fvec3) CompositeConstruct 82 83 25
+              85:    6(float) CompositeExtract 84 2
+              86:    6(float) ImageSampleDrefImplicitLod 81 84 85 ConstOffset 71
+                              Store 74(r23) 86
+              91:          88 Load 90(g_tTex2du4)
+              92:          18 Load 20(g_sSamp)
+              94:          93 SampledImage 91 92
+              95:    6(float) CompositeExtract 64 0
+              96:    6(float) CompositeExtract 64 1
+              97:   65(fvec3) CompositeConstruct 95 96 25
+              98:    6(float) CompositeExtract 97 2
+              99:    6(float) ImageSampleDrefImplicitLod 94 97 98 ConstOffset 71
+                              Store 87(r25) 99
+             106:    105(ptr) AccessChain 101(psout) 102
+                              Store 106 104
+             108:     12(ptr) AccessChain 101(psout) 107
+                              Store 108 103
+             109:8(PS_OUTPUT) Load 101(psout)
+                              ReturnValue 109
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index 067c8a6..a2a9904 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -10,7 +10,7 @@
 0:42          'r11' ( temp float)
 0:42          textureOffset ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42              'g_tTex1df4a' ( uniform texture1DArray)
+0:42              'g_tTex1df4a' ( uniform texture1DArrayShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -25,7 +25,7 @@
 0:43          'r13' ( temp float)
 0:43          textureOffset ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43              'g_tTex1di4a' ( uniform itexture1DArray)
+0:43              'g_tTex1di4a' ( uniform itexture1DArrayShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -40,7 +40,7 @@
 0:44          'r15' ( temp float)
 0:44          textureOffset ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44              'g_tTex1du4a' ( uniform utexture1DArray)
+0:44              'g_tTex1du4a' ( uniform utexture1DArrayShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -55,7 +55,7 @@
 0:47          'r31' ( temp float)
 0:47          textureOffset ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47              'g_tTex2df4a' ( uniform texture2DArray)
+0:47              'g_tTex2df4a' ( uniform texture2DArrayShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -72,7 +72,7 @@
 0:48          'r33' ( temp float)
 0:48          textureOffset ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48              'g_tTex2di4a' ( uniform itexture2DArray)
+0:48              'g_tTex2di4a' ( uniform itexture2DArrayShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -89,7 +89,7 @@
 0:49          'r35' ( temp float)
 0:49          textureOffset ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49              'g_tTex2du4a' ( uniform utexture2DArray)
+0:49              'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -153,12 +153,12 @@
 0:?     'g_tTexcdf4' ( uniform textureCube)
 0:?     'g_tTexcdi4' ( uniform itextureCube)
 0:?     'g_tTexcdu4' ( uniform utextureCube)
-0:?     'g_tTex1df4a' ( uniform texture1DArray)
-0:?     'g_tTex1di4a' ( uniform itexture1DArray)
-0:?     'g_tTex1du4a' ( uniform utexture1DArray)
-0:?     'g_tTex2df4a' ( uniform texture2DArray)
-0:?     'g_tTex2di4a' ( uniform itexture2DArray)
-0:?     'g_tTex2du4a' ( uniform utexture2DArray)
+0:?     'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:?     'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:?     'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:?     'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:?     'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:?     'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:?     'g_tTexcdf4a' ( uniform textureCubeArray)
 0:?     'g_tTexcdi4a' ( uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' ( uniform utextureCubeArray)
@@ -180,7 +180,7 @@
 0:42          'r11' ( temp float)
 0:42          textureOffset ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42              'g_tTex1df4a' ( uniform texture1DArray)
+0:42              'g_tTex1df4a' ( uniform texture1DArrayShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -195,7 +195,7 @@
 0:43          'r13' ( temp float)
 0:43          textureOffset ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43              'g_tTex1di4a' ( uniform itexture1DArray)
+0:43              'g_tTex1di4a' ( uniform itexture1DArrayShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -210,7 +210,7 @@
 0:44          'r15' ( temp float)
 0:44          textureOffset ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44              'g_tTex1du4a' ( uniform utexture1DArray)
+0:44              'g_tTex1du4a' ( uniform utexture1DArrayShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -225,7 +225,7 @@
 0:47          'r31' ( temp float)
 0:47          textureOffset ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47              'g_tTex2df4a' ( uniform texture2DArray)
+0:47              'g_tTex2df4a' ( uniform texture2DArrayShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -242,7 +242,7 @@
 0:48          'r33' ( temp float)
 0:48          textureOffset ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48              'g_tTex2di4a' ( uniform itexture2DArray)
+0:48              'g_tTex2di4a' ( uniform itexture2DArrayShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -259,7 +259,7 @@
 0:49          'r35' ( temp float)
 0:49          textureOffset ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49              'g_tTex2du4a' ( uniform utexture2DArray)
+0:49              'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -323,12 +323,12 @@
 0:?     'g_tTexcdf4' ( uniform textureCube)
 0:?     'g_tTexcdi4' ( uniform itextureCube)
 0:?     'g_tTexcdu4' ( uniform utextureCube)
-0:?     'g_tTex1df4a' ( uniform texture1DArray)
-0:?     'g_tTex1di4a' ( uniform itexture1DArray)
-0:?     'g_tTex1du4a' ( uniform utexture1DArray)
-0:?     'g_tTex2df4a' ( uniform texture2DArray)
-0:?     'g_tTex2di4a' ( uniform itexture2DArray)
-0:?     'g_tTex2du4a' ( uniform utexture2DArray)
+0:?     'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:?     'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:?     'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:?     'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:?     'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:?     'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:?     'g_tTexcdf4a' ( uniform textureCubeArray)
 0:?     'g_tTexcdi4a' ( uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' ( uniform utextureCubeArray)
@@ -336,15 +336,15 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 184
+// Generated by (magic number): 80002
+// Id's are bound by 178
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 132 136
+                              EntryPoint Fragment 4  "main" 126 130
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -355,61 +355,61 @@
                               Name 13  "r11"
                               Name 16  "g_tTex1df4a"
                               Name 20  "g_sSamp"
-                              Name 38  "r13"
-                              Name 41  "g_tTex1di4a"
-                              Name 52  "r15"
-                              Name 56  "g_tTex1du4a"
-                              Name 67  "r31"
-                              Name 70  "g_tTex2df4a"
-                              Name 87  "r33"
-                              Name 90  "g_tTex2di4a"
-                              Name 102  "r35"
-                              Name 105  "g_tTex2du4a"
-                              Name 118  "psout"
-                              Name 129  "flattenTemp"
-                              Name 132  "@entryPointOutput.Color"
-                              Name 136  "@entryPointOutput.Depth"
-                              Name 141  "g_tTex1df4"
-                              Name 144  "g_tTex1di4"
-                              Name 147  "g_tTex1du4"
-                              Name 150  "g_tTex2df4"
-                              Name 153  "g_tTex2di4"
-                              Name 156  "g_tTex2du4"
-                              Name 159  "g_tTex3df4"
-                              Name 162  "g_tTex3di4"
-                              Name 165  "g_tTex3du4"
-                              Name 168  "g_tTexcdf4"
-                              Name 171  "g_tTexcdi4"
-                              Name 174  "g_tTexcdu4"
-                              Name 177  "g_tTexcdf4a"
-                              Name 180  "g_tTexcdi4a"
-                              Name 183  "g_tTexcdu4a"
+                              Name 37  "r13"
+                              Name 40  "g_tTex1di4a"
+                              Name 50  "r15"
+                              Name 54  "g_tTex1du4a"
+                              Name 64  "r31"
+                              Name 67  "g_tTex2df4a"
+                              Name 83  "r33"
+                              Name 86  "g_tTex2di4a"
+                              Name 97  "r35"
+                              Name 100  "g_tTex2du4a"
+                              Name 112  "psout"
+                              Name 123  "flattenTemp"
+                              Name 126  "@entryPointOutput.Color"
+                              Name 130  "@entryPointOutput.Depth"
+                              Name 135  "g_tTex1df4"
+                              Name 138  "g_tTex1di4"
+                              Name 141  "g_tTex1du4"
+                              Name 144  "g_tTex2df4"
+                              Name 147  "g_tTex2di4"
+                              Name 150  "g_tTex2du4"
+                              Name 153  "g_tTex3df4"
+                              Name 156  "g_tTex3di4"
+                              Name 159  "g_tTex3du4"
+                              Name 162  "g_tTexcdf4"
+                              Name 165  "g_tTexcdi4"
+                              Name 168  "g_tTexcdu4"
+                              Name 171  "g_tTexcdf4a"
+                              Name 174  "g_tTexcdi4a"
+                              Name 177  "g_tTexcdu4a"
                               Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 41(g_tTex1di4a) DescriptorSet 0
-                              Decorate 56(g_tTex1du4a) DescriptorSet 0
-                              Decorate 70(g_tTex2df4a) DescriptorSet 0
-                              Decorate 90(g_tTex2di4a) DescriptorSet 0
-                              Decorate 105(g_tTex2du4a) DescriptorSet 0
-                              Decorate 132(@entryPointOutput.Color) Location 0
-                              Decorate 136(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 141(g_tTex1df4) DescriptorSet 0
-                              Decorate 141(g_tTex1df4) Binding 0
-                              Decorate 144(g_tTex1di4) DescriptorSet 0
-                              Decorate 147(g_tTex1du4) DescriptorSet 0
-                              Decorate 150(g_tTex2df4) DescriptorSet 0
-                              Decorate 153(g_tTex2di4) DescriptorSet 0
-                              Decorate 156(g_tTex2du4) DescriptorSet 0
-                              Decorate 159(g_tTex3df4) DescriptorSet 0
-                              Decorate 162(g_tTex3di4) DescriptorSet 0
-                              Decorate 165(g_tTex3du4) DescriptorSet 0
-                              Decorate 168(g_tTexcdf4) DescriptorSet 0
-                              Decorate 171(g_tTexcdi4) DescriptorSet 0
-                              Decorate 174(g_tTexcdu4) DescriptorSet 0
-                              Decorate 177(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 180(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 183(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 40(g_tTex1di4a) DescriptorSet 0
+                              Decorate 54(g_tTex1du4a) DescriptorSet 0
+                              Decorate 67(g_tTex2df4a) DescriptorSet 0
+                              Decorate 86(g_tTex2di4a) DescriptorSet 0
+                              Decorate 100(g_tTex2du4a) DescriptorSet 0
+                              Decorate 126(@entryPointOutput.Color) Location 0
+                              Decorate 130(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 135(g_tTex1df4) DescriptorSet 0
+                              Decorate 135(g_tTex1df4) Binding 0
+                              Decorate 138(g_tTex1di4) DescriptorSet 0
+                              Decorate 141(g_tTex1du4) DescriptorSet 0
+                              Decorate 144(g_tTex2df4) DescriptorSet 0
+                              Decorate 147(g_tTex2di4) DescriptorSet 0
+                              Decorate 150(g_tTex2du4) DescriptorSet 0
+                              Decorate 153(g_tTex3df4) DescriptorSet 0
+                              Decorate 156(g_tTex3di4) DescriptorSet 0
+                              Decorate 159(g_tTex3du4) DescriptorSet 0
+                              Decorate 162(g_tTexcdf4) DescriptorSet 0
+                              Decorate 165(g_tTexcdi4) DescriptorSet 0
+                              Decorate 168(g_tTexcdu4) DescriptorSet 0
+                              Decorate 171(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 174(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 177(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -417,191 +417,185 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 6(float)
-              14:             TypeImage 6(float) 1D array sampled format:Unknown
+              14:             TypeImage 6(float) 1D depth array sampled format:Unknown
               15:             TypePointer UniformConstant 14
  16(g_tTex1df4a):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
      20(g_sSamp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 1D depth array sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:             TypeVector 6(float) 2
-              26:    6(float) Constant 1036831949
-              27:    6(float) Constant 1045220557
-              28:   25(fvec2) ConstantComposite 26 27
-              29:    6(float) Constant 1061158912
-              30:             TypeVector 6(float) 3
-              34:             TypeInt 32 1
-              35:     34(int) Constant 2
-              39:             TypeImage 34(int) 1D array sampled format:Unknown
-              40:             TypePointer UniformConstant 39
- 41(g_tTex1di4a):     40(ptr) Variable UniformConstant
-              44:             TypeImage 34(int) 1D depth array sampled format:Unknown
-              45:             TypeSampledImage 44
-              53:             TypeInt 32 0
-              54:             TypeImage 53(int) 1D array sampled format:Unknown
-              55:             TypePointer UniformConstant 54
- 56(g_tTex1du4a):     55(ptr) Variable UniformConstant
-              59:             TypeImage 53(int) 1D depth array sampled format:Unknown
-              60:             TypeSampledImage 59
-              68:             TypeImage 6(float) 2D array sampled format:Unknown
-              69:             TypePointer UniformConstant 68
- 70(g_tTex2df4a):     69(ptr) Variable UniformConstant
-              73:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              74:             TypeSampledImage 73
-              76:    6(float) Constant 1050253722
-              77:   30(fvec3) ConstantComposite 26 27 76
-              82:             TypeVector 34(int) 2
-              83:     34(int) Constant 3
-              84:   82(ivec2) ConstantComposite 35 83
-              88:             TypeImage 34(int) 2D array sampled format:Unknown
-              89:             TypePointer UniformConstant 88
- 90(g_tTex2di4a):     89(ptr) Variable UniformConstant
-              93:             TypeImage 34(int) 2D depth array sampled format:Unknown
-              94:             TypeSampledImage 93
-             103:             TypeImage 53(int) 2D array sampled format:Unknown
-             104:             TypePointer UniformConstant 103
-105(g_tTex2du4a):    104(ptr) Variable UniformConstant
-             108:             TypeImage 53(int) 2D depth array sampled format:Unknown
-             109:             TypeSampledImage 108
-             117:             TypePointer Function 8(PS_OUTPUT)
-             119:     34(int) Constant 0
-             120:    6(float) Constant 1065353216
-             121:    7(fvec4) ConstantComposite 120 120 120 120
-             122:             TypePointer Function 7(fvec4)
-             124:     34(int) Constant 1
-             131:             TypePointer Output 7(fvec4)
-132(@entryPointOutput.Color):    131(ptr) Variable Output
-             135:             TypePointer Output 6(float)
-136(@entryPointOutput.Depth):    135(ptr) Variable Output
-             139:             TypeImage 6(float) 1D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:   24(fvec2) ConstantComposite 25 26
+              28:    6(float) Constant 1061158912
+              29:             TypeVector 6(float) 3
+              33:             TypeInt 32 1
+              34:     33(int) Constant 2
+              38:             TypeImage 33(int) 1D depth array sampled format:Unknown
+              39:             TypePointer UniformConstant 38
+ 40(g_tTex1di4a):     39(ptr) Variable UniformConstant
+              43:             TypeSampledImage 38
+              51:             TypeInt 32 0
+              52:             TypeImage 51(int) 1D depth array sampled format:Unknown
+              53:             TypePointer UniformConstant 52
+ 54(g_tTex1du4a):     53(ptr) Variable UniformConstant
+              57:             TypeSampledImage 52
+              65:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              66:             TypePointer UniformConstant 65
+ 67(g_tTex2df4a):     66(ptr) Variable UniformConstant
+              70:             TypeSampledImage 65
+              72:    6(float) Constant 1050253722
+              73:   29(fvec3) ConstantComposite 25 26 72
+              78:             TypeVector 33(int) 2
+              79:     33(int) Constant 3
+              80:   78(ivec2) ConstantComposite 34 79
+              84:             TypeImage 33(int) 2D depth array sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+ 86(g_tTex2di4a):     85(ptr) Variable UniformConstant
+              89:             TypeSampledImage 84
+              98:             TypeImage 51(int) 2D depth array sampled format:Unknown
+              99:             TypePointer UniformConstant 98
+100(g_tTex2du4a):     99(ptr) Variable UniformConstant
+             103:             TypeSampledImage 98
+             111:             TypePointer Function 8(PS_OUTPUT)
+             113:     33(int) Constant 0
+             114:    6(float) Constant 1065353216
+             115:    7(fvec4) ConstantComposite 114 114 114 114
+             116:             TypePointer Function 7(fvec4)
+             118:     33(int) Constant 1
+             125:             TypePointer Output 7(fvec4)
+126(@entryPointOutput.Color):    125(ptr) Variable Output
+             129:             TypePointer Output 6(float)
+130(@entryPointOutput.Depth):    129(ptr) Variable Output
+             133:             TypeImage 6(float) 1D sampled format:Unknown
+             134:             TypePointer UniformConstant 133
+ 135(g_tTex1df4):    134(ptr) Variable UniformConstant
+             136:             TypeImage 33(int) 1D sampled format:Unknown
+             137:             TypePointer UniformConstant 136
+ 138(g_tTex1di4):    137(ptr) Variable UniformConstant
+             139:             TypeImage 51(int) 1D sampled format:Unknown
              140:             TypePointer UniformConstant 139
- 141(g_tTex1df4):    140(ptr) Variable UniformConstant
-             142:             TypeImage 34(int) 1D sampled format:Unknown
+ 141(g_tTex1du4):    140(ptr) Variable UniformConstant
+             142:             TypeImage 6(float) 2D sampled format:Unknown
              143:             TypePointer UniformConstant 142
- 144(g_tTex1di4):    143(ptr) Variable UniformConstant
-             145:             TypeImage 53(int) 1D sampled format:Unknown
+ 144(g_tTex2df4):    143(ptr) Variable UniformConstant
+             145:             TypeImage 33(int) 2D sampled format:Unknown
              146:             TypePointer UniformConstant 145
- 147(g_tTex1du4):    146(ptr) Variable UniformConstant
-             148:             TypeImage 6(float) 2D sampled format:Unknown
+ 147(g_tTex2di4):    146(ptr) Variable UniformConstant
+             148:             TypeImage 51(int) 2D sampled format:Unknown
              149:             TypePointer UniformConstant 148
- 150(g_tTex2df4):    149(ptr) Variable UniformConstant
-             151:             TypeImage 34(int) 2D sampled format:Unknown
+ 150(g_tTex2du4):    149(ptr) Variable UniformConstant
+             151:             TypeImage 6(float) 3D sampled format:Unknown
              152:             TypePointer UniformConstant 151
- 153(g_tTex2di4):    152(ptr) Variable UniformConstant
-             154:             TypeImage 53(int) 2D sampled format:Unknown
+ 153(g_tTex3df4):    152(ptr) Variable UniformConstant
+             154:             TypeImage 33(int) 3D sampled format:Unknown
              155:             TypePointer UniformConstant 154
- 156(g_tTex2du4):    155(ptr) Variable UniformConstant
-             157:             TypeImage 6(float) 3D sampled format:Unknown
+ 156(g_tTex3di4):    155(ptr) Variable UniformConstant
+             157:             TypeImage 51(int) 3D sampled format:Unknown
              158:             TypePointer UniformConstant 157
- 159(g_tTex3df4):    158(ptr) Variable UniformConstant
-             160:             TypeImage 34(int) 3D sampled format:Unknown
+ 159(g_tTex3du4):    158(ptr) Variable UniformConstant
+             160:             TypeImage 6(float) Cube sampled format:Unknown
              161:             TypePointer UniformConstant 160
- 162(g_tTex3di4):    161(ptr) Variable UniformConstant
-             163:             TypeImage 53(int) 3D sampled format:Unknown
+ 162(g_tTexcdf4):    161(ptr) Variable UniformConstant
+             163:             TypeImage 33(int) Cube sampled format:Unknown
              164:             TypePointer UniformConstant 163
- 165(g_tTex3du4):    164(ptr) Variable UniformConstant
-             166:             TypeImage 6(float) Cube sampled format:Unknown
+ 165(g_tTexcdi4):    164(ptr) Variable UniformConstant
+             166:             TypeImage 51(int) Cube sampled format:Unknown
              167:             TypePointer UniformConstant 166
- 168(g_tTexcdf4):    167(ptr) Variable UniformConstant
-             169:             TypeImage 34(int) Cube sampled format:Unknown
+ 168(g_tTexcdu4):    167(ptr) Variable UniformConstant
+             169:             TypeImage 6(float) Cube array sampled format:Unknown
              170:             TypePointer UniformConstant 169
- 171(g_tTexcdi4):    170(ptr) Variable UniformConstant
-             172:             TypeImage 53(int) Cube sampled format:Unknown
+171(g_tTexcdf4a):    170(ptr) Variable UniformConstant
+             172:             TypeImage 33(int) Cube array sampled format:Unknown
              173:             TypePointer UniformConstant 172
- 174(g_tTexcdu4):    173(ptr) Variable UniformConstant
-             175:             TypeImage 6(float) Cube array sampled format:Unknown
+174(g_tTexcdi4a):    173(ptr) Variable UniformConstant
+             175:             TypeImage 51(int) Cube array sampled format:Unknown
              176:             TypePointer UniformConstant 175
-177(g_tTexcdf4a):    176(ptr) Variable UniformConstant
-             178:             TypeImage 34(int) Cube array sampled format:Unknown
-             179:             TypePointer UniformConstant 178
-180(g_tTexcdi4a):    179(ptr) Variable UniformConstant
-             181:             TypeImage 53(int) Cube array sampled format:Unknown
-             182:             TypePointer UniformConstant 181
-183(g_tTexcdu4a):    182(ptr) Variable UniformConstant
+177(g_tTexcdu4a):    176(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-129(flattenTemp):    117(ptr) Variable Function
-             130:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 129(flattenTemp) 130
-             133:    122(ptr) AccessChain 129(flattenTemp) 119
-             134:    7(fvec4) Load 133
-                              Store 132(@entryPointOutput.Color) 134
-             137:     12(ptr) AccessChain 129(flattenTemp) 124
-             138:    6(float) Load 137
-                              Store 136(@entryPointOutput.Depth) 138
+123(flattenTemp):    111(ptr) Variable Function
+             124:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 123(flattenTemp) 124
+             127:    116(ptr) AccessChain 123(flattenTemp) 113
+             128:    7(fvec4) Load 127
+                              Store 126(@entryPointOutput.Color) 128
+             131:     12(ptr) AccessChain 123(flattenTemp) 118
+             132:    6(float) Load 131
+                              Store 130(@entryPointOutput.Depth) 132
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
          13(r11):     12(ptr) Variable Function
-         38(r13):     12(ptr) Variable Function
-         52(r15):     12(ptr) Variable Function
-         67(r31):     12(ptr) Variable Function
-         87(r33):     12(ptr) Variable Function
-        102(r35):     12(ptr) Variable Function
-      118(psout):    117(ptr) Variable Function
+         37(r13):     12(ptr) Variable Function
+         50(r15):     12(ptr) Variable Function
+         64(r31):     12(ptr) Variable Function
+         83(r33):     12(ptr) Variable Function
+         97(r35):     12(ptr) Variable Function
+      112(psout):    111(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4a)
               21:          18 Load 20(g_sSamp)
-              24:          23 SampledImage 17 21
-              31:    6(float) CompositeExtract 28 0
-              32:    6(float) CompositeExtract 28 1
-              33:   30(fvec3) CompositeConstruct 31 32 29
-              36:    6(float) CompositeExtract 33 2
-              37:    6(float) ImageSampleDrefImplicitLod 24 33 36 ConstOffset 35
-                              Store 13(r11) 37
-              42:          39 Load 41(g_tTex1di4a)
-              43:          18 Load 20(g_sSamp)
-              46:          45 SampledImage 42 43
-              47:    6(float) CompositeExtract 28 0
-              48:    6(float) CompositeExtract 28 1
-              49:   30(fvec3) CompositeConstruct 47 48 29
-              50:    6(float) CompositeExtract 49 2
-              51:    6(float) ImageSampleDrefImplicitLod 46 49 50 ConstOffset 35
-                              Store 38(r13) 51
-              57:          54 Load 56(g_tTex1du4a)
-              58:          18 Load 20(g_sSamp)
-              61:          60 SampledImage 57 58
-              62:    6(float) CompositeExtract 28 0
-              63:    6(float) CompositeExtract 28 1
-              64:   30(fvec3) CompositeConstruct 62 63 29
-              65:    6(float) CompositeExtract 64 2
-              66:    6(float) ImageSampleDrefImplicitLod 61 64 65 ConstOffset 35
-                              Store 52(r15) 66
-              71:          68 Load 70(g_tTex2df4a)
-              72:          18 Load 20(g_sSamp)
-              75:          74 SampledImage 71 72
-              78:    6(float) CompositeExtract 77 0
-              79:    6(float) CompositeExtract 77 1
-              80:    6(float) CompositeExtract 77 2
-              81:    7(fvec4) CompositeConstruct 78 79 80 29
-              85:    6(float) CompositeExtract 81 3
-              86:    6(float) ImageSampleDrefImplicitLod 75 81 85 ConstOffset 84
-                              Store 67(r31) 86
-              91:          88 Load 90(g_tTex2di4a)
-              92:          18 Load 20(g_sSamp)
-              95:          94 SampledImage 91 92
-              96:    6(float) CompositeExtract 77 0
-              97:    6(float) CompositeExtract 77 1
-              98:    6(float) CompositeExtract 77 2
-              99:    7(fvec4) CompositeConstruct 96 97 98 29
-             100:    6(float) CompositeExtract 99 3
-             101:    6(float) ImageSampleDrefImplicitLod 95 99 100 ConstOffset 84
-                              Store 87(r33) 101
-             106:         103 Load 105(g_tTex2du4a)
-             107:          18 Load 20(g_sSamp)
-             110:         109 SampledImage 106 107
-             111:    6(float) CompositeExtract 77 0
-             112:    6(float) CompositeExtract 77 1
-             113:    6(float) CompositeExtract 77 2
-             114:    7(fvec4) CompositeConstruct 111 112 113 29
-             115:    6(float) CompositeExtract 114 3
-             116:    6(float) ImageSampleDrefImplicitLod 110 114 115 ConstOffset 84
-                              Store 102(r35) 116
-             123:    122(ptr) AccessChain 118(psout) 119
-                              Store 123 121
-             125:     12(ptr) AccessChain 118(psout) 124
-                              Store 125 120
-             126:8(PS_OUTPUT) Load 118(psout)
-                              ReturnValue 126
+              23:          22 SampledImage 17 21
+              30:    6(float) CompositeExtract 27 0
+              31:    6(float) CompositeExtract 27 1
+              32:   29(fvec3) CompositeConstruct 30 31 28
+              35:    6(float) CompositeExtract 32 2
+              36:    6(float) ImageSampleDrefImplicitLod 23 32 35 ConstOffset 34
+                              Store 13(r11) 36
+              41:          38 Load 40(g_tTex1di4a)
+              42:          18 Load 20(g_sSamp)
+              44:          43 SampledImage 41 42
+              45:    6(float) CompositeExtract 27 0
+              46:    6(float) CompositeExtract 27 1
+              47:   29(fvec3) CompositeConstruct 45 46 28
+              48:    6(float) CompositeExtract 47 2
+              49:    6(float) ImageSampleDrefImplicitLod 44 47 48 ConstOffset 34
+                              Store 37(r13) 49
+              55:          52 Load 54(g_tTex1du4a)
+              56:          18 Load 20(g_sSamp)
+              58:          57 SampledImage 55 56
+              59:    6(float) CompositeExtract 27 0
+              60:    6(float) CompositeExtract 27 1
+              61:   29(fvec3) CompositeConstruct 59 60 28
+              62:    6(float) CompositeExtract 61 2
+              63:    6(float) ImageSampleDrefImplicitLod 58 61 62 ConstOffset 34
+                              Store 50(r15) 63
+              68:          65 Load 67(g_tTex2df4a)
+              69:          18 Load 20(g_sSamp)
+              71:          70 SampledImage 68 69
+              74:    6(float) CompositeExtract 73 0
+              75:    6(float) CompositeExtract 73 1
+              76:    6(float) CompositeExtract 73 2
+              77:    7(fvec4) CompositeConstruct 74 75 76 28
+              81:    6(float) CompositeExtract 77 3
+              82:    6(float) ImageSampleDrefImplicitLod 71 77 81 ConstOffset 80
+                              Store 64(r31) 82
+              87:          84 Load 86(g_tTex2di4a)
+              88:          18 Load 20(g_sSamp)
+              90:          89 SampledImage 87 88
+              91:    6(float) CompositeExtract 73 0
+              92:    6(float) CompositeExtract 73 1
+              93:    6(float) CompositeExtract 73 2
+              94:    7(fvec4) CompositeConstruct 91 92 93 28
+              95:    6(float) CompositeExtract 94 3
+              96:    6(float) ImageSampleDrefImplicitLod 90 94 95 ConstOffset 80
+                              Store 83(r33) 96
+             101:          98 Load 100(g_tTex2du4a)
+             102:          18 Load 20(g_sSamp)
+             104:         103 SampledImage 101 102
+             105:    6(float) CompositeExtract 73 0
+             106:    6(float) CompositeExtract 73 1
+             107:    6(float) CompositeExtract 73 2
+             108:    7(fvec4) CompositeConstruct 105 106 107 28
+             109:    6(float) CompositeExtract 108 3
+             110:    6(float) ImageSampleDrefImplicitLod 104 108 109 ConstOffset 80
+                              Store 97(r35) 110
+             117:    116(ptr) AccessChain 112(psout) 113
+                              Store 117 115
+             119:     12(ptr) AccessChain 112(psout) 118
+                              Store 119 114
+             120:8(PS_OUTPUT) Load 112(psout)
+                              ReturnValue 120
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index 40a8202..ea7cc5e 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -10,7 +10,7 @@
 0:42          'r10' ( temp float)
 0:42          textureLod ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42              'g_tTex1df4a' ( uniform texture1DArray)
+0:42              'g_tTex1df4a' ( uniform texture1DArrayShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -25,7 +25,7 @@
 0:43          'r12' ( temp float)
 0:43          textureLod ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43              'g_tTex1di4a' ( uniform itexture1DArray)
+0:43              'g_tTex1di4a' ( uniform itexture1DArrayShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -40,7 +40,7 @@
 0:44          'r14' ( temp float)
 0:44          textureLod ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44              'g_tTex1du4a' ( uniform utexture1DArray)
+0:44              'g_tTex1du4a' ( uniform utexture1DArrayShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -55,7 +55,7 @@
 0:47          'r30' ( temp float)
 0:47          textureLod ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47              'g_tTex2df4a' ( uniform texture2DArray)
+0:47              'g_tTex2df4a' ( uniform texture2DArrayShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -71,7 +71,7 @@
 0:48          'r32' ( temp float)
 0:48          textureLod ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48              'g_tTex2di4a' ( uniform itexture2DArray)
+0:48              'g_tTex2di4a' ( uniform itexture2DArrayShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -87,7 +87,7 @@
 0:49          'r34' ( temp float)
 0:49          textureLod ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49              'g_tTex2du4a' ( uniform utexture2DArray)
+0:49              'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -103,7 +103,7 @@
 0:52          'r60' ( temp float)
 0:52          textureLod ( temp float)
 0:52            Construct combined texture-sampler ( temp samplerCubeArrayShadow)
-0:52              'g_tTexcdf4a' ( uniform textureCubeArray)
+0:52              'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
 0:52              'g_sSamp' (layout( binding=0) uniform sampler)
 0:52            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -120,7 +120,7 @@
 0:53          'r62' ( temp float)
 0:53          textureLod ( temp float)
 0:53            Construct combined texture-sampler ( temp isamplerCubeArrayShadow)
-0:53              'g_tTexcdi4a' ( uniform itextureCubeArray)
+0:53              'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
 0:53              'g_sSamp' (layout( binding=0) uniform sampler)
 0:53            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -137,7 +137,7 @@
 0:54          'r64' ( temp float)
 0:54          textureLod ( temp float)
 0:54            Construct combined texture-sampler ( temp usamplerCubeArrayShadow)
-0:54              'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:54              'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
 0:54              'g_sSamp' (layout( binding=0) uniform sampler)
 0:54            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -201,15 +201,15 @@
 0:?     'g_tTexcdf4' ( uniform textureCube)
 0:?     'g_tTexcdi4' ( uniform itextureCube)
 0:?     'g_tTexcdu4' ( uniform utextureCube)
-0:?     'g_tTex1df4a' ( uniform texture1DArray)
-0:?     'g_tTex1di4a' ( uniform itexture1DArray)
-0:?     'g_tTex1du4a' ( uniform utexture1DArray)
-0:?     'g_tTex2df4a' ( uniform texture2DArray)
-0:?     'g_tTex2di4a' ( uniform itexture2DArray)
-0:?     'g_tTex2du4a' ( uniform utexture2DArray)
-0:?     'g_tTexcdf4a' ( uniform textureCubeArray)
-0:?     'g_tTexcdi4a' ( uniform itextureCubeArray)
-0:?     'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:?     'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:?     'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:?     'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:?     'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:?     'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:?     'g_tTex2du4a' ( uniform utexture2DArrayShadow)
+0:?     'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
+0:?     'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
+0:?     'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
@@ -228,7 +228,7 @@
 0:42          'r10' ( temp float)
 0:42          textureLod ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42              'g_tTex1df4a' ( uniform texture1DArray)
+0:42              'g_tTex1df4a' ( uniform texture1DArrayShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -243,7 +243,7 @@
 0:43          'r12' ( temp float)
 0:43          textureLod ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43              'g_tTex1di4a' ( uniform itexture1DArray)
+0:43              'g_tTex1di4a' ( uniform itexture1DArrayShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -258,7 +258,7 @@
 0:44          'r14' ( temp float)
 0:44          textureLod ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44              'g_tTex1du4a' ( uniform utexture1DArray)
+0:44              'g_tTex1du4a' ( uniform utexture1DArrayShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -273,7 +273,7 @@
 0:47          'r30' ( temp float)
 0:47          textureLod ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47              'g_tTex2df4a' ( uniform texture2DArray)
+0:47              'g_tTex2df4a' ( uniform texture2DArrayShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -289,7 +289,7 @@
 0:48          'r32' ( temp float)
 0:48          textureLod ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48              'g_tTex2di4a' ( uniform itexture2DArray)
+0:48              'g_tTex2di4a' ( uniform itexture2DArrayShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -305,7 +305,7 @@
 0:49          'r34' ( temp float)
 0:49          textureLod ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49              'g_tTex2du4a' ( uniform utexture2DArray)
+0:49              'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -321,7 +321,7 @@
 0:52          'r60' ( temp float)
 0:52          textureLod ( temp float)
 0:52            Construct combined texture-sampler ( temp samplerCubeArrayShadow)
-0:52              'g_tTexcdf4a' ( uniform textureCubeArray)
+0:52              'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
 0:52              'g_sSamp' (layout( binding=0) uniform sampler)
 0:52            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -338,7 +338,7 @@
 0:53          'r62' ( temp float)
 0:53          textureLod ( temp float)
 0:53            Construct combined texture-sampler ( temp isamplerCubeArrayShadow)
-0:53              'g_tTexcdi4a' ( uniform itextureCubeArray)
+0:53              'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
 0:53              'g_sSamp' (layout( binding=0) uniform sampler)
 0:53            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -355,7 +355,7 @@
 0:54          'r64' ( temp float)
 0:54          textureLod ( temp float)
 0:54            Construct combined texture-sampler ( temp usamplerCubeArrayShadow)
-0:54              'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:54              'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
 0:54              'g_sSamp' (layout( binding=0) uniform sampler)
 0:54            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -419,28 +419,28 @@
 0:?     'g_tTexcdf4' ( uniform textureCube)
 0:?     'g_tTexcdi4' ( uniform itextureCube)
 0:?     'g_tTexcdu4' ( uniform utextureCube)
-0:?     'g_tTex1df4a' ( uniform texture1DArray)
-0:?     'g_tTex1di4a' ( uniform itexture1DArray)
-0:?     'g_tTex1du4a' ( uniform utexture1DArray)
-0:?     'g_tTex2df4a' ( uniform texture2DArray)
-0:?     'g_tTex2di4a' ( uniform itexture2DArray)
-0:?     'g_tTex2du4a' ( uniform utexture2DArray)
-0:?     'g_tTexcdf4a' ( uniform textureCubeArray)
-0:?     'g_tTexcdi4a' ( uniform itextureCubeArray)
-0:?     'g_tTexcdu4a' ( uniform utextureCubeArray)
+0:?     'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:?     'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:?     'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:?     'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:?     'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:?     'g_tTex2du4a' ( uniform utexture2DArrayShadow)
+0:?     'g_tTexcdf4a' ( uniform textureCubeArrayShadow)
+0:?     'g_tTexcdi4a' ( uniform itextureCubeArrayShadow)
+0:?     'g_tTexcdu4a' ( uniform utextureCubeArrayShadow)
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 219
+// Generated by (magic number): 80002
+// Id's are bound by 210
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 176 180
+                              EntryPoint Fragment 4  "main" 167 171
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -451,64 +451,64 @@
                               Name 13  "r10"
                               Name 16  "g_tTex1df4a"
                               Name 20  "g_sSamp"
-                              Name 37  "r12"
-                              Name 41  "g_tTex1di4a"
-                              Name 52  "r14"
-                              Name 56  "g_tTex1du4a"
-                              Name 67  "r30"
-                              Name 70  "g_tTex2df4a"
-                              Name 84  "r32"
-                              Name 87  "g_tTex2di4a"
-                              Name 99  "r34"
-                              Name 102  "g_tTex2du4a"
-                              Name 114  "r60"
-                              Name 117  "g_tTexcdf4a"
-                              Name 131  "r62"
-                              Name 134  "g_tTexcdi4a"
-                              Name 146  "r64"
-                              Name 149  "g_tTexcdu4a"
-                              Name 162  "psout"
-                              Name 173  "flattenTemp"
-                              Name 176  "@entryPointOutput.Color"
-                              Name 180  "@entryPointOutput.Depth"
-                              Name 185  "g_tTex1df4"
-                              Name 188  "g_tTex1di4"
-                              Name 191  "g_tTex1du4"
-                              Name 194  "g_tTex2df4"
-                              Name 197  "g_tTex2di4"
-                              Name 200  "g_tTex2du4"
-                              Name 203  "g_tTex3df4"
-                              Name 206  "g_tTex3di4"
-                              Name 209  "g_tTex3du4"
-                              Name 212  "g_tTexcdf4"
-                              Name 215  "g_tTexcdi4"
-                              Name 218  "g_tTexcdu4"
+                              Name 36  "r12"
+                              Name 40  "g_tTex1di4a"
+                              Name 50  "r14"
+                              Name 54  "g_tTex1du4a"
+                              Name 64  "r30"
+                              Name 67  "g_tTex2df4a"
+                              Name 80  "r32"
+                              Name 83  "g_tTex2di4a"
+                              Name 94  "r34"
+                              Name 97  "g_tTex2du4a"
+                              Name 108  "r60"
+                              Name 111  "g_tTexcdf4a"
+                              Name 124  "r62"
+                              Name 127  "g_tTexcdi4a"
+                              Name 138  "r64"
+                              Name 141  "g_tTexcdu4a"
+                              Name 153  "psout"
+                              Name 164  "flattenTemp"
+                              Name 167  "@entryPointOutput.Color"
+                              Name 171  "@entryPointOutput.Depth"
+                              Name 176  "g_tTex1df4"
+                              Name 179  "g_tTex1di4"
+                              Name 182  "g_tTex1du4"
+                              Name 185  "g_tTex2df4"
+                              Name 188  "g_tTex2di4"
+                              Name 191  "g_tTex2du4"
+                              Name 194  "g_tTex3df4"
+                              Name 197  "g_tTex3di4"
+                              Name 200  "g_tTex3du4"
+                              Name 203  "g_tTexcdf4"
+                              Name 206  "g_tTexcdi4"
+                              Name 209  "g_tTexcdu4"
                               Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 41(g_tTex1di4a) DescriptorSet 0
-                              Decorate 56(g_tTex1du4a) DescriptorSet 0
-                              Decorate 70(g_tTex2df4a) DescriptorSet 0
-                              Decorate 87(g_tTex2di4a) DescriptorSet 0
-                              Decorate 102(g_tTex2du4a) DescriptorSet 0
-                              Decorate 117(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 134(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 149(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 176(@entryPointOutput.Color) Location 0
-                              Decorate 180(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 185(g_tTex1df4) DescriptorSet 0
-                              Decorate 185(g_tTex1df4) Binding 0
-                              Decorate 188(g_tTex1di4) DescriptorSet 0
-                              Decorate 191(g_tTex1du4) DescriptorSet 0
-                              Decorate 194(g_tTex2df4) DescriptorSet 0
-                              Decorate 197(g_tTex2di4) DescriptorSet 0
-                              Decorate 200(g_tTex2du4) DescriptorSet 0
-                              Decorate 203(g_tTex3df4) DescriptorSet 0
-                              Decorate 206(g_tTex3di4) DescriptorSet 0
-                              Decorate 209(g_tTex3du4) DescriptorSet 0
-                              Decorate 212(g_tTexcdf4) DescriptorSet 0
-                              Decorate 215(g_tTexcdi4) DescriptorSet 0
-                              Decorate 218(g_tTexcdu4) DescriptorSet 0
+                              Decorate 40(g_tTex1di4a) DescriptorSet 0
+                              Decorate 54(g_tTex1du4a) DescriptorSet 0
+                              Decorate 67(g_tTex2df4a) DescriptorSet 0
+                              Decorate 83(g_tTex2di4a) DescriptorSet 0
+                              Decorate 97(g_tTex2du4a) DescriptorSet 0
+                              Decorate 111(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 127(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 141(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 167(@entryPointOutput.Color) Location 0
+                              Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 176(g_tTex1df4) DescriptorSet 0
+                              Decorate 176(g_tTex1df4) Binding 0
+                              Decorate 179(g_tTex1di4) DescriptorSet 0
+                              Decorate 182(g_tTex1du4) DescriptorSet 0
+                              Decorate 185(g_tTex2df4) DescriptorSet 0
+                              Decorate 188(g_tTex2di4) DescriptorSet 0
+                              Decorate 191(g_tTex2du4) DescriptorSet 0
+                              Decorate 194(g_tTex3df4) DescriptorSet 0
+                              Decorate 197(g_tTex3di4) DescriptorSet 0
+                              Decorate 200(g_tTex3du4) DescriptorSet 0
+                              Decorate 203(g_tTexcdf4) DescriptorSet 0
+                              Decorate 206(g_tTexcdi4) DescriptorSet 0
+                              Decorate 209(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -516,229 +516,220 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 6(float)
-              14:             TypeImage 6(float) 1D array sampled format:Unknown
+              14:             TypeImage 6(float) 1D depth array sampled format:Unknown
               15:             TypePointer UniformConstant 14
  16(g_tTex1df4a):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
      20(g_sSamp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 1D depth array sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:             TypeVector 6(float) 2
-              26:    6(float) Constant 1036831949
-              27:    6(float) Constant 1045220557
-              28:   25(fvec2) ConstantComposite 26 27
-              29:    6(float) Constant 1061158912
-              30:             TypeVector 6(float) 3
-              34:    6(float) Constant 0
-              38:             TypeInt 32 1
-              39:             TypeImage 38(int) 1D array sampled format:Unknown
-              40:             TypePointer UniformConstant 39
- 41(g_tTex1di4a):     40(ptr) Variable UniformConstant
-              44:             TypeImage 38(int) 1D depth array sampled format:Unknown
-              45:             TypeSampledImage 44
-              53:             TypeInt 32 0
-              54:             TypeImage 53(int) 1D array sampled format:Unknown
-              55:             TypePointer UniformConstant 54
- 56(g_tTex1du4a):     55(ptr) Variable UniformConstant
-              59:             TypeImage 53(int) 1D depth array sampled format:Unknown
-              60:             TypeSampledImage 59
-              68:             TypeImage 6(float) 2D array sampled format:Unknown
-              69:             TypePointer UniformConstant 68
- 70(g_tTex2df4a):     69(ptr) Variable UniformConstant
-              73:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              74:             TypeSampledImage 73
-              76:    6(float) Constant 1050253722
-              77:   30(fvec3) ConstantComposite 26 27 76
-              85:             TypeImage 38(int) 2D array sampled format:Unknown
-              86:             TypePointer UniformConstant 85
- 87(g_tTex2di4a):     86(ptr) Variable UniformConstant
-              90:             TypeImage 38(int) 2D depth array sampled format:Unknown
-              91:             TypeSampledImage 90
-             100:             TypeImage 53(int) 2D array sampled format:Unknown
-             101:             TypePointer UniformConstant 100
-102(g_tTex2du4a):    101(ptr) Variable UniformConstant
-             105:             TypeImage 53(int) 2D depth array sampled format:Unknown
-             106:             TypeSampledImage 105
-             115:             TypeImage 6(float) Cube array sampled format:Unknown
-             116:             TypePointer UniformConstant 115
-117(g_tTexcdf4a):    116(ptr) Variable UniformConstant
-             120:             TypeImage 6(float) Cube depth array sampled format:Unknown
-             121:             TypeSampledImage 120
-             123:    6(float) Constant 1053609165
-             124:    7(fvec4) ConstantComposite 26 27 76 123
-             132:             TypeImage 38(int) Cube array sampled format:Unknown
-             133:             TypePointer UniformConstant 132
-134(g_tTexcdi4a):    133(ptr) Variable UniformConstant
-             137:             TypeImage 38(int) Cube depth array sampled format:Unknown
-             138:             TypeSampledImage 137
-             147:             TypeImage 53(int) Cube array sampled format:Unknown
-             148:             TypePointer UniformConstant 147
-149(g_tTexcdu4a):    148(ptr) Variable UniformConstant
-             152:             TypeImage 53(int) Cube depth array sampled format:Unknown
-             153:             TypeSampledImage 152
-             161:             TypePointer Function 8(PS_OUTPUT)
-             163:     38(int) Constant 0
-             164:    6(float) Constant 1065353216
-             165:    7(fvec4) ConstantComposite 164 164 164 164
-             166:             TypePointer Function 7(fvec4)
-             168:     38(int) Constant 1
-             175:             TypePointer Output 7(fvec4)
-176(@entryPointOutput.Color):    175(ptr) Variable Output
-             179:             TypePointer Output 6(float)
-180(@entryPointOutput.Depth):    179(ptr) Variable Output
-             183:             TypeImage 6(float) 1D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:   24(fvec2) ConstantComposite 25 26
+              28:    6(float) Constant 1061158912
+              29:             TypeVector 6(float) 3
+              33:    6(float) Constant 0
+              37:             TypeInt 32 1
+              38:             TypeImage 37(int) 1D depth array sampled format:Unknown
+              39:             TypePointer UniformConstant 38
+ 40(g_tTex1di4a):     39(ptr) Variable UniformConstant
+              43:             TypeSampledImage 38
+              51:             TypeInt 32 0
+              52:             TypeImage 51(int) 1D depth array sampled format:Unknown
+              53:             TypePointer UniformConstant 52
+ 54(g_tTex1du4a):     53(ptr) Variable UniformConstant
+              57:             TypeSampledImage 52
+              65:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              66:             TypePointer UniformConstant 65
+ 67(g_tTex2df4a):     66(ptr) Variable UniformConstant
+              70:             TypeSampledImage 65
+              72:    6(float) Constant 1050253722
+              73:   29(fvec3) ConstantComposite 25 26 72
+              81:             TypeImage 37(int) 2D depth array sampled format:Unknown
+              82:             TypePointer UniformConstant 81
+ 83(g_tTex2di4a):     82(ptr) Variable UniformConstant
+              86:             TypeSampledImage 81
+              95:             TypeImage 51(int) 2D depth array sampled format:Unknown
+              96:             TypePointer UniformConstant 95
+ 97(g_tTex2du4a):     96(ptr) Variable UniformConstant
+             100:             TypeSampledImage 95
+             109:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             110:             TypePointer UniformConstant 109
+111(g_tTexcdf4a):    110(ptr) Variable UniformConstant
+             114:             TypeSampledImage 109
+             116:    6(float) Constant 1053609165
+             117:    7(fvec4) ConstantComposite 25 26 72 116
+             125:             TypeImage 37(int) Cube depth array sampled format:Unknown
+             126:             TypePointer UniformConstant 125
+127(g_tTexcdi4a):    126(ptr) Variable UniformConstant
+             130:             TypeSampledImage 125
+             139:             TypeImage 51(int) Cube depth array sampled format:Unknown
+             140:             TypePointer UniformConstant 139
+141(g_tTexcdu4a):    140(ptr) Variable UniformConstant
+             144:             TypeSampledImage 139
+             152:             TypePointer Function 8(PS_OUTPUT)
+             154:     37(int) Constant 0
+             155:    6(float) Constant 1065353216
+             156:    7(fvec4) ConstantComposite 155 155 155 155
+             157:             TypePointer Function 7(fvec4)
+             159:     37(int) Constant 1
+             166:             TypePointer Output 7(fvec4)
+167(@entryPointOutput.Color):    166(ptr) Variable Output
+             170:             TypePointer Output 6(float)
+171(@entryPointOutput.Depth):    170(ptr) Variable Output
+             174:             TypeImage 6(float) 1D sampled format:Unknown
+             175:             TypePointer UniformConstant 174
+ 176(g_tTex1df4):    175(ptr) Variable UniformConstant
+             177:             TypeImage 37(int) 1D sampled format:Unknown
+             178:             TypePointer UniformConstant 177
+ 179(g_tTex1di4):    178(ptr) Variable UniformConstant
+             180:             TypeImage 51(int) 1D sampled format:Unknown
+             181:             TypePointer UniformConstant 180
+ 182(g_tTex1du4):    181(ptr) Variable UniformConstant
+             183:             TypeImage 6(float) 2D sampled format:Unknown
              184:             TypePointer UniformConstant 183
- 185(g_tTex1df4):    184(ptr) Variable UniformConstant
-             186:             TypeImage 38(int) 1D sampled format:Unknown
+ 185(g_tTex2df4):    184(ptr) Variable UniformConstant
+             186:             TypeImage 37(int) 2D sampled format:Unknown
              187:             TypePointer UniformConstant 186
- 188(g_tTex1di4):    187(ptr) Variable UniformConstant
-             189:             TypeImage 53(int) 1D sampled format:Unknown
+ 188(g_tTex2di4):    187(ptr) Variable UniformConstant
+             189:             TypeImage 51(int) 2D sampled format:Unknown
              190:             TypePointer UniformConstant 189
- 191(g_tTex1du4):    190(ptr) Variable UniformConstant
-             192:             TypeImage 6(float) 2D sampled format:Unknown
+ 191(g_tTex2du4):    190(ptr) Variable UniformConstant
+             192:             TypeImage 6(float) 3D sampled format:Unknown
              193:             TypePointer UniformConstant 192
- 194(g_tTex2df4):    193(ptr) Variable UniformConstant
-             195:             TypeImage 38(int) 2D sampled format:Unknown
+ 194(g_tTex3df4):    193(ptr) Variable UniformConstant
+             195:             TypeImage 37(int) 3D sampled format:Unknown
              196:             TypePointer UniformConstant 195
- 197(g_tTex2di4):    196(ptr) Variable UniformConstant
-             198:             TypeImage 53(int) 2D sampled format:Unknown
+ 197(g_tTex3di4):    196(ptr) Variable UniformConstant
+             198:             TypeImage 51(int) 3D sampled format:Unknown
              199:             TypePointer UniformConstant 198
- 200(g_tTex2du4):    199(ptr) Variable UniformConstant
-             201:             TypeImage 6(float) 3D sampled format:Unknown
+ 200(g_tTex3du4):    199(ptr) Variable UniformConstant
+             201:             TypeImage 6(float) Cube sampled format:Unknown
              202:             TypePointer UniformConstant 201
- 203(g_tTex3df4):    202(ptr) Variable UniformConstant
-             204:             TypeImage 38(int) 3D sampled format:Unknown
+ 203(g_tTexcdf4):    202(ptr) Variable UniformConstant
+             204:             TypeImage 37(int) Cube sampled format:Unknown
              205:             TypePointer UniformConstant 204
- 206(g_tTex3di4):    205(ptr) Variable UniformConstant
-             207:             TypeImage 53(int) 3D sampled format:Unknown
+ 206(g_tTexcdi4):    205(ptr) Variable UniformConstant
+             207:             TypeImage 51(int) Cube sampled format:Unknown
              208:             TypePointer UniformConstant 207
- 209(g_tTex3du4):    208(ptr) Variable UniformConstant
-             210:             TypeImage 6(float) Cube sampled format:Unknown
-             211:             TypePointer UniformConstant 210
- 212(g_tTexcdf4):    211(ptr) Variable UniformConstant
-             213:             TypeImage 38(int) Cube sampled format:Unknown
-             214:             TypePointer UniformConstant 213
- 215(g_tTexcdi4):    214(ptr) Variable UniformConstant
-             216:             TypeImage 53(int) Cube sampled format:Unknown
-             217:             TypePointer UniformConstant 216
- 218(g_tTexcdu4):    217(ptr) Variable UniformConstant
+ 209(g_tTexcdu4):    208(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-173(flattenTemp):    161(ptr) Variable Function
-             174:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 173(flattenTemp) 174
-             177:    166(ptr) AccessChain 173(flattenTemp) 163
-             178:    7(fvec4) Load 177
-                              Store 176(@entryPointOutput.Color) 178
-             181:     12(ptr) AccessChain 173(flattenTemp) 168
-             182:    6(float) Load 181
-                              Store 180(@entryPointOutput.Depth) 182
+164(flattenTemp):    152(ptr) Variable Function
+             165:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 164(flattenTemp) 165
+             168:    157(ptr) AccessChain 164(flattenTemp) 154
+             169:    7(fvec4) Load 168
+                              Store 167(@entryPointOutput.Color) 169
+             172:     12(ptr) AccessChain 164(flattenTemp) 159
+             173:    6(float) Load 172
+                              Store 171(@entryPointOutput.Depth) 173
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
          13(r10):     12(ptr) Variable Function
-         37(r12):     12(ptr) Variable Function
-         52(r14):     12(ptr) Variable Function
-         67(r30):     12(ptr) Variable Function
-         84(r32):     12(ptr) Variable Function
-         99(r34):     12(ptr) Variable Function
-        114(r60):     12(ptr) Variable Function
-        131(r62):     12(ptr) Variable Function
-        146(r64):     12(ptr) Variable Function
-      162(psout):    161(ptr) Variable Function
+         36(r12):     12(ptr) Variable Function
+         50(r14):     12(ptr) Variable Function
+         64(r30):     12(ptr) Variable Function
+         80(r32):     12(ptr) Variable Function
+         94(r34):     12(ptr) Variable Function
+        108(r60):     12(ptr) Variable Function
+        124(r62):     12(ptr) Variable Function
+        138(r64):     12(ptr) Variable Function
+      153(psout):    152(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4a)
               21:          18 Load 20(g_sSamp)
-              24:          23 SampledImage 17 21
-              31:    6(float) CompositeExtract 28 0
-              32:    6(float) CompositeExtract 28 1
-              33:   30(fvec3) CompositeConstruct 31 32 29
-              35:    6(float) CompositeExtract 33 2
-              36:    6(float) ImageSampleDrefExplicitLod 24 33 35 Lod 34
-                              Store 13(r10) 36
-              42:          39 Load 41(g_tTex1di4a)
-              43:          18 Load 20(g_sSamp)
-              46:          45 SampledImage 42 43
-              47:    6(float) CompositeExtract 28 0
-              48:    6(float) CompositeExtract 28 1
-              49:   30(fvec3) CompositeConstruct 47 48 29
-              50:    6(float) CompositeExtract 49 2
-              51:    6(float) ImageSampleDrefExplicitLod 46 49 50 Lod 34
-                              Store 37(r12) 51
-              57:          54 Load 56(g_tTex1du4a)
-              58:          18 Load 20(g_sSamp)
-              61:          60 SampledImage 57 58
-              62:    6(float) CompositeExtract 28 0
-              63:    6(float) CompositeExtract 28 1
-              64:   30(fvec3) CompositeConstruct 62 63 29
-              65:    6(float) CompositeExtract 64 2
-              66:    6(float) ImageSampleDrefExplicitLod 61 64 65 Lod 34
-                              Store 52(r14) 66
-              71:          68 Load 70(g_tTex2df4a)
-              72:          18 Load 20(g_sSamp)
-              75:          74 SampledImage 71 72
-              78:    6(float) CompositeExtract 77 0
-              79:    6(float) CompositeExtract 77 1
-              80:    6(float) CompositeExtract 77 2
-              81:    7(fvec4) CompositeConstruct 78 79 80 29
-              82:    6(float) CompositeExtract 81 3
-              83:    6(float) ImageSampleDrefExplicitLod 75 81 82 Lod 34
-                              Store 67(r30) 83
-              88:          85 Load 87(g_tTex2di4a)
-              89:          18 Load 20(g_sSamp)
-              92:          91 SampledImage 88 89
-              93:    6(float) CompositeExtract 77 0
-              94:    6(float) CompositeExtract 77 1
-              95:    6(float) CompositeExtract 77 2
-              96:    7(fvec4) CompositeConstruct 93 94 95 29
-              97:    6(float) CompositeExtract 96 3
-              98:    6(float) ImageSampleDrefExplicitLod 92 96 97 Lod 34
-                              Store 84(r32) 98
-             103:         100 Load 102(g_tTex2du4a)
-             104:          18 Load 20(g_sSamp)
-             107:         106 SampledImage 103 104
-             108:    6(float) CompositeExtract 77 0
-             109:    6(float) CompositeExtract 77 1
-             110:    6(float) CompositeExtract 77 2
-             111:    7(fvec4) CompositeConstruct 108 109 110 29
-             112:    6(float) CompositeExtract 111 3
-             113:    6(float) ImageSampleDrefExplicitLod 107 111 112 Lod 34
-                              Store 99(r34) 113
-             118:         115 Load 117(g_tTexcdf4a)
-             119:          18 Load 20(g_sSamp)
-             122:         121 SampledImage 118 119
-             125:    6(float) CompositeExtract 124 0
-             126:    6(float) CompositeExtract 124 1
-             127:    6(float) CompositeExtract 124 2
-             128:    6(float) CompositeExtract 124 3
-             129:    7(fvec4) CompositeConstruct 125 126 127 128
-             130:    6(float) ImageSampleDrefExplicitLod 122 129 29 Lod 34
-                              Store 114(r60) 130
-             135:         132 Load 134(g_tTexcdi4a)
-             136:          18 Load 20(g_sSamp)
-             139:         138 SampledImage 135 136
-             140:    6(float) CompositeExtract 124 0
-             141:    6(float) CompositeExtract 124 1
-             142:    6(float) CompositeExtract 124 2
-             143:    6(float) CompositeExtract 124 3
-             144:    7(fvec4) CompositeConstruct 140 141 142 143
-             145:    6(float) ImageSampleDrefExplicitLod 139 144 29 Lod 34
-                              Store 131(r62) 145
-             150:         147 Load 149(g_tTexcdu4a)
-             151:          18 Load 20(g_sSamp)
-             154:         153 SampledImage 150 151
-             155:    6(float) CompositeExtract 124 0
-             156:    6(float) CompositeExtract 124 1
-             157:    6(float) CompositeExtract 124 2
-             158:    6(float) CompositeExtract 124 3
-             159:    7(fvec4) CompositeConstruct 155 156 157 158
-             160:    6(float) ImageSampleDrefExplicitLod 154 159 29 Lod 34
-                              Store 146(r64) 160
-             167:    166(ptr) AccessChain 162(psout) 163
-                              Store 167 165
-             169:     12(ptr) AccessChain 162(psout) 168
-                              Store 169 164
-             170:8(PS_OUTPUT) Load 162(psout)
-                              ReturnValue 170
+              23:          22 SampledImage 17 21
+              30:    6(float) CompositeExtract 27 0
+              31:    6(float) CompositeExtract 27 1
+              32:   29(fvec3) CompositeConstruct 30 31 28
+              34:    6(float) CompositeExtract 32 2
+              35:    6(float) ImageSampleDrefExplicitLod 23 32 34 Lod 33
+                              Store 13(r10) 35
+              41:          38 Load 40(g_tTex1di4a)
+              42:          18 Load 20(g_sSamp)
+              44:          43 SampledImage 41 42
+              45:    6(float) CompositeExtract 27 0
+              46:    6(float) CompositeExtract 27 1
+              47:   29(fvec3) CompositeConstruct 45 46 28
+              48:    6(float) CompositeExtract 47 2
+              49:    6(float) ImageSampleDrefExplicitLod 44 47 48 Lod 33
+                              Store 36(r12) 49
+              55:          52 Load 54(g_tTex1du4a)
+              56:          18 Load 20(g_sSamp)
+              58:          57 SampledImage 55 56
+              59:    6(float) CompositeExtract 27 0
+              60:    6(float) CompositeExtract 27 1
+              61:   29(fvec3) CompositeConstruct 59 60 28
+              62:    6(float) CompositeExtract 61 2
+              63:    6(float) ImageSampleDrefExplicitLod 58 61 62 Lod 33
+                              Store 50(r14) 63
+              68:          65 Load 67(g_tTex2df4a)
+              69:          18 Load 20(g_sSamp)
+              71:          70 SampledImage 68 69
+              74:    6(float) CompositeExtract 73 0
+              75:    6(float) CompositeExtract 73 1
+              76:    6(float) CompositeExtract 73 2
+              77:    7(fvec4) CompositeConstruct 74 75 76 28
+              78:    6(float) CompositeExtract 77 3
+              79:    6(float) ImageSampleDrefExplicitLod 71 77 78 Lod 33
+                              Store 64(r30) 79
+              84:          81 Load 83(g_tTex2di4a)
+              85:          18 Load 20(g_sSamp)
+              87:          86 SampledImage 84 85
+              88:    6(float) CompositeExtract 73 0
+              89:    6(float) CompositeExtract 73 1
+              90:    6(float) CompositeExtract 73 2
+              91:    7(fvec4) CompositeConstruct 88 89 90 28
+              92:    6(float) CompositeExtract 91 3
+              93:    6(float) ImageSampleDrefExplicitLod 87 91 92 Lod 33
+                              Store 80(r32) 93
+              98:          95 Load 97(g_tTex2du4a)
+              99:          18 Load 20(g_sSamp)
+             101:         100 SampledImage 98 99
+             102:    6(float) CompositeExtract 73 0
+             103:    6(float) CompositeExtract 73 1
+             104:    6(float) CompositeExtract 73 2
+             105:    7(fvec4) CompositeConstruct 102 103 104 28
+             106:    6(float) CompositeExtract 105 3
+             107:    6(float) ImageSampleDrefExplicitLod 101 105 106 Lod 33
+                              Store 94(r34) 107
+             112:         109 Load 111(g_tTexcdf4a)
+             113:          18 Load 20(g_sSamp)
+             115:         114 SampledImage 112 113
+             118:    6(float) CompositeExtract 117 0
+             119:    6(float) CompositeExtract 117 1
+             120:    6(float) CompositeExtract 117 2
+             121:    6(float) CompositeExtract 117 3
+             122:    7(fvec4) CompositeConstruct 118 119 120 121
+             123:    6(float) ImageSampleDrefExplicitLod 115 122 28 Lod 33
+                              Store 108(r60) 123
+             128:         125 Load 127(g_tTexcdi4a)
+             129:          18 Load 20(g_sSamp)
+             131:         130 SampledImage 128 129
+             132:    6(float) CompositeExtract 117 0
+             133:    6(float) CompositeExtract 117 1
+             134:    6(float) CompositeExtract 117 2
+             135:    6(float) CompositeExtract 117 3
+             136:    7(fvec4) CompositeConstruct 132 133 134 135
+             137:    6(float) ImageSampleDrefExplicitLod 131 136 28 Lod 33
+                              Store 124(r62) 137
+             142:         139 Load 141(g_tTexcdu4a)
+             143:          18 Load 20(g_sSamp)
+             145:         144 SampledImage 142 143
+             146:    6(float) CompositeExtract 117 0
+             147:    6(float) CompositeExtract 117 1
+             148:    6(float) CompositeExtract 117 2
+             149:    6(float) CompositeExtract 117 3
+             150:    7(fvec4) CompositeConstruct 146 147 148 149
+             151:    6(float) ImageSampleDrefExplicitLod 145 150 28 Lod 33
+                              Store 138(r64) 151
+             158:    157(ptr) AccessChain 153(psout) 154
+                              Store 158 156
+             160:     12(ptr) AccessChain 153(psout) 159
+                              Store 160 155
+             161:8(PS_OUTPUT) Load 153(psout)
+                              ReturnValue 161
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index 87dee88..278aad5 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -10,7 +10,7 @@
 0:42          'r00' ( temp float)
 0:42          textureLod ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DShadow)
-0:42              'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42              'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec2 ( temp 2-component vector of float)
 0:42              Constant:
@@ -24,7 +24,7 @@
 0:43          'r02' ( temp float)
 0:43          textureLod ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DShadow)
-0:43              'g_tTex1di4' ( uniform itexture1D)
+0:43              'g_tTex1di4' ( uniform itexture1DShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec2 ( temp 2-component vector of float)
 0:43              Constant:
@@ -38,7 +38,7 @@
 0:44          'r04' ( temp float)
 0:44          textureLod ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DShadow)
-0:44              'g_tTex1du4' ( uniform utexture1D)
+0:44              'g_tTex1du4' ( uniform utexture1DShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec2 ( temp 2-component vector of float)
 0:44              Constant:
@@ -52,7 +52,7 @@
 0:47          'r20' ( temp float)
 0:47          textureLod ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DShadow)
-0:47              'g_tTex2df4' ( uniform texture2D)
+0:47              'g_tTex2df4' ( uniform texture2DShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -67,7 +67,7 @@
 0:48          'r22' ( temp float)
 0:48          textureLod ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DShadow)
-0:48              'g_tTex2di4' ( uniform itexture2D)
+0:48              'g_tTex2di4' ( uniform itexture2DShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -82,7 +82,7 @@
 0:49          'r24' ( temp float)
 0:49          textureLod ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DShadow)
-0:49              'g_tTex2du4' ( uniform utexture2D)
+0:49              'g_tTex2du4' ( uniform utexture2DShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -97,7 +97,7 @@
 0:53          'r50' ( temp float)
 0:53          textureLod ( temp float)
 0:53            Construct combined texture-sampler ( temp samplerCubeShadow)
-0:53              'g_tTexcdf4' ( uniform textureCube)
+0:53              'g_tTexcdf4' ( uniform textureCubeShadow)
 0:53              'g_sSamp' (layout( binding=0) uniform sampler)
 0:53            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -113,7 +113,7 @@
 0:54          'r52' ( temp float)
 0:54          textureLod ( temp float)
 0:54            Construct combined texture-sampler ( temp isamplerCubeShadow)
-0:54              'g_tTexcdi4' ( uniform itextureCube)
+0:54              'g_tTexcdi4' ( uniform itextureCubeShadow)
 0:54              'g_sSamp' (layout( binding=0) uniform sampler)
 0:54            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -129,7 +129,7 @@
 0:55          'r54' ( temp float)
 0:55          textureLod ( temp float)
 0:55            Construct combined texture-sampler ( temp usamplerCubeShadow)
-0:55              'g_tTexcdu4' ( uniform utextureCube)
+0:55              'g_tTexcdu4' ( uniform utextureCubeShadow)
 0:55              'g_sSamp' (layout( binding=0) uniform sampler)
 0:55            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -180,18 +180,18 @@
 0:38              1 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout( binding=0) uniform sampler)
-0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:?     'g_tTex1di4' ( uniform itexture1D)
-0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:?     'g_tTex1di4' ( uniform itexture1DShadow)
+0:?     'g_tTex1du4' ( uniform utexture1DShadow)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
-0:?     'g_tTexcdf4' ( uniform textureCube)
-0:?     'g_tTexcdi4' ( uniform itextureCube)
-0:?     'g_tTexcdu4' ( uniform utextureCube)
+0:?     'g_tTexcdf4' ( uniform textureCubeShadow)
+0:?     'g_tTexcdi4' ( uniform itextureCubeShadow)
+0:?     'g_tTexcdu4' ( uniform utextureCubeShadow)
 0:?     'g_tTex1df4a' ( uniform texture1DArray)
 0:?     'g_tTex1di4a' ( uniform itexture1DArray)
 0:?     'g_tTex1du4a' ( uniform utexture1DArray)
@@ -219,7 +219,7 @@
 0:42          'r00' ( temp float)
 0:42          textureLod ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DShadow)
-0:42              'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42              'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec2 ( temp 2-component vector of float)
 0:42              Constant:
@@ -233,7 +233,7 @@
 0:43          'r02' ( temp float)
 0:43          textureLod ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DShadow)
-0:43              'g_tTex1di4' ( uniform itexture1D)
+0:43              'g_tTex1di4' ( uniform itexture1DShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec2 ( temp 2-component vector of float)
 0:43              Constant:
@@ -247,7 +247,7 @@
 0:44          'r04' ( temp float)
 0:44          textureLod ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DShadow)
-0:44              'g_tTex1du4' ( uniform utexture1D)
+0:44              'g_tTex1du4' ( uniform utexture1DShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec2 ( temp 2-component vector of float)
 0:44              Constant:
@@ -261,7 +261,7 @@
 0:47          'r20' ( temp float)
 0:47          textureLod ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DShadow)
-0:47              'g_tTex2df4' ( uniform texture2D)
+0:47              'g_tTex2df4' ( uniform texture2DShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -276,7 +276,7 @@
 0:48          'r22' ( temp float)
 0:48          textureLod ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DShadow)
-0:48              'g_tTex2di4' ( uniform itexture2D)
+0:48              'g_tTex2di4' ( uniform itexture2DShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -291,7 +291,7 @@
 0:49          'r24' ( temp float)
 0:49          textureLod ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DShadow)
-0:49              'g_tTex2du4' ( uniform utexture2D)
+0:49              'g_tTex2du4' ( uniform utexture2DShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -306,7 +306,7 @@
 0:53          'r50' ( temp float)
 0:53          textureLod ( temp float)
 0:53            Construct combined texture-sampler ( temp samplerCubeShadow)
-0:53              'g_tTexcdf4' ( uniform textureCube)
+0:53              'g_tTexcdf4' ( uniform textureCubeShadow)
 0:53              'g_sSamp' (layout( binding=0) uniform sampler)
 0:53            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -322,7 +322,7 @@
 0:54          'r52' ( temp float)
 0:54          textureLod ( temp float)
 0:54            Construct combined texture-sampler ( temp isamplerCubeShadow)
-0:54              'g_tTexcdi4' ( uniform itextureCube)
+0:54              'g_tTexcdi4' ( uniform itextureCubeShadow)
 0:54              'g_sSamp' (layout( binding=0) uniform sampler)
 0:54            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -338,7 +338,7 @@
 0:55          'r54' ( temp float)
 0:55          textureLod ( temp float)
 0:55            Construct combined texture-sampler ( temp usamplerCubeShadow)
-0:55              'g_tTexcdu4' ( uniform utextureCube)
+0:55              'g_tTexcdu4' ( uniform utextureCubeShadow)
 0:55              'g_sSamp' (layout( binding=0) uniform sampler)
 0:55            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -389,18 +389,18 @@
 0:38              1 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout( binding=0) uniform sampler)
-0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:?     'g_tTex1di4' ( uniform itexture1D)
-0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:?     'g_tTex1di4' ( uniform itexture1DShadow)
+0:?     'g_tTex1du4' ( uniform utexture1DShadow)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
-0:?     'g_tTexcdf4' ( uniform textureCube)
-0:?     'g_tTexcdi4' ( uniform itextureCube)
-0:?     'g_tTexcdu4' ( uniform utextureCube)
+0:?     'g_tTexcdf4' ( uniform textureCubeShadow)
+0:?     'g_tTexcdi4' ( uniform itextureCubeShadow)
+0:?     'g_tTexcdu4' ( uniform utextureCubeShadow)
 0:?     'g_tTex1df4a' ( uniform texture1DArray)
 0:?     'g_tTex1di4a' ( uniform itexture1DArray)
 0:?     'g_tTex1du4a' ( uniform utexture1DArray)
@@ -414,15 +414,15 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 208
+// Generated by (magic number): 80002
+// Id's are bound by 199
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 165 169
+                              EntryPoint Fragment 4  "main" 156 160
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -433,64 +433,64 @@
                               Name 13  "r00"
                               Name 16  "g_tTex1df4"
                               Name 20  "g_sSamp"
-                              Name 32  "r02"
-                              Name 36  "g_tTex1di4"
-                              Name 45  "r04"
-                              Name 49  "g_tTex1du4"
-                              Name 58  "r20"
-                              Name 61  "g_tTex2df4"
-                              Name 75  "r22"
-                              Name 78  "g_tTex2di4"
-                              Name 89  "r24"
-                              Name 92  "g_tTex2du4"
-                              Name 103  "r50"
-                              Name 106  "g_tTexcdf4"
-                              Name 120  "r52"
-                              Name 123  "g_tTexcdi4"
-                              Name 135  "r54"
-                              Name 138  "g_tTexcdu4"
-                              Name 151  "psout"
-                              Name 162  "flattenTemp"
-                              Name 165  "@entryPointOutput.Color"
-                              Name 169  "@entryPointOutput.Depth"
-                              Name 174  "g_tTex3df4"
-                              Name 177  "g_tTex3di4"
-                              Name 180  "g_tTex3du4"
-                              Name 183  "g_tTex1df4a"
-                              Name 186  "g_tTex1di4a"
-                              Name 189  "g_tTex1du4a"
-                              Name 192  "g_tTex2df4a"
-                              Name 195  "g_tTex2di4a"
-                              Name 198  "g_tTex2du4a"
-                              Name 201  "g_tTexcdf4a"
-                              Name 204  "g_tTexcdi4a"
-                              Name 207  "g_tTexcdu4a"
+                              Name 31  "r02"
+                              Name 35  "g_tTex1di4"
+                              Name 43  "r04"
+                              Name 47  "g_tTex1du4"
+                              Name 55  "r20"
+                              Name 58  "g_tTex2df4"
+                              Name 71  "r22"
+                              Name 74  "g_tTex2di4"
+                              Name 84  "r24"
+                              Name 87  "g_tTex2du4"
+                              Name 97  "r50"
+                              Name 100  "g_tTexcdf4"
+                              Name 113  "r52"
+                              Name 116  "g_tTexcdi4"
+                              Name 127  "r54"
+                              Name 130  "g_tTexcdu4"
+                              Name 142  "psout"
+                              Name 153  "flattenTemp"
+                              Name 156  "@entryPointOutput.Color"
+                              Name 160  "@entryPointOutput.Depth"
+                              Name 165  "g_tTex3df4"
+                              Name 168  "g_tTex3di4"
+                              Name 171  "g_tTex3du4"
+                              Name 174  "g_tTex1df4a"
+                              Name 177  "g_tTex1di4a"
+                              Name 180  "g_tTex1du4a"
+                              Name 183  "g_tTex2df4a"
+                              Name 186  "g_tTex2di4a"
+                              Name 189  "g_tTex2du4a"
+                              Name 192  "g_tTexcdf4a"
+                              Name 195  "g_tTexcdi4a"
+                              Name 198  "g_tTexcdu4a"
                               Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 36(g_tTex1di4) DescriptorSet 0
-                              Decorate 49(g_tTex1du4) DescriptorSet 0
-                              Decorate 61(g_tTex2df4) DescriptorSet 0
-                              Decorate 78(g_tTex2di4) DescriptorSet 0
-                              Decorate 92(g_tTex2du4) DescriptorSet 0
-                              Decorate 106(g_tTexcdf4) DescriptorSet 0
-                              Decorate 123(g_tTexcdi4) DescriptorSet 0
-                              Decorate 138(g_tTexcdu4) DescriptorSet 0
-                              Decorate 165(@entryPointOutput.Color) Location 0
-                              Decorate 169(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 174(g_tTex3df4) DescriptorSet 0
-                              Decorate 177(g_tTex3di4) DescriptorSet 0
-                              Decorate 180(g_tTex3du4) DescriptorSet 0
-                              Decorate 183(g_tTex1df4a) DescriptorSet 0
-                              Decorate 186(g_tTex1di4a) DescriptorSet 0
-                              Decorate 189(g_tTex1du4a) DescriptorSet 0
-                              Decorate 192(g_tTex2df4a) DescriptorSet 0
-                              Decorate 195(g_tTex2di4a) DescriptorSet 0
-                              Decorate 198(g_tTex2du4a) DescriptorSet 0
-                              Decorate 201(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 204(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 207(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 58(g_tTex2df4) DescriptorSet 0
+                              Decorate 74(g_tTex2di4) DescriptorSet 0
+                              Decorate 87(g_tTex2du4) DescriptorSet 0
+                              Decorate 100(g_tTexcdf4) DescriptorSet 0
+                              Decorate 116(g_tTexcdi4) DescriptorSet 0
+                              Decorate 130(g_tTexcdu4) DescriptorSet 0
+                              Decorate 156(@entryPointOutput.Color) Location 0
+                              Decorate 160(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 165(g_tTex3df4) DescriptorSet 0
+                              Decorate 168(g_tTex3di4) DescriptorSet 0
+                              Decorate 171(g_tTex3du4) DescriptorSet 0
+                              Decorate 174(g_tTex1df4a) DescriptorSet 0
+                              Decorate 177(g_tTex1di4a) DescriptorSet 0
+                              Decorate 180(g_tTex1du4a) DescriptorSet 0
+                              Decorate 183(g_tTex2df4a) DescriptorSet 0
+                              Decorate 186(g_tTex2di4a) DescriptorSet 0
+                              Decorate 189(g_tTex2du4a) DescriptorSet 0
+                              Decorate 192(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 195(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 198(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -498,218 +498,209 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 6(float)
-              14:             TypeImage 6(float) 1D sampled format:Unknown
+              14:             TypeImage 6(float) 1D depth sampled format:Unknown
               15:             TypePointer UniformConstant 14
   16(g_tTex1df4):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
      20(g_sSamp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 1D depth sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:    6(float) Constant 1036831949
-              26:    6(float) Constant 1061158912
-              27:             TypeVector 6(float) 2
-              29:    6(float) Constant 0
-              33:             TypeInt 32 1
-              34:             TypeImage 33(int) 1D sampled format:Unknown
-              35:             TypePointer UniformConstant 34
-  36(g_tTex1di4):     35(ptr) Variable UniformConstant
-              39:             TypeImage 33(int) 1D depth sampled format:Unknown
-              40:             TypeSampledImage 39
-              46:             TypeInt 32 0
-              47:             TypeImage 46(int) 1D sampled format:Unknown
-              48:             TypePointer UniformConstant 47
-  49(g_tTex1du4):     48(ptr) Variable UniformConstant
-              52:             TypeImage 46(int) 1D depth sampled format:Unknown
-              53:             TypeSampledImage 52
-              59:             TypeImage 6(float) 2D sampled format:Unknown
-              60:             TypePointer UniformConstant 59
-  61(g_tTex2df4):     60(ptr) Variable UniformConstant
-              64:             TypeImage 6(float) 2D depth sampled format:Unknown
-              65:             TypeSampledImage 64
-              67:    6(float) Constant 1045220557
-              68:   27(fvec2) ConstantComposite 25 67
-              69:             TypeVector 6(float) 3
-              76:             TypeImage 33(int) 2D sampled format:Unknown
-              77:             TypePointer UniformConstant 76
-  78(g_tTex2di4):     77(ptr) Variable UniformConstant
-              81:             TypeImage 33(int) 2D depth sampled format:Unknown
-              82:             TypeSampledImage 81
-              90:             TypeImage 46(int) 2D sampled format:Unknown
-              91:             TypePointer UniformConstant 90
-  92(g_tTex2du4):     91(ptr) Variable UniformConstant
-              95:             TypeImage 46(int) 2D depth sampled format:Unknown
-              96:             TypeSampledImage 95
-             104:             TypeImage 6(float) Cube sampled format:Unknown
-             105:             TypePointer UniformConstant 104
- 106(g_tTexcdf4):    105(ptr) Variable UniformConstant
-             109:             TypeImage 6(float) Cube depth sampled format:Unknown
-             110:             TypeSampledImage 109
-             112:    6(float) Constant 1050253722
-             113:   69(fvec3) ConstantComposite 25 67 112
-             121:             TypeImage 33(int) Cube sampled format:Unknown
-             122:             TypePointer UniformConstant 121
- 123(g_tTexcdi4):    122(ptr) Variable UniformConstant
-             126:             TypeImage 33(int) Cube depth sampled format:Unknown
-             127:             TypeSampledImage 126
-             136:             TypeImage 46(int) Cube sampled format:Unknown
-             137:             TypePointer UniformConstant 136
- 138(g_tTexcdu4):    137(ptr) Variable UniformConstant
-             141:             TypeImage 46(int) Cube depth sampled format:Unknown
-             142:             TypeSampledImage 141
-             150:             TypePointer Function 8(PS_OUTPUT)
-             152:     33(int) Constant 0
-             153:    6(float) Constant 1065353216
-             154:    7(fvec4) ConstantComposite 153 153 153 153
-             155:             TypePointer Function 7(fvec4)
-             157:     33(int) Constant 1
-             164:             TypePointer Output 7(fvec4)
-165(@entryPointOutput.Color):    164(ptr) Variable Output
-             168:             TypePointer Output 6(float)
-169(@entryPointOutput.Depth):    168(ptr) Variable Output
-             172:             TypeImage 6(float) 3D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:    6(float) Constant 1036831949
+              25:    6(float) Constant 1061158912
+              26:             TypeVector 6(float) 2
+              28:    6(float) Constant 0
+              32:             TypeInt 32 1
+              33:             TypeImage 32(int) 1D depth sampled format:Unknown
+              34:             TypePointer UniformConstant 33
+  35(g_tTex1di4):     34(ptr) Variable UniformConstant
+              38:             TypeSampledImage 33
+              44:             TypeInt 32 0
+              45:             TypeImage 44(int) 1D depth sampled format:Unknown
+              46:             TypePointer UniformConstant 45
+  47(g_tTex1du4):     46(ptr) Variable UniformConstant
+              50:             TypeSampledImage 45
+              56:             TypeImage 6(float) 2D depth sampled format:Unknown
+              57:             TypePointer UniformConstant 56
+  58(g_tTex2df4):     57(ptr) Variable UniformConstant
+              61:             TypeSampledImage 56
+              63:    6(float) Constant 1045220557
+              64:   26(fvec2) ConstantComposite 24 63
+              65:             TypeVector 6(float) 3
+              72:             TypeImage 32(int) 2D depth sampled format:Unknown
+              73:             TypePointer UniformConstant 72
+  74(g_tTex2di4):     73(ptr) Variable UniformConstant
+              77:             TypeSampledImage 72
+              85:             TypeImage 44(int) 2D depth sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+  87(g_tTex2du4):     86(ptr) Variable UniformConstant
+              90:             TypeSampledImage 85
+              98:             TypeImage 6(float) Cube depth sampled format:Unknown
+              99:             TypePointer UniformConstant 98
+ 100(g_tTexcdf4):     99(ptr) Variable UniformConstant
+             103:             TypeSampledImage 98
+             105:    6(float) Constant 1050253722
+             106:   65(fvec3) ConstantComposite 24 63 105
+             114:             TypeImage 32(int) Cube depth sampled format:Unknown
+             115:             TypePointer UniformConstant 114
+ 116(g_tTexcdi4):    115(ptr) Variable UniformConstant
+             119:             TypeSampledImage 114
+             128:             TypeImage 44(int) Cube depth sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+ 130(g_tTexcdu4):    129(ptr) Variable UniformConstant
+             133:             TypeSampledImage 128
+             141:             TypePointer Function 8(PS_OUTPUT)
+             143:     32(int) Constant 0
+             144:    6(float) Constant 1065353216
+             145:    7(fvec4) ConstantComposite 144 144 144 144
+             146:             TypePointer Function 7(fvec4)
+             148:     32(int) Constant 1
+             155:             TypePointer Output 7(fvec4)
+156(@entryPointOutput.Color):    155(ptr) Variable Output
+             159:             TypePointer Output 6(float)
+160(@entryPointOutput.Depth):    159(ptr) Variable Output
+             163:             TypeImage 6(float) 3D sampled format:Unknown
+             164:             TypePointer UniformConstant 163
+ 165(g_tTex3df4):    164(ptr) Variable UniformConstant
+             166:             TypeImage 32(int) 3D sampled format:Unknown
+             167:             TypePointer UniformConstant 166
+ 168(g_tTex3di4):    167(ptr) Variable UniformConstant
+             169:             TypeImage 44(int) 3D sampled format:Unknown
+             170:             TypePointer UniformConstant 169
+ 171(g_tTex3du4):    170(ptr) Variable UniformConstant
+             172:             TypeImage 6(float) 1D array sampled format:Unknown
              173:             TypePointer UniformConstant 172
- 174(g_tTex3df4):    173(ptr) Variable UniformConstant
-             175:             TypeImage 33(int) 3D sampled format:Unknown
+174(g_tTex1df4a):    173(ptr) Variable UniformConstant
+             175:             TypeImage 32(int) 1D array sampled format:Unknown
              176:             TypePointer UniformConstant 175
- 177(g_tTex3di4):    176(ptr) Variable UniformConstant
-             178:             TypeImage 46(int) 3D sampled format:Unknown
+177(g_tTex1di4a):    176(ptr) Variable UniformConstant
+             178:             TypeImage 44(int) 1D array sampled format:Unknown
              179:             TypePointer UniformConstant 178
- 180(g_tTex3du4):    179(ptr) Variable UniformConstant
-             181:             TypeImage 6(float) 1D array sampled format:Unknown
+180(g_tTex1du4a):    179(ptr) Variable UniformConstant
+             181:             TypeImage 6(float) 2D array sampled format:Unknown
              182:             TypePointer UniformConstant 181
-183(g_tTex1df4a):    182(ptr) Variable UniformConstant
-             184:             TypeImage 33(int) 1D array sampled format:Unknown
+183(g_tTex2df4a):    182(ptr) Variable UniformConstant
+             184:             TypeImage 32(int) 2D array sampled format:Unknown
              185:             TypePointer UniformConstant 184
-186(g_tTex1di4a):    185(ptr) Variable UniformConstant
-             187:             TypeImage 46(int) 1D array sampled format:Unknown
+186(g_tTex2di4a):    185(ptr) Variable UniformConstant
+             187:             TypeImage 44(int) 2D array sampled format:Unknown
              188:             TypePointer UniformConstant 187
-189(g_tTex1du4a):    188(ptr) Variable UniformConstant
-             190:             TypeImage 6(float) 2D array sampled format:Unknown
+189(g_tTex2du4a):    188(ptr) Variable UniformConstant
+             190:             TypeImage 6(float) Cube array sampled format:Unknown
              191:             TypePointer UniformConstant 190
-192(g_tTex2df4a):    191(ptr) Variable UniformConstant
-             193:             TypeImage 33(int) 2D array sampled format:Unknown
+192(g_tTexcdf4a):    191(ptr) Variable UniformConstant
+             193:             TypeImage 32(int) Cube array sampled format:Unknown
              194:             TypePointer UniformConstant 193
-195(g_tTex2di4a):    194(ptr) Variable UniformConstant
-             196:             TypeImage 46(int) 2D array sampled format:Unknown
+195(g_tTexcdi4a):    194(ptr) Variable UniformConstant
+             196:             TypeImage 44(int) Cube array sampled format:Unknown
              197:             TypePointer UniformConstant 196
-198(g_tTex2du4a):    197(ptr) Variable UniformConstant
-             199:             TypeImage 6(float) Cube array sampled format:Unknown
-             200:             TypePointer UniformConstant 199
-201(g_tTexcdf4a):    200(ptr) Variable UniformConstant
-             202:             TypeImage 33(int) Cube array sampled format:Unknown
-             203:             TypePointer UniformConstant 202
-204(g_tTexcdi4a):    203(ptr) Variable UniformConstant
-             205:             TypeImage 46(int) Cube array sampled format:Unknown
-             206:             TypePointer UniformConstant 205
-207(g_tTexcdu4a):    206(ptr) Variable UniformConstant
+198(g_tTexcdu4a):    197(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-162(flattenTemp):    150(ptr) Variable Function
-             163:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 162(flattenTemp) 163
-             166:    155(ptr) AccessChain 162(flattenTemp) 152
-             167:    7(fvec4) Load 166
-                              Store 165(@entryPointOutput.Color) 167
-             170:     12(ptr) AccessChain 162(flattenTemp) 157
-             171:    6(float) Load 170
-                              Store 169(@entryPointOutput.Depth) 171
+153(flattenTemp):    141(ptr) Variable Function
+             154:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 153(flattenTemp) 154
+             157:    146(ptr) AccessChain 153(flattenTemp) 143
+             158:    7(fvec4) Load 157
+                              Store 156(@entryPointOutput.Color) 158
+             161:     12(ptr) AccessChain 153(flattenTemp) 148
+             162:    6(float) Load 161
+                              Store 160(@entryPointOutput.Depth) 162
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
          13(r00):     12(ptr) Variable Function
-         32(r02):     12(ptr) Variable Function
-         45(r04):     12(ptr) Variable Function
-         58(r20):     12(ptr) Variable Function
-         75(r22):     12(ptr) Variable Function
-         89(r24):     12(ptr) Variable Function
-        103(r50):     12(ptr) Variable Function
-        120(r52):     12(ptr) Variable Function
-        135(r54):     12(ptr) Variable Function
-      151(psout):    150(ptr) Variable Function
+         31(r02):     12(ptr) Variable Function
+         43(r04):     12(ptr) Variable Function
+         55(r20):     12(ptr) Variable Function
+         71(r22):     12(ptr) Variable Function
+         84(r24):     12(ptr) Variable Function
+         97(r50):     12(ptr) Variable Function
+        113(r52):     12(ptr) Variable Function
+        127(r54):     12(ptr) Variable Function
+      142(psout):    141(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4)
               21:          18 Load 20(g_sSamp)
-              24:          23 SampledImage 17 21
-              28:   27(fvec2) CompositeConstruct 25 26
-              30:    6(float) CompositeExtract 28 1
-              31:    6(float) ImageSampleDrefExplicitLod 24 28 30 Lod 29
-                              Store 13(r00) 31
-              37:          34 Load 36(g_tTex1di4)
-              38:          18 Load 20(g_sSamp)
-              41:          40 SampledImage 37 38
-              42:   27(fvec2) CompositeConstruct 25 26
-              43:    6(float) CompositeExtract 42 1
-              44:    6(float) ImageSampleDrefExplicitLod 41 42 43 Lod 29
-                              Store 32(r02) 44
-              50:          47 Load 49(g_tTex1du4)
-              51:          18 Load 20(g_sSamp)
-              54:          53 SampledImage 50 51
-              55:   27(fvec2) CompositeConstruct 25 26
-              56:    6(float) CompositeExtract 55 1
-              57:    6(float) ImageSampleDrefExplicitLod 54 55 56 Lod 29
-                              Store 45(r04) 57
-              62:          59 Load 61(g_tTex2df4)
-              63:          18 Load 20(g_sSamp)
-              66:          65 SampledImage 62 63
-              70:    6(float) CompositeExtract 68 0
-              71:    6(float) CompositeExtract 68 1
-              72:   69(fvec3) CompositeConstruct 70 71 26
-              73:    6(float) CompositeExtract 72 2
-              74:    6(float) ImageSampleDrefExplicitLod 66 72 73 Lod 29
-                              Store 58(r20) 74
-              79:          76 Load 78(g_tTex2di4)
-              80:          18 Load 20(g_sSamp)
-              83:          82 SampledImage 79 80
-              84:    6(float) CompositeExtract 68 0
-              85:    6(float) CompositeExtract 68 1
-              86:   69(fvec3) CompositeConstruct 84 85 26
-              87:    6(float) CompositeExtract 86 2
-              88:    6(float) ImageSampleDrefExplicitLod 83 86 87 Lod 29
-                              Store 75(r22) 88
-              93:          90 Load 92(g_tTex2du4)
-              94:          18 Load 20(g_sSamp)
-              97:          96 SampledImage 93 94
-              98:    6(float) CompositeExtract 68 0
-              99:    6(float) CompositeExtract 68 1
-             100:   69(fvec3) CompositeConstruct 98 99 26
-             101:    6(float) CompositeExtract 100 2
-             102:    6(float) ImageSampleDrefExplicitLod 97 100 101 Lod 29
-                              Store 89(r24) 102
-             107:         104 Load 106(g_tTexcdf4)
-             108:          18 Load 20(g_sSamp)
-             111:         110 SampledImage 107 108
-             114:    6(float) CompositeExtract 113 0
-             115:    6(float) CompositeExtract 113 1
-             116:    6(float) CompositeExtract 113 2
-             117:    7(fvec4) CompositeConstruct 114 115 116 26
-             118:    6(float) CompositeExtract 117 3
-             119:    6(float) ImageSampleDrefExplicitLod 111 117 118 Lod 29
-                              Store 103(r50) 119
-             124:         121 Load 123(g_tTexcdi4)
-             125:          18 Load 20(g_sSamp)
-             128:         127 SampledImage 124 125
-             129:    6(float) CompositeExtract 113 0
-             130:    6(float) CompositeExtract 113 1
-             131:    6(float) CompositeExtract 113 2
-             132:    7(fvec4) CompositeConstruct 129 130 131 26
-             133:    6(float) CompositeExtract 132 3
-             134:    6(float) ImageSampleDrefExplicitLod 128 132 133 Lod 29
-                              Store 120(r52) 134
-             139:         136 Load 138(g_tTexcdu4)
-             140:          18 Load 20(g_sSamp)
-             143:         142 SampledImage 139 140
-             144:    6(float) CompositeExtract 113 0
-             145:    6(float) CompositeExtract 113 1
-             146:    6(float) CompositeExtract 113 2
-             147:    7(fvec4) CompositeConstruct 144 145 146 26
-             148:    6(float) CompositeExtract 147 3
-             149:    6(float) ImageSampleDrefExplicitLod 143 147 148 Lod 29
-                              Store 135(r54) 149
-             156:    155(ptr) AccessChain 151(psout) 152
-                              Store 156 154
-             158:     12(ptr) AccessChain 151(psout) 157
-                              Store 158 153
-             159:8(PS_OUTPUT) Load 151(psout)
-                              ReturnValue 159
+              23:          22 SampledImage 17 21
+              27:   26(fvec2) CompositeConstruct 24 25
+              29:    6(float) CompositeExtract 27 1
+              30:    6(float) ImageSampleDrefExplicitLod 23 27 29 Lod 28
+                              Store 13(r00) 30
+              36:          33 Load 35(g_tTex1di4)
+              37:          18 Load 20(g_sSamp)
+              39:          38 SampledImage 36 37
+              40:   26(fvec2) CompositeConstruct 24 25
+              41:    6(float) CompositeExtract 40 1
+              42:    6(float) ImageSampleDrefExplicitLod 39 40 41 Lod 28
+                              Store 31(r02) 42
+              48:          45 Load 47(g_tTex1du4)
+              49:          18 Load 20(g_sSamp)
+              51:          50 SampledImage 48 49
+              52:   26(fvec2) CompositeConstruct 24 25
+              53:    6(float) CompositeExtract 52 1
+              54:    6(float) ImageSampleDrefExplicitLod 51 52 53 Lod 28
+                              Store 43(r04) 54
+              59:          56 Load 58(g_tTex2df4)
+              60:          18 Load 20(g_sSamp)
+              62:          61 SampledImage 59 60
+              66:    6(float) CompositeExtract 64 0
+              67:    6(float) CompositeExtract 64 1
+              68:   65(fvec3) CompositeConstruct 66 67 25
+              69:    6(float) CompositeExtract 68 2
+              70:    6(float) ImageSampleDrefExplicitLod 62 68 69 Lod 28
+                              Store 55(r20) 70
+              75:          72 Load 74(g_tTex2di4)
+              76:          18 Load 20(g_sSamp)
+              78:          77 SampledImage 75 76
+              79:    6(float) CompositeExtract 64 0
+              80:    6(float) CompositeExtract 64 1
+              81:   65(fvec3) CompositeConstruct 79 80 25
+              82:    6(float) CompositeExtract 81 2
+              83:    6(float) ImageSampleDrefExplicitLod 78 81 82 Lod 28
+                              Store 71(r22) 83
+              88:          85 Load 87(g_tTex2du4)
+              89:          18 Load 20(g_sSamp)
+              91:          90 SampledImage 88 89
+              92:    6(float) CompositeExtract 64 0
+              93:    6(float) CompositeExtract 64 1
+              94:   65(fvec3) CompositeConstruct 92 93 25
+              95:    6(float) CompositeExtract 94 2
+              96:    6(float) ImageSampleDrefExplicitLod 91 94 95 Lod 28
+                              Store 84(r24) 96
+             101:          98 Load 100(g_tTexcdf4)
+             102:          18 Load 20(g_sSamp)
+             104:         103 SampledImage 101 102
+             107:    6(float) CompositeExtract 106 0
+             108:    6(float) CompositeExtract 106 1
+             109:    6(float) CompositeExtract 106 2
+             110:    7(fvec4) CompositeConstruct 107 108 109 25
+             111:    6(float) CompositeExtract 110 3
+             112:    6(float) ImageSampleDrefExplicitLod 104 110 111 Lod 28
+                              Store 97(r50) 112
+             117:         114 Load 116(g_tTexcdi4)
+             118:          18 Load 20(g_sSamp)
+             120:         119 SampledImage 117 118
+             121:    6(float) CompositeExtract 106 0
+             122:    6(float) CompositeExtract 106 1
+             123:    6(float) CompositeExtract 106 2
+             124:    7(fvec4) CompositeConstruct 121 122 123 25
+             125:    6(float) CompositeExtract 124 3
+             126:    6(float) ImageSampleDrefExplicitLod 120 124 125 Lod 28
+                              Store 113(r52) 126
+             131:         128 Load 130(g_tTexcdu4)
+             132:          18 Load 20(g_sSamp)
+             134:         133 SampledImage 131 132
+             135:    6(float) CompositeExtract 106 0
+             136:    6(float) CompositeExtract 106 1
+             137:    6(float) CompositeExtract 106 2
+             138:    7(fvec4) CompositeConstruct 135 136 137 25
+             139:    6(float) CompositeExtract 138 3
+             140:    6(float) ImageSampleDrefExplicitLod 134 138 139 Lod 28
+                              Store 127(r54) 140
+             147:    146(ptr) AccessChain 142(psout) 143
+                              Store 147 145
+             149:     12(ptr) AccessChain 142(psout) 148
+                              Store 149 144
+             150:8(PS_OUTPUT) Load 142(psout)
+                              ReturnValue 150
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index ad5225c..141f1f4 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -10,7 +10,7 @@
 0:42          'r01' ( temp float)
 0:42          textureLodOffset ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DShadow)
-0:42              'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42              'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec2 ( temp 2-component vector of float)
 0:42              Constant:
@@ -26,7 +26,7 @@
 0:43          'r03' ( temp float)
 0:43          textureLodOffset ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DShadow)
-0:43              'g_tTex1di4' ( uniform itexture1D)
+0:43              'g_tTex1di4' ( uniform itexture1DShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec2 ( temp 2-component vector of float)
 0:43              Constant:
@@ -42,7 +42,7 @@
 0:44          'r05' ( temp float)
 0:44          textureLodOffset ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DShadow)
-0:44              'g_tTex1du4' ( uniform utexture1D)
+0:44              'g_tTex1du4' ( uniform utexture1DShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec2 ( temp 2-component vector of float)
 0:44              Constant:
@@ -58,7 +58,7 @@
 0:47          'r21' ( temp float)
 0:47          textureLodOffset ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DShadow)
-0:47              'g_tTex2df4' ( uniform texture2D)
+0:47              'g_tTex2df4' ( uniform texture2DShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -76,7 +76,7 @@
 0:48          'r23' ( temp float)
 0:48          textureLodOffset ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DShadow)
-0:48              'g_tTex2di4' ( uniform itexture2D)
+0:48              'g_tTex2di4' ( uniform itexture2DShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -94,7 +94,7 @@
 0:49          'r25' ( temp float)
 0:49          textureLodOffset ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DShadow)
-0:49              'g_tTex2du4' ( uniform utexture2D)
+0:49              'g_tTex2du4' ( uniform utexture2DShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -147,12 +147,12 @@
 0:38              1 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout( binding=0) uniform sampler)
-0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:?     'g_tTex1di4' ( uniform itexture1D)
-0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:?     'g_tTex1di4' ( uniform itexture1DShadow)
+0:?     'g_tTex1du4' ( uniform utexture1DShadow)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
@@ -186,7 +186,7 @@
 0:42          'r01' ( temp float)
 0:42          textureLodOffset ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DShadow)
-0:42              'g_tTex1df4' (layout( binding=0) uniform texture1D)
+0:42              'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec2 ( temp 2-component vector of float)
 0:42              Constant:
@@ -202,7 +202,7 @@
 0:43          'r03' ( temp float)
 0:43          textureLodOffset ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DShadow)
-0:43              'g_tTex1di4' ( uniform itexture1D)
+0:43              'g_tTex1di4' ( uniform itexture1DShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec2 ( temp 2-component vector of float)
 0:43              Constant:
@@ -218,7 +218,7 @@
 0:44          'r05' ( temp float)
 0:44          textureLodOffset ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DShadow)
-0:44              'g_tTex1du4' ( uniform utexture1D)
+0:44              'g_tTex1du4' ( uniform utexture1DShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec2 ( temp 2-component vector of float)
 0:44              Constant:
@@ -234,7 +234,7 @@
 0:47          'r21' ( temp float)
 0:47          textureLodOffset ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DShadow)
-0:47              'g_tTex2df4' ( uniform texture2D)
+0:47              'g_tTex2df4' ( uniform texture2DShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -252,7 +252,7 @@
 0:48          'r23' ( temp float)
 0:48          textureLodOffset ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DShadow)
-0:48              'g_tTex2di4' ( uniform itexture2D)
+0:48              'g_tTex2di4' ( uniform itexture2DShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -270,7 +270,7 @@
 0:49          'r25' ( temp float)
 0:49          textureLodOffset ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DShadow)
-0:49              'g_tTex2du4' ( uniform utexture2D)
+0:49              'g_tTex2du4' ( uniform utexture2DShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -323,12 +323,12 @@
 0:38              1 (const int)
 0:?   Linker Objects
 0:?     'g_sSamp' (layout( binding=0) uniform sampler)
-0:?     'g_tTex1df4' (layout( binding=0) uniform texture1D)
-0:?     'g_tTex1di4' ( uniform itexture1D)
-0:?     'g_tTex1du4' ( uniform utexture1D)
-0:?     'g_tTex2df4' ( uniform texture2D)
-0:?     'g_tTex2di4' ( uniform itexture2D)
-0:?     'g_tTex2du4' ( uniform utexture2D)
+0:?     'g_tTex1df4' (layout( binding=0) uniform texture1DShadow)
+0:?     'g_tTex1di4' ( uniform itexture1DShadow)
+0:?     'g_tTex1du4' ( uniform utexture1DShadow)
+0:?     'g_tTex2df4' ( uniform texture2DShadow)
+0:?     'g_tTex2di4' ( uniform itexture2DShadow)
+0:?     'g_tTex2du4' ( uniform utexture2DShadow)
 0:?     'g_tTex3df4' ( uniform texture3D)
 0:?     'g_tTex3di4' ( uniform itexture3D)
 0:?     'g_tTex3du4' ( uniform utexture3D)
@@ -348,15 +348,15 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 174
+// Generated by (magic number): 80002
+// Id's are bound by 168
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 122 126
+                              EntryPoint Fragment 4  "main" 116 120
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -367,61 +367,61 @@
                               Name 13  "r01"
                               Name 16  "g_tTex1df4"
                               Name 20  "g_sSamp"
-                              Name 34  "r03"
-                              Name 37  "g_tTex1di4"
-                              Name 46  "r05"
-                              Name 50  "g_tTex1du4"
-                              Name 59  "r21"
-                              Name 62  "g_tTex2df4"
-                              Name 79  "r23"
-                              Name 82  "g_tTex2di4"
-                              Name 93  "r25"
-                              Name 96  "g_tTex2du4"
-                              Name 108  "psout"
-                              Name 119  "flattenTemp"
-                              Name 122  "@entryPointOutput.Color"
-                              Name 126  "@entryPointOutput.Depth"
-                              Name 131  "g_tTex3df4"
-                              Name 134  "g_tTex3di4"
-                              Name 137  "g_tTex3du4"
-                              Name 140  "g_tTexcdf4"
-                              Name 143  "g_tTexcdi4"
-                              Name 146  "g_tTexcdu4"
-                              Name 149  "g_tTex1df4a"
-                              Name 152  "g_tTex1di4a"
-                              Name 155  "g_tTex1du4a"
-                              Name 158  "g_tTex2df4a"
-                              Name 161  "g_tTex2di4a"
-                              Name 164  "g_tTex2du4a"
-                              Name 167  "g_tTexcdf4a"
-                              Name 170  "g_tTexcdi4a"
-                              Name 173  "g_tTexcdu4a"
+                              Name 33  "r03"
+                              Name 36  "g_tTex1di4"
+                              Name 44  "r05"
+                              Name 48  "g_tTex1du4"
+                              Name 56  "r21"
+                              Name 59  "g_tTex2df4"
+                              Name 75  "r23"
+                              Name 78  "g_tTex2di4"
+                              Name 88  "r25"
+                              Name 91  "g_tTex2du4"
+                              Name 102  "psout"
+                              Name 113  "flattenTemp"
+                              Name 116  "@entryPointOutput.Color"
+                              Name 120  "@entryPointOutput.Depth"
+                              Name 125  "g_tTex3df4"
+                              Name 128  "g_tTex3di4"
+                              Name 131  "g_tTex3du4"
+                              Name 134  "g_tTexcdf4"
+                              Name 137  "g_tTexcdi4"
+                              Name 140  "g_tTexcdu4"
+                              Name 143  "g_tTex1df4a"
+                              Name 146  "g_tTex1di4a"
+                              Name 149  "g_tTex1du4a"
+                              Name 152  "g_tTex2df4a"
+                              Name 155  "g_tTex2di4a"
+                              Name 158  "g_tTex2du4a"
+                              Name 161  "g_tTexcdf4a"
+                              Name 164  "g_tTexcdi4a"
+                              Name 167  "g_tTexcdu4a"
                               Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 37(g_tTex1di4) DescriptorSet 0
-                              Decorate 50(g_tTex1du4) DescriptorSet 0
-                              Decorate 62(g_tTex2df4) DescriptorSet 0
-                              Decorate 82(g_tTex2di4) DescriptorSet 0
-                              Decorate 96(g_tTex2du4) DescriptorSet 0
-                              Decorate 122(@entryPointOutput.Color) Location 0
-                              Decorate 126(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 131(g_tTex3df4) DescriptorSet 0
-                              Decorate 134(g_tTex3di4) DescriptorSet 0
-                              Decorate 137(g_tTex3du4) DescriptorSet 0
-                              Decorate 140(g_tTexcdf4) DescriptorSet 0
-                              Decorate 143(g_tTexcdi4) DescriptorSet 0
-                              Decorate 146(g_tTexcdu4) DescriptorSet 0
-                              Decorate 149(g_tTex1df4a) DescriptorSet 0
-                              Decorate 152(g_tTex1di4a) DescriptorSet 0
-                              Decorate 155(g_tTex1du4a) DescriptorSet 0
-                              Decorate 158(g_tTex2df4a) DescriptorSet 0
-                              Decorate 161(g_tTex2di4a) DescriptorSet 0
-                              Decorate 164(g_tTex2du4a) DescriptorSet 0
-                              Decorate 167(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 170(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 173(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 36(g_tTex1di4) DescriptorSet 0
+                              Decorate 48(g_tTex1du4) DescriptorSet 0
+                              Decorate 59(g_tTex2df4) DescriptorSet 0
+                              Decorate 78(g_tTex2di4) DescriptorSet 0
+                              Decorate 91(g_tTex2du4) DescriptorSet 0
+                              Decorate 116(@entryPointOutput.Color) Location 0
+                              Decorate 120(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 125(g_tTex3df4) DescriptorSet 0
+                              Decorate 128(g_tTex3di4) DescriptorSet 0
+                              Decorate 131(g_tTex3du4) DescriptorSet 0
+                              Decorate 134(g_tTexcdf4) DescriptorSet 0
+                              Decorate 137(g_tTexcdi4) DescriptorSet 0
+                              Decorate 140(g_tTexcdu4) DescriptorSet 0
+                              Decorate 143(g_tTex1df4a) DescriptorSet 0
+                              Decorate 146(g_tTex1di4a) DescriptorSet 0
+                              Decorate 149(g_tTex1du4a) DescriptorSet 0
+                              Decorate 152(g_tTex2df4a) DescriptorSet 0
+                              Decorate 155(g_tTex2di4a) DescriptorSet 0
+                              Decorate 158(g_tTex2du4a) DescriptorSet 0
+                              Decorate 161(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 164(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 167(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -429,181 +429,175 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 6(float)
-              14:             TypeImage 6(float) 1D sampled format:Unknown
+              14:             TypeImage 6(float) 1D depth sampled format:Unknown
               15:             TypePointer UniformConstant 14
   16(g_tTex1df4):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
      20(g_sSamp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 1D depth sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:    6(float) Constant 1036831949
-              26:    6(float) Constant 1061158912
-              27:             TypeVector 6(float) 2
-              29:    6(float) Constant 0
-              30:             TypeInt 32 1
-              31:     30(int) Constant 2
-              35:             TypeImage 30(int) 1D sampled format:Unknown
-              36:             TypePointer UniformConstant 35
-  37(g_tTex1di4):     36(ptr) Variable UniformConstant
-              40:             TypeImage 30(int) 1D depth sampled format:Unknown
-              41:             TypeSampledImage 40
-              47:             TypeInt 32 0
-              48:             TypeImage 47(int) 1D sampled format:Unknown
-              49:             TypePointer UniformConstant 48
-  50(g_tTex1du4):     49(ptr) Variable UniformConstant
-              53:             TypeImage 47(int) 1D depth sampled format:Unknown
-              54:             TypeSampledImage 53
-              60:             TypeImage 6(float) 2D sampled format:Unknown
-              61:             TypePointer UniformConstant 60
-  62(g_tTex2df4):     61(ptr) Variable UniformConstant
-              65:             TypeImage 6(float) 2D depth sampled format:Unknown
-              66:             TypeSampledImage 65
-              68:    6(float) Constant 1045220557
-              69:   27(fvec2) ConstantComposite 25 68
-              70:             TypeVector 6(float) 3
-              74:             TypeVector 30(int) 2
-              75:     30(int) Constant 3
-              76:   74(ivec2) ConstantComposite 31 75
-              80:             TypeImage 30(int) 2D sampled format:Unknown
-              81:             TypePointer UniformConstant 80
-  82(g_tTex2di4):     81(ptr) Variable UniformConstant
-              85:             TypeImage 30(int) 2D depth sampled format:Unknown
-              86:             TypeSampledImage 85
-              94:             TypeImage 47(int) 2D sampled format:Unknown
-              95:             TypePointer UniformConstant 94
-  96(g_tTex2du4):     95(ptr) Variable UniformConstant
-              99:             TypeImage 47(int) 2D depth sampled format:Unknown
-             100:             TypeSampledImage 99
-             107:             TypePointer Function 8(PS_OUTPUT)
-             109:     30(int) Constant 0
-             110:    6(float) Constant 1065353216
-             111:    7(fvec4) ConstantComposite 110 110 110 110
-             112:             TypePointer Function 7(fvec4)
-             114:     30(int) Constant 1
-             121:             TypePointer Output 7(fvec4)
-122(@entryPointOutput.Color):    121(ptr) Variable Output
-             125:             TypePointer Output 6(float)
-126(@entryPointOutput.Depth):    125(ptr) Variable Output
-             129:             TypeImage 6(float) 3D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:    6(float) Constant 1036831949
+              25:    6(float) Constant 1061158912
+              26:             TypeVector 6(float) 2
+              28:    6(float) Constant 0
+              29:             TypeInt 32 1
+              30:     29(int) Constant 2
+              34:             TypeImage 29(int) 1D depth sampled format:Unknown
+              35:             TypePointer UniformConstant 34
+  36(g_tTex1di4):     35(ptr) Variable UniformConstant
+              39:             TypeSampledImage 34
+              45:             TypeInt 32 0
+              46:             TypeImage 45(int) 1D depth sampled format:Unknown
+              47:             TypePointer UniformConstant 46
+  48(g_tTex1du4):     47(ptr) Variable UniformConstant
+              51:             TypeSampledImage 46
+              57:             TypeImage 6(float) 2D depth sampled format:Unknown
+              58:             TypePointer UniformConstant 57
+  59(g_tTex2df4):     58(ptr) Variable UniformConstant
+              62:             TypeSampledImage 57
+              64:    6(float) Constant 1045220557
+              65:   26(fvec2) ConstantComposite 24 64
+              66:             TypeVector 6(float) 3
+              70:             TypeVector 29(int) 2
+              71:     29(int) Constant 3
+              72:   70(ivec2) ConstantComposite 30 71
+              76:             TypeImage 29(int) 2D depth sampled format:Unknown
+              77:             TypePointer UniformConstant 76
+  78(g_tTex2di4):     77(ptr) Variable UniformConstant
+              81:             TypeSampledImage 76
+              89:             TypeImage 45(int) 2D depth sampled format:Unknown
+              90:             TypePointer UniformConstant 89
+  91(g_tTex2du4):     90(ptr) Variable UniformConstant
+              94:             TypeSampledImage 89
+             101:             TypePointer Function 8(PS_OUTPUT)
+             103:     29(int) Constant 0
+             104:    6(float) Constant 1065353216
+             105:    7(fvec4) ConstantComposite 104 104 104 104
+             106:             TypePointer Function 7(fvec4)
+             108:     29(int) Constant 1
+             115:             TypePointer Output 7(fvec4)
+116(@entryPointOutput.Color):    115(ptr) Variable Output
+             119:             TypePointer Output 6(float)
+120(@entryPointOutput.Depth):    119(ptr) Variable Output
+             123:             TypeImage 6(float) 3D sampled format:Unknown
+             124:             TypePointer UniformConstant 123
+ 125(g_tTex3df4):    124(ptr) Variable UniformConstant
+             126:             TypeImage 29(int) 3D sampled format:Unknown
+             127:             TypePointer UniformConstant 126
+ 128(g_tTex3di4):    127(ptr) Variable UniformConstant
+             129:             TypeImage 45(int) 3D sampled format:Unknown
              130:             TypePointer UniformConstant 129
- 131(g_tTex3df4):    130(ptr) Variable UniformConstant
-             132:             TypeImage 30(int) 3D sampled format:Unknown
+ 131(g_tTex3du4):    130(ptr) Variable UniformConstant
+             132:             TypeImage 6(float) Cube sampled format:Unknown
              133:             TypePointer UniformConstant 132
- 134(g_tTex3di4):    133(ptr) Variable UniformConstant
-             135:             TypeImage 47(int) 3D sampled format:Unknown
+ 134(g_tTexcdf4):    133(ptr) Variable UniformConstant
+             135:             TypeImage 29(int) Cube sampled format:Unknown
              136:             TypePointer UniformConstant 135
- 137(g_tTex3du4):    136(ptr) Variable UniformConstant
-             138:             TypeImage 6(float) Cube sampled format:Unknown
+ 137(g_tTexcdi4):    136(ptr) Variable UniformConstant
+             138:             TypeImage 45(int) Cube sampled format:Unknown
              139:             TypePointer UniformConstant 138
- 140(g_tTexcdf4):    139(ptr) Variable UniformConstant
-             141:             TypeImage 30(int) Cube sampled format:Unknown
+ 140(g_tTexcdu4):    139(ptr) Variable UniformConstant
+             141:             TypeImage 6(float) 1D array sampled format:Unknown
              142:             TypePointer UniformConstant 141
- 143(g_tTexcdi4):    142(ptr) Variable UniformConstant
-             144:             TypeImage 47(int) Cube sampled format:Unknown
+143(g_tTex1df4a):    142(ptr) Variable UniformConstant
+             144:             TypeImage 29(int) 1D array sampled format:Unknown
              145:             TypePointer UniformConstant 144
- 146(g_tTexcdu4):    145(ptr) Variable UniformConstant
-             147:             TypeImage 6(float) 1D array sampled format:Unknown
+146(g_tTex1di4a):    145(ptr) Variable UniformConstant
+             147:             TypeImage 45(int) 1D array sampled format:Unknown
              148:             TypePointer UniformConstant 147
-149(g_tTex1df4a):    148(ptr) Variable UniformConstant
-             150:             TypeImage 30(int) 1D array sampled format:Unknown
+149(g_tTex1du4a):    148(ptr) Variable UniformConstant
+             150:             TypeImage 6(float) 2D array sampled format:Unknown
              151:             TypePointer UniformConstant 150
-152(g_tTex1di4a):    151(ptr) Variable UniformConstant
-             153:             TypeImage 47(int) 1D array sampled format:Unknown
+152(g_tTex2df4a):    151(ptr) Variable UniformConstant
+             153:             TypeImage 29(int) 2D array sampled format:Unknown
              154:             TypePointer UniformConstant 153
-155(g_tTex1du4a):    154(ptr) Variable UniformConstant
-             156:             TypeImage 6(float) 2D array sampled format:Unknown
+155(g_tTex2di4a):    154(ptr) Variable UniformConstant
+             156:             TypeImage 45(int) 2D array sampled format:Unknown
              157:             TypePointer UniformConstant 156
-158(g_tTex2df4a):    157(ptr) Variable UniformConstant
-             159:             TypeImage 30(int) 2D array sampled format:Unknown
+158(g_tTex2du4a):    157(ptr) Variable UniformConstant
+             159:             TypeImage 6(float) Cube array sampled format:Unknown
              160:             TypePointer UniformConstant 159
-161(g_tTex2di4a):    160(ptr) Variable UniformConstant
-             162:             TypeImage 47(int) 2D array sampled format:Unknown
+161(g_tTexcdf4a):    160(ptr) Variable UniformConstant
+             162:             TypeImage 29(int) Cube array sampled format:Unknown
              163:             TypePointer UniformConstant 162
-164(g_tTex2du4a):    163(ptr) Variable UniformConstant
-             165:             TypeImage 6(float) Cube array sampled format:Unknown
+164(g_tTexcdi4a):    163(ptr) Variable UniformConstant
+             165:             TypeImage 45(int) Cube array sampled format:Unknown
              166:             TypePointer UniformConstant 165
-167(g_tTexcdf4a):    166(ptr) Variable UniformConstant
-             168:             TypeImage 30(int) Cube array sampled format:Unknown
-             169:             TypePointer UniformConstant 168
-170(g_tTexcdi4a):    169(ptr) Variable UniformConstant
-             171:             TypeImage 47(int) Cube array sampled format:Unknown
-             172:             TypePointer UniformConstant 171
-173(g_tTexcdu4a):    172(ptr) Variable UniformConstant
+167(g_tTexcdu4a):    166(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-119(flattenTemp):    107(ptr) Variable Function
-             120:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 119(flattenTemp) 120
-             123:    112(ptr) AccessChain 119(flattenTemp) 109
-             124:    7(fvec4) Load 123
-                              Store 122(@entryPointOutput.Color) 124
-             127:     12(ptr) AccessChain 119(flattenTemp) 114
-             128:    6(float) Load 127
-                              Store 126(@entryPointOutput.Depth) 128
+113(flattenTemp):    101(ptr) Variable Function
+             114:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 113(flattenTemp) 114
+             117:    106(ptr) AccessChain 113(flattenTemp) 103
+             118:    7(fvec4) Load 117
+                              Store 116(@entryPointOutput.Color) 118
+             121:     12(ptr) AccessChain 113(flattenTemp) 108
+             122:    6(float) Load 121
+                              Store 120(@entryPointOutput.Depth) 122
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
          13(r01):     12(ptr) Variable Function
-         34(r03):     12(ptr) Variable Function
-         46(r05):     12(ptr) Variable Function
-         59(r21):     12(ptr) Variable Function
-         79(r23):     12(ptr) Variable Function
-         93(r25):     12(ptr) Variable Function
-      108(psout):    107(ptr) Variable Function
+         33(r03):     12(ptr) Variable Function
+         44(r05):     12(ptr) Variable Function
+         56(r21):     12(ptr) Variable Function
+         75(r23):     12(ptr) Variable Function
+         88(r25):     12(ptr) Variable Function
+      102(psout):    101(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4)
               21:          18 Load 20(g_sSamp)
-              24:          23 SampledImage 17 21
-              28:   27(fvec2) CompositeConstruct 25 26
-              32:    6(float) CompositeExtract 28 1
-              33:    6(float) ImageSampleDrefExplicitLod 24 28 32 Lod ConstOffset 29 31
-                              Store 13(r01) 33
-              38:          35 Load 37(g_tTex1di4)
-              39:          18 Load 20(g_sSamp)
-              42:          41 SampledImage 38 39
-              43:   27(fvec2) CompositeConstruct 25 26
-              44:    6(float) CompositeExtract 43 1
-              45:    6(float) ImageSampleDrefExplicitLod 42 43 44 Lod ConstOffset 29 31
-                              Store 34(r03) 45
-              51:          48 Load 50(g_tTex1du4)
-              52:          18 Load 20(g_sSamp)
-              55:          54 SampledImage 51 52
-              56:   27(fvec2) CompositeConstruct 25 26
-              57:    6(float) CompositeExtract 56 1
-              58:    6(float) ImageSampleDrefExplicitLod 55 56 57 Lod ConstOffset 29 31
-                              Store 46(r05) 58
-              63:          60 Load 62(g_tTex2df4)
-              64:          18 Load 20(g_sSamp)
-              67:          66 SampledImage 63 64
-              71:    6(float) CompositeExtract 69 0
-              72:    6(float) CompositeExtract 69 1
-              73:   70(fvec3) CompositeConstruct 71 72 26
-              77:    6(float) CompositeExtract 73 2
-              78:    6(float) ImageSampleDrefExplicitLod 67 73 77 Lod ConstOffset 29 76
-                              Store 59(r21) 78
-              83:          80 Load 82(g_tTex2di4)
-              84:          18 Load 20(g_sSamp)
-              87:          86 SampledImage 83 84
-              88:    6(float) CompositeExtract 69 0
-              89:    6(float) CompositeExtract 69 1
-              90:   70(fvec3) CompositeConstruct 88 89 26
-              91:    6(float) CompositeExtract 90 2
-              92:    6(float) ImageSampleDrefExplicitLod 87 90 91 Lod ConstOffset 29 76
-                              Store 79(r23) 92
-              97:          94 Load 96(g_tTex2du4)
-              98:          18 Load 20(g_sSamp)
-             101:         100 SampledImage 97 98
-             102:    6(float) CompositeExtract 69 0
-             103:    6(float) CompositeExtract 69 1
-             104:   70(fvec3) CompositeConstruct 102 103 26
-             105:    6(float) CompositeExtract 104 2
-             106:    6(float) ImageSampleDrefExplicitLod 101 104 105 Lod ConstOffset 29 76
-                              Store 93(r25) 106
-             113:    112(ptr) AccessChain 108(psout) 109
-                              Store 113 111
-             115:     12(ptr) AccessChain 108(psout) 114
-                              Store 115 110
-             116:8(PS_OUTPUT) Load 108(psout)
-                              ReturnValue 116
+              23:          22 SampledImage 17 21
+              27:   26(fvec2) CompositeConstruct 24 25
+              31:    6(float) CompositeExtract 27 1
+              32:    6(float) ImageSampleDrefExplicitLod 23 27 31 Lod ConstOffset 28 30
+                              Store 13(r01) 32
+              37:          34 Load 36(g_tTex1di4)
+              38:          18 Load 20(g_sSamp)
+              40:          39 SampledImage 37 38
+              41:   26(fvec2) CompositeConstruct 24 25
+              42:    6(float) CompositeExtract 41 1
+              43:    6(float) ImageSampleDrefExplicitLod 40 41 42 Lod ConstOffset 28 30
+                              Store 33(r03) 43
+              49:          46 Load 48(g_tTex1du4)
+              50:          18 Load 20(g_sSamp)
+              52:          51 SampledImage 49 50
+              53:   26(fvec2) CompositeConstruct 24 25
+              54:    6(float) CompositeExtract 53 1
+              55:    6(float) ImageSampleDrefExplicitLod 52 53 54 Lod ConstOffset 28 30
+                              Store 44(r05) 55
+              60:          57 Load 59(g_tTex2df4)
+              61:          18 Load 20(g_sSamp)
+              63:          62 SampledImage 60 61
+              67:    6(float) CompositeExtract 65 0
+              68:    6(float) CompositeExtract 65 1
+              69:   66(fvec3) CompositeConstruct 67 68 25
+              73:    6(float) CompositeExtract 69 2
+              74:    6(float) ImageSampleDrefExplicitLod 63 69 73 Lod ConstOffset 28 72
+                              Store 56(r21) 74
+              79:          76 Load 78(g_tTex2di4)
+              80:          18 Load 20(g_sSamp)
+              82:          81 SampledImage 79 80
+              83:    6(float) CompositeExtract 65 0
+              84:    6(float) CompositeExtract 65 1
+              85:   66(fvec3) CompositeConstruct 83 84 25
+              86:    6(float) CompositeExtract 85 2
+              87:    6(float) ImageSampleDrefExplicitLod 82 85 86 Lod ConstOffset 28 72
+                              Store 75(r23) 87
+              92:          89 Load 91(g_tTex2du4)
+              93:          18 Load 20(g_sSamp)
+              95:          94 SampledImage 92 93
+              96:    6(float) CompositeExtract 65 0
+              97:    6(float) CompositeExtract 65 1
+              98:   66(fvec3) CompositeConstruct 96 97 25
+              99:    6(float) CompositeExtract 98 2
+             100:    6(float) ImageSampleDrefExplicitLod 95 98 99 Lod ConstOffset 28 72
+                              Store 88(r25) 100
+             107:    106(ptr) AccessChain 102(psout) 103
+                              Store 107 105
+             109:     12(ptr) AccessChain 102(psout) 108
+                              Store 109 104
+             110:8(PS_OUTPUT) Load 102(psout)
+                              ReturnValue 110
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 7246fe7..84b830c 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -10,7 +10,7 @@
 0:42          'r11' ( temp float)
 0:42          textureLodOffset ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42              'g_tTex1df4a' ( uniform texture1DArray)
+0:42              'g_tTex1df4a' ( uniform texture1DArrayShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -27,7 +27,7 @@
 0:43          'r13' ( temp float)
 0:43          textureLodOffset ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43              'g_tTex1di4a' ( uniform itexture1DArray)
+0:43              'g_tTex1di4a' ( uniform itexture1DArrayShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -44,7 +44,7 @@
 0:44          'r15' ( temp float)
 0:44          textureLodOffset ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44              'g_tTex1du4a' ( uniform utexture1DArray)
+0:44              'g_tTex1du4a' ( uniform utexture1DArrayShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -61,7 +61,7 @@
 0:47          'r31' ( temp float)
 0:47          textureLodOffset ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47              'g_tTex2df4a' ( uniform texture2DArray)
+0:47              'g_tTex2df4a' ( uniform texture2DArrayShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -80,7 +80,7 @@
 0:48          'r33' ( temp float)
 0:48          textureLodOffset ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48              'g_tTex2di4a' ( uniform itexture2DArray)
+0:48              'g_tTex2di4a' ( uniform itexture2DArrayShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -99,7 +99,7 @@
 0:49          'r35' ( temp float)
 0:49          textureLodOffset ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49              'g_tTex2du4a' ( uniform utexture2DArray)
+0:49              'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -165,12 +165,12 @@
 0:?     'g_tTexcdf4' ( uniform textureCube)
 0:?     'g_tTexcdi4' ( uniform itextureCube)
 0:?     'g_tTexcdu4' ( uniform utextureCube)
-0:?     'g_tTex1df4a' ( uniform texture1DArray)
-0:?     'g_tTex1di4a' ( uniform itexture1DArray)
-0:?     'g_tTex1du4a' ( uniform utexture1DArray)
-0:?     'g_tTex2df4a' ( uniform texture2DArray)
-0:?     'g_tTex2di4a' ( uniform itexture2DArray)
-0:?     'g_tTex2du4a' ( uniform utexture2DArray)
+0:?     'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:?     'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:?     'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:?     'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:?     'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:?     'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:?     'g_tTexcdf4a' ( uniform textureCubeArray)
 0:?     'g_tTexcdi4a' ( uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' ( uniform utextureCubeArray)
@@ -192,7 +192,7 @@
 0:42          'r11' ( temp float)
 0:42          textureLodOffset ( temp float)
 0:42            Construct combined texture-sampler ( temp sampler1DArrayShadow)
-0:42              'g_tTex1df4a' ( uniform texture1DArray)
+0:42              'g_tTex1df4a' ( uniform texture1DArrayShadow)
 0:42              'g_sSamp' (layout( binding=0) uniform sampler)
 0:42            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -209,7 +209,7 @@
 0:43          'r13' ( temp float)
 0:43          textureLodOffset ( temp float)
 0:43            Construct combined texture-sampler ( temp isampler1DArrayShadow)
-0:43              'g_tTex1di4a' ( uniform itexture1DArray)
+0:43              'g_tTex1di4a' ( uniform itexture1DArrayShadow)
 0:43              'g_sSamp' (layout( binding=0) uniform sampler)
 0:43            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -226,7 +226,7 @@
 0:44          'r15' ( temp float)
 0:44          textureLodOffset ( temp float)
 0:44            Construct combined texture-sampler ( temp usampler1DArrayShadow)
-0:44              'g_tTex1du4a' ( uniform utexture1DArray)
+0:44              'g_tTex1du4a' ( uniform utexture1DArrayShadow)
 0:44              'g_sSamp' (layout( binding=0) uniform sampler)
 0:44            Construct vec3 ( temp 3-component vector of float)
 0:?               Constant:
@@ -243,7 +243,7 @@
 0:47          'r31' ( temp float)
 0:47          textureLodOffset ( temp float)
 0:47            Construct combined texture-sampler ( temp sampler2DArrayShadow)
-0:47              'g_tTex2df4a' ( uniform texture2DArray)
+0:47              'g_tTex2df4a' ( uniform texture2DArrayShadow)
 0:47              'g_sSamp' (layout( binding=0) uniform sampler)
 0:47            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -262,7 +262,7 @@
 0:48          'r33' ( temp float)
 0:48          textureLodOffset ( temp float)
 0:48            Construct combined texture-sampler ( temp isampler2DArrayShadow)
-0:48              'g_tTex2di4a' ( uniform itexture2DArray)
+0:48              'g_tTex2di4a' ( uniform itexture2DArrayShadow)
 0:48              'g_sSamp' (layout( binding=0) uniform sampler)
 0:48            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -281,7 +281,7 @@
 0:49          'r35' ( temp float)
 0:49          textureLodOffset ( temp float)
 0:49            Construct combined texture-sampler ( temp usampler2DArrayShadow)
-0:49              'g_tTex2du4a' ( uniform utexture2DArray)
+0:49              'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:49              'g_sSamp' (layout( binding=0) uniform sampler)
 0:49            Construct vec4 ( temp 4-component vector of float)
 0:?               Constant:
@@ -347,12 +347,12 @@
 0:?     'g_tTexcdf4' ( uniform textureCube)
 0:?     'g_tTexcdi4' ( uniform itextureCube)
 0:?     'g_tTexcdu4' ( uniform utextureCube)
-0:?     'g_tTex1df4a' ( uniform texture1DArray)
-0:?     'g_tTex1di4a' ( uniform itexture1DArray)
-0:?     'g_tTex1du4a' ( uniform utexture1DArray)
-0:?     'g_tTex2df4a' ( uniform texture2DArray)
-0:?     'g_tTex2di4a' ( uniform itexture2DArray)
-0:?     'g_tTex2du4a' ( uniform utexture2DArray)
+0:?     'g_tTex1df4a' ( uniform texture1DArrayShadow)
+0:?     'g_tTex1di4a' ( uniform itexture1DArrayShadow)
+0:?     'g_tTex1du4a' ( uniform utexture1DArrayShadow)
+0:?     'g_tTex2df4a' ( uniform texture2DArrayShadow)
+0:?     'g_tTex2di4a' ( uniform itexture2DArrayShadow)
+0:?     'g_tTex2du4a' ( uniform utexture2DArrayShadow)
 0:?     'g_tTexcdf4a' ( uniform textureCubeArray)
 0:?     'g_tTexcdi4a' ( uniform itextureCubeArray)
 0:?     'g_tTexcdu4a' ( uniform utextureCubeArray)
@@ -360,15 +360,15 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 185
+// Generated by (magic number): 80002
+// Id's are bound by 179
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 133 137
+                              EntryPoint Fragment 4  "main" 127 131
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -379,61 +379,61 @@
                               Name 13  "r11"
                               Name 16  "g_tTex1df4a"
                               Name 20  "g_sSamp"
-                              Name 39  "r13"
-                              Name 42  "g_tTex1di4a"
-                              Name 53  "r15"
-                              Name 57  "g_tTex1du4a"
-                              Name 68  "r31"
-                              Name 71  "g_tTex2df4a"
-                              Name 88  "r33"
-                              Name 91  "g_tTex2di4a"
-                              Name 103  "r35"
-                              Name 106  "g_tTex2du4a"
-                              Name 119  "psout"
-                              Name 130  "flattenTemp"
-                              Name 133  "@entryPointOutput.Color"
-                              Name 137  "@entryPointOutput.Depth"
-                              Name 142  "g_tTex1df4"
-                              Name 145  "g_tTex1di4"
-                              Name 148  "g_tTex1du4"
-                              Name 151  "g_tTex2df4"
-                              Name 154  "g_tTex2di4"
-                              Name 157  "g_tTex2du4"
-                              Name 160  "g_tTex3df4"
-                              Name 163  "g_tTex3di4"
-                              Name 166  "g_tTex3du4"
-                              Name 169  "g_tTexcdf4"
-                              Name 172  "g_tTexcdi4"
-                              Name 175  "g_tTexcdu4"
-                              Name 178  "g_tTexcdf4a"
-                              Name 181  "g_tTexcdi4a"
-                              Name 184  "g_tTexcdu4a"
+                              Name 38  "r13"
+                              Name 41  "g_tTex1di4a"
+                              Name 51  "r15"
+                              Name 55  "g_tTex1du4a"
+                              Name 65  "r31"
+                              Name 68  "g_tTex2df4a"
+                              Name 84  "r33"
+                              Name 87  "g_tTex2di4a"
+                              Name 98  "r35"
+                              Name 101  "g_tTex2du4a"
+                              Name 113  "psout"
+                              Name 124  "flattenTemp"
+                              Name 127  "@entryPointOutput.Color"
+                              Name 131  "@entryPointOutput.Depth"
+                              Name 136  "g_tTex1df4"
+                              Name 139  "g_tTex1di4"
+                              Name 142  "g_tTex1du4"
+                              Name 145  "g_tTex2df4"
+                              Name 148  "g_tTex2di4"
+                              Name 151  "g_tTex2du4"
+                              Name 154  "g_tTex3df4"
+                              Name 157  "g_tTex3di4"
+                              Name 160  "g_tTex3du4"
+                              Name 163  "g_tTexcdf4"
+                              Name 166  "g_tTexcdi4"
+                              Name 169  "g_tTexcdu4"
+                              Name 172  "g_tTexcdf4a"
+                              Name 175  "g_tTexcdi4a"
+                              Name 178  "g_tTexcdu4a"
                               Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 42(g_tTex1di4a) DescriptorSet 0
-                              Decorate 57(g_tTex1du4a) DescriptorSet 0
-                              Decorate 71(g_tTex2df4a) DescriptorSet 0
-                              Decorate 91(g_tTex2di4a) DescriptorSet 0
-                              Decorate 106(g_tTex2du4a) DescriptorSet 0
-                              Decorate 133(@entryPointOutput.Color) Location 0
-                              Decorate 137(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 142(g_tTex1df4) DescriptorSet 0
-                              Decorate 142(g_tTex1df4) Binding 0
-                              Decorate 145(g_tTex1di4) DescriptorSet 0
-                              Decorate 148(g_tTex1du4) DescriptorSet 0
-                              Decorate 151(g_tTex2df4) DescriptorSet 0
-                              Decorate 154(g_tTex2di4) DescriptorSet 0
-                              Decorate 157(g_tTex2du4) DescriptorSet 0
-                              Decorate 160(g_tTex3df4) DescriptorSet 0
-                              Decorate 163(g_tTex3di4) DescriptorSet 0
-                              Decorate 166(g_tTex3du4) DescriptorSet 0
-                              Decorate 169(g_tTexcdf4) DescriptorSet 0
-                              Decorate 172(g_tTexcdi4) DescriptorSet 0
-                              Decorate 175(g_tTexcdu4) DescriptorSet 0
-                              Decorate 178(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 181(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 184(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 41(g_tTex1di4a) DescriptorSet 0
+                              Decorate 55(g_tTex1du4a) DescriptorSet 0
+                              Decorate 68(g_tTex2df4a) DescriptorSet 0
+                              Decorate 87(g_tTex2di4a) DescriptorSet 0
+                              Decorate 101(g_tTex2du4a) DescriptorSet 0
+                              Decorate 127(@entryPointOutput.Color) Location 0
+                              Decorate 131(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 136(g_tTex1df4) DescriptorSet 0
+                              Decorate 136(g_tTex1df4) Binding 0
+                              Decorate 139(g_tTex1di4) DescriptorSet 0
+                              Decorate 142(g_tTex1du4) DescriptorSet 0
+                              Decorate 145(g_tTex2df4) DescriptorSet 0
+                              Decorate 148(g_tTex2di4) DescriptorSet 0
+                              Decorate 151(g_tTex2du4) DescriptorSet 0
+                              Decorate 154(g_tTex3df4) DescriptorSet 0
+                              Decorate 157(g_tTex3di4) DescriptorSet 0
+                              Decorate 160(g_tTex3du4) DescriptorSet 0
+                              Decorate 163(g_tTexcdf4) DescriptorSet 0
+                              Decorate 166(g_tTexcdi4) DescriptorSet 0
+                              Decorate 169(g_tTexcdu4) DescriptorSet 0
+                              Decorate 172(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 175(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 178(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -441,192 +441,186 @@
     8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
                9:             TypeFunction 8(PS_OUTPUT)
               12:             TypePointer Function 6(float)
-              14:             TypeImage 6(float) 1D array sampled format:Unknown
+              14:             TypeImage 6(float) 1D depth array sampled format:Unknown
               15:             TypePointer UniformConstant 14
  16(g_tTex1df4a):     15(ptr) Variable UniformConstant
               18:             TypeSampler
               19:             TypePointer UniformConstant 18
      20(g_sSamp):     19(ptr) Variable UniformConstant
-              22:             TypeImage 6(float) 1D depth array sampled format:Unknown
-              23:             TypeSampledImage 22
-              25:             TypeVector 6(float) 2
-              26:    6(float) Constant 1036831949
-              27:    6(float) Constant 1045220557
-              28:   25(fvec2) ConstantComposite 26 27
-              29:    6(float) Constant 1061158912
-              30:             TypeVector 6(float) 3
-              34:    6(float) Constant 0
-              35:             TypeInt 32 1
-              36:     35(int) Constant 2
-              40:             TypeImage 35(int) 1D array sampled format:Unknown
-              41:             TypePointer UniformConstant 40
- 42(g_tTex1di4a):     41(ptr) Variable UniformConstant
-              45:             TypeImage 35(int) 1D depth array sampled format:Unknown
-              46:             TypeSampledImage 45
-              54:             TypeInt 32 0
-              55:             TypeImage 54(int) 1D array sampled format:Unknown
-              56:             TypePointer UniformConstant 55
- 57(g_tTex1du4a):     56(ptr) Variable UniformConstant
-              60:             TypeImage 54(int) 1D depth array sampled format:Unknown
-              61:             TypeSampledImage 60
-              69:             TypeImage 6(float) 2D array sampled format:Unknown
-              70:             TypePointer UniformConstant 69
- 71(g_tTex2df4a):     70(ptr) Variable UniformConstant
-              74:             TypeImage 6(float) 2D depth array sampled format:Unknown
-              75:             TypeSampledImage 74
-              77:    6(float) Constant 1050253722
-              78:   30(fvec3) ConstantComposite 26 27 77
-              83:             TypeVector 35(int) 2
-              84:     35(int) Constant 3
-              85:   83(ivec2) ConstantComposite 36 84
-              89:             TypeImage 35(int) 2D array sampled format:Unknown
-              90:             TypePointer UniformConstant 89
- 91(g_tTex2di4a):     90(ptr) Variable UniformConstant
-              94:             TypeImage 35(int) 2D depth array sampled format:Unknown
-              95:             TypeSampledImage 94
-             104:             TypeImage 54(int) 2D array sampled format:Unknown
-             105:             TypePointer UniformConstant 104
-106(g_tTex2du4a):    105(ptr) Variable UniformConstant
-             109:             TypeImage 54(int) 2D depth array sampled format:Unknown
-             110:             TypeSampledImage 109
-             118:             TypePointer Function 8(PS_OUTPUT)
-             120:     35(int) Constant 0
-             121:    6(float) Constant 1065353216
-             122:    7(fvec4) ConstantComposite 121 121 121 121
-             123:             TypePointer Function 7(fvec4)
-             125:     35(int) Constant 1
-             132:             TypePointer Output 7(fvec4)
-133(@entryPointOutput.Color):    132(ptr) Variable Output
-             136:             TypePointer Output 6(float)
-137(@entryPointOutput.Depth):    136(ptr) Variable Output
-             140:             TypeImage 6(float) 1D sampled format:Unknown
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              25:    6(float) Constant 1036831949
+              26:    6(float) Constant 1045220557
+              27:   24(fvec2) ConstantComposite 25 26
+              28:    6(float) Constant 1061158912
+              29:             TypeVector 6(float) 3
+              33:    6(float) Constant 0
+              34:             TypeInt 32 1
+              35:     34(int) Constant 2
+              39:             TypeImage 34(int) 1D depth array sampled format:Unknown
+              40:             TypePointer UniformConstant 39
+ 41(g_tTex1di4a):     40(ptr) Variable UniformConstant
+              44:             TypeSampledImage 39
+              52:             TypeInt 32 0
+              53:             TypeImage 52(int) 1D depth array sampled format:Unknown
+              54:             TypePointer UniformConstant 53
+ 55(g_tTex1du4a):     54(ptr) Variable UniformConstant
+              58:             TypeSampledImage 53
+              66:             TypeImage 6(float) 2D depth array sampled format:Unknown
+              67:             TypePointer UniformConstant 66
+ 68(g_tTex2df4a):     67(ptr) Variable UniformConstant
+              71:             TypeSampledImage 66
+              73:    6(float) Constant 1050253722
+              74:   29(fvec3) ConstantComposite 25 26 73
+              79:             TypeVector 34(int) 2
+              80:     34(int) Constant 3
+              81:   79(ivec2) ConstantComposite 35 80
+              85:             TypeImage 34(int) 2D depth array sampled format:Unknown
+              86:             TypePointer UniformConstant 85
+ 87(g_tTex2di4a):     86(ptr) Variable UniformConstant
+              90:             TypeSampledImage 85
+              99:             TypeImage 52(int) 2D depth array sampled format:Unknown
+             100:             TypePointer UniformConstant 99
+101(g_tTex2du4a):    100(ptr) Variable UniformConstant
+             104:             TypeSampledImage 99
+             112:             TypePointer Function 8(PS_OUTPUT)
+             114:     34(int) Constant 0
+             115:    6(float) Constant 1065353216
+             116:    7(fvec4) ConstantComposite 115 115 115 115
+             117:             TypePointer Function 7(fvec4)
+             119:     34(int) Constant 1
+             126:             TypePointer Output 7(fvec4)
+127(@entryPointOutput.Color):    126(ptr) Variable Output
+             130:             TypePointer Output 6(float)
+131(@entryPointOutput.Depth):    130(ptr) Variable Output
+             134:             TypeImage 6(float) 1D sampled format:Unknown
+             135:             TypePointer UniformConstant 134
+ 136(g_tTex1df4):    135(ptr) Variable UniformConstant
+             137:             TypeImage 34(int) 1D sampled format:Unknown
+             138:             TypePointer UniformConstant 137
+ 139(g_tTex1di4):    138(ptr) Variable UniformConstant
+             140:             TypeImage 52(int) 1D sampled format:Unknown
              141:             TypePointer UniformConstant 140
- 142(g_tTex1df4):    141(ptr) Variable UniformConstant
-             143:             TypeImage 35(int) 1D sampled format:Unknown
+ 142(g_tTex1du4):    141(ptr) Variable UniformConstant
+             143:             TypeImage 6(float) 2D sampled format:Unknown
              144:             TypePointer UniformConstant 143
- 145(g_tTex1di4):    144(ptr) Variable UniformConstant
-             146:             TypeImage 54(int) 1D sampled format:Unknown
+ 145(g_tTex2df4):    144(ptr) Variable UniformConstant
+             146:             TypeImage 34(int) 2D sampled format:Unknown
              147:             TypePointer UniformConstant 146
- 148(g_tTex1du4):    147(ptr) Variable UniformConstant
-             149:             TypeImage 6(float) 2D sampled format:Unknown
+ 148(g_tTex2di4):    147(ptr) Variable UniformConstant
+             149:             TypeImage 52(int) 2D sampled format:Unknown
              150:             TypePointer UniformConstant 149
- 151(g_tTex2df4):    150(ptr) Variable UniformConstant
-             152:             TypeImage 35(int) 2D sampled format:Unknown
+ 151(g_tTex2du4):    150(ptr) Variable UniformConstant
+             152:             TypeImage 6(float) 3D sampled format:Unknown
              153:             TypePointer UniformConstant 152
- 154(g_tTex2di4):    153(ptr) Variable UniformConstant
-             155:             TypeImage 54(int) 2D sampled format:Unknown
+ 154(g_tTex3df4):    153(ptr) Variable UniformConstant
+             155:             TypeImage 34(int) 3D sampled format:Unknown
              156:             TypePointer UniformConstant 155
- 157(g_tTex2du4):    156(ptr) Variable UniformConstant
-             158:             TypeImage 6(float) 3D sampled format:Unknown
+ 157(g_tTex3di4):    156(ptr) Variable UniformConstant
+             158:             TypeImage 52(int) 3D sampled format:Unknown
              159:             TypePointer UniformConstant 158
- 160(g_tTex3df4):    159(ptr) Variable UniformConstant
-             161:             TypeImage 35(int) 3D sampled format:Unknown
+ 160(g_tTex3du4):    159(ptr) Variable UniformConstant
+             161:             TypeImage 6(float) Cube sampled format:Unknown
              162:             TypePointer UniformConstant 161
- 163(g_tTex3di4):    162(ptr) Variable UniformConstant
-             164:             TypeImage 54(int) 3D sampled format:Unknown
+ 163(g_tTexcdf4):    162(ptr) Variable UniformConstant
+             164:             TypeImage 34(int) Cube sampled format:Unknown
              165:             TypePointer UniformConstant 164
- 166(g_tTex3du4):    165(ptr) Variable UniformConstant
-             167:             TypeImage 6(float) Cube sampled format:Unknown
+ 166(g_tTexcdi4):    165(ptr) Variable UniformConstant
+             167:             TypeImage 52(int) Cube sampled format:Unknown
              168:             TypePointer UniformConstant 167
- 169(g_tTexcdf4):    168(ptr) Variable UniformConstant
-             170:             TypeImage 35(int) Cube sampled format:Unknown
+ 169(g_tTexcdu4):    168(ptr) Variable UniformConstant
+             170:             TypeImage 6(float) Cube array sampled format:Unknown
              171:             TypePointer UniformConstant 170
- 172(g_tTexcdi4):    171(ptr) Variable UniformConstant
-             173:             TypeImage 54(int) Cube sampled format:Unknown
+172(g_tTexcdf4a):    171(ptr) Variable UniformConstant
+             173:             TypeImage 34(int) Cube array sampled format:Unknown
              174:             TypePointer UniformConstant 173
- 175(g_tTexcdu4):    174(ptr) Variable UniformConstant
-             176:             TypeImage 6(float) Cube array sampled format:Unknown
+175(g_tTexcdi4a):    174(ptr) Variable UniformConstant
+             176:             TypeImage 52(int) Cube array sampled format:Unknown
              177:             TypePointer UniformConstant 176
-178(g_tTexcdf4a):    177(ptr) Variable UniformConstant
-             179:             TypeImage 35(int) Cube array sampled format:Unknown
-             180:             TypePointer UniformConstant 179
-181(g_tTexcdi4a):    180(ptr) Variable UniformConstant
-             182:             TypeImage 54(int) Cube array sampled format:Unknown
-             183:             TypePointer UniformConstant 182
-184(g_tTexcdu4a):    183(ptr) Variable UniformConstant
+178(g_tTexcdu4a):    177(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-130(flattenTemp):    118(ptr) Variable Function
-             131:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 130(flattenTemp) 131
-             134:    123(ptr) AccessChain 130(flattenTemp) 120
-             135:    7(fvec4) Load 134
-                              Store 133(@entryPointOutput.Color) 135
-             138:     12(ptr) AccessChain 130(flattenTemp) 125
-             139:    6(float) Load 138
-                              Store 137(@entryPointOutput.Depth) 139
+124(flattenTemp):    112(ptr) Variable Function
+             125:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 124(flattenTemp) 125
+             128:    117(ptr) AccessChain 124(flattenTemp) 114
+             129:    7(fvec4) Load 128
+                              Store 127(@entryPointOutput.Color) 129
+             132:     12(ptr) AccessChain 124(flattenTemp) 119
+             133:    6(float) Load 132
+                              Store 131(@entryPointOutput.Depth) 133
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
          13(r11):     12(ptr) Variable Function
-         39(r13):     12(ptr) Variable Function
-         53(r15):     12(ptr) Variable Function
-         68(r31):     12(ptr) Variable Function
-         88(r33):     12(ptr) Variable Function
-        103(r35):     12(ptr) Variable Function
-      119(psout):    118(ptr) Variable Function
+         38(r13):     12(ptr) Variable Function
+         51(r15):     12(ptr) Variable Function
+         65(r31):     12(ptr) Variable Function
+         84(r33):     12(ptr) Variable Function
+         98(r35):     12(ptr) Variable Function
+      113(psout):    112(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4a)
               21:          18 Load 20(g_sSamp)
-              24:          23 SampledImage 17 21
-              31:    6(float) CompositeExtract 28 0
-              32:    6(float) CompositeExtract 28 1
-              33:   30(fvec3) CompositeConstruct 31 32 29
-              37:    6(float) CompositeExtract 33 2
-              38:    6(float) ImageSampleDrefExplicitLod 24 33 37 Lod ConstOffset 34 36
-                              Store 13(r11) 38
-              43:          40 Load 42(g_tTex1di4a)
-              44:          18 Load 20(g_sSamp)
-              47:          46 SampledImage 43 44
-              48:    6(float) CompositeExtract 28 0
-              49:    6(float) CompositeExtract 28 1
-              50:   30(fvec3) CompositeConstruct 48 49 29
-              51:    6(float) CompositeExtract 50 2
-              52:    6(float) ImageSampleDrefExplicitLod 47 50 51 Lod ConstOffset 34 36
-                              Store 39(r13) 52
-              58:          55 Load 57(g_tTex1du4a)
-              59:          18 Load 20(g_sSamp)
-              62:          61 SampledImage 58 59
-              63:    6(float) CompositeExtract 28 0
-              64:    6(float) CompositeExtract 28 1
-              65:   30(fvec3) CompositeConstruct 63 64 29
-              66:    6(float) CompositeExtract 65 2
-              67:    6(float) ImageSampleDrefExplicitLod 62 65 66 Lod ConstOffset 34 36
-                              Store 53(r15) 67
-              72:          69 Load 71(g_tTex2df4a)
-              73:          18 Load 20(g_sSamp)
-              76:          75 SampledImage 72 73
-              79:    6(float) CompositeExtract 78 0
-              80:    6(float) CompositeExtract 78 1
-              81:    6(float) CompositeExtract 78 2
-              82:    7(fvec4) CompositeConstruct 79 80 81 29
-              86:    6(float) CompositeExtract 82 3
-              87:    6(float) ImageSampleDrefExplicitLod 76 82 86 Lod ConstOffset 34 85
-                              Store 68(r31) 87
-              92:          89 Load 91(g_tTex2di4a)
-              93:          18 Load 20(g_sSamp)
-              96:          95 SampledImage 92 93
-              97:    6(float) CompositeExtract 78 0
-              98:    6(float) CompositeExtract 78 1
-              99:    6(float) CompositeExtract 78 2
-             100:    7(fvec4) CompositeConstruct 97 98 99 29
-             101:    6(float) CompositeExtract 100 3
-             102:    6(float) ImageSampleDrefExplicitLod 96 100 101 Lod ConstOffset 34 85
-                              Store 88(r33) 102
-             107:         104 Load 106(g_tTex2du4a)
-             108:          18 Load 20(g_sSamp)
-             111:         110 SampledImage 107 108
-             112:    6(float) CompositeExtract 78 0
-             113:    6(float) CompositeExtract 78 1
-             114:    6(float) CompositeExtract 78 2
-             115:    7(fvec4) CompositeConstruct 112 113 114 29
-             116:    6(float) CompositeExtract 115 3
-             117:    6(float) ImageSampleDrefExplicitLod 111 115 116 Lod ConstOffset 34 85
-                              Store 103(r35) 117
-             124:    123(ptr) AccessChain 119(psout) 120
-                              Store 124 122
-             126:     12(ptr) AccessChain 119(psout) 125
-                              Store 126 121
-             127:8(PS_OUTPUT) Load 119(psout)
-                              ReturnValue 127
+              23:          22 SampledImage 17 21
+              30:    6(float) CompositeExtract 27 0
+              31:    6(float) CompositeExtract 27 1
+              32:   29(fvec3) CompositeConstruct 30 31 28
+              36:    6(float) CompositeExtract 32 2
+              37:    6(float) ImageSampleDrefExplicitLod 23 32 36 Lod ConstOffset 33 35
+                              Store 13(r11) 37
+              42:          39 Load 41(g_tTex1di4a)
+              43:          18 Load 20(g_sSamp)
+              45:          44 SampledImage 42 43
+              46:    6(float) CompositeExtract 27 0
+              47:    6(float) CompositeExtract 27 1
+              48:   29(fvec3) CompositeConstruct 46 47 28
+              49:    6(float) CompositeExtract 48 2
+              50:    6(float) ImageSampleDrefExplicitLod 45 48 49 Lod ConstOffset 33 35
+                              Store 38(r13) 50
+              56:          53 Load 55(g_tTex1du4a)
+              57:          18 Load 20(g_sSamp)
+              59:          58 SampledImage 56 57
+              60:    6(float) CompositeExtract 27 0
+              61:    6(float) CompositeExtract 27 1
+              62:   29(fvec3) CompositeConstruct 60 61 28
+              63:    6(float) CompositeExtract 62 2
+              64:    6(float) ImageSampleDrefExplicitLod 59 62 63 Lod ConstOffset 33 35
+                              Store 51(r15) 64
+              69:          66 Load 68(g_tTex2df4a)
+              70:          18 Load 20(g_sSamp)
+              72:          71 SampledImage 69 70
+              75:    6(float) CompositeExtract 74 0
+              76:    6(float) CompositeExtract 74 1
+              77:    6(float) CompositeExtract 74 2
+              78:    7(fvec4) CompositeConstruct 75 76 77 28
+              82:    6(float) CompositeExtract 78 3
+              83:    6(float) ImageSampleDrefExplicitLod 72 78 82 Lod ConstOffset 33 81
+                              Store 65(r31) 83
+              88:          85 Load 87(g_tTex2di4a)
+              89:          18 Load 20(g_sSamp)
+              91:          90 SampledImage 88 89
+              92:    6(float) CompositeExtract 74 0
+              93:    6(float) CompositeExtract 74 1
+              94:    6(float) CompositeExtract 74 2
+              95:    7(fvec4) CompositeConstruct 92 93 94 28
+              96:    6(float) CompositeExtract 95 3
+              97:    6(float) ImageSampleDrefExplicitLod 91 95 96 Lod ConstOffset 33 81
+                              Store 84(r33) 97
+             102:          99 Load 101(g_tTex2du4a)
+             103:          18 Load 20(g_sSamp)
+             105:         104 SampledImage 102 103
+             106:    6(float) CompositeExtract 74 0
+             107:    6(float) CompositeExtract 74 1
+             108:    6(float) CompositeExtract 74 2
+             109:    7(fvec4) CompositeConstruct 106 107 108 28
+             110:    6(float) CompositeExtract 109 3
+             111:    6(float) ImageSampleDrefExplicitLod 105 109 110 Lod ConstOffset 33 81
+                              Store 98(r35) 111
+             118:    117(ptr) AccessChain 113(psout) 114
+                              Store 118 116
+             120:     12(ptr) AccessChain 113(psout) 119
+                              Store 120 115
+             121:8(PS_OUTPUT) Load 113(psout)
+                              ReturnValue 121
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 244a70b..f9fabcc 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -428,7 +428,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 140
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index 24c510c..cb40bce 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -530,7 +530,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 175
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index 8081913..e5605a1 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -494,7 +494,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 166
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 3a67807..2cc4742 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -470,7 +470,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 166
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index 56532b8..5d3c065 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -338,7 +338,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index f02dfd2..bf435df 100644
--- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -356,7 +356,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 147
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index 9a7cb9a..82c8b59 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -424,7 +424,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 172
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index aaaf05a..b7e3d57 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -386,7 +386,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index bb92ea7..2080066 100644
--- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -398,7 +398,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index adb4a8f..7905b75 100644
--- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -296,7 +296,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 119
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalar-length.frag.out b/Test/baseResults/hlsl.scalar-length.frag.out
index 2854835..9a51962 100644
--- a/Test/baseResults/hlsl.scalar-length.frag.out
+++ b/Test/baseResults/hlsl.scalar-length.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalar2matrix.frag.out b/Test/baseResults/hlsl.scalar2matrix.frag.out
index f3024b7..6b799f4 100644
--- a/Test/baseResults/hlsl.scalar2matrix.frag.out
+++ b/Test/baseResults/hlsl.scalar2matrix.frag.out
@@ -374,7 +374,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalarCast.vert.out b/Test/baseResults/hlsl.scalarCast.vert.out
index 70a8512..a0b0aa2 100755
--- a/Test/baseResults/hlsl.scalarCast.vert.out
+++ b/Test/baseResults/hlsl.scalarCast.vert.out
@@ -322,7 +322,7 @@
 0:?     '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scope.frag.out b/Test/baseResults/hlsl.scope.frag.out
index 32eeeef..b7cc2a2 100755
--- a/Test/baseResults/hlsl.scope.frag.out
+++ b/Test/baseResults/hlsl.scope.frag.out
@@ -102,7 +102,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semantic-1.vert.out b/Test/baseResults/hlsl.semantic-1.vert.out
index 9678570..7e4885c 100644
--- a/Test/baseResults/hlsl.semantic-1.vert.out
+++ b/Test/baseResults/hlsl.semantic-1.vert.out
@@ -242,7 +242,7 @@
 0:?     'v' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semantic.geom.out b/Test/baseResults/hlsl.semantic.geom.out
index 74f7a26..5e2214a 100755
--- a/Test/baseResults/hlsl.semantic.geom.out
+++ b/Test/baseResults/hlsl.semantic.geom.out
@@ -156,7 +156,7 @@
 0:?     'OutputStream.cull0' ( out 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 65
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.semantic.vert.out b/Test/baseResults/hlsl.semantic.vert.out
index 50a653d..3b4ac55 100755
--- a/Test/baseResults/hlsl.semantic.vert.out
+++ b/Test/baseResults/hlsl.semantic.vert.out
@@ -210,7 +210,7 @@
 0:?     '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semicolons.frag.out b/Test/baseResults/hlsl.semicolons.frag.out
index 87e0a4e..40bd128 100644
--- a/Test/baseResults/hlsl.semicolons.frag.out
+++ b/Test/baseResults/hlsl.semicolons.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
index 773134c..1fee20c 100755
--- a/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -321,7 +321,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 127
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shapeConvRet.frag.out b/Test/baseResults/hlsl.shapeConvRet.frag.out
index e9dba22..432cd6f 100755
--- a/Test/baseResults/hlsl.shapeConvRet.frag.out
+++ b/Test/baseResults/hlsl.shapeConvRet.frag.out
@@ -68,7 +68,7 @@
 0:?     'f' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shift.per-set.frag.out b/Test/baseResults/hlsl.shift.per-set.frag.out
new file mode 100644
index 0000000..57b32e5
--- /dev/null
+++ b/Test/baseResults/hlsl.shift.per-set.frag.out
@@ -0,0 +1,225 @@
+hlsl.shift.per-set.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:34  Function Definition: @main( ( temp 4-component vector of float)
+0:34    Function Parameters: 
+0:?     Sequence
+0:35      't1' (layout( set=1 binding=1) uniform texture1D)
+0:36      't2' (layout( set=1 binding=2) uniform texture2D)
+0:37      't3' (layout( set=2 binding=1) uniform texture3D)
+0:38      direct index (layout( row_major std430) buffer 4-component vector of float)
+0:38        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:38          't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:38          Constant:
+0:38            0 (const uint)
+0:38        Constant:
+0:38          0 (const int)
+0:39      indirect index (layout( row_major std430) buffer uint)
+0:39        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:39          't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:39          Constant:
+0:39            0 (const uint)
+0:39        right-shift ( temp int)
+0:39          Constant:
+0:39            0 (const int)
+0:39          Constant:
+0:39            2 (const int)
+0:40      't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
+0:42      's1' (layout( set=1 binding=1) uniform sampler)
+0:43      's2' (layout( set=2 binding=2) uniform sampler)
+0:45      'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
+0:46      'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
+0:47      'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
+0:49      imageLoad ( temp float)
+0:49        'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
+0:49        Constant:
+0:49          0 (const int)
+0:50      indirect index (layout( row_major std430) buffer uint)
+0:50        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:50          'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:50          Constant:
+0:50            0 (const uint)
+0:50        right-shift ( temp int)
+0:50          Constant:
+0:50            0 (const int)
+0:50          Constant:
+0:50            2 (const int)
+0:51      direct index (layout( row_major std430) buffer float)
+0:51        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
+0:51          'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        Constant:
+0:51          0 (const int)
+0:52      'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:53      'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:55      cb1: direct index for structure (layout( row_major std140) uniform int)
+0:55        'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
+0:55        Constant:
+0:55          0 (const uint)
+0:56      tb1: direct index for structure (layout( row_major std430) buffer int)
+0:56        'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
+0:56        Constant:
+0:56          0 (const uint)
+0:58      Branch: Return with expression
+0:58        Constant:
+0:58          0.000000
+0:58          0.000000
+0:58          0.000000
+0:58          0.000000
+0:34  Function Definition: main( ( temp void)
+0:34    Function Parameters: 
+0:?     Sequence
+0:34      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:34        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     's1' (layout( set=1 binding=1) uniform sampler)
+0:?     's2' (layout( set=2 binding=2) uniform sampler)
+0:?     't1' (layout( set=1 binding=1) uniform texture1D)
+0:?     't2' (layout( set=1 binding=2) uniform texture2D)
+0:?     't3' (layout( set=2 binding=1) uniform texture3D)
+0:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
+0:?     'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
+0:?     'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
+0:?     'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
+0:?     'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
+0:?     'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
+0:?     'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:34  Function Definition: @main( ( temp 4-component vector of float)
+0:34    Function Parameters: 
+0:?     Sequence
+0:35      't1' (layout( set=1 binding=1) uniform texture1D)
+0:36      't2' (layout( set=1 binding=2) uniform texture2D)
+0:37      't3' (layout( set=2 binding=1) uniform texture3D)
+0:38      direct index (layout( row_major std430) buffer 4-component vector of float)
+0:38        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
+0:38          't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:38          Constant:
+0:38            0 (const uint)
+0:38        Constant:
+0:38          0 (const int)
+0:39      indirect index (layout( row_major std430) buffer uint)
+0:39        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:39          't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:39          Constant:
+0:39            0 (const uint)
+0:39        right-shift ( temp int)
+0:39          Constant:
+0:39            0 (const int)
+0:39          Constant:
+0:39            2 (const int)
+0:40      't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
+0:42      's1' (layout( set=1 binding=1) uniform sampler)
+0:43      's2' (layout( set=2 binding=2) uniform sampler)
+0:45      'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
+0:46      'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
+0:47      'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
+0:49      imageLoad ( temp float)
+0:49        'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
+0:49        Constant:
+0:49          0 (const int)
+0:50      indirect index (layout( row_major std430) buffer uint)
+0:50        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:50          'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:50          Constant:
+0:50            0 (const uint)
+0:50        right-shift ( temp int)
+0:50          Constant:
+0:50            0 (const int)
+0:50          Constant:
+0:50            2 (const int)
+0:51      direct index (layout( row_major std430) buffer float)
+0:51        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
+0:51          'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        Constant:
+0:51          0 (const int)
+0:52      'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:53      'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:55      cb1: direct index for structure (layout( row_major std140) uniform int)
+0:55        'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
+0:55        Constant:
+0:55          0 (const uint)
+0:56      tb1: direct index for structure (layout( row_major std430) buffer int)
+0:56        'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
+0:56        Constant:
+0:56          0 (const uint)
+0:58      Branch: Return with expression
+0:58        Constant:
+0:58          0.000000
+0:58          0.000000
+0:58          0.000000
+0:58          0.000000
+0:34  Function Definition: main( ( temp void)
+0:34    Function Parameters: 
+0:?     Sequence
+0:34      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:34        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     's1' (layout( set=1 binding=1) uniform sampler)
+0:?     's2' (layout( set=2 binding=2) uniform sampler)
+0:?     't1' (layout( set=1 binding=1) uniform texture1D)
+0:?     't2' (layout( set=1 binding=2) uniform texture2D)
+0:?     't3' (layout( set=2 binding=1) uniform texture3D)
+0:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
+0:?     'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
+0:?     'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
+0:?     'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
+0:?     'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
+0:?     'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
+0:?     'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+Uniform reflection:
+t1: offset -1, type 8b5d, size 1, index -1, binding 21
+t2: offset -1, type 8b5e, size 1, index -1, binding 22
+t3: offset -1, type 8b5f, size 1, index -1, binding 26
+t4.@data: offset 0, type 8b52, size 1, index 0, binding -1
+t5.@data: offset 0, type 1405, size 0, index 1, binding -1
+t6: offset -1, type 8dc2, size 1, index -1, binding 23
+s1: offset -1, type 0, size 1, index -1, binding 11
+s2: offset -1, type 0, size 1, index -1, binding 17
+u1: offset -1, type 904c, size 1, index -1, binding 31
+u2: offset -1, type 904d, size 1, index -1, binding 42
+u3: offset -1, type 904e, size 1, index -1, binding 43
+u4: offset -1, type 9051, size 1, index -1, binding 34
+u5.@data: offset 0, type 1405, size 0, index 2, binding -1
+u6.@data: offset 0, type 1406, size 1, index 3, binding -1
+cb1: offset 0, type 1404, size 1, index 4, binding -1
+tb1: offset 0, type 1404, size 1, index 5, binding -1
+
+Uniform block reflection:
+t4: offset -1, type ffffffff, size 0, index -1, binding 21
+t5: offset -1, type ffffffff, size 0, index -1, binding 22
+u5: offset -1, type ffffffff, size 0, index -1, binding 44
+u6: offset -1, type ffffffff, size 0, index -1, binding 34
+cb: offset -1, type ffffffff, size 4, index -1, binding 51
+tb: offset -1, type ffffffff, size 4, index -1, binding 27
+
+Vertex attribute reflection:
+
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
index 37baab0..51ee0a7 100755
--- a/Test/baseResults/hlsl.sin.frag.out
+++ b/Test/baseResults/hlsl.sin.frag.out
@@ -52,7 +52,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.staticMemberFunction.frag.out b/Test/baseResults/hlsl.staticMemberFunction.frag.out
index e313cbc..08d0d20 100755
--- a/Test/baseResults/hlsl.staticMemberFunction.frag.out
+++ b/Test/baseResults/hlsl.staticMemberFunction.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.string.frag.out b/Test/baseResults/hlsl.string.frag.out
index 1c6c542..893e49d 100755
--- a/Test/baseResults/hlsl.string.frag.out
+++ b/Test/baseResults/hlsl.string.frag.out
@@ -50,7 +50,7 @@
 0:?     'f' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out
index d1f7522..dcc493d 100644
--- a/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/Test/baseResults/hlsl.stringtoken.frag.out
@@ -70,7 +70,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index d088164..c540c16 100755
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -212,7 +212,7 @@
 0:?     's.ff4' (layout( location=7) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 102
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split-1.vert.out b/Test/baseResults/hlsl.struct.split-1.vert.out
index 896e124..6086e32 100644
--- a/Test/baseResults/hlsl.struct.split-1.vert.out
+++ b/Test/baseResults/hlsl.struct.split-1.vert.out
@@ -196,7 +196,7 @@
 0:?     'Pos_loose' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.array.geom.out b/Test/baseResults/hlsl.struct.split.array.geom.out
index 8aae6f3..42f45a8 100644
--- a/Test/baseResults/hlsl.struct.split.array.geom.out
+++ b/Test/baseResults/hlsl.struct.split.array.geom.out
@@ -160,7 +160,7 @@
 0:?     'OutputStream.VertexID' (layout( location=2) out uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 82
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.assign.frag.out b/Test/baseResults/hlsl.struct.split.assign.frag.out
index fca9751..b426639 100644
--- a/Test/baseResults/hlsl.struct.split.assign.frag.out
+++ b/Test/baseResults/hlsl.struct.split.assign.frag.out
@@ -208,7 +208,7 @@
 0:?     'input[2].f' (layout( location=3) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.call.vert.out b/Test/baseResults/hlsl.struct.split.call.vert.out
index bbbbe9a..dd6e38e 100644
--- a/Test/baseResults/hlsl.struct.split.call.vert.out
+++ b/Test/baseResults/hlsl.struct.split.call.vert.out
@@ -214,7 +214,7 @@
 0:?     'vsin.x1_in' (layout( location=2) in int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 77
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.nested.geom.out b/Test/baseResults/hlsl.struct.split.nested.geom.out
index d01d9bd..0d83cdf 100644
--- a/Test/baseResults/hlsl.struct.split.nested.geom.out
+++ b/Test/baseResults/hlsl.struct.split.nested.geom.out
@@ -448,7 +448,7 @@
 0:?     'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 100
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.geom.out b/Test/baseResults/hlsl.struct.split.trivial.geom.out
index 25f2fdf..31b2cda 100644
--- a/Test/baseResults/hlsl.struct.split.trivial.geom.out
+++ b/Test/baseResults/hlsl.struct.split.trivial.geom.out
@@ -192,7 +192,7 @@
 0:?     'ts.pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 67
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.vert.out b/Test/baseResults/hlsl.struct.split.trivial.vert.out
index 6711312..f3c10c4 100644
--- a/Test/baseResults/hlsl.struct.split.trivial.vert.out
+++ b/Test/baseResults/hlsl.struct.split.trivial.vert.out
@@ -98,7 +98,7 @@
 0:?     'Pos_loose' (layout( location=1) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structIoFourWay.frag.out b/Test/baseResults/hlsl.structIoFourWay.frag.out
index e0d9725..24c902f 100755
--- a/Test/baseResults/hlsl.structIoFourWay.frag.out
+++ b/Test/baseResults/hlsl.structIoFourWay.frag.out
@@ -162,7 +162,7 @@
 0:?     't.normal' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structStructName.frag.out b/Test/baseResults/hlsl.structStructName.frag.out
index 3b28805..dded13f 100755
--- a/Test/baseResults/hlsl.structStructName.frag.out
+++ b/Test/baseResults/hlsl.structStructName.frag.out
@@ -44,7 +44,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structarray.flatten.frag.out b/Test/baseResults/hlsl.structarray.flatten.frag.out
index 97ef7bb..534ea7c 100644
--- a/Test/baseResults/hlsl.structarray.flatten.frag.out
+++ b/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -27,8 +27,14 @@
 0:26                0.400000
 0:27          texture ( temp 4-component vector of float)
 0:27            Construct combined texture-sampler ( temp sampler1D)
-0:?               'g_texdata_array2[1].tex[0]' ( uniform texture1D)
-0:?               'g_texdata_array2[1].samp[0]' ( uniform sampler)
+0:27              direct index ( temp texture1D)
+0:?                 'g_texdata_array2[1].tex' ( uniform 2-element array of texture1D)
+0:27                Constant:
+0:27                  0 (const int)
+0:27              direct index ( temp sampler)
+0:?                 'g_texdata_array2[1].samp' ( uniform 2-element array of sampler)
+0:27                Constant:
+0:27                  0 (const int)
 0:27            Constant:
 0:27              0.300000
 0:23  Function Definition: main( ( temp void)
@@ -58,20 +64,14 @@
 0:?     'g_texdata_array[2].samp' ( uniform sampler)
 0:?     'g_texdata_array[2].tex' ( uniform texture1D)
 0:?     'g_texdata_array[2].nonopaque_thing' ( uniform int)
-0:?     'g_texdata_array2[0].samp[0]' ( uniform sampler)
-0:?     'g_texdata_array2[0].samp[1]' ( uniform sampler)
-0:?     'g_texdata_array2[0].tex[0]' ( uniform texture1D)
-0:?     'g_texdata_array2[0].tex[1]' ( uniform texture1D)
+0:?     'g_texdata_array2[0].samp' ( uniform 2-element array of sampler)
+0:?     'g_texdata_array2[0].tex' ( uniform 2-element array of texture1D)
 0:?     'g_texdata_array2[0].nonopaque_thing' ( uniform int)
-0:?     'g_texdata_array2[1].samp[0]' ( uniform sampler)
-0:?     'g_texdata_array2[1].samp[1]' ( uniform sampler)
-0:?     'g_texdata_array2[1].tex[0]' ( uniform texture1D)
-0:?     'g_texdata_array2[1].tex[1]' ( uniform texture1D)
+0:?     'g_texdata_array2[1].samp' ( uniform 2-element array of sampler)
+0:?     'g_texdata_array2[1].tex' ( uniform 2-element array of texture1D)
 0:?     'g_texdata_array2[1].nonopaque_thing' ( uniform int)
-0:?     'g_texdata_array2[2].samp[0]' ( uniform sampler)
-0:?     'g_texdata_array2[2].samp[1]' ( uniform sampler)
-0:?     'g_texdata_array2[2].tex[0]' ( uniform texture1D)
-0:?     'g_texdata_array2[2].tex[1]' ( uniform texture1D)
+0:?     'g_texdata_array2[2].samp' ( uniform 2-element array of sampler)
+0:?     'g_texdata_array2[2].tex' ( uniform 2-element array of texture1D)
 0:?     'g_texdata_array2[2].nonopaque_thing' ( uniform int)
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
@@ -107,8 +107,14 @@
 0:26                0.400000
 0:27          texture ( temp 4-component vector of float)
 0:27            Construct combined texture-sampler ( temp sampler1D)
-0:?               'g_texdata_array2[1].tex[0]' ( uniform texture1D)
-0:?               'g_texdata_array2[1].samp[0]' ( uniform sampler)
+0:27              direct index ( temp texture1D)
+0:?                 'g_texdata_array2[1].tex' ( uniform 2-element array of texture1D)
+0:27                Constant:
+0:27                  0 (const int)
+0:27              direct index ( temp sampler)
+0:?                 'g_texdata_array2[1].samp' ( uniform 2-element array of sampler)
+0:27                Constant:
+0:27                  0 (const int)
 0:27            Constant:
 0:27              0.300000
 0:23  Function Definition: main( ( temp void)
@@ -138,32 +144,26 @@
 0:?     'g_texdata_array[2].samp' ( uniform sampler)
 0:?     'g_texdata_array[2].tex' ( uniform texture1D)
 0:?     'g_texdata_array[2].nonopaque_thing' ( uniform int)
-0:?     'g_texdata_array2[0].samp[0]' ( uniform sampler)
-0:?     'g_texdata_array2[0].samp[1]' ( uniform sampler)
-0:?     'g_texdata_array2[0].tex[0]' ( uniform texture1D)
-0:?     'g_texdata_array2[0].tex[1]' ( uniform texture1D)
+0:?     'g_texdata_array2[0].samp' ( uniform 2-element array of sampler)
+0:?     'g_texdata_array2[0].tex' ( uniform 2-element array of texture1D)
 0:?     'g_texdata_array2[0].nonopaque_thing' ( uniform int)
-0:?     'g_texdata_array2[1].samp[0]' ( uniform sampler)
-0:?     'g_texdata_array2[1].samp[1]' ( uniform sampler)
-0:?     'g_texdata_array2[1].tex[0]' ( uniform texture1D)
-0:?     'g_texdata_array2[1].tex[1]' ( uniform texture1D)
+0:?     'g_texdata_array2[1].samp' ( uniform 2-element array of sampler)
+0:?     'g_texdata_array2[1].tex' ( uniform 2-element array of texture1D)
 0:?     'g_texdata_array2[1].nonopaque_thing' ( uniform int)
-0:?     'g_texdata_array2[2].samp[0]' ( uniform sampler)
-0:?     'g_texdata_array2[2].samp[1]' ( uniform sampler)
-0:?     'g_texdata_array2[2].tex[0]' ( uniform texture1D)
-0:?     'g_texdata_array2[2].tex[1]' ( uniform texture1D)
+0:?     'g_texdata_array2[2].samp' ( uniform 2-element array of sampler)
+0:?     'g_texdata_array2[2].tex' ( uniform 2-element array of texture1D)
 0:?     'g_texdata_array2[2].nonopaque_thing' ( uniform int)
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 78
+// Generated by (magic number): 80002
+// Id's are bound by 80
 
                               Capability Shader
                               Capability Sampled1D
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 51
+                              EntryPoint Fragment 4  "main" 59
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -175,57 +175,45 @@
                               Name 22  "g_texdata.samp"
                               Name 28  "g_texdata_array[1].tex"
                               Name 30  "g_texdata_array[1].samp"
-                              Name 36  "g_texdata_array2[1].tex[0]"
-                              Name 38  "g_texdata_array2[1].samp[0]"
-                              Name 46  "ps_output"
-                              Name 47  "param"
-                              Name 51  "ps_output.color"
-                              Name 54  "g_samp"
-                              Name 55  "g_tex"
-                              Name 57  "g_texdata.nonopaque_thing"
-                              Name 58  "g_texdata_array[0].samp"
-                              Name 59  "g_texdata_array[0].tex"
-                              Name 60  "g_texdata_array[0].nonopaque_thing"
-                              Name 61  "g_texdata_array[1].nonopaque_thing"
-                              Name 62  "g_texdata_array[2].samp"
-                              Name 63  "g_texdata_array[2].tex"
-                              Name 64  "g_texdata_array[2].nonopaque_thing"
-                              Name 65  "g_texdata_array2[0].samp[0]"
-                              Name 66  "g_texdata_array2[0].samp[1]"
-                              Name 67  "g_texdata_array2[0].tex[0]"
-                              Name 68  "g_texdata_array2[0].tex[1]"
-                              Name 69  "g_texdata_array2[0].nonopaque_thing"
-                              Name 70  "g_texdata_array2[1].samp[1]"
-                              Name 71  "g_texdata_array2[1].tex[1]"
-                              Name 72  "g_texdata_array2[1].nonopaque_thing"
-                              Name 73  "g_texdata_array2[2].samp[0]"
-                              Name 74  "g_texdata_array2[2].samp[1]"
-                              Name 75  "g_texdata_array2[2].tex[0]"
-                              Name 76  "g_texdata_array2[2].tex[1]"
-                              Name 77  "g_texdata_array2[2].nonopaque_thing"
+                              Name 40  "g_texdata_array2[1].tex"
+                              Name 45  "g_texdata_array2[1].samp"
+                              Name 54  "ps_output"
+                              Name 55  "param"
+                              Name 59  "ps_output.color"
+                              Name 62  "g_samp"
+                              Name 63  "g_tex"
+                              Name 65  "g_texdata.nonopaque_thing"
+                              Name 66  "g_texdata_array[0].samp"
+                              Name 67  "g_texdata_array[0].tex"
+                              Name 68  "g_texdata_array[0].nonopaque_thing"
+                              Name 69  "g_texdata_array[1].nonopaque_thing"
+                              Name 70  "g_texdata_array[2].samp"
+                              Name 71  "g_texdata_array[2].tex"
+                              Name 72  "g_texdata_array[2].nonopaque_thing"
+                              Name 73  "g_texdata_array2[0].samp"
+                              Name 74  "g_texdata_array2[0].tex"
+                              Name 75  "g_texdata_array2[0].nonopaque_thing"
+                              Name 76  "g_texdata_array2[1].nonopaque_thing"
+                              Name 77  "g_texdata_array2[2].samp"
+                              Name 78  "g_texdata_array2[2].tex"
+                              Name 79  "g_texdata_array2[2].nonopaque_thing"
                               Decorate 18(g_texdata.tex) DescriptorSet 0
                               Decorate 22(g_texdata.samp) DescriptorSet 0
                               Decorate 28(g_texdata_array[1].tex) DescriptorSet 0
                               Decorate 30(g_texdata_array[1].samp) DescriptorSet 0
-                              Decorate 36(g_texdata_array2[1].tex[0]) DescriptorSet 0
-                              Decorate 38(g_texdata_array2[1].samp[0]) DescriptorSet 0
-                              Decorate 51(ps_output.color) Location 0
-                              Decorate 54(g_samp) DescriptorSet 0
-                              Decorate 55(g_tex) DescriptorSet 0
-                              Decorate 58(g_texdata_array[0].samp) DescriptorSet 0
-                              Decorate 59(g_texdata_array[0].tex) DescriptorSet 0
-                              Decorate 62(g_texdata_array[2].samp) DescriptorSet 0
-                              Decorate 63(g_texdata_array[2].tex) DescriptorSet 0
-                              Decorate 65(g_texdata_array2[0].samp[0]) DescriptorSet 0
-                              Decorate 66(g_texdata_array2[0].samp[1]) DescriptorSet 0
-                              Decorate 67(g_texdata_array2[0].tex[0]) DescriptorSet 0
-                              Decorate 68(g_texdata_array2[0].tex[1]) DescriptorSet 0
-                              Decorate 70(g_texdata_array2[1].samp[1]) DescriptorSet 0
-                              Decorate 71(g_texdata_array2[1].tex[1]) DescriptorSet 0
-                              Decorate 73(g_texdata_array2[2].samp[0]) DescriptorSet 0
-                              Decorate 74(g_texdata_array2[2].samp[1]) DescriptorSet 0
-                              Decorate 75(g_texdata_array2[2].tex[0]) DescriptorSet 0
-                              Decorate 76(g_texdata_array2[2].tex[1]) DescriptorSet 0
+                              Decorate 40(g_texdata_array2[1].tex) DescriptorSet 0
+                              Decorate 45(g_texdata_array2[1].samp) DescriptorSet 0
+                              Decorate 59(ps_output.color) Location 0
+                              Decorate 62(g_samp) DescriptorSet 0
+                              Decorate 63(g_tex) DescriptorSet 0
+                              Decorate 66(g_texdata_array[0].samp) DescriptorSet 0
+                              Decorate 67(g_texdata_array[0].tex) DescriptorSet 0
+                              Decorate 70(g_texdata_array[2].samp) DescriptorSet 0
+                              Decorate 71(g_texdata_array[2].tex) DescriptorSet 0
+                              Decorate 73(g_texdata_array2[0].samp) DescriptorSet 0
+                              Decorate 74(g_texdata_array2[0].tex) DescriptorSet 0
+                              Decorate 77(g_texdata_array2[2].samp) DescriptorSet 0
+                              Decorate 78(g_texdata_array2[2].tex) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -246,46 +234,46 @@
 28(g_texdata_array[1].tex):     17(ptr) Variable UniformConstant
 30(g_texdata_array[1].samp):     21(ptr) Variable UniformConstant
               33:    6(float) Constant 1053609165
-36(g_texdata_array2[1].tex[0]):     17(ptr) Variable UniformConstant
-38(g_texdata_array2[1].samp[0]):     21(ptr) Variable UniformConstant
-              41:    6(float) Constant 1050253722
-              44:             TypePointer Function 7(fvec4)
-              50:             TypePointer Output 7(fvec4)
-51(ps_output.color):     50(ptr) Variable Output
-      54(g_samp):     21(ptr) Variable UniformConstant
-       55(g_tex):     17(ptr) Variable UniformConstant
-              56:             TypePointer UniformConstant 14(int)
-57(g_texdata.nonopaque_thing):     56(ptr) Variable UniformConstant
-58(g_texdata_array[0].samp):     21(ptr) Variable UniformConstant
-59(g_texdata_array[0].tex):     17(ptr) Variable UniformConstant
-60(g_texdata_array[0].nonopaque_thing):     56(ptr) Variable UniformConstant
-61(g_texdata_array[1].nonopaque_thing):     56(ptr) Variable UniformConstant
-62(g_texdata_array[2].samp):     21(ptr) Variable UniformConstant
-63(g_texdata_array[2].tex):     17(ptr) Variable UniformConstant
-64(g_texdata_array[2].nonopaque_thing):     56(ptr) Variable UniformConstant
-65(g_texdata_array2[0].samp[0]):     21(ptr) Variable UniformConstant
-66(g_texdata_array2[0].samp[1]):     21(ptr) Variable UniformConstant
-67(g_texdata_array2[0].tex[0]):     17(ptr) Variable UniformConstant
-68(g_texdata_array2[0].tex[1]):     17(ptr) Variable UniformConstant
-69(g_texdata_array2[0].nonopaque_thing):     56(ptr) Variable UniformConstant
-70(g_texdata_array2[1].samp[1]):     21(ptr) Variable UniformConstant
-71(g_texdata_array2[1].tex[1]):     17(ptr) Variable UniformConstant
-72(g_texdata_array2[1].nonopaque_thing):     56(ptr) Variable UniformConstant
-73(g_texdata_array2[2].samp[0]):     21(ptr) Variable UniformConstant
-74(g_texdata_array2[2].samp[1]):     21(ptr) Variable UniformConstant
-75(g_texdata_array2[2].tex[0]):     17(ptr) Variable UniformConstant
-76(g_texdata_array2[2].tex[1]):     17(ptr) Variable UniformConstant
-77(g_texdata_array2[2].nonopaque_thing):     56(ptr) Variable UniformConstant
+              36:             TypeInt 32 0
+              37:     36(int) Constant 2
+              38:             TypeArray 16 37
+              39:             TypePointer UniformConstant 38
+40(g_texdata_array2[1].tex):     39(ptr) Variable UniformConstant
+              43:             TypeArray 20 37
+              44:             TypePointer UniformConstant 43
+45(g_texdata_array2[1].samp):     44(ptr) Variable UniformConstant
+              49:    6(float) Constant 1050253722
+              52:             TypePointer Function 7(fvec4)
+              58:             TypePointer Output 7(fvec4)
+59(ps_output.color):     58(ptr) Variable Output
+      62(g_samp):     21(ptr) Variable UniformConstant
+       63(g_tex):     17(ptr) Variable UniformConstant
+              64:             TypePointer UniformConstant 14(int)
+65(g_texdata.nonopaque_thing):     64(ptr) Variable UniformConstant
+66(g_texdata_array[0].samp):     21(ptr) Variable UniformConstant
+67(g_texdata_array[0].tex):     17(ptr) Variable UniformConstant
+68(g_texdata_array[0].nonopaque_thing):     64(ptr) Variable UniformConstant
+69(g_texdata_array[1].nonopaque_thing):     64(ptr) Variable UniformConstant
+70(g_texdata_array[2].samp):     21(ptr) Variable UniformConstant
+71(g_texdata_array[2].tex):     17(ptr) Variable UniformConstant
+72(g_texdata_array[2].nonopaque_thing):     64(ptr) Variable UniformConstant
+73(g_texdata_array2[0].samp):     44(ptr) Variable UniformConstant
+74(g_texdata_array2[0].tex):     39(ptr) Variable UniformConstant
+75(g_texdata_array2[0].nonopaque_thing):     64(ptr) Variable UniformConstant
+76(g_texdata_array2[1].nonopaque_thing):     64(ptr) Variable UniformConstant
+77(g_texdata_array2[2].samp):     44(ptr) Variable UniformConstant
+78(g_texdata_array2[2].tex):     39(ptr) Variable UniformConstant
+79(g_texdata_array2[2].nonopaque_thing):     64(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-   46(ps_output):      9(ptr) Variable Function
-       47(param):      9(ptr) Variable Function
-              48:           2 FunctionCall 12(@main(struct-PS_OUTPUT-vf41;) 47(param)
-              49:8(PS_OUTPUT) Load 47(param)
-                              Store 46(ps_output) 49
-              52:     44(ptr) AccessChain 46(ps_output) 15
-              53:    7(fvec4) Load 52
-                              Store 51(ps_output.color) 53
+   54(ps_output):      9(ptr) Variable Function
+       55(param):      9(ptr) Variable Function
+              56:           2 FunctionCall 12(@main(struct-PS_OUTPUT-vf41;) 55(param)
+              57:8(PS_OUTPUT) Load 55(param)
+                              Store 54(ps_output) 57
+              60:     52(ptr) AccessChain 54(ps_output) 15
+              61:    7(fvec4) Load 60
+                              Store 59(ps_output.color) 61
                               Return
                               FunctionEnd
 12(@main(struct-PS_OUTPUT-vf41;):           2 Function None 10
@@ -300,12 +288,14 @@
               32:          24 SampledImage 29 31
               34:    7(fvec4) ImageSampleImplicitLod 32 33
               35:    7(fvec4) FAdd 27 34
-              37:          16 Load 36(g_texdata_array2[1].tex[0])
-              39:          20 Load 38(g_texdata_array2[1].samp[0])
-              40:          24 SampledImage 37 39
-              42:    7(fvec4) ImageSampleImplicitLod 40 41
-              43:    7(fvec4) FAdd 35 42
-              45:     44(ptr) AccessChain 11(ps_output) 15
-                              Store 45 43
+              41:     17(ptr) AccessChain 40(g_texdata_array2[1].tex) 15
+              42:          16 Load 41
+              46:     21(ptr) AccessChain 45(g_texdata_array2[1].samp) 15
+              47:          20 Load 46
+              48:          24 SampledImage 42 47
+              50:    7(fvec4) ImageSampleImplicitLod 48 49
+              51:    7(fvec4) FAdd 35 50
+              53:     52(ptr) AccessChain 11(ps_output) 15
+                              Store 53 51
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out
index c11857d..eac315c 100644
--- a/Test/baseResults/hlsl.structarray.flatten.geom.out
+++ b/Test/baseResults/hlsl.structarray.flatten.geom.out
@@ -170,7 +170,7 @@
 0:?     'outStream.uv' (layout( location=1) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 58
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index 039d4e0..1f79b9b 100644
--- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -150,13 +150,13 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 70
+// Generated by (magic number): 80002
+// Id's are bound by 76
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 58 61
+                              EntryPoint Fragment 4  "main" 64 67
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -171,51 +171,55 @@
                               Name 18  "arg_c@count"
                               Name 25  "@main(u1;"
                               Name 24  "pos"
-                              Name 49  "sbuf_a"
-                              Name 50  "sbuf_a@count"
-                              Name 51  "sbuf_c"
-                              Name 52  "sbuf_c@count"
-                              Name 56  "pos"
-                              Name 58  "pos"
-                              Name 61  "@entryPointOutput"
-                              Name 62  "param"
-                              Name 65  "sbuf_a@count"
-                              MemberName 65(sbuf_a@count) 0  "@count"
-                              Name 67  "sbuf_a@count"
-                              Name 68  "sbuf_c@count"
-                              Name 69  "sbuf_unused"
+                              Name 50  "sbuf_a"
+                              Name 52  "sbuf_a@count"
+                              Name 53  "sbuf_c"
+                              Name 54  "sbuf_c@count"
+                              Name 55  "param"
+                              Name 56  "param"
+                              Name 57  "param"
+                              Name 58  "param"
+                              Name 62  "pos"
+                              Name 64  "pos"
+                              Name 67  "@entryPointOutput"
+                              Name 68  "param"
+                              Name 71  "sbuf_a@count"
+                              MemberName 71(sbuf_a@count) 0  "@count"
+                              Name 73  "sbuf_a@count"
+                              Name 74  "sbuf_c@count"
+                              Name 75  "sbuf_unused"
                               Decorate 8 ArrayStride 16
                               MemberDecorate 9 0 Offset 0
                               Decorate 9 BufferBlock
                               Decorate 12 BufferBlock
-                              Decorate 49(sbuf_a) DescriptorSet 0
-                              Decorate 50(sbuf_a@count) DescriptorSet 0
-                              Decorate 51(sbuf_c) DescriptorSet 0
-                              Decorate 52(sbuf_c@count) DescriptorSet 0
-                              Decorate 58(pos) Flat
-                              Decorate 58(pos) Location 0
-                              Decorate 61(@entryPointOutput) Location 0
-                              MemberDecorate 65(sbuf_a@count) 0 Offset 0
-                              Decorate 65(sbuf_a@count) BufferBlock
-                              Decorate 67(sbuf_a@count) DescriptorSet 0
-                              Decorate 68(sbuf_c@count) DescriptorSet 0
-                              Decorate 69(sbuf_unused) DescriptorSet 0
+                              Decorate 50(sbuf_a) DescriptorSet 0
+                              Decorate 52(sbuf_a@count) DescriptorSet 0
+                              Decorate 53(sbuf_c) DescriptorSet 0
+                              Decorate 54(sbuf_c@count) DescriptorSet 0
+                              Decorate 64(pos) Flat
+                              Decorate 64(pos) Location 0
+                              Decorate 67(@entryPointOutput) Location 0
+                              MemberDecorate 71(sbuf_a@count) 0 Offset 0
+                              Decorate 71(sbuf_a@count) BufferBlock
+                              Decorate 73(sbuf_a@count) DescriptorSet 0
+                              Decorate 74(sbuf_c@count) DescriptorSet 0
+                              Decorate 75(sbuf_unused) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypeRuntimeArray 7(fvec4)
                9:             TypeStruct 8
-              10:             TypePointer Uniform 9(struct)
+              10:             TypePointer Function 9(struct)
               11:             TypeInt 32 1
               12:             TypeStruct 11(int)
-              13:             TypePointer Uniform 12(struct)
+              13:             TypePointer Function 12(struct)
               14:             TypeFunction 7(fvec4) 10(ptr) 13(ptr) 10(ptr) 13(ptr)
               21:             TypeInt 32 0
               22:             TypePointer Function 21(int)
               23:             TypeFunction 7(fvec4) 22(ptr)
               27:     11(int) Constant 0
-              28:             TypePointer Uniform 11(int)
+              28:             TypePointer Function 11(int)
               30:     11(int) Constant 1
               31:     21(int) Constant 1
               32:     21(int) Constant 0
@@ -224,31 +228,33 @@
               36:    6(float) Constant 1077936128
               37:    6(float) Constant 1082130432
               38:    7(fvec4) ConstantComposite 34 35 36 37
-              39:             TypePointer Uniform 7(fvec4)
+              39:             TypePointer Function 7(fvec4)
               42:     11(int) Constant 4294967295
-      49(sbuf_a):     10(ptr) Variable Uniform
-50(sbuf_a@count):     13(ptr) Variable Uniform
-      51(sbuf_c):     10(ptr) Variable Uniform
-52(sbuf_c@count):     13(ptr) Variable Uniform
-              57:             TypePointer Input 21(int)
-         58(pos):     57(ptr) Variable Input
-              60:             TypePointer Output 7(fvec4)
-61(@entryPointOutput):     60(ptr) Variable Output
-65(sbuf_a@count):             TypeStruct 11(int)
-              66:             TypePointer Uniform 65(sbuf_a@count)
-67(sbuf_a@count):     66(ptr) Variable Uniform
-68(sbuf_c@count):     66(ptr) Variable Uniform
- 69(sbuf_unused):     10(ptr) Variable Uniform
+              49:             TypePointer Uniform 9(struct)
+      50(sbuf_a):     49(ptr) Variable Uniform
+              51:             TypePointer Uniform 12(struct)
+52(sbuf_a@count):     51(ptr) Variable Uniform
+      53(sbuf_c):     49(ptr) Variable Uniform
+54(sbuf_c@count):     51(ptr) Variable Uniform
+              63:             TypePointer Input 21(int)
+         64(pos):     63(ptr) Variable Input
+              66:             TypePointer Output 7(fvec4)
+67(@entryPointOutput):     66(ptr) Variable Output
+71(sbuf_a@count):             TypeStruct 11(int)
+              72:             TypePointer Uniform 71(sbuf_a@count)
+73(sbuf_a@count):     72(ptr) Variable Uniform
+74(sbuf_c@count):     72(ptr) Variable Uniform
+ 75(sbuf_unused):     49(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
-         56(pos):     22(ptr) Variable Function
-       62(param):     22(ptr) Variable Function
-              59:     21(int) Load 58(pos)
-                              Store 56(pos) 59
-              63:     21(int) Load 56(pos)
-                              Store 62(param) 63
-              64:    7(fvec4) FunctionCall 25(@main(u1;) 62(param)
-                              Store 61(@entryPointOutput) 64
+         62(pos):     22(ptr) Variable Function
+       68(param):     22(ptr) Variable Function
+              65:     21(int) Load 64(pos)
+                              Store 62(pos) 65
+              69:     21(int) Load 62(pos)
+                              Store 68(param) 69
+              70:    7(fvec4) FunctionCall 25(@main(u1;) 68(param)
+                              Store 67(@entryPointOutput) 70
                               Return
                               FunctionEnd
 19(Fn2(block--vf4[0]1;block--vf4[0]1;):    7(fvec4) Function None 14
@@ -271,6 +277,10 @@
    25(@main(u1;):    7(fvec4) Function None 23
          24(pos):     22(ptr) FunctionParameter
               26:             Label
-              53:    7(fvec4) FunctionCall 19(Fn2(block--vf4[0]1;block--vf4[0]1;) 49(sbuf_a) 50(sbuf_a@count) 51(sbuf_c) 52(sbuf_c@count)
-                              ReturnValue 53
+       55(param):     10(ptr) Variable Function
+       56(param):     13(ptr) Variable Function
+       57(param):     10(ptr) Variable Function
+       58(param):     13(ptr) Variable Function
+              59:    7(fvec4) FunctionCall 19(Fn2(block--vf4[0]1;block--vf4[0]1;) 55(param) 56(param) 57(param) 58(param)
+                              ReturnValue 59
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out
index 8f63efe..9ff5bee 100644
--- a/Test/baseResults/hlsl.structbuffer.append.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.frag.out
@@ -124,7 +124,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index 04d780f..2e85173 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -474,7 +474,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 87
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index c5d5dc3..a4084ae 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -324,7 +324,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 114
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index 702d92c..baed6ff 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -176,7 +176,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
index 9ce8358..9b49bc7 100644
--- a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
@@ -180,7 +180,7 @@
 0:?     'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index 2e2a44f..e5e68f1 100644
--- a/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -138,13 +138,13 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 78
+// Generated by (magic number): 80002
+// Id's are bound by 83
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 63 66
+                              EntryPoint Fragment 4  "main" 68 71
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -165,21 +165,24 @@
                               Name 35  "@main(u1;"
                               Name 34  "pos"
                               Name 47  "sbuf2"
-                              Name 48  "sbuf2@count"
-                              Name 50  "sbuf"
-                              Name 52  "param"
+                              Name 49  "sbuf2@count"
+                              Name 52  "sbuf"
                               Name 54  "param"
                               Name 55  "param"
-                              Name 61  "pos"
-                              Name 63  "pos"
-                              Name 66  "@entryPointOutput"
-                              Name 67  "param"
-                              Name 70  "sbuf2@count"
-                              MemberName 70(sbuf2@count) 0  "@count"
-                              Name 72  "sbuf2@count"
-                              Name 75  "sbuf3"
-                              MemberName 75(sbuf3) 0  "@data"
-                              Name 77  "sbuf3"
+                              Name 57  "param"
+                              Name 58  "param"
+                              Name 59  "param"
+                              Name 60  "param"
+                              Name 66  "pos"
+                              Name 68  "pos"
+                              Name 71  "@entryPointOutput"
+                              Name 72  "param"
+                              Name 75  "sbuf2@count"
+                              MemberName 75(sbuf2@count) 0  "@count"
+                              Name 77  "sbuf2@count"
+                              Name 80  "sbuf3"
+                              MemberName 80(sbuf3) 0  "@data"
+                              Name 82  "sbuf3"
                               Decorate 8 ArrayStride 16
                               MemberDecorate 9 0 NonWritable
                               MemberDecorate 9 0 Offset 0
@@ -190,72 +193,74 @@
                               Decorate 18 BufferBlock
                               Decorate 21 BufferBlock
                               Decorate 47(sbuf2) DescriptorSet 0
-                              Decorate 48(sbuf2@count) DescriptorSet 0
-                              Decorate 50(sbuf) DescriptorSet 0
-                              Decorate 50(sbuf) Binding 10
-                              Decorate 63(pos) Flat
-                              Decorate 63(pos) Location 0
-                              Decorate 66(@entryPointOutput) Location 0
-                              MemberDecorate 70(sbuf2@count) 0 Offset 0
-                              Decorate 70(sbuf2@count) BufferBlock
-                              Decorate 72(sbuf2@count) DescriptorSet 0
-                              Decorate 74 ArrayStride 16
-                              MemberDecorate 75(sbuf3) 0 NonWritable
-                              MemberDecorate 75(sbuf3) 0 Offset 0
-                              Decorate 75(sbuf3) BufferBlock
-                              Decorate 77(sbuf3) DescriptorSet 0
-                              Decorate 77(sbuf3) Binding 12
+                              Decorate 49(sbuf2@count) DescriptorSet 0
+                              Decorate 52(sbuf) DescriptorSet 0
+                              Decorate 52(sbuf) Binding 10
+                              Decorate 68(pos) Flat
+                              Decorate 68(pos) Location 0
+                              Decorate 71(@entryPointOutput) Location 0
+                              MemberDecorate 75(sbuf2@count) 0 Offset 0
+                              Decorate 75(sbuf2@count) BufferBlock
+                              Decorate 77(sbuf2@count) DescriptorSet 0
+                              Decorate 79 ArrayStride 16
+                              MemberDecorate 80(sbuf3) 0 NonWritable
+                              MemberDecorate 80(sbuf3) 0 Offset 0
+                              Decorate 80(sbuf3) BufferBlock
+                              Decorate 82(sbuf3) DescriptorSet 0
+                              Decorate 82(sbuf3) Binding 12
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:             TypeVector 6(int) 4
                8:             TypeRuntimeArray 7(ivec4)
                9:             TypeStruct 8
-              10:             TypePointer Uniform 9(struct)
+              10:             TypePointer Function 9(struct)
               11:             TypePointer Function 6(int)
               12:             TypeFunction 7(ivec4) 10(ptr) 11(ptr)
               17:             TypeRuntimeArray 7(ivec4)
               18:             TypeStruct 17
-              19:             TypePointer Uniform 18(struct)
+              19:             TypePointer Function 18(struct)
               20:             TypeInt 32 1
               21:             TypeStruct 20(int)
-              22:             TypePointer Uniform 21(struct)
+              22:             TypePointer Function 21(struct)
               23:             TypePointer Function 7(ivec4)
               24:             TypeFunction 2 19(ptr) 22(ptr) 11(ptr) 23(ptr)
               31:             TypeFloat 32
               32:             TypeVector 31(float) 4
               33:             TypeFunction 32(fvec4) 11(ptr)
               37:     20(int) Constant 0
-              39:             TypePointer Uniform 7(ivec4)
-       47(sbuf2):     19(ptr) Variable Uniform
- 48(sbuf2@count):     22(ptr) Variable Uniform
-              49:      6(int) Constant 2
-        50(sbuf):     10(ptr) Variable Uniform
-              51:      6(int) Constant 3
-              57:   31(float) Constant 0
-              58:   32(fvec4) ConstantComposite 57 57 57 57
-              62:             TypePointer Input 6(int)
-         63(pos):     62(ptr) Variable Input
-              65:             TypePointer Output 32(fvec4)
-66(@entryPointOutput):     65(ptr) Variable Output
- 70(sbuf2@count):             TypeStruct 20(int)
-              71:             TypePointer Uniform 70(sbuf2@count)
- 72(sbuf2@count):     71(ptr) Variable Uniform
-              73:             TypeVector 6(int) 3
-              74:             TypeRuntimeArray 73(ivec3)
-       75(sbuf3):             TypeStruct 74
-              76:             TypePointer Uniform 75(sbuf3)
-       77(sbuf3):     76(ptr) Variable Uniform
+              46:             TypePointer Uniform 18(struct)
+       47(sbuf2):     46(ptr) Variable Uniform
+              48:             TypePointer Uniform 21(struct)
+ 49(sbuf2@count):     48(ptr) Variable Uniform
+              50:      6(int) Constant 2
+              51:             TypePointer Uniform 9(struct)
+        52(sbuf):     51(ptr) Variable Uniform
+              53:      6(int) Constant 3
+              62:   31(float) Constant 0
+              63:   32(fvec4) ConstantComposite 62 62 62 62
+              67:             TypePointer Input 6(int)
+         68(pos):     67(ptr) Variable Input
+              70:             TypePointer Output 32(fvec4)
+71(@entryPointOutput):     70(ptr) Variable Output
+ 75(sbuf2@count):             TypeStruct 20(int)
+              76:             TypePointer Uniform 75(sbuf2@count)
+ 77(sbuf2@count):     76(ptr) Variable Uniform
+              78:             TypeVector 6(int) 3
+              79:             TypeRuntimeArray 78(ivec3)
+       80(sbuf3):             TypeStruct 79
+              81:             TypePointer Uniform 80(sbuf3)
+       82(sbuf3):     81(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
-         61(pos):     11(ptr) Variable Function
-       67(param):     11(ptr) Variable Function
-              64:      6(int) Load 63(pos)
-                              Store 61(pos) 64
-              68:      6(int) Load 61(pos)
-                              Store 67(param) 68
-              69:   32(fvec4) FunctionCall 35(@main(u1;) 67(param)
-                              Store 66(@entryPointOutput) 69
+         66(pos):     11(ptr) Variable Function
+       72(param):     11(ptr) Variable Function
+              69:      6(int) Load 68(pos)
+                              Store 66(pos) 69
+              73:      6(int) Load 66(pos)
+                              Store 72(param) 73
+              74:   32(fvec4) FunctionCall 35(@main(u1;) 72(param)
+                              Store 71(@entryPointOutput) 74
                               Return
                               FunctionEnd
 15(get(block--vu4[0]1;u1;):    7(ivec4) Function None 12
@@ -263,9 +268,9 @@
 14(bufferOffset):     11(ptr) FunctionParameter
               16:             Label
               38:      6(int) Load 14(bufferOffset)
-              40:     39(ptr) AccessChain 13(sb) 37 38
-              41:    7(ivec4) Load 40
-                              ReturnValue 41
+              39:     23(ptr) AccessChain 13(sb) 37 38
+              40:    7(ivec4) Load 39
+                              ReturnValue 40
                               FunctionEnd
 29(set(block--vu4[0]1;u1;vu4;):           2 Function None 24
           25(sb):     19(ptr) FunctionParameter
@@ -273,22 +278,25 @@
 27(bufferOffset):     11(ptr) FunctionParameter
         28(data):     23(ptr) FunctionParameter
               30:             Label
-              44:      6(int) Load 27(bufferOffset)
-              45:    7(ivec4) Load 28(data)
-              46:     39(ptr) AccessChain 25(sb) 37 44
-                              Store 46 45
+              43:      6(int) Load 27(bufferOffset)
+              44:    7(ivec4) Load 28(data)
+              45:     23(ptr) AccessChain 25(sb) 37 43
+                              Store 45 44
                               Return
                               FunctionEnd
    35(@main(u1;):   32(fvec4) Function None 33
          34(pos):     11(ptr) FunctionParameter
               36:             Label
-       52(param):     11(ptr) Variable Function
-       54(param):     11(ptr) Variable Function
-       55(param):     23(ptr) Variable Function
-                              Store 52(param) 51
-              53:    7(ivec4) FunctionCall 15(get(block--vu4[0]1;u1;) 50(sbuf) 52(param)
-                              Store 54(param) 49
+       54(param):     10(ptr) Variable Function
+       55(param):     11(ptr) Variable Function
+       57(param):     19(ptr) Variable Function
+       58(param):     22(ptr) Variable Function
+       59(param):     11(ptr) Variable Function
+       60(param):     23(ptr) Variable Function
                               Store 55(param) 53
-              56:           2 FunctionCall 29(set(block--vu4[0]1;u1;vu4;) 47(sbuf2) 48(sbuf2@count) 54(param) 55(param)
-                              ReturnValue 58
+              56:    7(ivec4) FunctionCall 15(get(block--vu4[0]1;u1;) 54(param) 55(param)
+                              Store 59(param) 50
+                              Store 60(param) 56
+              61:           2 FunctionCall 29(set(block--vu4[0]1;u1;vu4;) 57(param) 58(param) 59(param) 60(param)
+                              ReturnValue 63
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
index efe5fe3..bb84b99 100644
--- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
@@ -134,15 +134,15 @@
 0:?     'dispatchId' ( in uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 61
+// Generated by (magic number): 80002
+// Id's are bound by 62
 
                               Capability Shader
                               Capability ImageBuffer
                               Capability StorageImageExtendedFormats
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 56
+                              EntryPoint GLCompute 4  "main" 57
                               ExecutionMode 4 LocalSize 256 1 1
                               Source HLSL 500
                               Name 4  "main"
@@ -155,13 +155,14 @@
                               Name 18  "dispatchId"
                               Name 22  "result"
                               Name 25  "byteAddrTemp"
-                              Name 43  "result"
+                              Name 42  "result"
                               Name 44  "g_input"
                               Name 45  "param"
-                              Name 50  "g_output"
-                              Name 54  "dispatchId"
-                              Name 56  "dispatchId"
-                              Name 58  "param"
+                              Name 47  "param"
+                              Name 51  "g_output"
+                              Name 55  "dispatchId"
+                              Name 57  "dispatchId"
+                              Name 59  "param"
                               Decorate 8 ArrayStride 4
                               MemberDecorate 9 0 NonWritable
                               MemberDecorate 9 0 Offset 0
@@ -169,16 +170,16 @@
                               Decorate 14(buffer) NonWritable
                               Decorate 44(g_input) DescriptorSet 0
                               Decorate 44(g_input) Binding 0
-                              Decorate 50(g_output) DescriptorSet 0
-                              Decorate 50(g_output) Binding 1
-                              Decorate 56(dispatchId) BuiltIn GlobalInvocationId
+                              Decorate 51(g_output) DescriptorSet 0
+                              Decorate 51(g_output) Binding 1
+                              Decorate 57(dispatchId) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:             TypePointer Function 6(int)
                8:             TypeRuntimeArray 6(int)
                9:             TypeStruct 8
-              10:             TypePointer Uniform 9(struct)
+              10:             TypePointer Function 9(struct)
               11:             TypeVector 6(int) 2
               12:             TypeFunction 11(ivec2) 7(ptr) 10(ptr)
               17:             TypeFunction 2 7(ptr)
@@ -187,23 +188,23 @@
               24:             TypePointer Function 23(int)
               27:     23(int) Constant 2
               29:     23(int) Constant 0
-              31:             TypePointer Uniform 6(int)
-              35:     23(int) Constant 1
-     44(g_input):     10(ptr) Variable Uniform
-              48:             TypeImage 6(int) Buffer nonsampled format:Rg32ui
-              49:             TypePointer UniformConstant 48
-    50(g_output):     49(ptr) Variable UniformConstant
-              55:             TypePointer Input 6(int)
-  56(dispatchId):     55(ptr) Variable Input
+              34:     23(int) Constant 1
+              43:             TypePointer Uniform 9(struct)
+     44(g_input):     43(ptr) Variable Uniform
+              49:             TypeImage 6(int) Buffer nonsampled format:Rg32ui
+              50:             TypePointer UniformConstant 49
+    51(g_output):     50(ptr) Variable UniformConstant
+              56:             TypePointer Input 6(int)
+  57(dispatchId):     56(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-  54(dispatchId):      7(ptr) Variable Function
-       58(param):      7(ptr) Variable Function
-              57:      6(int) Load 56(dispatchId)
-                              Store 54(dispatchId) 57
-              59:      6(int) Load 54(dispatchId)
-                              Store 58(param) 59
-              60:           2 FunctionCall 19(@main(u1;) 58(param)
+  55(dispatchId):      7(ptr) Variable Function
+       59(param):      7(ptr) Variable Function
+              58:      6(int) Load 57(dispatchId)
+                              Store 55(dispatchId) 58
+              60:      6(int) Load 55(dispatchId)
+                              Store 59(param) 60
+              61:           2 FunctionCall 19(@main(u1;) 59(param)
                               Return
                               FunctionEnd
 15(testLoad(u1;block--u1[0]1;):   11(ivec2) Function None 12
@@ -216,29 +217,30 @@
               28:     23(int) ShiftRightLogical 26 27
                               Store 25(byteAddrTemp) 28
               30:     23(int) Load 25(byteAddrTemp)
-              32:     31(ptr) AccessChain 14(buffer) 29 30
-              33:      6(int) Load 32
-              34:     23(int) Load 25(byteAddrTemp)
-              36:     23(int) IAdd 34 35
-              37:     31(ptr) AccessChain 14(buffer) 29 36
-              38:      6(int) Load 37
-              39:   11(ivec2) CompositeConstruct 33 38
-                              Store 22(result) 39
-              40:   11(ivec2) Load 22(result)
-                              ReturnValue 40
+              31:      7(ptr) AccessChain 14(buffer) 29 30
+              32:      6(int) Load 31
+              33:     23(int) Load 25(byteAddrTemp)
+              35:     23(int) IAdd 33 34
+              36:      7(ptr) AccessChain 14(buffer) 29 35
+              37:      6(int) Load 36
+              38:   11(ivec2) CompositeConstruct 32 37
+                              Store 22(result) 38
+              39:   11(ivec2) Load 22(result)
+                              ReturnValue 39
                               FunctionEnd
    19(@main(u1;):           2 Function None 17
   18(dispatchId):      7(ptr) FunctionParameter
               20:             Label
-      43(result):     21(ptr) Variable Function
+      42(result):     21(ptr) Variable Function
        45(param):      7(ptr) Variable Function
+       47(param):     10(ptr) Variable Function
               46:      6(int) Load 18(dispatchId)
                               Store 45(param) 46
-              47:   11(ivec2) FunctionCall 15(testLoad(u1;block--u1[0]1;) 45(param) 44(g_input)
-                              Store 43(result) 47
-              51:          48 Load 50(g_output)
-              52:      6(int) Load 18(dispatchId)
-              53:   11(ivec2) Load 43(result)
-                              ImageWrite 51 52 53
+              48:   11(ivec2) FunctionCall 15(testLoad(u1;block--u1[0]1;) 45(param) 47(param)
+                              Store 42(result) 48
+              52:          49 Load 51(g_output)
+              53:      6(int) Load 18(dispatchId)
+              54:   11(ivec2) Load 42(result)
+                              ImageWrite 52 53 54
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index a60ce80..187a41b 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -188,7 +188,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
index 6584210..a63fcbe 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
@@ -204,7 +204,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index 6d529dd..87d50f0 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -176,7 +176,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 80bc107..77c2744 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1006,7 +1006,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 240
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out
index accd793..45304f5 100755
--- a/Test/baseResults/hlsl.structin.vert.out
+++ b/Test/baseResults/hlsl.structin.vert.out
@@ -340,7 +340,7 @@
 0:?     'e' (layout( location=5) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.subpass.frag.out b/Test/baseResults/hlsl.subpass.frag.out
new file mode 100644
index 0000000..470699a
--- /dev/null
+++ b/Test/baseResults/hlsl.subpass.frag.out
@@ -0,0 +1,777 @@
+hlsl.subpass.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:68  Function Definition: @main( ( temp 4-component vector of float)
+0:68    Function Parameters: 
+0:?     Sequence
+0:69      Sequence
+0:69        move second child to first child ( temp 4-component vector of float)
+0:69          'result00' ( temp 4-component vector of float)
+0:69          subpassLoad ( temp 4-component vector of float)
+0:69            'subpass_f4' (layout( binding=1 input_attachment_index=1) uniform subpassInput)
+0:70      Sequence
+0:70        move second child to first child ( temp 4-component vector of int)
+0:70          'result01' ( temp 4-component vector of int)
+0:70          subpassLoad ( temp 4-component vector of int)
+0:70            'subpass_i4' ( uniform isubpassInput)
+0:71      Sequence
+0:71        move second child to first child ( temp 4-component vector of uint)
+0:71          'result02' ( temp 4-component vector of uint)
+0:71          subpassLoad ( temp 4-component vector of uint)
+0:71            'subpass_u4' ( uniform usubpassInput)
+0:73      Sequence
+0:73        move second child to first child ( temp 4-component vector of float)
+0:73          'result10' ( temp 4-component vector of float)
+0:73          subpassLoadMS ( temp 4-component vector of float)
+0:73            'subpass_ms_f4' ( uniform subpassInputMS)
+0:73            Constant:
+0:73              3 (const int)
+0:74      Sequence
+0:74        move second child to first child ( temp 4-component vector of int)
+0:74          'result11' ( temp 4-component vector of int)
+0:74          subpassLoadMS ( temp 4-component vector of int)
+0:74            'subpass_ms_i4' ( uniform isubpassInputMS)
+0:74            Constant:
+0:74              3 (const int)
+0:75      Sequence
+0:75        move second child to first child ( temp 4-component vector of uint)
+0:75          'result12' ( temp 4-component vector of uint)
+0:75          subpassLoadMS ( temp 4-component vector of uint)
+0:75            'subpass_ms_u4' ( uniform usubpassInputMS)
+0:75            Constant:
+0:75              3 (const int)
+0:77      Sequence
+0:77        move second child to first child ( temp 3-component vector of float)
+0:77          'result20' ( temp 3-component vector of float)
+0:77          Construct vec3 ( temp 3-component vector of float)
+0:77            subpassLoad ( temp 4-component vector of float)
+0:77              'subpass_f3' ( uniform subpassInput)
+0:78      Sequence
+0:78        move second child to first child ( temp 3-component vector of int)
+0:78          'result21' ( temp 3-component vector of int)
+0:78          Construct ivec3 ( temp 3-component vector of int)
+0:78            subpassLoad ( temp 4-component vector of int)
+0:78              'subpass_i3' ( uniform isubpassInput)
+0:79      Sequence
+0:79        move second child to first child ( temp 3-component vector of uint)
+0:79          'result22' ( temp 3-component vector of uint)
+0:79          Construct uvec3 ( temp 3-component vector of uint)
+0:79            subpassLoad ( temp 4-component vector of uint)
+0:79              'subpass_u3' ( uniform usubpassInput)
+0:81      Sequence
+0:81        move second child to first child ( temp 3-component vector of float)
+0:81          'result30' ( temp 3-component vector of float)
+0:81          Construct vec3 ( temp 3-component vector of float)
+0:81            subpassLoadMS ( temp 4-component vector of float)
+0:81              'subpass_ms_f3' ( uniform subpassInputMS)
+0:81              Constant:
+0:81                3 (const int)
+0:82      Sequence
+0:82        move second child to first child ( temp 3-component vector of int)
+0:82          'result31' ( temp 3-component vector of int)
+0:82          Construct ivec3 ( temp 3-component vector of int)
+0:82            subpassLoadMS ( temp 4-component vector of int)
+0:82              'subpass_ms_i3' ( uniform isubpassInputMS)
+0:82              Constant:
+0:82                3 (const int)
+0:83      Sequence
+0:83        move second child to first child ( temp 3-component vector of uint)
+0:83          'result32' ( temp 3-component vector of uint)
+0:83          Construct uvec3 ( temp 3-component vector of uint)
+0:83            subpassLoadMS ( temp 4-component vector of uint)
+0:83              'subpass_ms_u3' ( uniform usubpassInputMS)
+0:83              Constant:
+0:83                3 (const int)
+0:85      Sequence
+0:85        move second child to first child ( temp 2-component vector of float)
+0:85          'result40' ( temp 2-component vector of float)
+0:85          Construct vec2 ( temp 2-component vector of float)
+0:85            subpassLoad ( temp 4-component vector of float)
+0:85              'subpass_f2' ( uniform subpassInput)
+0:86      Sequence
+0:86        move second child to first child ( temp 2-component vector of int)
+0:86          'result41' ( temp 2-component vector of int)
+0:86          Construct ivec2 ( temp 2-component vector of int)
+0:86            subpassLoad ( temp 4-component vector of int)
+0:86              'subpass_i2' ( uniform isubpassInput)
+0:87      Sequence
+0:87        move second child to first child ( temp 2-component vector of uint)
+0:87          'result42' ( temp 2-component vector of uint)
+0:87          Construct uvec2 ( temp 2-component vector of uint)
+0:87            subpassLoad ( temp 4-component vector of uint)
+0:87              'subpass_u2' ( uniform usubpassInput)
+0:89      Sequence
+0:89        move second child to first child ( temp 2-component vector of float)
+0:89          'result50' ( temp 2-component vector of float)
+0:89          Construct vec2 ( temp 2-component vector of float)
+0:89            subpassLoadMS ( temp 4-component vector of float)
+0:89              'subpass_ms_f2' ( uniform subpassInputMS)
+0:89              Constant:
+0:89                2 (const int)
+0:90      Sequence
+0:90        move second child to first child ( temp 2-component vector of int)
+0:90          'result51' ( temp 2-component vector of int)
+0:90          Construct ivec2 ( temp 2-component vector of int)
+0:90            subpassLoadMS ( temp 4-component vector of int)
+0:90              'subpass_ms_i2' ( uniform isubpassInputMS)
+0:90              Constant:
+0:90                2 (const int)
+0:91      Sequence
+0:91        move second child to first child ( temp 2-component vector of uint)
+0:91          'result52' ( temp 2-component vector of uint)
+0:91          Construct uvec2 ( temp 2-component vector of uint)
+0:91            subpassLoadMS ( temp 4-component vector of uint)
+0:91              'subpass_ms_u2' ( uniform usubpassInputMS)
+0:91              Constant:
+0:91                2 (const int)
+0:93      Sequence
+0:93        move second child to first child ( temp float)
+0:93          'result60' ( temp float)
+0:93          Construct float ( temp float)
+0:93            subpassLoad ( temp 4-component vector of float)
+0:93              'subpass_f' ( uniform subpassInput)
+0:94      Sequence
+0:94        move second child to first child ( temp int)
+0:94          'result61' ( temp int)
+0:94          Construct int ( temp int)
+0:94            subpassLoad ( temp 4-component vector of int)
+0:94              'subpass_i' ( uniform isubpassInput)
+0:95      Sequence
+0:95        move second child to first child ( temp uint)
+0:95          'result62' ( temp uint)
+0:95          Construct uint ( temp uint)
+0:95            subpassLoad ( temp 4-component vector of uint)
+0:95              'subpass_u' ( uniform usubpassInput)
+0:97      Sequence
+0:97        move second child to first child ( temp float)
+0:97          'result70' ( temp float)
+0:97          Construct float ( temp float)
+0:97            subpassLoadMS ( temp 4-component vector of float)
+0:97              'subpass_ms_f' ( uniform subpassInputMS)
+0:97              Constant:
+0:97                2 (const int)
+0:98      Sequence
+0:98        move second child to first child ( temp int)
+0:98          'result71' ( temp int)
+0:98          Construct int ( temp int)
+0:98            subpassLoadMS ( temp 4-component vector of int)
+0:98              'subpass_ms_i' ( uniform isubpassInputMS)
+0:98              Constant:
+0:98                2 (const int)
+0:99      Sequence
+0:99        move second child to first child ( temp uint)
+0:99          'result72' ( temp uint)
+0:99          Construct uint ( temp uint)
+0:99            subpassLoadMS ( temp 4-component vector of uint)
+0:99              'subpass_ms_u' ( uniform usubpassInputMS)
+0:99              Constant:
+0:99                2 (const int)
+0:101      Sequence
+0:101        move second child to first child ( temp 4-component vector of float)
+0:101          'result73' ( temp 4-component vector of float)
+0:101          subpassLoad ( temp 4-component vector of float)
+0:101            'subpass_2' ( uniform subpassInput)
+0:112      Branch: Return with expression
+0:112        Constant:
+0:112          0.000000
+0:112          0.000000
+0:112          0.000000
+0:112          0.000000
+0:68  Function Definition: main( ( temp void)
+0:68    Function Parameters: 
+0:?     Sequence
+0:68      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:68        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'subpass_f4' (layout( binding=1 input_attachment_index=1) uniform subpassInput)
+0:?     'subpass_i4' ( uniform isubpassInput)
+0:?     'subpass_u4' ( uniform usubpassInput)
+0:?     'subpass_ms_f4' ( uniform subpassInputMS)
+0:?     'subpass_ms_i4' ( uniform isubpassInputMS)
+0:?     'subpass_ms_u4' ( uniform usubpassInputMS)
+0:?     'subpass_f3' ( uniform subpassInput)
+0:?     'subpass_i3' ( uniform isubpassInput)
+0:?     'subpass_u3' ( uniform usubpassInput)
+0:?     'subpass_ms_f3' ( uniform subpassInputMS)
+0:?     'subpass_ms_i3' ( uniform isubpassInputMS)
+0:?     'subpass_ms_u3' ( uniform usubpassInputMS)
+0:?     'subpass_f2' ( uniform subpassInput)
+0:?     'subpass_i2' ( uniform isubpassInput)
+0:?     'subpass_u2' ( uniform usubpassInput)
+0:?     'subpass_ms_f2' ( uniform subpassInputMS)
+0:?     'subpass_ms_i2' ( uniform isubpassInputMS)
+0:?     'subpass_ms_u2' ( uniform usubpassInputMS)
+0:?     'subpass_f' ( uniform subpassInput)
+0:?     'subpass_i' ( uniform isubpassInput)
+0:?     'subpass_u' ( uniform usubpassInput)
+0:?     'subpass_ms_f' ( uniform subpassInputMS)
+0:?     'subpass_ms_i' ( uniform isubpassInputMS)
+0:?     'subpass_ms_u' ( uniform usubpassInputMS)
+0:?     'subpass_2' ( uniform subpassInput)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:68  Function Definition: @main( ( temp 4-component vector of float)
+0:68    Function Parameters: 
+0:?     Sequence
+0:69      Sequence
+0:69        move second child to first child ( temp 4-component vector of float)
+0:69          'result00' ( temp 4-component vector of float)
+0:69          subpassLoad ( temp 4-component vector of float)
+0:69            'subpass_f4' (layout( binding=1 input_attachment_index=1) uniform subpassInput)
+0:70      Sequence
+0:70        move second child to first child ( temp 4-component vector of int)
+0:70          'result01' ( temp 4-component vector of int)
+0:70          subpassLoad ( temp 4-component vector of int)
+0:70            'subpass_i4' ( uniform isubpassInput)
+0:71      Sequence
+0:71        move second child to first child ( temp 4-component vector of uint)
+0:71          'result02' ( temp 4-component vector of uint)
+0:71          subpassLoad ( temp 4-component vector of uint)
+0:71            'subpass_u4' ( uniform usubpassInput)
+0:73      Sequence
+0:73        move second child to first child ( temp 4-component vector of float)
+0:73          'result10' ( temp 4-component vector of float)
+0:73          subpassLoadMS ( temp 4-component vector of float)
+0:73            'subpass_ms_f4' ( uniform subpassInputMS)
+0:73            Constant:
+0:73              3 (const int)
+0:74      Sequence
+0:74        move second child to first child ( temp 4-component vector of int)
+0:74          'result11' ( temp 4-component vector of int)
+0:74          subpassLoadMS ( temp 4-component vector of int)
+0:74            'subpass_ms_i4' ( uniform isubpassInputMS)
+0:74            Constant:
+0:74              3 (const int)
+0:75      Sequence
+0:75        move second child to first child ( temp 4-component vector of uint)
+0:75          'result12' ( temp 4-component vector of uint)
+0:75          subpassLoadMS ( temp 4-component vector of uint)
+0:75            'subpass_ms_u4' ( uniform usubpassInputMS)
+0:75            Constant:
+0:75              3 (const int)
+0:77      Sequence
+0:77        move second child to first child ( temp 3-component vector of float)
+0:77          'result20' ( temp 3-component vector of float)
+0:77          Construct vec3 ( temp 3-component vector of float)
+0:77            subpassLoad ( temp 4-component vector of float)
+0:77              'subpass_f3' ( uniform subpassInput)
+0:78      Sequence
+0:78        move second child to first child ( temp 3-component vector of int)
+0:78          'result21' ( temp 3-component vector of int)
+0:78          Construct ivec3 ( temp 3-component vector of int)
+0:78            subpassLoad ( temp 4-component vector of int)
+0:78              'subpass_i3' ( uniform isubpassInput)
+0:79      Sequence
+0:79        move second child to first child ( temp 3-component vector of uint)
+0:79          'result22' ( temp 3-component vector of uint)
+0:79          Construct uvec3 ( temp 3-component vector of uint)
+0:79            subpassLoad ( temp 4-component vector of uint)
+0:79              'subpass_u3' ( uniform usubpassInput)
+0:81      Sequence
+0:81        move second child to first child ( temp 3-component vector of float)
+0:81          'result30' ( temp 3-component vector of float)
+0:81          Construct vec3 ( temp 3-component vector of float)
+0:81            subpassLoadMS ( temp 4-component vector of float)
+0:81              'subpass_ms_f3' ( uniform subpassInputMS)
+0:81              Constant:
+0:81                3 (const int)
+0:82      Sequence
+0:82        move second child to first child ( temp 3-component vector of int)
+0:82          'result31' ( temp 3-component vector of int)
+0:82          Construct ivec3 ( temp 3-component vector of int)
+0:82            subpassLoadMS ( temp 4-component vector of int)
+0:82              'subpass_ms_i3' ( uniform isubpassInputMS)
+0:82              Constant:
+0:82                3 (const int)
+0:83      Sequence
+0:83        move second child to first child ( temp 3-component vector of uint)
+0:83          'result32' ( temp 3-component vector of uint)
+0:83          Construct uvec3 ( temp 3-component vector of uint)
+0:83            subpassLoadMS ( temp 4-component vector of uint)
+0:83              'subpass_ms_u3' ( uniform usubpassInputMS)
+0:83              Constant:
+0:83                3 (const int)
+0:85      Sequence
+0:85        move second child to first child ( temp 2-component vector of float)
+0:85          'result40' ( temp 2-component vector of float)
+0:85          Construct vec2 ( temp 2-component vector of float)
+0:85            subpassLoad ( temp 4-component vector of float)
+0:85              'subpass_f2' ( uniform subpassInput)
+0:86      Sequence
+0:86        move second child to first child ( temp 2-component vector of int)
+0:86          'result41' ( temp 2-component vector of int)
+0:86          Construct ivec2 ( temp 2-component vector of int)
+0:86            subpassLoad ( temp 4-component vector of int)
+0:86              'subpass_i2' ( uniform isubpassInput)
+0:87      Sequence
+0:87        move second child to first child ( temp 2-component vector of uint)
+0:87          'result42' ( temp 2-component vector of uint)
+0:87          Construct uvec2 ( temp 2-component vector of uint)
+0:87            subpassLoad ( temp 4-component vector of uint)
+0:87              'subpass_u2' ( uniform usubpassInput)
+0:89      Sequence
+0:89        move second child to first child ( temp 2-component vector of float)
+0:89          'result50' ( temp 2-component vector of float)
+0:89          Construct vec2 ( temp 2-component vector of float)
+0:89            subpassLoadMS ( temp 4-component vector of float)
+0:89              'subpass_ms_f2' ( uniform subpassInputMS)
+0:89              Constant:
+0:89                2 (const int)
+0:90      Sequence
+0:90        move second child to first child ( temp 2-component vector of int)
+0:90          'result51' ( temp 2-component vector of int)
+0:90          Construct ivec2 ( temp 2-component vector of int)
+0:90            subpassLoadMS ( temp 4-component vector of int)
+0:90              'subpass_ms_i2' ( uniform isubpassInputMS)
+0:90              Constant:
+0:90                2 (const int)
+0:91      Sequence
+0:91        move second child to first child ( temp 2-component vector of uint)
+0:91          'result52' ( temp 2-component vector of uint)
+0:91          Construct uvec2 ( temp 2-component vector of uint)
+0:91            subpassLoadMS ( temp 4-component vector of uint)
+0:91              'subpass_ms_u2' ( uniform usubpassInputMS)
+0:91              Constant:
+0:91                2 (const int)
+0:93      Sequence
+0:93        move second child to first child ( temp float)
+0:93          'result60' ( temp float)
+0:93          Construct float ( temp float)
+0:93            subpassLoad ( temp 4-component vector of float)
+0:93              'subpass_f' ( uniform subpassInput)
+0:94      Sequence
+0:94        move second child to first child ( temp int)
+0:94          'result61' ( temp int)
+0:94          Construct int ( temp int)
+0:94            subpassLoad ( temp 4-component vector of int)
+0:94              'subpass_i' ( uniform isubpassInput)
+0:95      Sequence
+0:95        move second child to first child ( temp uint)
+0:95          'result62' ( temp uint)
+0:95          Construct uint ( temp uint)
+0:95            subpassLoad ( temp 4-component vector of uint)
+0:95              'subpass_u' ( uniform usubpassInput)
+0:97      Sequence
+0:97        move second child to first child ( temp float)
+0:97          'result70' ( temp float)
+0:97          Construct float ( temp float)
+0:97            subpassLoadMS ( temp 4-component vector of float)
+0:97              'subpass_ms_f' ( uniform subpassInputMS)
+0:97              Constant:
+0:97                2 (const int)
+0:98      Sequence
+0:98        move second child to first child ( temp int)
+0:98          'result71' ( temp int)
+0:98          Construct int ( temp int)
+0:98            subpassLoadMS ( temp 4-component vector of int)
+0:98              'subpass_ms_i' ( uniform isubpassInputMS)
+0:98              Constant:
+0:98                2 (const int)
+0:99      Sequence
+0:99        move second child to first child ( temp uint)
+0:99          'result72' ( temp uint)
+0:99          Construct uint ( temp uint)
+0:99            subpassLoadMS ( temp 4-component vector of uint)
+0:99              'subpass_ms_u' ( uniform usubpassInputMS)
+0:99              Constant:
+0:99                2 (const int)
+0:101      Sequence
+0:101        move second child to first child ( temp 4-component vector of float)
+0:101          'result73' ( temp 4-component vector of float)
+0:101          subpassLoad ( temp 4-component vector of float)
+0:101            'subpass_2' ( uniform subpassInput)
+0:112      Branch: Return with expression
+0:112        Constant:
+0:112          0.000000
+0:112          0.000000
+0:112          0.000000
+0:112          0.000000
+0:68  Function Definition: main( ( temp void)
+0:68    Function Parameters: 
+0:?     Sequence
+0:68      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:68        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'subpass_f4' (layout( binding=1 input_attachment_index=1) uniform subpassInput)
+0:?     'subpass_i4' ( uniform isubpassInput)
+0:?     'subpass_u4' ( uniform usubpassInput)
+0:?     'subpass_ms_f4' ( uniform subpassInputMS)
+0:?     'subpass_ms_i4' ( uniform isubpassInputMS)
+0:?     'subpass_ms_u4' ( uniform usubpassInputMS)
+0:?     'subpass_f3' ( uniform subpassInput)
+0:?     'subpass_i3' ( uniform isubpassInput)
+0:?     'subpass_u3' ( uniform usubpassInput)
+0:?     'subpass_ms_f3' ( uniform subpassInputMS)
+0:?     'subpass_ms_i3' ( uniform isubpassInputMS)
+0:?     'subpass_ms_u3' ( uniform usubpassInputMS)
+0:?     'subpass_f2' ( uniform subpassInput)
+0:?     'subpass_i2' ( uniform isubpassInput)
+0:?     'subpass_u2' ( uniform usubpassInput)
+0:?     'subpass_ms_f2' ( uniform subpassInputMS)
+0:?     'subpass_ms_i2' ( uniform isubpassInputMS)
+0:?     'subpass_ms_u2' ( uniform usubpassInputMS)
+0:?     'subpass_f' ( uniform subpassInput)
+0:?     'subpass_i' ( uniform isubpassInput)
+0:?     'subpass_u' ( uniform usubpassInput)
+0:?     'subpass_ms_f' ( uniform subpassInputMS)
+0:?     'subpass_ms_i' ( uniform isubpassInputMS)
+0:?     'subpass_ms_u' ( uniform usubpassInputMS)
+0:?     'subpass_2' ( uniform subpassInput)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 204
+
+                              Capability Shader
+                              Capability InputAttachment
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 202
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 12  "result00"
+                              Name 15  "subpass_f4"
+                              Name 24  "result01"
+                              Name 27  "subpass_i4"
+                              Name 33  "result02"
+                              Name 36  "subpass_u4"
+                              Name 39  "result10"
+                              Name 42  "subpass_ms_f4"
+                              Name 46  "result11"
+                              Name 49  "subpass_ms_i4"
+                              Name 52  "result12"
+                              Name 55  "subpass_ms_u4"
+                              Name 60  "result20"
+                              Name 61  "subpass_f3"
+                              Name 70  "result21"
+                              Name 71  "subpass_i3"
+                              Name 80  "result22"
+                              Name 81  "subpass_u3"
+                              Name 88  "result30"
+                              Name 89  "subpass_ms_f3"
+                              Name 96  "result31"
+                              Name 97  "subpass_ms_i3"
+                              Name 104  "result32"
+                              Name 105  "subpass_ms_u3"
+                              Name 114  "result40"
+                              Name 115  "subpass_f2"
+                              Name 122  "result41"
+                              Name 123  "subpass_i2"
+                              Name 131  "result42"
+                              Name 132  "subpass_u2"
+                              Name 138  "result50"
+                              Name 139  "subpass_ms_f2"
+                              Name 146  "result51"
+                              Name 147  "subpass_ms_i2"
+                              Name 153  "result52"
+                              Name 154  "subpass_ms_u2"
+                              Name 161  "result60"
+                              Name 162  "subpass_f"
+                              Name 167  "result61"
+                              Name 168  "subpass_i"
+                              Name 173  "result62"
+                              Name 174  "subpass_u"
+                              Name 178  "result70"
+                              Name 179  "subpass_ms_f"
+                              Name 183  "result71"
+                              Name 184  "subpass_ms_i"
+                              Name 188  "result72"
+                              Name 189  "subpass_ms_u"
+                              Name 193  "result73"
+                              Name 194  "subpass_2"
+                              Name 202  "@entryPointOutput"
+                              Decorate 15(subpass_f4) DescriptorSet 0
+                              Decorate 15(subpass_f4) Binding 1
+                              Decorate 15(subpass_f4) InputAttachmentIndex 1
+                              Decorate 27(subpass_i4) DescriptorSet 0
+                              Decorate 27(subpass_i4) InputAttachmentIndex 2
+                              Decorate 36(subpass_u4) DescriptorSet 0
+                              Decorate 36(subpass_u4) InputAttachmentIndex 3
+                              Decorate 42(subpass_ms_f4) DescriptorSet 0
+                              Decorate 42(subpass_ms_f4) InputAttachmentIndex 4
+                              Decorate 49(subpass_ms_i4) DescriptorSet 0
+                              Decorate 49(subpass_ms_i4) InputAttachmentIndex 5
+                              Decorate 55(subpass_ms_u4) DescriptorSet 0
+                              Decorate 55(subpass_ms_u4) InputAttachmentIndex 6
+                              Decorate 61(subpass_f3) DescriptorSet 0
+                              Decorate 61(subpass_f3) InputAttachmentIndex 1
+                              Decorate 71(subpass_i3) DescriptorSet 0
+                              Decorate 71(subpass_i3) InputAttachmentIndex 2
+                              Decorate 81(subpass_u3) DescriptorSet 0
+                              Decorate 81(subpass_u3) InputAttachmentIndex 3
+                              Decorate 89(subpass_ms_f3) DescriptorSet 0
+                              Decorate 89(subpass_ms_f3) InputAttachmentIndex 4
+                              Decorate 97(subpass_ms_i3) DescriptorSet 0
+                              Decorate 97(subpass_ms_i3) InputAttachmentIndex 5
+                              Decorate 105(subpass_ms_u3) DescriptorSet 0
+                              Decorate 105(subpass_ms_u3) InputAttachmentIndex 6
+                              Decorate 115(subpass_f2) DescriptorSet 0
+                              Decorate 115(subpass_f2) InputAttachmentIndex 1
+                              Decorate 123(subpass_i2) DescriptorSet 0
+                              Decorate 123(subpass_i2) InputAttachmentIndex 2
+                              Decorate 132(subpass_u2) DescriptorSet 0
+                              Decorate 132(subpass_u2) InputAttachmentIndex 3
+                              Decorate 139(subpass_ms_f2) DescriptorSet 0
+                              Decorate 139(subpass_ms_f2) InputAttachmentIndex 4
+                              Decorate 147(subpass_ms_i2) DescriptorSet 0
+                              Decorate 147(subpass_ms_i2) InputAttachmentIndex 5
+                              Decorate 154(subpass_ms_u2) DescriptorSet 0
+                              Decorate 154(subpass_ms_u2) InputAttachmentIndex 6
+                              Decorate 162(subpass_f) DescriptorSet 0
+                              Decorate 162(subpass_f) InputAttachmentIndex 1
+                              Decorate 168(subpass_i) DescriptorSet 0
+                              Decorate 168(subpass_i) InputAttachmentIndex 2
+                              Decorate 174(subpass_u) DescriptorSet 0
+                              Decorate 174(subpass_u) InputAttachmentIndex 3
+                              Decorate 179(subpass_ms_f) DescriptorSet 0
+                              Decorate 179(subpass_ms_f) InputAttachmentIndex 4
+                              Decorate 184(subpass_ms_i) DescriptorSet 0
+                              Decorate 184(subpass_ms_i) InputAttachmentIndex 5
+                              Decorate 189(subpass_ms_u) DescriptorSet 0
+                              Decorate 189(subpass_ms_u) InputAttachmentIndex 6
+                              Decorate 194(subpass_2) DescriptorSet 0
+                              Decorate 194(subpass_2) InputAttachmentIndex 7
+                              Decorate 202(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypePointer Function 7(fvec4)
+              13:             TypeImage 6(float) SubpassData nonsampled format:Unknown
+              14:             TypePointer UniformConstant 13
+  15(subpass_f4):     14(ptr) Variable UniformConstant
+              17:             TypeInt 32 1
+              18:     17(int) Constant 0
+              19:             TypeVector 17(int) 2
+              20:   19(ivec2) ConstantComposite 18 18
+              22:             TypeVector 17(int) 4
+              23:             TypePointer Function 22(ivec4)
+              25:             TypeImage 17(int) SubpassData nonsampled format:Unknown
+              26:             TypePointer UniformConstant 25
+  27(subpass_i4):     26(ptr) Variable UniformConstant
+              30:             TypeInt 32 0
+              31:             TypeVector 30(int) 4
+              32:             TypePointer Function 31(ivec4)
+              34:             TypeImage 30(int) SubpassData nonsampled format:Unknown
+              35:             TypePointer UniformConstant 34
+  36(subpass_u4):     35(ptr) Variable UniformConstant
+              40:             TypeImage 6(float) SubpassData multi-sampled nonsampled format:Unknown
+              41:             TypePointer UniformConstant 40
+42(subpass_ms_f4):     41(ptr) Variable UniformConstant
+              44:     17(int) Constant 3
+              47:             TypeImage 17(int) SubpassData multi-sampled nonsampled format:Unknown
+              48:             TypePointer UniformConstant 47
+49(subpass_ms_i4):     48(ptr) Variable UniformConstant
+              53:             TypeImage 30(int) SubpassData multi-sampled nonsampled format:Unknown
+              54:             TypePointer UniformConstant 53
+55(subpass_ms_u4):     54(ptr) Variable UniformConstant
+              58:             TypeVector 6(float) 3
+              59:             TypePointer Function 58(fvec3)
+  61(subpass_f3):     14(ptr) Variable UniformConstant
+              68:             TypeVector 17(int) 3
+              69:             TypePointer Function 68(ivec3)
+  71(subpass_i3):     26(ptr) Variable UniformConstant
+              78:             TypeVector 30(int) 3
+              79:             TypePointer Function 78(ivec3)
+  81(subpass_u3):     35(ptr) Variable UniformConstant
+89(subpass_ms_f3):     41(ptr) Variable UniformConstant
+97(subpass_ms_i3):     48(ptr) Variable UniformConstant
+105(subpass_ms_u3):     54(ptr) Variable UniformConstant
+             112:             TypeVector 6(float) 2
+             113:             TypePointer Function 112(fvec2)
+ 115(subpass_f2):     14(ptr) Variable UniformConstant
+             121:             TypePointer Function 19(ivec2)
+ 123(subpass_i2):     26(ptr) Variable UniformConstant
+             129:             TypeVector 30(int) 2
+             130:             TypePointer Function 129(ivec2)
+ 132(subpass_u2):     35(ptr) Variable UniformConstant
+139(subpass_ms_f2):     41(ptr) Variable UniformConstant
+             141:     17(int) Constant 2
+147(subpass_ms_i2):     48(ptr) Variable UniformConstant
+154(subpass_ms_u2):     54(ptr) Variable UniformConstant
+             160:             TypePointer Function 6(float)
+  162(subpass_f):     14(ptr) Variable UniformConstant
+             166:             TypePointer Function 17(int)
+  168(subpass_i):     26(ptr) Variable UniformConstant
+             172:             TypePointer Function 30(int)
+  174(subpass_u):     35(ptr) Variable UniformConstant
+179(subpass_ms_f):     41(ptr) Variable UniformConstant
+184(subpass_ms_i):     48(ptr) Variable UniformConstant
+189(subpass_ms_u):     54(ptr) Variable UniformConstant
+  194(subpass_2):     14(ptr) Variable UniformConstant
+             197:    6(float) Constant 0
+             198:    7(fvec4) ConstantComposite 197 197 197 197
+             201:             TypePointer Output 7(fvec4)
+202(@entryPointOutput):    201(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+             203:    7(fvec4) FunctionCall 9(@main()
+                              Store 202(@entryPointOutput) 203
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+    12(result00):     11(ptr) Variable Function
+    24(result01):     23(ptr) Variable Function
+    33(result02):     32(ptr) Variable Function
+    39(result10):     11(ptr) Variable Function
+    46(result11):     23(ptr) Variable Function
+    52(result12):     32(ptr) Variable Function
+    60(result20):     59(ptr) Variable Function
+    70(result21):     69(ptr) Variable Function
+    80(result22):     79(ptr) Variable Function
+    88(result30):     59(ptr) Variable Function
+    96(result31):     69(ptr) Variable Function
+   104(result32):     79(ptr) Variable Function
+   114(result40):    113(ptr) Variable Function
+   122(result41):    121(ptr) Variable Function
+   131(result42):    130(ptr) Variable Function
+   138(result50):    113(ptr) Variable Function
+   146(result51):    121(ptr) Variable Function
+   153(result52):    130(ptr) Variable Function
+   161(result60):    160(ptr) Variable Function
+   167(result61):    166(ptr) Variable Function
+   173(result62):    172(ptr) Variable Function
+   178(result70):    160(ptr) Variable Function
+   183(result71):    166(ptr) Variable Function
+   188(result72):    172(ptr) Variable Function
+   193(result73):     11(ptr) Variable Function
+              16:          13 Load 15(subpass_f4)
+              21:    7(fvec4) ImageRead 16 20
+                              Store 12(result00) 21
+              28:          25 Load 27(subpass_i4)
+              29:   22(ivec4) ImageRead 28 20
+                              Store 24(result01) 29
+              37:          34 Load 36(subpass_u4)
+              38:   31(ivec4) ImageRead 37 20
+                              Store 33(result02) 38
+              43:          40 Load 42(subpass_ms_f4)
+              45:    7(fvec4) ImageRead 43 20 Sample 44
+                              Store 39(result10) 45
+              50:          47 Load 49(subpass_ms_i4)
+              51:   22(ivec4) ImageRead 50 20 Sample 44
+                              Store 46(result11) 51
+              56:          53 Load 55(subpass_ms_u4)
+              57:   31(ivec4) ImageRead 56 20 Sample 44
+                              Store 52(result12) 57
+              62:          13 Load 61(subpass_f3)
+              63:    7(fvec4) ImageRead 62 20
+              64:    6(float) CompositeExtract 63 0
+              65:    6(float) CompositeExtract 63 1
+              66:    6(float) CompositeExtract 63 2
+              67:   58(fvec3) CompositeConstruct 64 65 66
+                              Store 60(result20) 67
+              72:          25 Load 71(subpass_i3)
+              73:   22(ivec4) ImageRead 72 20
+              74:     17(int) CompositeExtract 73 0
+              75:     17(int) CompositeExtract 73 1
+              76:     17(int) CompositeExtract 73 2
+              77:   68(ivec3) CompositeConstruct 74 75 76
+                              Store 70(result21) 77
+              82:          34 Load 81(subpass_u3)
+              83:   31(ivec4) ImageRead 82 20
+              84:     30(int) CompositeExtract 83 0
+              85:     30(int) CompositeExtract 83 1
+              86:     30(int) CompositeExtract 83 2
+              87:   78(ivec3) CompositeConstruct 84 85 86
+                              Store 80(result22) 87
+              90:          40 Load 89(subpass_ms_f3)
+              91:    7(fvec4) ImageRead 90 20 Sample 44
+              92:    6(float) CompositeExtract 91 0
+              93:    6(float) CompositeExtract 91 1
+              94:    6(float) CompositeExtract 91 2
+              95:   58(fvec3) CompositeConstruct 92 93 94
+                              Store 88(result30) 95
+              98:          47 Load 97(subpass_ms_i3)
+              99:   22(ivec4) ImageRead 98 20 Sample 44
+             100:     17(int) CompositeExtract 99 0
+             101:     17(int) CompositeExtract 99 1
+             102:     17(int) CompositeExtract 99 2
+             103:   68(ivec3) CompositeConstruct 100 101 102
+                              Store 96(result31) 103
+             106:          53 Load 105(subpass_ms_u3)
+             107:   31(ivec4) ImageRead 106 20 Sample 44
+             108:     30(int) CompositeExtract 107 0
+             109:     30(int) CompositeExtract 107 1
+             110:     30(int) CompositeExtract 107 2
+             111:   78(ivec3) CompositeConstruct 108 109 110
+                              Store 104(result32) 111
+             116:          13 Load 115(subpass_f2)
+             117:    7(fvec4) ImageRead 116 20
+             118:    6(float) CompositeExtract 117 0
+             119:    6(float) CompositeExtract 117 1
+             120:  112(fvec2) CompositeConstruct 118 119
+                              Store 114(result40) 120
+             124:          25 Load 123(subpass_i2)
+             125:   22(ivec4) ImageRead 124 20
+             126:     17(int) CompositeExtract 125 0
+             127:     17(int) CompositeExtract 125 1
+             128:   19(ivec2) CompositeConstruct 126 127
+                              Store 122(result41) 128
+             133:          34 Load 132(subpass_u2)
+             134:   31(ivec4) ImageRead 133 20
+             135:     30(int) CompositeExtract 134 0
+             136:     30(int) CompositeExtract 134 1
+             137:  129(ivec2) CompositeConstruct 135 136
+                              Store 131(result42) 137
+             140:          40 Load 139(subpass_ms_f2)
+             142:    7(fvec4) ImageRead 140 20 Sample 141
+             143:    6(float) CompositeExtract 142 0
+             144:    6(float) CompositeExtract 142 1
+             145:  112(fvec2) CompositeConstruct 143 144
+                              Store 138(result50) 145
+             148:          47 Load 147(subpass_ms_i2)
+             149:   22(ivec4) ImageRead 148 20 Sample 141
+             150:     17(int) CompositeExtract 149 0
+             151:     17(int) CompositeExtract 149 1
+             152:   19(ivec2) CompositeConstruct 150 151
+                              Store 146(result51) 152
+             155:          53 Load 154(subpass_ms_u2)
+             156:   31(ivec4) ImageRead 155 20 Sample 141
+             157:     30(int) CompositeExtract 156 0
+             158:     30(int) CompositeExtract 156 1
+             159:  129(ivec2) CompositeConstruct 157 158
+                              Store 153(result52) 159
+             163:          13 Load 162(subpass_f)
+             164:    7(fvec4) ImageRead 163 20
+             165:    6(float) CompositeExtract 164 0
+                              Store 161(result60) 165
+             169:          25 Load 168(subpass_i)
+             170:   22(ivec4) ImageRead 169 20
+             171:     17(int) CompositeExtract 170 0
+                              Store 167(result61) 171
+             175:          34 Load 174(subpass_u)
+             176:   31(ivec4) ImageRead 175 20
+             177:     30(int) CompositeExtract 176 0
+                              Store 173(result62) 177
+             180:          40 Load 179(subpass_ms_f)
+             181:    7(fvec4) ImageRead 180 20 Sample 141
+             182:    6(float) CompositeExtract 181 0
+                              Store 178(result70) 182
+             185:          47 Load 184(subpass_ms_i)
+             186:   22(ivec4) ImageRead 185 20 Sample 141
+             187:     17(int) CompositeExtract 186 0
+                              Store 183(result71) 187
+             190:          53 Load 189(subpass_ms_u)
+             191:   31(ivec4) ImageRead 190 20 Sample 141
+             192:     30(int) CompositeExtract 191 0
+                              Store 188(result72) 192
+             195:          13 Load 194(subpass_2)
+             196:    7(fvec4) ImageRead 195 20
+                              Store 193(result73) 196
+                              ReturnValue 198
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
index 9cb52f1..f1e3a4e 100755
--- a/Test/baseResults/hlsl.switch.frag.out
+++ b/Test/baseResults/hlsl.switch.frag.out
@@ -296,7 +296,7 @@
 0:?     'd' (layout( location=2) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out
index 59b432b..380a8bf 100755
--- a/Test/baseResults/hlsl.swizzle.frag.out
+++ b/Test/baseResults/hlsl.swizzle.frag.out
@@ -77,7 +77,7 @@
 0:?     'AmbientColor' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.synthesizeInput.frag.out b/Test/baseResults/hlsl.synthesizeInput.frag.out
index ef58d39..521ff74 100755
--- a/Test/baseResults/hlsl.synthesizeInput.frag.out
+++ b/Test/baseResults/hlsl.synthesizeInput.frag.out
@@ -98,7 +98,7 @@
 0:?     'input.no_interp' (layout( location=1) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.target.frag.out b/Test/baseResults/hlsl.target.frag.out
index b80c284..2a62e85 100755
--- a/Test/baseResults/hlsl.target.frag.out
+++ b/Test/baseResults/hlsl.target.frag.out
@@ -114,7 +114,7 @@
 0:?     'out2' (layout( location=3) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.targetStruct1.frag.out b/Test/baseResults/hlsl.targetStruct1.frag.out
index 6cbd1b3..f1edfbd 100755
--- a/Test/baseResults/hlsl.targetStruct1.frag.out
+++ b/Test/baseResults/hlsl.targetStruct1.frag.out
@@ -184,7 +184,7 @@
 0:?     'po' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.targetStruct2.frag.out b/Test/baseResults/hlsl.targetStruct2.frag.out
index 1fe2751..3800604 100755
--- a/Test/baseResults/hlsl.targetStruct2.frag.out
+++ b/Test/baseResults/hlsl.targetStruct2.frag.out
@@ -184,7 +184,7 @@
 0:?     'po' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.templatetypes.frag.out b/Test/baseResults/hlsl.templatetypes.frag.out
index 9d0cced..88783f6 100644
--- a/Test/baseResults/hlsl.templatetypes.frag.out
+++ b/Test/baseResults/hlsl.templatetypes.frag.out
@@ -508,7 +508,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 153
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texture.struct.frag.out b/Test/baseResults/hlsl.texture.struct.frag.out
index 09af451..2aa7bd2 100644
--- a/Test/baseResults/hlsl.texture.struct.frag.out
+++ b/Test/baseResults/hlsl.texture.struct.frag.out
@@ -838,13 +838,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 233
+// Generated by (magic number): 80002
+// Id's are bound by 240
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 231
+                              EntryPoint Fragment 4  "main" 238
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -867,52 +867,55 @@
                               Name 71  "@sampleStructTemp"
                               Name 87  "s1"
                               Name 88  "@sampleResultShadow"
-                              Name 89  "g_tTex2s1"
-                              Name 97  "@sampleStructTemp"
-                              Name 111  "s2"
-                              Name 112  "@sampleResultShadow"
-                              Name 113  "g_tTex2s2"
-                              Name 121  "@sampleStructTemp"
-                              Name 135  "s3_t"
-                              MemberName 135(s3_t) 0  "c0"
-                              MemberName 135(s3_t) 1  "c1"
-                              Name 137  "s3"
-                              Name 138  "@sampleResultShadow"
-                              Name 139  "g_tTex2s3"
-                              Name 147  "@sampleStructTemp"
-                              Name 159  "s4_t"
-                              MemberName 159(s4_t) 0  "c0"
-                              MemberName 159(s4_t) 1  "c1"
-                              MemberName 159(s4_t) 2  "c2"
-                              Name 161  "s4"
-                              Name 164  "@sampleResultShadow"
-                              Name 167  "g_tTex2s4"
-                              Name 176  "@sampleStructTemp"
-                              Name 193  "s5_t"
-                              MemberName 193(s5_t) 0  "c0"
-                              MemberName 193(s5_t) 1  "c1"
-                              Name 195  "s5"
-                              Name 198  "@sampleResultShadow"
-                              Name 201  "g_tTex2s5"
-                              Name 210  "@sampleStructTemp"
-                              Name 219  "r0"
-                              Name 221  "r1"
-                              Name 223  "r2"
-                              Name 224  "g_tTex2s1a"
-                              Name 231  "@entryPointOutput"
+                              Name 90  "g_tTex2s1"
+                              Name 98  "@sampleStructTemp"
+                              Name 112  "s2"
+                              Name 113  "@sampleResultShadow"
+                              Name 114  "g_tTex2s2"
+                              Name 122  "@sampleStructTemp"
+                              Name 136  "s3_t"
+                              MemberName 136(s3_t) 0  "c0"
+                              MemberName 136(s3_t) 1  "c1"
+                              Name 138  "s3"
+                              Name 139  "@sampleResultShadow"
+                              Name 140  "g_tTex2s3"
+                              Name 148  "@sampleStructTemp"
+                              Name 160  "s4_t"
+                              MemberName 160(s4_t) 0  "c0"
+                              MemberName 160(s4_t) 1  "c1"
+                              MemberName 160(s4_t) 2  "c2"
+                              Name 162  "s4"
+                              Name 165  "@sampleResultShadow"
+                              Name 168  "g_tTex2s4"
+                              Name 177  "@sampleStructTemp"
+                              Name 194  "s5_t"
+                              MemberName 194(s5_t) 0  "c0"
+                              MemberName 194(s5_t) 1  "c1"
+                              Name 196  "s5"
+                              Name 199  "@sampleResultShadow"
+                              Name 202  "g_tTex2s5"
+                              Name 211  "@sampleStructTemp"
+                              Name 220  "r0"
+                              Name 221  "param"
+                              Name 224  "r1"
+                              Name 225  "param"
+                              Name 228  "r2"
+                              Name 229  "g_tTex2s1a"
+                              Name 230  "param"
+                              Name 238  "@entryPointOutput"
                               Decorate 30(g_sSamp) DescriptorSet 0
-                              Decorate 89(g_tTex2s1) DescriptorSet 0
-                              Decorate 113(g_tTex2s2) DescriptorSet 0
-                              Decorate 139(g_tTex2s3) DescriptorSet 0
-                              Decorate 167(g_tTex2s4) DescriptorSet 0
-                              Decorate 201(g_tTex2s5) DescriptorSet 0
-                              Decorate 224(g_tTex2s1a) DescriptorSet 0
-                              Decorate 231(@entryPointOutput) Location 0
+                              Decorate 90(g_tTex2s1) DescriptorSet 0
+                              Decorate 114(g_tTex2s2) DescriptorSet 0
+                              Decorate 140(g_tTex2s3) DescriptorSet 0
+                              Decorate 168(g_tTex2s4) DescriptorSet 0
+                              Decorate 202(g_tTex2s5) DescriptorSet 0
+                              Decorate 229(g_tTex2s1a) DescriptorSet 0
+                              Decorate 238(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeImage 6(float) 2D sampled format:Unknown
-               8:             TypePointer UniformConstant 7
+               8:             TypePointer Function 7
                9:             TypeVector 6(float) 2
         10(s1_t):             TypeStruct 6(float) 9(fvec2) 6(float)
               11:             TypeFunction 10(s1_t) 8(ptr)
@@ -941,54 +944,55 @@
               57:     40(int) Constant 2
               58:     42(int) Constant 3
               70:             TypePointer Function 16(s2_t)
-   89(g_tTex2s1):      8(ptr) Variable UniformConstant
-              93:    6(float) Constant 1036831949
-              94:    6(float) Constant 1038174126
-              95:    9(fvec2) ConstantComposite 93 94
-  113(g_tTex2s2):      8(ptr) Variable UniformConstant
-             117:    6(float) Constant 1045220557
-             118:    6(float) Constant 1045891645
-             119:    9(fvec2) ConstantComposite 117 118
-       135(s3_t):             TypeStruct 9(fvec2) 6(float)
-             136:             TypePointer Function 135(s3_t)
-  139(g_tTex2s3):      8(ptr) Variable UniformConstant
-             143:    6(float) Constant 1050253722
-             144:    6(float) Constant 1050589266
-             145:    9(fvec2) ConstantComposite 143 144
-             158:             TypeVector 40(int) 2
-       159(s4_t):             TypeStruct 40(int) 158(ivec2) 40(int)
-             160:             TypePointer Function 159(s4_t)
-             162:             TypeVector 40(int) 4
-             163:             TypePointer Function 162(ivec4)
-             165:             TypeImage 40(int) 2D sampled format:Unknown
-             166:             TypePointer UniformConstant 165
-  167(g_tTex2s4):    166(ptr) Variable UniformConstant
-             170:             TypeSampledImage 165
-             172:    6(float) Constant 1053609165
-             173:    6(float) Constant 1053944709
-             174:    9(fvec2) ConstantComposite 172 173
-             177:             TypePointer Function 40(int)
-       193(s5_t):             TypeStruct 42(int) 42(int)
-             194:             TypePointer Function 193(s5_t)
-             196:             TypeVector 42(int) 4
-             197:             TypePointer Function 196(ivec4)
-             199:             TypeImage 42(int) 2D sampled format:Unknown
-             200:             TypePointer UniformConstant 199
-  201(g_tTex2s5):    200(ptr) Variable UniformConstant
-             204:             TypeSampledImage 199
-             206:    6(float) Constant 1056964608
-             207:    6(float) Constant 1057132380
-             208:    9(fvec2) ConstantComposite 206 207
-             211:             TypePointer Function 42(int)
- 224(g_tTex2s1a):      8(ptr) Variable UniformConstant
-             226:    6(float) Constant 0
-             227:   21(fvec4) ConstantComposite 226 226 226 226
-             230:             TypePointer Output 21(fvec4)
-231(@entryPointOutput):    230(ptr) Variable Output
+              89:             TypePointer UniformConstant 7
+   90(g_tTex2s1):     89(ptr) Variable UniformConstant
+              94:    6(float) Constant 1036831949
+              95:    6(float) Constant 1038174126
+              96:    9(fvec2) ConstantComposite 94 95
+  114(g_tTex2s2):     89(ptr) Variable UniformConstant
+             118:    6(float) Constant 1045220557
+             119:    6(float) Constant 1045891645
+             120:    9(fvec2) ConstantComposite 118 119
+       136(s3_t):             TypeStruct 9(fvec2) 6(float)
+             137:             TypePointer Function 136(s3_t)
+  140(g_tTex2s3):     89(ptr) Variable UniformConstant
+             144:    6(float) Constant 1050253722
+             145:    6(float) Constant 1050589266
+             146:    9(fvec2) ConstantComposite 144 145
+             159:             TypeVector 40(int) 2
+       160(s4_t):             TypeStruct 40(int) 159(ivec2) 40(int)
+             161:             TypePointer Function 160(s4_t)
+             163:             TypeVector 40(int) 4
+             164:             TypePointer Function 163(ivec4)
+             166:             TypeImage 40(int) 2D sampled format:Unknown
+             167:             TypePointer UniformConstant 166
+  168(g_tTex2s4):    167(ptr) Variable UniformConstant
+             171:             TypeSampledImage 166
+             173:    6(float) Constant 1053609165
+             174:    6(float) Constant 1053944709
+             175:    9(fvec2) ConstantComposite 173 174
+             178:             TypePointer Function 40(int)
+       194(s5_t):             TypeStruct 42(int) 42(int)
+             195:             TypePointer Function 194(s5_t)
+             197:             TypeVector 42(int) 4
+             198:             TypePointer Function 197(ivec4)
+             200:             TypeImage 42(int) 2D sampled format:Unknown
+             201:             TypePointer UniformConstant 200
+  202(g_tTex2s5):    201(ptr) Variable UniformConstant
+             205:             TypeSampledImage 200
+             207:    6(float) Constant 1056964608
+             208:    6(float) Constant 1057132380
+             209:    9(fvec2) ConstantComposite 207 208
+             212:             TypePointer Function 42(int)
+ 229(g_tTex2s1a):     89(ptr) Variable UniformConstant
+             233:    6(float) Constant 0
+             234:   21(fvec4) ConstantComposite 233 233 233 233
+             237:             TypePointer Output 21(fvec4)
+238(@entryPointOutput):    237(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-             232:   21(fvec4) FunctionCall 23(@main()
-                              Store 231(@entryPointOutput) 232
+             239:   21(fvec4) FunctionCall 23(@main()
+                              Store 238(@entryPointOutput) 239
                               Return
                               FunctionEnd
 13(fn1(t2-tx-struct0-1;):    10(s1_t) Function None 11
@@ -1053,132 +1057,141 @@
               24:             Label
           87(s1):     38(ptr) Variable Function
 88(@sampleResultShadow):     25(ptr) Variable Function
-97(@sampleStructTemp):     38(ptr) Variable Function
-         111(s2):     70(ptr) Variable Function
-112(@sampleResultShadow):     25(ptr) Variable Function
-121(@sampleStructTemp):     70(ptr) Variable Function
-         137(s3):    136(ptr) Variable Function
-138(@sampleResultShadow):     25(ptr) Variable Function
-147(@sampleStructTemp):    136(ptr) Variable Function
-         161(s4):    160(ptr) Variable Function
-164(@sampleResultShadow):    163(ptr) Variable Function
-176(@sampleStructTemp):    160(ptr) Variable Function
-         195(s5):    194(ptr) Variable Function
-198(@sampleResultShadow):    197(ptr) Variable Function
-210(@sampleStructTemp):    194(ptr) Variable Function
-         219(r0):     38(ptr) Variable Function
-         221(r1):     70(ptr) Variable Function
-         223(r2):     38(ptr) Variable Function
-              90:           7 Load 89(g_tTex2s1)
-              91:          28 Load 30(g_sSamp)
-              92:          32 SampledImage 90 91
-              96:   21(fvec4) ImageSampleImplicitLod 92 95
-                              Store 88(@sampleResultShadow) 96
-              98:     44(ptr) AccessChain 88(@sampleResultShadow) 43
-              99:    6(float) Load 98
-             100:     44(ptr) AccessChain 97(@sampleStructTemp) 41
-                              Store 100 99
-             101:     44(ptr) AccessChain 88(@sampleResultShadow) 49
-             102:    6(float) Load 101
-             103:     44(ptr) AccessChain 97(@sampleStructTemp) 48 43
-                              Store 103 102
-             104:     44(ptr) AccessChain 88(@sampleResultShadow) 53
-             105:    6(float) Load 104
-             106:     44(ptr) AccessChain 97(@sampleStructTemp) 48 49
-                              Store 106 105
-             107:     44(ptr) AccessChain 88(@sampleResultShadow) 58
-             108:    6(float) Load 107
-             109:     44(ptr) AccessChain 97(@sampleStructTemp) 57
-                              Store 109 108
-             110:    10(s1_t) Load 97(@sampleStructTemp)
-                              Store 87(s1) 110
-             114:           7 Load 113(g_tTex2s2)
-             115:          28 Load 30(g_sSamp)
-             116:          32 SampledImage 114 115
-             120:   21(fvec4) ImageSampleImplicitLod 116 119
-                              Store 112(@sampleResultShadow) 120
-             122:     44(ptr) AccessChain 112(@sampleResultShadow) 43
-             123:    6(float) Load 122
-             124:     44(ptr) AccessChain 121(@sampleStructTemp) 41
-                              Store 124 123
-             125:     44(ptr) AccessChain 112(@sampleResultShadow) 49
-             126:    6(float) Load 125
-             127:     44(ptr) AccessChain 121(@sampleStructTemp) 48 43
-                              Store 127 126
-             128:     44(ptr) AccessChain 112(@sampleResultShadow) 53
-             129:    6(float) Load 128
-             130:     44(ptr) AccessChain 121(@sampleStructTemp) 48 49
-                              Store 130 129
-             131:     44(ptr) AccessChain 112(@sampleResultShadow) 58
-             132:    6(float) Load 131
-             133:     44(ptr) AccessChain 121(@sampleStructTemp) 48 53
-                              Store 133 132
-             134:    16(s2_t) Load 121(@sampleStructTemp)
-                              Store 111(s2) 134
-             140:           7 Load 139(g_tTex2s3)
-             141:          28 Load 30(g_sSamp)
-             142:          32 SampledImage 140 141
-             146:   21(fvec4) ImageSampleImplicitLod 142 145
-                              Store 138(@sampleResultShadow) 146
-             148:     44(ptr) AccessChain 138(@sampleResultShadow) 43
-             149:    6(float) Load 148
-             150:     44(ptr) AccessChain 147(@sampleStructTemp) 41 43
-                              Store 150 149
-             151:     44(ptr) AccessChain 138(@sampleResultShadow) 49
-             152:    6(float) Load 151
-             153:     44(ptr) AccessChain 147(@sampleStructTemp) 41 49
-                              Store 153 152
-             154:     44(ptr) AccessChain 138(@sampleResultShadow) 53
-             155:    6(float) Load 154
-             156:     44(ptr) AccessChain 147(@sampleStructTemp) 48
-                              Store 156 155
-             157:   135(s3_t) Load 147(@sampleStructTemp)
-                              Store 137(s3) 157
-             168:         165 Load 167(g_tTex2s4)
-             169:          28 Load 30(g_sSamp)
-             171:         170 SampledImage 168 169
-             175:  162(ivec4) ImageSampleImplicitLod 171 174
-                              Store 164(@sampleResultShadow) 175
-             178:    177(ptr) AccessChain 164(@sampleResultShadow) 43
-             179:     40(int) Load 178
-             180:    177(ptr) AccessChain 176(@sampleStructTemp) 41
-                              Store 180 179
-             181:    177(ptr) AccessChain 164(@sampleResultShadow) 49
-             182:     40(int) Load 181
-             183:    6(float) ConvertSToF 182
-             184:    177(ptr) AccessChain 176(@sampleStructTemp) 48 43
-                              Store 184 183
-             185:    177(ptr) AccessChain 164(@sampleResultShadow) 53
-             186:     40(int) Load 185
-             187:    6(float) ConvertSToF 186
-             188:    177(ptr) AccessChain 176(@sampleStructTemp) 48 49
-                              Store 188 187
-             189:    177(ptr) AccessChain 164(@sampleResultShadow) 58
-             190:     40(int) Load 189
-             191:    177(ptr) AccessChain 176(@sampleStructTemp) 57
-                              Store 191 190
-             192:   159(s4_t) Load 176(@sampleStructTemp)
-                              Store 161(s4) 192
-             202:         199 Load 201(g_tTex2s5)
-             203:          28 Load 30(g_sSamp)
-             205:         204 SampledImage 202 203
-             209:  196(ivec4) ImageSampleImplicitLod 205 208
-                              Store 198(@sampleResultShadow) 209
-             212:    211(ptr) AccessChain 198(@sampleResultShadow) 43
-             213:     42(int) Load 212
-             214:    211(ptr) AccessChain 210(@sampleStructTemp) 41
-                              Store 214 213
-             215:    211(ptr) AccessChain 198(@sampleResultShadow) 49
-             216:     42(int) Load 215
-             217:    211(ptr) AccessChain 210(@sampleStructTemp) 48
-                              Store 217 216
-             218:   193(s5_t) Load 210(@sampleStructTemp)
-                              Store 195(s5) 218
-             220:    10(s1_t) FunctionCall 13(fn1(t2-tx-struct0-1;) 89(g_tTex2s1)
-                              Store 219(r0) 220
-             222:    16(s2_t) FunctionCall 19(fn1(t2-tx-struct1-1;) 113(g_tTex2s2)
-                              Store 221(r1) 222
-             225:    10(s1_t) FunctionCall 13(fn1(t2-tx-struct0-1;) 224(g_tTex2s1a)
-                              Store 223(r2) 225
-                              ReturnValue 227
+98(@sampleStructTemp):     38(ptr) Variable Function
+         112(s2):     70(ptr) Variable Function
+113(@sampleResultShadow):     25(ptr) Variable Function
+122(@sampleStructTemp):     70(ptr) Variable Function
+         138(s3):    137(ptr) Variable Function
+139(@sampleResultShadow):     25(ptr) Variable Function
+148(@sampleStructTemp):    137(ptr) Variable Function
+         162(s4):    161(ptr) Variable Function
+165(@sampleResultShadow):    164(ptr) Variable Function
+177(@sampleStructTemp):    161(ptr) Variable Function
+         196(s5):    195(ptr) Variable Function
+199(@sampleResultShadow):    198(ptr) Variable Function
+211(@sampleStructTemp):    195(ptr) Variable Function
+         220(r0):     38(ptr) Variable Function
+      221(param):      8(ptr) Variable Function
+         224(r1):     70(ptr) Variable Function
+      225(param):      8(ptr) Variable Function
+         228(r2):     38(ptr) Variable Function
+      230(param):      8(ptr) Variable Function
+              91:           7 Load 90(g_tTex2s1)
+              92:          28 Load 30(g_sSamp)
+              93:          32 SampledImage 91 92
+              97:   21(fvec4) ImageSampleImplicitLod 93 96
+                              Store 88(@sampleResultShadow) 97
+              99:     44(ptr) AccessChain 88(@sampleResultShadow) 43
+             100:    6(float) Load 99
+             101:     44(ptr) AccessChain 98(@sampleStructTemp) 41
+                              Store 101 100
+             102:     44(ptr) AccessChain 88(@sampleResultShadow) 49
+             103:    6(float) Load 102
+             104:     44(ptr) AccessChain 98(@sampleStructTemp) 48 43
+                              Store 104 103
+             105:     44(ptr) AccessChain 88(@sampleResultShadow) 53
+             106:    6(float) Load 105
+             107:     44(ptr) AccessChain 98(@sampleStructTemp) 48 49
+                              Store 107 106
+             108:     44(ptr) AccessChain 88(@sampleResultShadow) 58
+             109:    6(float) Load 108
+             110:     44(ptr) AccessChain 98(@sampleStructTemp) 57
+                              Store 110 109
+             111:    10(s1_t) Load 98(@sampleStructTemp)
+                              Store 87(s1) 111
+             115:           7 Load 114(g_tTex2s2)
+             116:          28 Load 30(g_sSamp)
+             117:          32 SampledImage 115 116
+             121:   21(fvec4) ImageSampleImplicitLod 117 120
+                              Store 113(@sampleResultShadow) 121
+             123:     44(ptr) AccessChain 113(@sampleResultShadow) 43
+             124:    6(float) Load 123
+             125:     44(ptr) AccessChain 122(@sampleStructTemp) 41
+                              Store 125 124
+             126:     44(ptr) AccessChain 113(@sampleResultShadow) 49
+             127:    6(float) Load 126
+             128:     44(ptr) AccessChain 122(@sampleStructTemp) 48 43
+                              Store 128 127
+             129:     44(ptr) AccessChain 113(@sampleResultShadow) 53
+             130:    6(float) Load 129
+             131:     44(ptr) AccessChain 122(@sampleStructTemp) 48 49
+                              Store 131 130
+             132:     44(ptr) AccessChain 113(@sampleResultShadow) 58
+             133:    6(float) Load 132
+             134:     44(ptr) AccessChain 122(@sampleStructTemp) 48 53
+                              Store 134 133
+             135:    16(s2_t) Load 122(@sampleStructTemp)
+                              Store 112(s2) 135
+             141:           7 Load 140(g_tTex2s3)
+             142:          28 Load 30(g_sSamp)
+             143:          32 SampledImage 141 142
+             147:   21(fvec4) ImageSampleImplicitLod 143 146
+                              Store 139(@sampleResultShadow) 147
+             149:     44(ptr) AccessChain 139(@sampleResultShadow) 43
+             150:    6(float) Load 149
+             151:     44(ptr) AccessChain 148(@sampleStructTemp) 41 43
+                              Store 151 150
+             152:     44(ptr) AccessChain 139(@sampleResultShadow) 49
+             153:    6(float) Load 152
+             154:     44(ptr) AccessChain 148(@sampleStructTemp) 41 49
+                              Store 154 153
+             155:     44(ptr) AccessChain 139(@sampleResultShadow) 53
+             156:    6(float) Load 155
+             157:     44(ptr) AccessChain 148(@sampleStructTemp) 48
+                              Store 157 156
+             158:   136(s3_t) Load 148(@sampleStructTemp)
+                              Store 138(s3) 158
+             169:         166 Load 168(g_tTex2s4)
+             170:          28 Load 30(g_sSamp)
+             172:         171 SampledImage 169 170
+             176:  163(ivec4) ImageSampleImplicitLod 172 175
+                              Store 165(@sampleResultShadow) 176
+             179:    178(ptr) AccessChain 165(@sampleResultShadow) 43
+             180:     40(int) Load 179
+             181:    178(ptr) AccessChain 177(@sampleStructTemp) 41
+                              Store 181 180
+             182:    178(ptr) AccessChain 165(@sampleResultShadow) 49
+             183:     40(int) Load 182
+             184:    6(float) ConvertSToF 183
+             185:    178(ptr) AccessChain 177(@sampleStructTemp) 48 43
+                              Store 185 184
+             186:    178(ptr) AccessChain 165(@sampleResultShadow) 53
+             187:     40(int) Load 186
+             188:    6(float) ConvertSToF 187
+             189:    178(ptr) AccessChain 177(@sampleStructTemp) 48 49
+                              Store 189 188
+             190:    178(ptr) AccessChain 165(@sampleResultShadow) 58
+             191:     40(int) Load 190
+             192:    178(ptr) AccessChain 177(@sampleStructTemp) 57
+                              Store 192 191
+             193:   160(s4_t) Load 177(@sampleStructTemp)
+                              Store 162(s4) 193
+             203:         200 Load 202(g_tTex2s5)
+             204:          28 Load 30(g_sSamp)
+             206:         205 SampledImage 203 204
+             210:  197(ivec4) ImageSampleImplicitLod 206 209
+                              Store 199(@sampleResultShadow) 210
+             213:    212(ptr) AccessChain 199(@sampleResultShadow) 43
+             214:     42(int) Load 213
+             215:    212(ptr) AccessChain 211(@sampleStructTemp) 41
+                              Store 215 214
+             216:    212(ptr) AccessChain 199(@sampleResultShadow) 49
+             217:     42(int) Load 216
+             218:    212(ptr) AccessChain 211(@sampleStructTemp) 48
+                              Store 218 217
+             219:   194(s5_t) Load 211(@sampleStructTemp)
+                              Store 196(s5) 219
+             222:           7 Load 90(g_tTex2s1)
+                              Store 221(param) 222
+             223:    10(s1_t) FunctionCall 13(fn1(t2-tx-struct0-1;) 221(param)
+                              Store 220(r0) 223
+             226:           7 Load 114(g_tTex2s2)
+                              Store 225(param) 226
+             227:    16(s2_t) FunctionCall 19(fn1(t2-tx-struct1-1;) 225(param)
+                              Store 224(r1) 227
+             231:           7 Load 229(g_tTex2s1a)
+                              Store 230(param) 231
+             232:    10(s1_t) FunctionCall 13(fn1(t2-tx-struct0-1;) 230(param)
+                              Store 228(r2) 232
+                              ReturnValue 234
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out
index 79ea788..deaa82b 100644
--- a/Test/baseResults/hlsl.texture.subvec4.frag.out
+++ b/Test/baseResults/hlsl.texture.subvec4.frag.out
@@ -356,7 +356,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out
index b35e267..f538abc 100755
--- a/Test/baseResults/hlsl.this.frag.out
+++ b/Test/baseResults/hlsl.this.frag.out
@@ -240,7 +240,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out
index 31f516c..94bea4c 100644
--- a/Test/baseResults/hlsl.tx.bracket.frag.out
+++ b/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -422,7 +422,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 188
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.tx.overload.frag.out b/Test/baseResults/hlsl.tx.overload.frag.out
index 3dafcd9..6e6bef0 100644
--- a/Test/baseResults/hlsl.tx.overload.frag.out
+++ b/Test/baseResults/hlsl.tx.overload.frag.out
@@ -134,13 +134,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 62
+// Generated by (magic number): 80002
+// Id's are bound by 73
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 60
+                              EntryPoint Fragment 4  "main" 71
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -153,44 +153,51 @@
                               Name 28  "Func(I21;"
                               Name 27  "DummyTex"
                               Name 31  "@main("
-                              Name 44  "tf1"
-                              Name 46  "tf4"
-                              Name 50  "twf1"
-                              Name 54  "twf4"
-                              Name 60  "@entryPointOutput"
-                              Decorate 44(tf1) DescriptorSet 0
-                              Decorate 46(tf4) DescriptorSet 0
-                              Decorate 50(twf1) DescriptorSet 0
-                              Decorate 54(twf4) DescriptorSet 0
-                              Decorate 60(@entryPointOutput) Location 0
+                              Name 45  "tf1"
+                              Name 46  "param"
+                              Name 49  "tf4"
+                              Name 50  "param"
+                              Name 56  "twf1"
+                              Name 57  "param"
+                              Name 63  "twf4"
+                              Name 64  "param"
+                              Name 71  "@entryPointOutput"
+                              Decorate 45(tf1) DescriptorSet 0
+                              Decorate 49(tf4) DescriptorSet 0
+                              Decorate 56(twf1) DescriptorSet 0
+                              Decorate 63(twf4) DescriptorSet 0
+                              Decorate 71(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeImage 6(float) 2D sampled format:Unknown
-               8:             TypePointer UniformConstant 7
+               8:             TypePointer Function 7
                9:             TypeFunction 6(float) 8(ptr)
               13:             TypeVector 6(float) 4
               14:             TypeFunction 13(fvec4) 8(ptr)
               18:             TypeImage 6(float) 2D nonsampled format:R32f
-              19:             TypePointer UniformConstant 18
+              19:             TypePointer Function 18
               20:             TypeFunction 6(float) 19(ptr)
               24:             TypeImage 6(float) 2D nonsampled format:Rgba32f
-              25:             TypePointer UniformConstant 24
+              25:             TypePointer Function 24
               26:             TypeFunction 13(fvec4) 25(ptr)
               30:             TypeFunction 13(fvec4)
               33:    6(float) Constant 1065353216
               36:    6(float) Constant 0
               37:   13(fvec4) ConstantComposite 36 36 36 36
-         44(tf1):      8(ptr) Variable UniformConstant
-         46(tf4):      8(ptr) Variable UniformConstant
-        50(twf1):     19(ptr) Variable UniformConstant
-        54(twf4):     25(ptr) Variable UniformConstant
-              59:             TypePointer Output 13(fvec4)
-60(@entryPointOutput):     59(ptr) Variable Output
+              44:             TypePointer UniformConstant 7
+         45(tf1):     44(ptr) Variable UniformConstant
+         49(tf4):     44(ptr) Variable UniformConstant
+              55:             TypePointer UniformConstant 18
+        56(twf1):     55(ptr) Variable UniformConstant
+              62:             TypePointer UniformConstant 24
+        63(twf4):     62(ptr) Variable UniformConstant
+              70:             TypePointer Output 13(fvec4)
+71(@entryPointOutput):     70(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              61:   13(fvec4) FunctionCall 31(@main()
-                              Store 60(@entryPointOutput) 61
+              72:   13(fvec4) FunctionCall 31(@main()
+                              Store 71(@entryPointOutput) 72
                               Return
                               FunctionEnd
   11(Func(t211;):    6(float) Function None 9
@@ -215,14 +222,26 @@
                               FunctionEnd
       31(@main():   13(fvec4) Function None 30
               32:             Label
-              45:    6(float) FunctionCall 11(Func(t211;) 44(tf1)
-              47:   13(fvec4) FunctionCall 16(Func(t21;) 46(tf4)
-              48:   13(fvec4) CompositeConstruct 45 45 45 45
-              49:   13(fvec4) FAdd 48 47
-              51:    6(float) FunctionCall 22(Func(I211;) 50(twf1)
-              52:   13(fvec4) CompositeConstruct 51 51 51 51
-              53:   13(fvec4) FAdd 49 52
-              55:   13(fvec4) FunctionCall 28(Func(I21;) 54(twf4)
-              56:   13(fvec4) FAdd 53 55
-                              ReturnValue 56
+       46(param):      8(ptr) Variable Function
+       50(param):      8(ptr) Variable Function
+       57(param):     19(ptr) Variable Function
+       64(param):     25(ptr) Variable Function
+              47:           7 Load 45(tf1)
+                              Store 46(param) 47
+              48:    6(float) FunctionCall 11(Func(t211;) 46(param)
+              51:           7 Load 49(tf4)
+                              Store 50(param) 51
+              52:   13(fvec4) FunctionCall 16(Func(t21;) 50(param)
+              53:   13(fvec4) CompositeConstruct 48 48 48 48
+              54:   13(fvec4) FAdd 53 52
+              58:          18 Load 56(twf1)
+                              Store 57(param) 58
+              59:    6(float) FunctionCall 22(Func(I211;) 57(param)
+              60:   13(fvec4) CompositeConstruct 59 59 59 59
+              61:   13(fvec4) FAdd 54 60
+              65:          24 Load 63(twf4)
+                              Store 64(param) 65
+              66:   13(fvec4) FunctionCall 28(Func(I21;) 64(param)
+              67:   13(fvec4) FAdd 61 66
+                              ReturnValue 67
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.type.half.frag.out b/Test/baseResults/hlsl.type.half.frag.out
index 50171fc..75750f9 100644
--- a/Test/baseResults/hlsl.type.half.frag.out
+++ b/Test/baseResults/hlsl.type.half.frag.out
@@ -164,7 +164,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.identifier.frag.out b/Test/baseResults/hlsl.type.identifier.frag.out
index 3ad3882..fe6ac01 100644
--- a/Test/baseResults/hlsl.type.identifier.frag.out
+++ b/Test/baseResults/hlsl.type.identifier.frag.out
@@ -266,7 +266,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 109
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.typeGraphCopy.vert.out b/Test/baseResults/hlsl.typeGraphCopy.vert.out
index 217e7ec..4ae33e2 100755
--- a/Test/baseResults/hlsl.typeGraphCopy.vert.out
+++ b/Test/baseResults/hlsl.typeGraphCopy.vert.out
@@ -62,7 +62,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out
index 1c1a351..3f3e34c 100755
--- a/Test/baseResults/hlsl.typedef.frag.out
+++ b/Test/baseResults/hlsl.typedef.frag.out
@@ -79,7 +79,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.void.frag.out b/Test/baseResults/hlsl.void.frag.out
index 1df35a6..e685c2c 100755
--- a/Test/baseResults/hlsl.void.frag.out
+++ b/Test/baseResults/hlsl.void.frag.out
@@ -54,7 +54,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out
index 3e9b794..cffef62 100755
--- a/Test/baseResults/hlsl.whileLoop.frag.out
+++ b/Test/baseResults/hlsl.whileLoop.frag.out
@@ -96,7 +96,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/implicitInnerAtomicUint.frag.out b/Test/baseResults/implicitInnerAtomicUint.frag.out
new file mode 100644
index 0000000..6f68980
--- /dev/null
+++ b/Test/baseResults/implicitInnerAtomicUint.frag.out
@@ -0,0 +1,21 @@
+implicitInnerAtomicUint.frag
+ERROR: 0:2: '[]' : only outermost dimension of an array of arrays can be implicitly sized 
+ERROR: 0:2: 'atomic_uint' : array must be explicitly sized 
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 460
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+0:?     'c' (layout( binding=0 offset=0) uniform 1-element array of implicitly-sized array of atomic_uint)
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 460
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+0:?     'c' (layout( binding=0 offset=0) uniform 1-element array of implicitly-sized array of atomic_uint)
+
diff --git a/Test/baseResults/invalidSwizzle.vert.out b/Test/baseResults/invalidSwizzle.vert.out
new file mode 100644
index 0000000..5104fdc
--- /dev/null
+++ b/Test/baseResults/invalidSwizzle.vert.out
@@ -0,0 +1,38 @@
+invalidSwizzle.vert
+ERROR: 0:7: 'rr' : does not apply to this type:  uniform sampler2D
+ERROR: 0:7: '=' :  cannot convert from ' uniform sampler2D' to ' temp 2-component vector of float'
+ERROR: 0:8: 'xx' : does not apply to this type:  global void
+ERROR: 0:9: 'xy' : does not apply to this type:  global void
+ERROR: 4 compilation errors.  No code generated.
+
+
+Shader version: 420
+ERROR: node is still EOpNull!
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:8      Function Call: f( ( global void)
+0:9      Function Call: f( ( global void)
+0:?   Linker Objects
+0:?     's' ( uniform sampler2D)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: No function definition (body) found: 
+    f(
+
+Shader version: 420
+ERROR: node is still EOpNull!
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:8      Function Call: f( ( global void)
+0:9      Function Call: f( ( global void)
+0:?   Linker Objects
+0:?     's' ( uniform sampler2D)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/numeral.frag.out b/Test/baseResults/numeral.frag.out
index 11def12..c1e3134 100644
--- a/Test/baseResults/numeral.frag.out
+++ b/Test/baseResults/numeral.frag.out
@@ -11,7 +11,9 @@
 ERROR: 0:88: '' : float literal needs a decimal point or exponent 
 ERROR: 0:98: '' : numeric literal too big 
 ERROR: 0:101: '' : numeric literal too big 
-ERROR: 12 compilation errors.  No code generated.
+ERROR: 0:104: '#' : preprocessor directive cannot be preceded by another token 
+ERROR: 0:104: '' :  syntax error, unexpected $end, expecting COMMA or SEMICOLON
+ERROR: 14 compilation errors.  No code generated.
 
 
 Shader version: 400
@@ -417,6 +419,7 @@
 0:?     'g4' ( global int)
 0:?     'g5' ( global int)
 0:?     'g6' ( global int)
+0:?     'inf1' ( global float)
 
 
 Linked fragment stage:
@@ -825,4 +828,5 @@
 0:?     'g4' ( global int)
 0:?     'g5' ( global int)
 0:?     'g6' ( global int)
+0:?     'inf1' ( global float)
 
diff --git a/Test/baseResults/overlongLiteral.frag.out b/Test/baseResults/overlongLiteral.frag.out
new file mode 100644
index 0000000..372d777
--- /dev/null
+++ b/Test/baseResults/overlongLiteral.frag.out
@@ -0,0 +1,19 @@
+overlongLiteral.frag
+ERROR: 0:1: '' : hexadecimal literal too long 
+ERROR: 0:1: '' :  syntax error, unexpected INTCONSTANT
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:?   Linker Objects
+
diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out
index ff2e606..da8f78a 100644
--- a/Test/baseResults/remap.basic.dcefunc.frag.out
+++ b/Test/baseResults/remap.basic.dcefunc.frag.out
@@ -1,6 +1,6 @@
 remap.basic.dcefunc.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.everything.frag.out b/Test/baseResults/remap.basic.everything.frag.out
index 82db448..bf17c59 100644
--- a/Test/baseResults/remap.basic.everything.frag.out
+++ b/Test/baseResults/remap.basic.everything.frag.out
@@ -1,6 +1,6 @@
 remap.basic.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24969
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.none.frag.out b/Test/baseResults/remap.basic.none.frag.out
index ebed8a1..054a6b4 100644
--- a/Test/baseResults/remap.basic.none.frag.out
+++ b/Test/baseResults/remap.basic.none.frag.out
@@ -1,6 +1,6 @@
 remap.basic.none.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.strip.frag.out b/Test/baseResults/remap.basic.strip.frag.out
index 026309d..ee9d93c 100644
--- a/Test/baseResults/remap.basic.strip.frag.out
+++ b/Test/baseResults/remap.basic.strip.frag.out
@@ -1,6 +1,6 @@
 remap.basic.strip.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index 11b2acf..b986a7d 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24878
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 37a2c90..699fb8d 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index d76bdd9..f46f93f 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index 330aecd..fe2df78 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
@@ -1,6 +1,6 @@
 remap.hlsl.templatetypes.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24954
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
index dd2917e..bc5916e 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
@@ -1,6 +1,6 @@
 remap.hlsl.templatetypes.none.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 160
 
                               Capability Shader
diff --git a/Test/baseResults/remap.if.everything.frag.out b/Test/baseResults/remap.if.everything.frag.out
index 1c9a8d1..7a1733e 100644
--- a/Test/baseResults/remap.if.everything.frag.out
+++ b/Test/baseResults/remap.if.everything.frag.out
@@ -1,6 +1,6 @@
 remap.if.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 22855
 
                               Capability Shader
diff --git a/Test/baseResults/remap.if.none.frag.out b/Test/baseResults/remap.if.none.frag.out
index 0aaec38..1601a6c 100644
--- a/Test/baseResults/remap.if.none.frag.out
+++ b/Test/baseResults/remap.if.none.frag.out
@@ -1,6 +1,6 @@
 remap.if.none.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/remap.invalid-spirv-1.out b/Test/baseResults/remap.invalid-spirv-1.out
new file mode 100644
index 0000000..91b4b6d
--- /dev/null
+++ b/Test/baseResults/remap.invalid-spirv-1.out
@@ -0,0 +1 @@
+ID out of range: 4160749568
diff --git a/Test/baseResults/remap.invalid-spirv-2.out b/Test/baseResults/remap.invalid-spirv-2.out
new file mode 100644
index 0000000..808b9b8
--- /dev/null
+++ b/Test/baseResults/remap.invalid-spirv-2.out
@@ -0,0 +1 @@
+ID not found
diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out
index 59ed9eb..f67acfb 100644
--- a/Test/baseResults/remap.similar_1a.everything.frag.out
+++ b/Test/baseResults/remap.similar_1a.everything.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1a.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24916
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1a.none.frag.out b/Test/baseResults/remap.similar_1a.none.frag.out
index af049b5..2bbf53a 100644
--- a/Test/baseResults/remap.similar_1a.none.frag.out
+++ b/Test/baseResults/remap.similar_1a.none.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1a.none.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 86
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1b.everything.frag.out b/Test/baseResults/remap.similar_1b.everything.frag.out
index 483c622..67ff7df 100644
--- a/Test/baseResults/remap.similar_1b.everything.frag.out
+++ b/Test/baseResults/remap.similar_1b.everything.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1b.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24916
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1b.none.frag.out b/Test/baseResults/remap.similar_1b.none.frag.out
index a5555c2..089ea5c 100644
--- a/Test/baseResults/remap.similar_1b.none.frag.out
+++ b/Test/baseResults/remap.similar_1b.none.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1b.none.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 91
 
                               Capability Shader
diff --git a/Test/baseResults/remap.specconst.comp.out b/Test/baseResults/remap.specconst.comp.out
index ca276b6..cc439f1 100644
--- a/Test/baseResults/remap.specconst.comp.out
+++ b/Test/baseResults/remap.specconst.comp.out
@@ -1,6 +1,6 @@
 remap.specconst.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 16104
 
                               Capability Shader
diff --git a/Test/baseResults/remap.switch.everything.frag.out b/Test/baseResults/remap.switch.everything.frag.out
index bad1e1e..c1fddd9 100644
--- a/Test/baseResults/remap.switch.everything.frag.out
+++ b/Test/baseResults/remap.switch.everything.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 23990
 
                               Capability Shader
diff --git a/Test/baseResults/remap.switch.none.frag.out b/Test/baseResults/remap.switch.none.frag.out
index 0c4cf6a..fa78e77 100644
--- a/Test/baseResults/remap.switch.none.frag.out
+++ b/Test/baseResults/remap.switch.none.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/remap.uniformarray.everything.frag.out b/Test/baseResults/remap.uniformarray.everything.frag.out
index efdf681..aa9014c 100644
--- a/Test/baseResults/remap.uniformarray.everything.frag.out
+++ b/Test/baseResults/remap.uniformarray.everything.frag.out
@@ -1,6 +1,6 @@
 remap.uniformarray.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 25030
 
                               Capability Shader
diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out
index 3fde4b5..cba724e 100644
--- a/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/Test/baseResults/remap.uniformarray.none.frag.out
@@ -1,6 +1,6 @@
 remap.uniformarray.none.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index 17f0bdc..5cf2100 100755
--- a/Test/baseResults/spv.100ops.frag.out
+++ b/Test/baseResults/spv.100ops.frag.out
@@ -1,6 +1,6 @@
 spv.100ops.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index 19c6db0..51e8b09 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:31: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 205
 
                               Capability Shader
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index 324cc0c..c63fb93 100755
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -1,6 +1,6 @@
 spv.140.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index 1c98c70..5026768 100755
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -1,6 +1,6 @@
 spv.150.geom
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 71
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index 2843139..2ad9461 100755
--- a/Test/baseResults/spv.150.vert.out
+++ b/Test/baseResults/spv.150.vert.out
@@ -1,6 +1,6 @@
 spv.150.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
index d319094..a2c5075 100755
--- a/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -1,6 +1,6 @@
 spv.300BuiltIns.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
index 6a7accd..8200bb8 100755
--- a/Test/baseResults/spv.300layout.frag.out
+++ b/Test/baseResults/spv.300layout.frag.out
@@ -1,6 +1,6 @@
 spv.300layout.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
index 3eae468..a820796 100644
--- a/Test/baseResults/spv.300layout.vert.out
+++ b/Test/baseResults/spv.300layout.vert.out
@@ -1,6 +1,6 @@
 spv.300layout.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 163
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index 82a34ca..78098eb 100755
--- a/Test/baseResults/spv.300layoutp.vert.out
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -1,6 +1,6 @@
 spv.300layoutp.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out
index 4076251..bcbe8e6 100755
--- a/Test/baseResults/spv.310.bitcast.frag.out
+++ b/Test/baseResults/spv.310.bitcast.frag.out
@@ -1,6 +1,6 @@
 spv.310.bitcast.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 153
 
                               Capability Shader
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
index 0d7a6bd..fec52c5 100644
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -1,6 +1,6 @@
 spv.310.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 69
 
                               Capability Shader
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index 3e81dcb..eccaccd 100644
--- a/Test/baseResults/spv.330.geom.out
+++ b/Test/baseResults/spv.330.geom.out
@@ -1,6 +1,6 @@
 spv.330.geom
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 32
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index be1f6ed..2b574ab 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -1,6 +1,6 @@
 spv.400.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 1118
 
                               Capability Shader
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index 5b402c4..5b6a6b1 100644
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -1,6 +1,6 @@
 spv.400.tesc
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 93
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index a322ac5..37cdb4b 100755
--- a/Test/baseResults/spv.400.tese.out
+++ b/Test/baseResults/spv.400.tese.out
@@ -1,6 +1,6 @@
 spv.400.tese
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 96
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index 9ce05d0..28665bc 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -1,6 +1,6 @@
 spv.420.geom
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 72
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
index 6d43ead..4aedf77 100755
--- a/Test/baseResults/spv.430.frag.out
+++ b/Test/baseResults/spv.430.frag.out
@@ -1,6 +1,6 @@
 spv.430.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index 10c3eae..c63d5e9 100755
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -1,6 +1,6 @@
 spv.430.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.450.geom.out b/Test/baseResults/spv.450.geom.out
index 9c851c3..f745068 100755
--- a/Test/baseResults/spv.450.geom.out
+++ b/Test/baseResults/spv.450.geom.out
@@ -1,6 +1,6 @@
 spv.450.geom
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 31
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.450.noRedecl.tesc.out b/Test/baseResults/spv.450.noRedecl.tesc.out
index 91887b0..4d6a25a 100755
--- a/Test/baseResults/spv.450.noRedecl.tesc.out
+++ b/Test/baseResults/spv.450.noRedecl.tesc.out
@@ -1,6 +1,6 @@
 spv.450.noRedecl.tesc
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 21
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
index 5ccea06..5cbaca9 100755
--- a/Test/baseResults/spv.450.tesc.out
+++ b/Test/baseResults/spv.450.tesc.out
@@ -1,6 +1,6 @@
 spv.450.tesc
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 45
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.460.comp.out b/Test/baseResults/spv.460.comp.out
index b9037b9..d8e68be 100755
--- a/Test/baseResults/spv.460.comp.out
+++ b/Test/baseResults/spv.460.comp.out
@@ -1,6 +1,6 @@
 spv.460.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.460.frag.out b/Test/baseResults/spv.460.frag.out
index 4e827a0..6cdcc85 100755
--- a/Test/baseResults/spv.460.frag.out
+++ b/Test/baseResults/spv.460.frag.out
@@ -1,6 +1,6 @@
 spv.460.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.460.vert.out b/Test/baseResults/spv.460.vert.out
index 6d57d07..7b8d953 100755
--- a/Test/baseResults/spv.460.vert.out
+++ b/Test/baseResults/spv.460.vert.out
@@ -1,6 +1,6 @@
 spv.460.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index 5837deb..8c0d6c0 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -1,6 +1,6 @@
 spv.AofA.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
index c771bc6..2b85ddf 100644
--- a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
+++ b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
@@ -1,6 +1,6 @@
 spv.GeometryShaderPassthrough.geom
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 15
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.OVR_multiview.vert.out b/Test/baseResults/spv.OVR_multiview.vert.out
index dff67f5..49901a5 100644
--- a/Test/baseResults/spv.OVR_multiview.vert.out
+++ b/Test/baseResults/spv.OVR_multiview.vert.out
@@ -1,6 +1,6 @@
 spv.OVR_multiview.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index 5e89f49..8f61e02 100755
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -1,6 +1,6 @@
 spv.Operations.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 532
 
                               Capability Shader
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index ee97c6c..89a39a0 100755
--- a/Test/baseResults/spv.accessChain.frag.out
+++ b/Test/baseResults/spv.accessChain.frag.out
@@ -1,6 +1,6 @@
 spv.accessChain.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 206
 
                               Capability Shader
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index 6825585..ca495c1 100644
--- a/Test/baseResults/spv.aggOps.frag.out
+++ b/Test/baseResults/spv.aggOps.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 215
 
                               Capability Shader
diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
index 01f5732..ac4c9f3 100644
--- a/Test/baseResults/spv.always-discard.frag.out
+++ b/Test/baseResults/spv.always-discard.frag.out
@@ -1,6 +1,6 @@
 spv.always-discard.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
index 7fa92c5..5aed2e0 100755
--- a/Test/baseResults/spv.always-discard2.frag.out
+++ b/Test/baseResults/spv.always-discard2.frag.out
@@ -1,6 +1,6 @@
 spv.always-discard2.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.arbPostDepthCoverage.frag.out b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
index 1d92dbe..7c5a3b6 100644
--- a/Test/baseResults/spv.arbPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.arbPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index beb0302..b64dc90 100755
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -1,7 +1,7 @@
 spv.atomic.comp
 // Module Version 10000
-// Generated by (magic number): 80001
-// Id's are bound by 73
+// Generated by (magic number): 80002
+// Id's are bound by 74
 
                               Capability Shader
                               Capability AtomicStorage
@@ -17,29 +17,29 @@
                               Name 20  "counter"
                               Name 23  "val"
                               Name 27  "countArr"
-                              Name 35  "origi"
-                              Name 37  "atomi"
-                              Name 40  "origu"
-                              Name 42  "atomu"
-                              Name 43  "value"
-                              Name 60  "dataSSB"
-                              MemberName 60(dataSSB) 0  "f"
-                              MemberName 60(dataSSB) 1  "n_frames_rendered"
-                              Name 62  "result"
-                              Name 70  "arrX"
-                              Name 71  "arrY"
-                              Name 72  "arrZ"
+                              Name 37  "origi"
+                              Name 39  "atomi"
+                              Name 42  "origu"
+                              Name 44  "atomu"
+                              Name 45  "value"
+                              Name 62  "dataSSB"
+                              MemberName 62(dataSSB) 0  "f"
+                              MemberName 62(dataSSB) 1  "n_frames_rendered"
+                              Name 64  "result"
+                              Name 71  "arrX"
+                              Name 72  "arrY"
+                              Name 73  "arrZ"
                               Decorate 20(counter) Offset 0
                               Decorate 20(counter) Binding 0
                               Decorate 27(countArr) Offset 4
                               Decorate 27(countArr) Binding 0
-                              MemberDecorate 60(dataSSB) 0 Restrict
-                              MemberDecorate 60(dataSSB) 0 Offset 0
-                              MemberDecorate 60(dataSSB) 1 Restrict
-                              MemberDecorate 60(dataSSB) 1 Offset 16
-                              Decorate 60(dataSSB) BufferBlock
-                              Decorate 62(result) DescriptorSet 0
-                              Decorate 62(result) Binding 0
+                              MemberDecorate 62(dataSSB) 0 Restrict
+                              MemberDecorate 62(dataSSB) 0 Offset 0
+                              MemberDecorate 62(dataSSB) 1 Restrict
+                              MemberDecorate 62(dataSSB) 1 Offset 16
+                              Decorate 62(dataSSB) BufferBlock
+                              Decorate 64(result) DescriptorSet 0
+                              Decorate 64(result) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -56,29 +56,29 @@
     27(countArr):     26(ptr) Variable AtomicCounter
               28:             TypeInt 32 1
               29:     28(int) Constant 2
-              34:             TypePointer Function 28(int)
-              36:             TypePointer Workgroup 28(int)
-       37(atomi):     36(ptr) Variable Workgroup
-              38:     28(int) Constant 3
-              41:             TypePointer Workgroup 6(int)
-       42(atomu):     41(ptr) Variable Workgroup
-       43(value):     41(ptr) Variable Workgroup
-              46:      6(int) Constant 7
-              51:     28(int) Constant 7
-              55:      6(int) Constant 10
-              58:             TypeFloat 32
-              59:             TypeVector 28(int) 4
-     60(dataSSB):             TypeStruct 58(float) 59(ivec4)
-              61:             TypePointer Uniform 60(dataSSB)
-      62(result):     61(ptr) Variable Uniform
-              63:     28(int) Constant 1
-              64:      6(int) Constant 2
-              65:             TypePointer Uniform 28(int)
-              68:             TypeArray 28(int) 14
-              69:             TypePointer Private 68
-        70(arrX):     69(ptr) Variable Private
-        71(arrY):     69(ptr) Variable Private
-        72(arrZ):     69(ptr) Variable Private
+              33:     28(int) Constant 1
+              36:             TypePointer Function 28(int)
+              38:             TypePointer Workgroup 28(int)
+       39(atomi):     38(ptr) Variable Workgroup
+              40:     28(int) Constant 3
+              43:             TypePointer Workgroup 6(int)
+       44(atomu):     43(ptr) Variable Workgroup
+       45(value):     43(ptr) Variable Workgroup
+              48:      6(int) Constant 7
+              53:     28(int) Constant 7
+              57:      6(int) Constant 10
+              60:             TypeFloat 32
+              61:             TypeVector 28(int) 4
+     62(dataSSB):             TypeStruct 60(float) 61(ivec4)
+              63:             TypePointer Uniform 62(dataSSB)
+      64(result):     63(ptr) Variable Uniform
+              65:      6(int) Constant 2
+              66:             TypePointer Uniform 28(int)
+              69:             TypeArray 28(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
          23(val):     22(ptr) Variable Function
@@ -88,7 +88,8 @@
               31:      6(int) AtomicLoad 30 14 15
                               Store 23(val) 31
               32:      6(int) AtomicIDecrement 20(counter) 14 15
-              33:      6(int) AtomicIIncrement 20(counter) 14 15
+              34:      6(int) ISub 32 33
+              35:      6(int) AtomicIIncrement 20(counter) 14 15
                               Return
                               FunctionEnd
    10(func(au1;):      6(int) Function None 8
@@ -99,29 +100,29 @@
                               FunctionEnd
       12(atoms():           2 Function None 3
               13:             Label
-       35(origi):     34(ptr) Variable Function
-       40(origu):     22(ptr) Variable Function
-              39:     28(int) AtomicIAdd 37(atomi) 14 15 38
-                              Store 35(origi) 39
-              44:      6(int) Load 43(value)
-              45:      6(int) AtomicAnd 42(atomu) 14 15 44
-                              Store 40(origu) 45
-              47:      6(int) AtomicOr 42(atomu) 14 15 46
-                              Store 40(origu) 47
-              48:      6(int) AtomicXor 42(atomu) 14 15 46
-                              Store 40(origu) 48
-              49:      6(int) Load 43(value)
-              50:      6(int) AtomicUMin 42(atomu) 14 15 49
-                              Store 40(origu) 50
-              52:     28(int) AtomicSMax 37(atomi) 14 15 51
-                              Store 35(origi) 52
-              53:     28(int) Load 35(origi)
-              54:     28(int) AtomicExchange 37(atomi) 14 15 53
-                              Store 35(origi) 54
-              56:      6(int) Load 43(value)
-              57:      6(int) AtomicCompareExchange 42(atomu) 14 15 15 56 55
-                              Store 40(origu) 57
-              66:     65(ptr) AccessChain 62(result) 63 64
-              67:     28(int) AtomicIAdd 66 14 15 63
+       37(origi):     36(ptr) Variable Function
+       42(origu):     22(ptr) Variable Function
+              41:     28(int) AtomicIAdd 39(atomi) 14 15 40
+                              Store 37(origi) 41
+              46:      6(int) Load 45(value)
+              47:      6(int) AtomicAnd 44(atomu) 14 15 46
+                              Store 42(origu) 47
+              49:      6(int) AtomicOr 44(atomu) 14 15 48
+                              Store 42(origu) 49
+              50:      6(int) AtomicXor 44(atomu) 14 15 48
+                              Store 42(origu) 50
+              51:      6(int) Load 45(value)
+              52:      6(int) AtomicUMin 44(atomu) 14 15 51
+                              Store 42(origu) 52
+              54:     28(int) AtomicSMax 39(atomi) 14 15 53
+                              Store 37(origi) 54
+              55:     28(int) Load 37(origi)
+              56:     28(int) AtomicExchange 39(atomi) 14 15 55
+                              Store 37(origi) 56
+              58:      6(int) Load 45(value)
+              59:      6(int) AtomicCompareExchange 44(atomu) 14 15 15 58 57
+                              Store 42(origu) 59
+              67:     66(ptr) AccessChain 64(result) 33 65
+              68:     28(int) AtomicIAdd 67 14 15 33
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.atomicInt64.comp.out b/Test/baseResults/spv.atomicInt64.comp.out
new file mode 100644
index 0000000..cbd7c1c
--- /dev/null
+++ b/Test/baseResults/spv.atomicInt64.comp.out
@@ -0,0 +1,215 @@
+spv.atomicInt64.comp
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 149
+
+                              Capability Shader
+                              Capability Int64
+                              Capability Int64Atomics
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 16 16 1
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_NV_shader_atomic_int64"
+                              Name 4  "main"
+                              Name 8  "i64"
+                              Name 12  "u64"
+                              Name 14  "Buffer"
+                              MemberName 14(Buffer) 0  "i64"
+                              MemberName 14(Buffer) 1  "u64"
+                              Name 16  "buf"
+                              Name 84  "Struct"
+                              MemberName 84(Struct) 0  "i64"
+                              MemberName 84(Struct) 1  "u64"
+                              Name 86  "s"
+                              MemberDecorate 14(Buffer) 0 Offset 0
+                              MemberDecorate 14(Buffer) 1 Offset 8
+                              Decorate 14(Buffer) BufferBlock
+                              Decorate 16(buf) DescriptorSet 0
+                              Decorate 16(buf) Binding 0
+                              Decorate 148 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 64 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0 0
+              10:             TypeInt 64 0
+              11:             TypePointer Function 10(int)
+              13:     10(int) Constant 0 0
+      14(Buffer):             TypeStruct 6(int) 10(int)
+              15:             TypePointer Uniform 14(Buffer)
+         16(buf):     15(ptr) Variable Uniform
+              17:             TypeInt 32 1
+              18:     17(int) Constant 0
+              19:             TypePointer Uniform 6(int)
+              21:      6(int) Constant 4294967272 4294967295
+              22:             TypeInt 32 0
+              23:     22(int) Constant 1
+              24:     22(int) Constant 0
+              28:     17(int) Constant 1
+              29:             TypePointer Uniform 10(int)
+              31:     10(int) Constant 15 0
+      84(Struct):             TypeStruct 6(int) 10(int)
+              85:             TypePointer Workgroup 84(Struct)
+           86(s):     85(ptr) Variable Workgroup
+              87:             TypePointer Workgroup 6(int)
+              92:             TypePointer Workgroup 10(int)
+             146:             TypeVector 22(int) 3
+             147:     22(int) Constant 16
+             148:  146(ivec3) ConstantComposite 147 147 23
+         4(main):           2 Function None 3
+               5:             Label
+          8(i64):      7(ptr) Variable Function
+         12(u64):     11(ptr) Variable Function
+                              Store 8(i64) 9
+                              Store 12(u64) 13
+              20:     19(ptr) AccessChain 16(buf) 18
+              25:      6(int) AtomicSMin 20 23 24 21
+              26:      6(int) Load 8(i64)
+              27:      6(int) IAdd 26 25
+                              Store 8(i64) 27
+              30:     29(ptr) AccessChain 16(buf) 28
+              32:     10(int) AtomicUMin 30 23 24 31
+              33:     10(int) Load 12(u64)
+              34:     10(int) IAdd 33 32
+                              Store 12(u64) 34
+              35:     19(ptr) AccessChain 16(buf) 18
+              36:      6(int) AtomicSMax 35 23 24 21
+              37:      6(int) Load 8(i64)
+              38:      6(int) IAdd 37 36
+                              Store 8(i64) 38
+              39:     29(ptr) AccessChain 16(buf) 28
+              40:     10(int) AtomicUMax 39 23 24 31
+              41:     10(int) Load 12(u64)
+              42:     10(int) IAdd 41 40
+                              Store 12(u64) 42
+              43:     19(ptr) AccessChain 16(buf) 18
+              44:      6(int) AtomicAnd 43 23 24 21
+              45:      6(int) Load 8(i64)
+              46:      6(int) IAdd 45 44
+                              Store 8(i64) 46
+              47:     29(ptr) AccessChain 16(buf) 28
+              48:     10(int) AtomicAnd 47 23 24 31
+              49:     10(int) Load 12(u64)
+              50:     10(int) IAdd 49 48
+                              Store 12(u64) 50
+              51:     19(ptr) AccessChain 16(buf) 18
+              52:      6(int) AtomicOr 51 23 24 21
+              53:      6(int) Load 8(i64)
+              54:      6(int) IAdd 53 52
+                              Store 8(i64) 54
+              55:     29(ptr) AccessChain 16(buf) 28
+              56:     10(int) AtomicOr 55 23 24 31
+              57:     10(int) Load 12(u64)
+              58:     10(int) IAdd 57 56
+                              Store 12(u64) 58
+              59:     19(ptr) AccessChain 16(buf) 18
+              60:      6(int) AtomicXor 59 23 24 21
+              61:      6(int) Load 8(i64)
+              62:      6(int) IAdd 61 60
+                              Store 8(i64) 62
+              63:     29(ptr) AccessChain 16(buf) 28
+              64:     10(int) AtomicXor 63 23 24 31
+              65:     10(int) Load 12(u64)
+              66:     10(int) IAdd 65 64
+                              Store 12(u64) 66
+              67:     19(ptr) AccessChain 16(buf) 18
+              68:      6(int) AtomicIAdd 67 23 24 21
+              69:      6(int) Load 8(i64)
+              70:      6(int) IAdd 69 68
+                              Store 8(i64) 70
+              71:     19(ptr) AccessChain 16(buf) 18
+              72:      6(int) AtomicExchange 71 23 24 21
+              73:      6(int) Load 8(i64)
+              74:      6(int) IAdd 73 72
+                              Store 8(i64) 74
+              75:     19(ptr) AccessChain 16(buf) 18
+              76:      6(int) Load 8(i64)
+              77:      6(int) AtomicCompareExchange 75 23 24 24 76 21
+              78:      6(int) Load 8(i64)
+              79:      6(int) IAdd 78 77
+                              Store 8(i64) 79
+              80:      6(int) Load 8(i64)
+              81:     19(ptr) AccessChain 16(buf) 18
+                              Store 81 80
+              82:     10(int) Load 12(u64)
+              83:     29(ptr) AccessChain 16(buf) 28
+                              Store 83 82
+                              Store 8(i64) 9
+                              Store 12(u64) 13
+              88:     87(ptr) AccessChain 86(s) 18
+              89:      6(int) AtomicSMin 88 23 24 21
+              90:      6(int) Load 8(i64)
+              91:      6(int) IAdd 90 89
+                              Store 8(i64) 91
+              93:     92(ptr) AccessChain 86(s) 28
+              94:     10(int) AtomicUMin 93 23 24 31
+              95:     10(int) Load 12(u64)
+              96:     10(int) IAdd 95 94
+                              Store 12(u64) 96
+              97:     87(ptr) AccessChain 86(s) 18
+              98:      6(int) AtomicSMax 97 23 24 21
+              99:      6(int) Load 8(i64)
+             100:      6(int) IAdd 99 98
+                              Store 8(i64) 100
+             101:     92(ptr) AccessChain 86(s) 28
+             102:     10(int) AtomicUMax 101 23 24 31
+             103:     10(int) Load 12(u64)
+             104:     10(int) IAdd 103 102
+                              Store 12(u64) 104
+             105:     87(ptr) AccessChain 86(s) 18
+             106:      6(int) AtomicAnd 105 23 24 21
+             107:      6(int) Load 8(i64)
+             108:      6(int) IAdd 107 106
+                              Store 8(i64) 108
+             109:     92(ptr) AccessChain 86(s) 28
+             110:     10(int) AtomicAnd 109 23 24 31
+             111:     10(int) Load 12(u64)
+             112:     10(int) IAdd 111 110
+                              Store 12(u64) 112
+             113:     87(ptr) AccessChain 86(s) 18
+             114:      6(int) AtomicOr 113 23 24 21
+             115:      6(int) Load 8(i64)
+             116:      6(int) IAdd 115 114
+                              Store 8(i64) 116
+             117:     92(ptr) AccessChain 86(s) 28
+             118:     10(int) AtomicOr 117 23 24 31
+             119:     10(int) Load 12(u64)
+             120:     10(int) IAdd 119 118
+                              Store 12(u64) 120
+             121:     87(ptr) AccessChain 86(s) 18
+             122:      6(int) AtomicXor 121 23 24 21
+             123:      6(int) Load 8(i64)
+             124:      6(int) IAdd 123 122
+                              Store 8(i64) 124
+             125:     92(ptr) AccessChain 86(s) 28
+             126:     10(int) AtomicXor 125 23 24 31
+             127:     10(int) Load 12(u64)
+             128:     10(int) IAdd 127 126
+                              Store 12(u64) 128
+             129:     87(ptr) AccessChain 86(s) 18
+             130:      6(int) AtomicIAdd 129 23 24 21
+             131:      6(int) Load 8(i64)
+             132:      6(int) IAdd 131 130
+                              Store 8(i64) 132
+             133:     87(ptr) AccessChain 86(s) 18
+             134:      6(int) AtomicExchange 133 23 24 21
+             135:      6(int) Load 8(i64)
+             136:      6(int) IAdd 135 134
+                              Store 8(i64) 136
+             137:     87(ptr) AccessChain 86(s) 18
+             138:      6(int) Load 8(i64)
+             139:      6(int) AtomicCompareExchange 137 23 24 24 138 21
+             140:      6(int) Load 8(i64)
+             141:      6(int) IAdd 140 139
+                              Store 8(i64) 141
+             142:      6(int) Load 8(i64)
+             143:     87(ptr) AccessChain 86(s) 18
+                              Store 143 142
+             144:     10(int) Load 12(u64)
+             145:     92(ptr) AccessChain 86(s) 28
+                              Store 145 144
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out
index 26846ec..7566213 100644
--- a/Test/baseResults/spv.bitCast.frag.out
+++ b/Test/baseResults/spv.bitCast.frag.out
@@ -1,6 +1,6 @@
 spv.bitCast.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 172
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index e9d4e97..5f02671 100644
--- a/Test/baseResults/spv.bool.vert.out
+++ b/Test/baseResults/spv.bool.vert.out
@@ -1,6 +1,6 @@
 spv.bool.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index e3752a3..6102c4a 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -1,6 +1,6 @@
 spv.boolInBlock.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 107
 
                               Capability Shader
diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out
index e11f15a..6633d66 100644
--- a/Test/baseResults/spv.branch-return.vert.out
+++ b/Test/baseResults/spv.branch-return.vert.out
@@ -1,6 +1,6 @@
 spv.branch-return.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.buffer.autoassign.frag.out b/Test/baseResults/spv.buffer.autoassign.frag.out
index 643b333..549a5a2 100644
--- a/Test/baseResults/spv.buffer.autoassign.frag.out
+++ b/Test/baseResults/spv.buffer.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.buffer.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index a9fb2de..b62e3b3 100755
--- a/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -1,6 +1,6 @@
 spv.conditionalDiscard.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index bbe8674..bdc1972 100755
--- a/Test/baseResults/spv.conversion.frag.out
+++ b/Test/baseResults/spv.conversion.frag.out
@@ -1,6 +1,6 @@
 spv.conversion.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 455
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
index 9dbe5d1..6b99064 100755
--- a/Test/baseResults/spv.dataOut.frag.out
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -1,6 +1,6 @@
 spv.dataOut.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index 663092f..520d9a8 100755
--- a/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -1,6 +1,6 @@
 spv.dataOutIndirect.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
index 1523fab..764cec1 100755
--- a/Test/baseResults/spv.dataOutIndirect.vert.out
+++ b/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:3: attribute deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out
index 2e0d1b3..706f068 100644
--- a/Test/baseResults/spv.debugInfo.frag.out
+++ b/Test/baseResults/spv.debugInfo.frag.out
@@ -1,6 +1,6 @@
 spv.debugInfo.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index 334a727..4561f02 100644
--- a/Test/baseResults/spv.deepRvalue.frag.out
+++ b/Test/baseResults/spv.deepRvalue.frag.out
@@ -1,6 +1,6 @@
 spv.deepRvalue.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 152
 
                               Capability Shader
diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
index a019710..12ac32c 100755
--- a/Test/baseResults/spv.depthOut.frag.out
+++ b/Test/baseResults/spv.depthOut.frag.out
@@ -1,6 +1,6 @@
 spv.depthOut.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
index 8244df0..1761c92 100755
--- a/Test/baseResults/spv.deviceGroup.frag.out
+++ b/Test/baseResults/spv.deviceGroup.frag.out
@@ -1,6 +1,6 @@
 spv.deviceGroup.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index 5013bd3..770199b 100755
--- a/Test/baseResults/spv.discard-dce.frag.out
+++ b/Test/baseResults/spv.discard-dce.frag.out
@@ -1,6 +1,6 @@
 spv.discard-dce.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
index 4043a21..f503be0 100755
--- a/Test/baseResults/spv.do-simple.vert.out
+++ b/Test/baseResults/spv.do-simple.vert.out
@@ -1,6 +1,6 @@
 spv.do-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out
index ab7bfd8..c6a8b86 100644
--- a/Test/baseResults/spv.do-while-continue-break.vert.out
+++ b/Test/baseResults/spv.do-while-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.do-while-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
index a279b0d..4cf8f09 100755
--- a/Test/baseResults/spv.doWhileLoop.frag.out
+++ b/Test/baseResults/spv.doWhileLoop.frag.out
@@ -1,6 +1,6 @@
 spv.doWhileLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index 015de2f..52410d8 100755
--- a/Test/baseResults/spv.double.comp.out
+++ b/Test/baseResults/spv.double.comp.out
@@ -1,6 +1,6 @@
 spv.double.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.drawParams.vert.out b/Test/baseResults/spv.drawParams.vert.out
index 9a5f116..c5b29a3 100755
--- a/Test/baseResults/spv.drawParams.vert.out
+++ b/Test/baseResults/spv.drawParams.vert.out
@@ -1,6 +1,6 @@
 spv.drawParams.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index af8d61a..61788aa 100755
--- a/Test/baseResults/spv.earlyReturnDiscard.frag.out
+++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -1,6 +1,6 @@
 spv.earlyReturnDiscard.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 110
 
                               Capability Shader
diff --git a/Test/baseResults/spv.extPostDepthCoverage.frag.out b/Test/baseResults/spv.extPostDepthCoverage.frag.out
index f273656..ca777e0 100644
--- a/Test/baseResults/spv.extPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.extPostDepthCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.extPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out
index 7eb2b68..004ba52 100644
--- a/Test/baseResults/spv.float16.frag.out
+++ b/Test/baseResults/spv.float16.frag.out
@@ -1,6 +1,6 @@
 spv.float16.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 534
 
                               Capability Shader
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index cf13a5e..ca04e07 100755
--- a/Test/baseResults/spv.flowControl.frag.out
+++ b/Test/baseResults/spv.flowControl.frag.out
@@ -1,6 +1,6 @@
 spv.flowControl.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-complex-condition.vert.out b/Test/baseResults/spv.for-complex-condition.vert.out
index 7628291..0bea463 100644
--- a/Test/baseResults/spv.for-complex-condition.vert.out
+++ b/Test/baseResults/spv.for-complex-condition.vert.out
@@ -1,6 +1,6 @@
 spv.for-complex-condition.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-continue-break.vert.out b/Test/baseResults/spv.for-continue-break.vert.out
index fcf9bbb..98c8fd0 100644
--- a/Test/baseResults/spv.for-continue-break.vert.out
+++ b/Test/baseResults/spv.for-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.for-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-nobody.vert.out b/Test/baseResults/spv.for-nobody.vert.out
index 810d776..919c71a 100644
--- a/Test/baseResults/spv.for-nobody.vert.out
+++ b/Test/baseResults/spv.for-nobody.vert.out
@@ -1,6 +1,6 @@
 spv.for-nobody.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-notest.vert.out b/Test/baseResults/spv.for-notest.vert.out
index 70697ad..b2e574c 100644
--- a/Test/baseResults/spv.for-notest.vert.out
+++ b/Test/baseResults/spv.for-notest.vert.out
@@ -1,6 +1,6 @@
 spv.for-notest.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
index 7aaa17e..945668c 100755
--- a/Test/baseResults/spv.for-simple.vert.out
+++ b/Test/baseResults/spv.for-simple.vert.out
@@ -1,6 +1,6 @@
 spv.for-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
index 80000b0..6095a45 100755
--- a/Test/baseResults/spv.forLoop.frag.out
+++ b/Test/baseResults/spv.forLoop.frag.out
@@ -1,6 +1,6 @@
 spv.forLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 131
 
                               Capability Shader
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
index f5b7c02..06d76bf 100755
--- a/Test/baseResults/spv.forwardFun.frag.out
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -1,6 +1,6 @@
 spv.forwardFun.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
index c69570b..c9762d9 100755
--- a/Test/baseResults/spv.functionCall.frag.out
+++ b/Test/baseResults/spv.functionCall.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:5: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 76
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionNestedOpaque.vert.out b/Test/baseResults/spv.functionNestedOpaque.vert.out
index cc1d6d4..71f994e 100644
--- a/Test/baseResults/spv.functionNestedOpaque.vert.out
+++ b/Test/baseResults/spv.functionNestedOpaque.vert.out
@@ -1,6 +1,6 @@
 spv.functionNestedOpaque.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
index 7e02e8b..e81cb30 100755
--- a/Test/baseResults/spv.functionSemantics.frag.out
+++ b/Test/baseResults/spv.functionSemantics.frag.out
@@ -1,6 +1,6 @@
 spv.functionSemantics.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 156
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
index 737566a..15f7765 100755
--- a/Test/baseResults/spv.glFragColor.frag.out
+++ b/Test/baseResults/spv.glFragColor.frag.out
@@ -1,6 +1,6 @@
 spv.glFragColor.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 12
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glsl.register.autoassign.frag.out b/Test/baseResults/spv.glsl.register.autoassign.frag.out
index d1dea9e..e26fd6a 100644
--- a/Test/baseResults/spv.glsl.register.autoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.glsl.register.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 142
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
index a82042d..5fd0596 100644
--- a/Test/baseResults/spv.glsl.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
 spv.glsl.register.noautoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 142
 
                               Capability Shader
diff --git a/Test/baseResults/spv.hlslDebugInfo.frag.out b/Test/baseResults/spv.hlslDebugInfo.frag.out
index 571e594..9eddfdf 100644
--- a/Test/baseResults/spv.hlslDebugInfo.frag.out
+++ b/Test/baseResults/spv.hlslDebugInfo.frag.out
@@ -1,6 +1,6 @@
 spv.hlslDebugInfo.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.hlslOffsets.vert.out b/Test/baseResults/spv.hlslOffsets.vert.out
index bdc24b3..f96a629 100644
--- a/Test/baseResults/spv.hlslOffsets.vert.out
+++ b/Test/baseResults/spv.hlslOffsets.vert.out
@@ -18,7 +18,7 @@
 0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 14
 
                               Capability Shader
diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index d645f2a..6e35b36 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -1,6 +1,6 @@
 spv.image.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 376
 
                               Capability Shader
diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out
index 0f16430..50b04a8 100644
--- a/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -1,6 +1,6 @@
 spv.imageLoadStoreLod.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 82
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index 7442cff..6cc6070 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,6 +1,6 @@
 spv.int16.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 561
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index c272660..3c6dc85 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -1,6 +1,6 @@
 spv.int64.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 480
 
                               Capability Shader
diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out
index 7e846d6..33e57bf 100644
--- a/Test/baseResults/spv.intOps.vert.out
+++ b/Test/baseResults/spv.intOps.vert.out
@@ -1,6 +1,6 @@
 spv.intOps.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 268
 
                               Capability Shader
diff --git a/Test/baseResults/spv.interpOps.frag.out b/Test/baseResults/spv.interpOps.frag.out
index ebe9716..05e7f62 100644
--- a/Test/baseResults/spv.interpOps.frag.out
+++ b/Test/baseResults/spv.interpOps.frag.out
@@ -1,6 +1,6 @@
 spv.interpOps.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 100
 
                               Capability Shader
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index 533f594..3e73b84 100644
--- a/Test/baseResults/spv.layoutNested.vert.out
+++ b/Test/baseResults/spv.layoutNested.vert.out
@@ -1,6 +1,6 @@
 spv.layoutNested.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
index b3564d8..2bb07e2 100755
--- a/Test/baseResults/spv.length.frag.out
+++ b/Test/baseResults/spv.length.frag.out
@@ -1,6 +1,6 @@
 spv.length.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index c9dbc30..b59dfd8 100755
--- a/Test/baseResults/spv.localAggregates.frag.out
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -1,6 +1,6 @@
 spv.localAggregates.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 136
 
                               Capability Shader
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
index 2e7ef97..7ce2c1c 100755
--- a/Test/baseResults/spv.loops.frag.out
+++ b/Test/baseResults/spv.loops.frag.out
@@ -1,6 +1,6 @@
 spv.loops.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 725
 
                               Capability Shader
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
index 91791c2..a2339bd 100755
--- a/Test/baseResults/spv.loopsArtificial.frag.out
+++ b/Test/baseResults/spv.loopsArtificial.frag.out
@@ -1,6 +1,6 @@
 spv.loopsArtificial.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 158
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index 4d863c8..832f38e 100755
--- a/Test/baseResults/spv.matFun.vert.out
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -1,6 +1,6 @@
 spv.matFun.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 103
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out
index 872642f..1ac5ad5 100644
--- a/Test/baseResults/spv.matrix.frag.out
+++ b/Test/baseResults/spv.matrix.frag.out
@@ -1,6 +1,6 @@
 spv.matrix.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 286
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out
index 78facff..b6d7473 100644
--- a/Test/baseResults/spv.matrix2.frag.out
+++ b/Test/baseResults/spv.matrix2.frag.out
@@ -1,6 +1,6 @@
 spv.matrix2.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 221
 
                               Capability Shader
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index c041a52..b1ae8df 100644
--- a/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,6 +1,6 @@
 spv.memoryQualifier.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseResults/spv.merge-unreachable.frag.out b/Test/baseResults/spv.merge-unreachable.frag.out
index 678c5e4..24c0f4b 100644
--- a/Test/baseResults/spv.merge-unreachable.frag.out
+++ b/Test/baseResults/spv.merge-unreachable.frag.out
@@ -1,6 +1,6 @@
 spv.merge-unreachable.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index c7af141..04e9c3a 100755
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -1,6 +1,6 @@
 spv.multiStruct.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out
index 8609b3a..195f20f 100755
--- a/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -1,6 +1,6 @@
 spv.multiStructFuncall.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
index ba9e2d3..0633a12 100755
--- a/Test/baseResults/spv.multiView.frag.out
+++ b/Test/baseResults/spv.multiView.frag.out
@@ -1,6 +1,6 @@
 spv.multiView.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index 31d8c51..b3ed72c 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
@@ -1,6 +1,6 @@
 spv.multiviewPerViewAttributes.tesc
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 37
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
index 3764935..f4a589e 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
@@ -1,6 +1,6 @@
 spv.multiviewPerViewAttributes.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
index d53fcb6..4d3f4c7 100755
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -1,6 +1,6 @@
 spv.newTexture.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 284
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noBuiltInLoc.vert.out b/Test/baseResults/spv.noBuiltInLoc.vert.out
index d6cbeaa..6cdc321 100644
--- a/Test/baseResults/spv.noBuiltInLoc.vert.out
+++ b/Test/baseResults/spv.noBuiltInLoc.vert.out
@@ -1,6 +1,6 @@
 spv.noBuiltInLoc.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out
index 39c2343..cba32b5 100644
--- a/Test/baseResults/spv.noDeadDecorations.vert.out
+++ b/Test/baseResults/spv.noDeadDecorations.vert.out
@@ -1,6 +1,6 @@
 spv.noDeadDecorations.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
index d101b4f..97e7119 100755
--- a/Test/baseResults/spv.noWorkgroup.comp.out
+++ b/Test/baseResults/spv.noWorkgroup.comp.out
@@ -1,6 +1,6 @@
 spv.noWorkgroup.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 12
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
index 684d4f1..ca47252 100755
--- a/Test/baseResults/spv.nonSquare.vert.out
+++ b/Test/baseResults/spv.nonSquare.vert.out
@@ -1,6 +1,6 @@
 spv.nonSquare.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
index ebfa741..f9b0144 100755
--- a/Test/baseResults/spv.offsets.frag.out
+++ b/Test/baseResults/spv.offsets.frag.out
@@ -1,6 +1,6 @@
 spv.offsets.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.paramMemory.frag.out b/Test/baseResults/spv.paramMemory.frag.out
index 8b98b49..28d96bb 100755
--- a/Test/baseResults/spv.paramMemory.frag.out
+++ b/Test/baseResults/spv.paramMemory.frag.out
@@ -1,6 +1,6 @@
 spv.paramMemory.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 69
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out
index 1b5cd0c..91c2f35 100644
--- a/Test/baseResults/spv.precise.tesc.out
+++ b/Test/baseResults/spv.precise.tesc.out
@@ -1,6 +1,6 @@
 spv.precise.tesc
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 72
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out
index 4e7b28a..c05ced4 100644
--- a/Test/baseResults/spv.precise.tese.out
+++ b/Test/baseResults/spv.precise.tese.out
@@ -1,6 +1,6 @@
 spv.precise.tese
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 119
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
index 9cac37e..2284108 100755
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -1,6 +1,6 @@
 spv.precision.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 127
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
new file mode 100755
index 0000000..5bb1dee
--- /dev/null
+++ b/Test/baseResults/spv.precisionNonESSamp.frag.out
@@ -0,0 +1,98 @@
+spv.precisionNonESSamp.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 47
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 17 27 39
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 13  "s"
+                              Name 17  "v2"
+                              Name 23  "t"
+                              Name 27  "v3"
+                              Name 31  "vi1"
+                              Name 34  "i1"
+                              Name 39  "iv2"
+                              Name 42  "vi2"
+                              Name 43  "i2"
+                              Decorate 9(color) RelaxedPrecision
+                              Decorate 9(color) Location 0
+                              Decorate 13(s) RelaxedPrecision
+                              Decorate 13(s) DescriptorSet 0
+                              Decorate 14 RelaxedPrecision
+                              Decorate 17(v2) RelaxedPrecision
+                              Decorate 17(v2) Location 0
+                              Decorate 18 RelaxedPrecision
+                              Decorate 19 RelaxedPrecision
+                              Decorate 23(t) DescriptorSet 0
+                              Decorate 27(v3) RelaxedPrecision
+                              Decorate 27(v3) Location 1
+                              Decorate 28 RelaxedPrecision
+                              Decorate 31(vi1) RelaxedPrecision
+                              Decorate 34(i1) RelaxedPrecision
+                              Decorate 34(i1) DescriptorSet 0
+                              Decorate 35 RelaxedPrecision
+                              Decorate 39(iv2) RelaxedPrecision
+                              Decorate 39(iv2) Flat
+                              Decorate 39(iv2) Location 3
+                              Decorate 40 RelaxedPrecision
+                              Decorate 41 RelaxedPrecision
+                              Decorate 42(vi2) RelaxedPrecision
+                              Decorate 43(i2) DescriptorSet 0
+                              Decorate 45 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypeSampledImage 10
+              12:             TypePointer UniformConstant 11
+           13(s):     12(ptr) Variable UniformConstant
+              15:             TypeVector 6(float) 2
+              16:             TypePointer Input 15(fvec2)
+          17(v2):     16(ptr) Variable Input
+              20:             TypeImage 6(float) 3D sampled format:Unknown
+              21:             TypeSampledImage 20
+              22:             TypePointer UniformConstant 21
+           23(t):     22(ptr) Variable UniformConstant
+              25:             TypeVector 6(float) 3
+              26:             TypePointer Input 25(fvec3)
+          27(v3):     26(ptr) Variable Input
+              30:             TypePointer Function 7(fvec4)
+              32:             TypeImage 6(float) 2D nonsampled format:Rgba32f
+              33:             TypePointer UniformConstant 32
+          34(i1):     33(ptr) Variable UniformConstant
+              36:             TypeInt 32 1
+              37:             TypeVector 36(int) 2
+              38:             TypePointer Input 37(ivec2)
+         39(iv2):     38(ptr) Variable Input
+          43(i2):     33(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+         31(vi1):     30(ptr) Variable Function
+         42(vi2):     30(ptr) Variable Function
+              14:          11 Load 13(s)
+              18:   15(fvec2) Load 17(v2)
+              19:    7(fvec4) ImageSampleImplicitLod 14 18
+                              Store 9(color) 19
+              24:          21 Load 23(t)
+              28:   25(fvec3) Load 27(v3)
+              29:    7(fvec4) ImageSampleImplicitLod 24 28
+                              Store 9(color) 29
+              35:          32 Load 34(i1)
+              40:   37(ivec2) Load 39(iv2)
+              41:    7(fvec4) ImageRead 35 40
+                              Store 31(vi1) 41
+              44:          32 Load 43(i2)
+              45:   37(ivec2) Load 39(iv2)
+              46:    7(fvec4) ImageRead 44 45
+                              Store 42(vi2) 46
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index 0913543..68a6909 100755
--- a/Test/baseResults/spv.prepost.frag.out
+++ b/Test/baseResults/spv.prepost.frag.out
@@ -1,6 +1,6 @@
 spv.prepost.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pushConstant.vert.out b/Test/baseResults/spv.pushConstant.vert.out
index bfef883..e86320f 100644
--- a/Test/baseResults/spv.pushConstant.vert.out
+++ b/Test/baseResults/spv.pushConstant.vert.out
@@ -1,6 +1,6 @@
 spv.pushConstant.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out
index 398ef05..37e61ae 100755
--- a/Test/baseResults/spv.pushConstantAnon.vert.out
+++ b/Test/baseResults/spv.pushConstantAnon.vert.out
@@ -1,6 +1,6 @@
 spv.pushConstantAnon.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
index e9edbe4..fa51edc 100755
--- a/Test/baseResults/spv.qualifiers.vert.out
+++ b/Test/baseResults/spv.qualifiers.vert.out
@@ -1,6 +1,6 @@
 spv.qualifiers.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
index c06d877..419d213 100755
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -1,6 +1,6 @@
 spv.queryL.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 224
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
index 988cd0c..14040df 100644
--- a/Test/baseResults/spv.register.autoassign-2.frag.out
+++ b/Test/baseResults/spv.register.autoassign-2.frag.out
@@ -1,6 +1,6 @@
 spv.register.autoassign-2.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 47
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign.frag.out b/Test/baseResults/spv.register.autoassign.frag.out
index 6516d4f..8540253 100644
--- a/Test/baseResults/spv.register.autoassign.frag.out
+++ b/Test/baseResults/spv.register.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.register.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out
index 482e558..a633993 100644
--- a/Test/baseResults/spv.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
 spv.register.noautoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.subpass.frag.out b/Test/baseResults/spv.register.subpass.frag.out
new file mode 100644
index 0000000..2a22326
--- /dev/null
+++ b/Test/baseResults/spv.register.subpass.frag.out
@@ -0,0 +1,75 @@
+spv.register.subpass.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 40
+
+                              Capability Shader
+                              Capability InputAttachment
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 38
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 12  "result00"
+                              Name 15  "subpass_f4"
+                              Name 22  "result10"
+                              Name 25  "subpass_ms_f4"
+                              Name 29  "result73"
+                              Name 30  "subpass_2"
+                              Name 38  "@entryPointOutput"
+                              Decorate 15(subpass_f4) DescriptorSet 0
+                              Decorate 15(subpass_f4) Binding 21
+                              Decorate 15(subpass_f4) InputAttachmentIndex 1
+                              Decorate 25(subpass_ms_f4) DescriptorSet 0
+                              Decorate 25(subpass_ms_f4) Binding 20
+                              Decorate 25(subpass_ms_f4) InputAttachmentIndex 4
+                              Decorate 30(subpass_2) DescriptorSet 0
+                              Decorate 30(subpass_2) Binding 22
+                              Decorate 30(subpass_2) InputAttachmentIndex 7
+                              Decorate 38(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypePointer Function 7(fvec4)
+              13:             TypeImage 6(float) SubpassData nonsampled format:Unknown
+              14:             TypePointer UniformConstant 13
+  15(subpass_f4):     14(ptr) Variable UniformConstant
+              17:             TypeInt 32 1
+              18:     17(int) Constant 0
+              19:             TypeVector 17(int) 2
+              20:   19(ivec2) ConstantComposite 18 18
+              23:             TypeImage 6(float) SubpassData multi-sampled nonsampled format:Unknown
+              24:             TypePointer UniformConstant 23
+25(subpass_ms_f4):     24(ptr) Variable UniformConstant
+              27:     17(int) Constant 3
+   30(subpass_2):     14(ptr) Variable UniformConstant
+              33:    6(float) Constant 0
+              34:    7(fvec4) ConstantComposite 33 33 33 33
+              37:             TypePointer Output 7(fvec4)
+38(@entryPointOutput):     37(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              39:    7(fvec4) FunctionCall 9(@main()
+                              Store 38(@entryPointOutput) 39
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+    12(result00):     11(ptr) Variable Function
+    22(result10):     11(ptr) Variable Function
+    29(result73):     11(ptr) Variable Function
+              16:          13 Load 15(subpass_f4)
+              21:    7(fvec4) ImageRead 16 20
+                              Store 12(result00) 21
+              26:          23 Load 25(subpass_ms_f4)
+              28:    7(fvec4) ImageRead 26 20 Sample 27
+                              Store 22(result10) 28
+              31:          13 Load 30(subpass_2)
+              32:    7(fvec4) ImageRead 31 20
+                              Store 29(result73) 32
+                              ReturnValue 34
+                              FunctionEnd
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
index 6121b9b..ecca761 100644
--- a/Test/baseResults/spv.rw.autoassign.frag.out
+++ b/Test/baseResults/spv.rw.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.rw.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
index 315a60d..3a974fb 100644
--- a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
+++ b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.sampleMaskOverrideCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index 3807242..0e6243b 100644
--- a/Test/baseResults/spv.separate.frag.out
+++ b/Test/baseResults/spv.separate.frag.out
@@ -1,6 +1,6 @@
 spv.separate.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 319
 
                               Capability Shader
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index 6814879..530b554 100755
--- a/Test/baseResults/spv.set.vert.out
+++ b/Test/baseResults/spv.set.vert.out
@@ -1,6 +1,6 @@
 spv.set.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index 45c21d9..8be7a06 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -1,6 +1,6 @@
 spv.shaderBallot.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 298
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderBallotAMD.comp.out b/Test/baseResults/spv.shaderBallotAMD.comp.out
index b6b57ec..51a52f3 100644
--- a/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -1,6 +1,6 @@
 spv.shaderBallotAMD.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 1048
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out
index fbce2d2..36c5ca5 100644
--- a/Test/baseResults/spv.shaderDrawParams.vert.out
+++ b/Test/baseResults/spv.shaderDrawParams.vert.out
@@ -1,6 +1,6 @@
 spv.shaderDrawParams.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderFragMaskAMD.frag.out b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
new file mode 100644
index 0000000..56081b1
--- /dev/null
+++ b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
@@ -0,0 +1,122 @@
+spv.shaderFragMaskAMD.frag
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 80
+
+                              Capability Shader
+                              Capability InputAttachment
+                              Capability FragmentMaskAMD
+                              Extension  "SPV_AMD_shader_fragment_mask"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 78
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_AMD_shader_fragment_mask"
+                              Name 4  "main"
+                              Name 9  "f4"
+                              Name 14  "fragMask"
+                              Name 18  "s2DMS"
+                              Name 27  "fragIndex"
+                              Name 42  "is2DMSArray"
+                              Name 62  "usubpassMS"
+                              Name 78  "fragColor"
+                              Decorate 18(s2DMS) DescriptorSet 0
+                              Decorate 18(s2DMS) Binding 0
+                              Decorate 42(is2DMSArray) DescriptorSet 0
+                              Decorate 42(is2DMSArray) Binding 1
+                              Decorate 62(usubpassMS) DescriptorSet 0
+                              Decorate 62(usubpassMS) Binding 2
+                              Decorate 62(usubpassMS) InputAttachmentIndex 0
+                              Decorate 78(fragColor) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:    6(float) Constant 0
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeInt 32 0
+              13:             TypePointer Function 12(int)
+              15:             TypeImage 6(float) 2D multi-sampled sampled format:Unknown
+              16:             TypeSampledImage 15
+              17:             TypePointer UniformConstant 16
+       18(s2DMS):     17(ptr) Variable UniformConstant
+              20:             TypeInt 32 1
+              21:             TypeVector 20(int) 2
+              22:     20(int) Constant 2
+              23:     20(int) Constant 3
+              24:   21(ivec2) ConstantComposite 22 23
+              29:     12(int) Constant 240
+              31:     20(int) Constant 4
+              34:     12(int) Constant 1
+              39:             TypeImage 20(int) 2D array multi-sampled sampled format:Unknown
+              40:             TypeSampledImage 39
+              41:             TypePointer UniformConstant 40
+ 42(is2DMSArray):     41(ptr) Variable UniformConstant
+              44:             TypeVector 20(int) 3
+              45:     20(int) Constant 1
+              46:   44(ivec3) ConstantComposite 22 23 45
+              55:             TypeVector 20(int) 4
+              60:             TypeImage 12(int) SubpassData multi-sampled nonsampled format:Unknown
+              61:             TypePointer UniformConstant 60
+  62(usubpassMS):     61(ptr) Variable UniformConstant
+              64:     20(int) Constant 0
+              65:   21(ivec2) ConstantComposite 64 64
+              72:             TypeVector 12(int) 4
+              77:             TypePointer Output 7(fvec4)
+   78(fragColor):     77(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+           9(f4):      8(ptr) Variable Function
+    14(fragMask):     13(ptr) Variable Function
+   27(fragIndex):     13(ptr) Variable Function
+                              Store 9(f4) 11
+              19:          16 Load 18(s2DMS)
+              25:          15 Image 19
+              26:     12(int) FragmentMaskFetchAMD 25 24
+                              Store 14(fragMask) 26
+              28:     12(int) Load 14(fragMask)
+              30:     12(int) BitwiseAnd 28 29
+              32:     12(int) ShiftRightLogical 30 31
+                              Store 27(fragIndex) 32
+              33:          16 Load 18(s2DMS)
+              35:          15 Image 33
+              36:    7(fvec4) FragmentFetchAMD 35 24 34
+              37:    7(fvec4) Load 9(f4)
+              38:    7(fvec4) FAdd 37 36
+                              Store 9(f4) 38
+              43:          40 Load 42(is2DMSArray)
+              47:          39 Image 43
+              48:     12(int) FragmentMaskFetchAMD 47 46
+                              Store 14(fragMask) 48
+              49:     12(int) Load 14(fragMask)
+              50:     12(int) BitwiseAnd 49 29
+              51:     12(int) ShiftRightLogical 50 31
+                              Store 27(fragIndex) 51
+              52:          40 Load 42(is2DMSArray)
+              53:     12(int) Load 27(fragIndex)
+              54:          39 Image 52
+              56:   55(ivec4) FragmentFetchAMD 54 46 53
+              57:    7(fvec4) ConvertSToF 56
+              58:    7(fvec4) Load 9(f4)
+              59:    7(fvec4) FAdd 58 57
+                              Store 9(f4) 59
+              63:          60 Load 62(usubpassMS)
+              66:     12(int) FragmentMaskFetchAMD 63 65
+                              Store 14(fragMask) 66
+              67:     12(int) Load 14(fragMask)
+              68:     12(int) BitwiseAnd 67 29
+              69:     12(int) ShiftRightLogical 68 31
+                              Store 27(fragIndex) 69
+              70:          60 Load 62(usubpassMS)
+              71:     12(int) Load 27(fragIndex)
+              73:   72(ivec4) FragmentFetchAMD 70 65 71
+              74:    7(fvec4) ConvertUToF 73
+              75:    7(fvec4) Load 9(f4)
+              76:    7(fvec4) FAdd 75 74
+                              Store 9(f4) 76
+              79:    7(fvec4) Load 9(f4)
+                              Store 78(fragColor) 79
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out
index ed76187..abd1804 100644
--- a/Test/baseResults/spv.shaderGroupVote.comp.out
+++ b/Test/baseResults/spv.shaderGroupVote.comp.out
@@ -1,6 +1,6 @@
 spv.shaderGroupVote.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderStencilExport.frag.out b/Test/baseResults/spv.shaderStencilExport.frag.out
index b0774de..a126e96 100644
--- a/Test/baseResults/spv.shaderStencilExport.frag.out
+++ b/Test/baseResults/spv.shaderStencilExport.frag.out
@@ -1,6 +1,6 @@
 spv.shaderStencilExport.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 10
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shiftOps.frag.out b/Test/baseResults/spv.shiftOps.frag.out
index 1381ea9..b2bfcad 100644
--- a/Test/baseResults/spv.shiftOps.frag.out
+++ b/Test/baseResults/spv.shiftOps.frag.out
@@ -1,6 +1,6 @@
 spv.shiftOps.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out
index 9318785..33eec77 100644
--- a/Test/baseResults/spv.shortCircuit.frag.out
+++ b/Test/baseResults/spv.shortCircuit.frag.out
@@ -1,6 +1,6 @@
 spv.shortCircuit.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 147
 
                               Capability Shader
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
index 857c2c2..62b4255 100755
--- a/Test/baseResults/spv.simpleFunctionCall.frag.out
+++ b/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -1,6 +1,6 @@
 spv.simpleFunctionCall.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
index 2cad631..56933e4 100755
--- a/Test/baseResults/spv.simpleMat.vert.out
+++ b/Test/baseResults/spv.simpleMat.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
index b57b87c..376a874 100644
--- a/Test/baseResults/spv.sparseTexture.frag.out
+++ b/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,6 +1,6 @@
 spv.sparseTexture.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 438
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index c716efd..21f9583 100644
--- a/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,6 +1,6 @@
 spv.sparseTextureClamp.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 360
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index 720d0a9..766bdaf 100755
--- a/Test/baseResults/spv.specConst.vert.out
+++ b/Test/baseResults/spv.specConst.vert.out
@@ -1,6 +1,6 @@
 spv.specConst.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.comp.out b/Test/baseResults/spv.specConstant.comp.out
index 8db9ebe..de8411b 100644
--- a/Test/baseResults/spv.specConstant.comp.out
+++ b/Test/baseResults/spv.specConstant.comp.out
@@ -1,6 +1,6 @@
 spv.specConstant.comp
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index bcaa9fe..156497b 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -1,6 +1,6 @@
 spv.specConstant.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 81
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out
index ec0dc4f..194f567 100644
--- a/Test/baseResults/spv.specConstantComposite.vert.out
+++ b/Test/baseResults/spv.specConstantComposite.vert.out
@@ -1,6 +1,6 @@
 spv.specConstantComposite.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstantOperations.vert.out b/Test/baseResults/spv.specConstantOperations.vert.out
index 3fb61d4..429e068 100644
--- a/Test/baseResults/spv.specConstantOperations.vert.out
+++ b/Test/baseResults/spv.specConstantOperations.vert.out
@@ -1,6 +1,6 @@
 spv.specConstantOperations.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out
index 6b7c723..02de2cb 100644
--- a/Test/baseResults/spv.ssbo.autoassign.frag.out
+++ b/Test/baseResults/spv.ssbo.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.ssbo.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ssboAlias.frag.out b/Test/baseResults/spv.ssboAlias.frag.out
index 22915d7..876646d 100755
--- a/Test/baseResults/spv.ssboAlias.frag.out
+++ b/Test/baseResults/spv.ssboAlias.frag.out
@@ -1,6 +1,6 @@
 spv.ssboAlias.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out
index 8a83f9e..b2c9b39 100644
--- a/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -1,83 +1,86 @@
 spv.stereoViewRendering.tesc
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 38
 
+                              Capability Geometry
                               Capability Tessellation
+                              Capability ShaderViewportIndexLayerNV
                               Capability ShaderViewportMaskNV
                               Capability ShaderStereoViewNV
+                              Extension  "SPV_EXT_shader_viewport_index_layer"
                               Extension  "SPV_NV_stereo_view_rendering"
                               Extension  "SPV_NV_viewport_array2"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 16 18 32
+                              EntryPoint TessellationControl 4  "main" 16 18 31 37
                               ExecutionMode 4 OutputVertices 4
                               Source GLSL 450
                               SourceExtension  "GL_NV_stereo_view_rendering"
                               SourceExtension  "GL_NV_viewport_array2"
                               Name 4  "main"
                               Name 12  "gl_PerVertex"
-                              MemberName 12(gl_PerVertex) 0  "gl_Layer"
-                              MemberName 12(gl_PerVertex) 1  "gl_SecondaryPositionNV"
-                              MemberName 12(gl_PerVertex) 2  "gl_SecondaryViewportMaskNV"
+                              MemberName 12(gl_PerVertex) 0  "gl_SecondaryPositionNV"
+                              MemberName 12(gl_PerVertex) 1  "gl_SecondaryViewportMaskNV"
                               Name 16  "gl_out"
                               Name 18  "gl_InvocationID"
-                              Name 28  "gl_PerVertex"
-                              MemberName 28(gl_PerVertex) 0  "gl_Position"
-                              MemberName 28(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 28(gl_PerVertex) 2  "gl_ClipDistance"
-                              MemberName 28(gl_PerVertex) 3  "gl_CullDistance"
-                              MemberName 28(gl_PerVertex) 4  "gl_SecondaryPositionNV"
-                              Name 32  "gl_in"
-                              MemberDecorate 12(gl_PerVertex) 0 BuiltIn Layer
-                              MemberDecorate 12(gl_PerVertex) 0 ViewportRelativeNV
-                              MemberDecorate 12(gl_PerVertex) 0 SecondaryViewportRelativeNV 1
-                              MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryPositionNV
-                              MemberDecorate 12(gl_PerVertex) 2 BuiltIn SecondaryViewportMaskNV
+                              Name 27  "gl_PerVertex"
+                              MemberName 27(gl_PerVertex) 0  "gl_Position"
+                              MemberName 27(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 27(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 27(gl_PerVertex) 3  "gl_CullDistance"
+                              MemberName 27(gl_PerVertex) 4  "gl_SecondaryPositionNV"
+                              Name 31  "gl_in"
+                              Name 37  "gl_Layer"
+                              MemberDecorate 12(gl_PerVertex) 0 BuiltIn SecondaryPositionNV
+                              MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryViewportMaskNV
                               Decorate 12(gl_PerVertex) Block
                               Decorate 18(gl_InvocationID) BuiltIn InvocationId
-                              MemberDecorate 28(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 28(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 28(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 28(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 28(gl_PerVertex) Block
+                              MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 27(gl_PerVertex) Block
+                              Decorate 37(gl_Layer) BuiltIn Layer
+                              Decorate 37(gl_Layer) ViewportRelativeNV
+                              Decorate 37(gl_Layer) SecondaryViewportRelativeNV 1
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypeFloat 32
-               8:             TypeVector 7(float) 4
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 1
                9:             TypeInt 32 0
               10:      9(int) Constant 2
-              11:             TypeArray 6(int) 10
-12(gl_PerVertex):             TypeStruct 6(int) 8(fvec4) 11
+              11:             TypeArray 8(int) 10
+12(gl_PerVertex):             TypeStruct 7(fvec4) 11
               13:      9(int) Constant 4
               14:             TypeArray 12(gl_PerVertex) 13
               15:             TypePointer Output 14
       16(gl_out):     15(ptr) Variable Output
-              17:             TypePointer Input 6(int)
+              17:             TypePointer Input 8(int)
 18(gl_InvocationID):     17(ptr) Variable Input
-              20:      6(int) Constant 2
-              21:      6(int) Constant 0
-              22:      6(int) Constant 1
-              23:             TypePointer Output 6(int)
-              26:      9(int) Constant 1
-              27:             TypeArray 7(float) 26
-28(gl_PerVertex):             TypeStruct 8(fvec4) 7(float) 27 27 8(fvec4)
-              29:      9(int) Constant 32
-              30:             TypeArray 28(gl_PerVertex) 29
-              31:             TypePointer Input 30
-       32(gl_in):     31(ptr) Variable Input
-              33:             TypePointer Input 8(fvec4)
-              36:             TypePointer Output 8(fvec4)
+              20:      8(int) Constant 1
+              21:      8(int) Constant 0
+              22:             TypePointer Output 8(int)
+              25:      9(int) Constant 1
+              26:             TypeArray 6(float) 25
+27(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 26 26 7(fvec4)
+              28:      9(int) Constant 32
+              29:             TypeArray 27(gl_PerVertex) 28
+              30:             TypePointer Input 29
+       31(gl_in):     30(ptr) Variable Input
+              32:             TypePointer Input 7(fvec4)
+              35:             TypePointer Output 7(fvec4)
+    37(gl_Layer):     22(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              19:      6(int) Load 18(gl_InvocationID)
-              24:     23(ptr) AccessChain 16(gl_out) 19 20 21
-                              Store 24 22
-              25:      6(int) Load 18(gl_InvocationID)
-              34:     33(ptr) AccessChain 32(gl_in) 22 21
-              35:    8(fvec4) Load 34
-              37:     36(ptr) AccessChain 16(gl_out) 25 22
-                              Store 37 35
+              19:      8(int) Load 18(gl_InvocationID)
+              23:     22(ptr) AccessChain 16(gl_out) 19 20 21
+                              Store 23 20
+              24:      8(int) Load 18(gl_InvocationID)
+              33:     32(ptr) AccessChain 31(gl_in) 20 21
+              34:    7(fvec4) Load 33
+              36:     35(ptr) AccessChain 16(gl_out) 24 21
+                              Store 36 34
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out
index fbbdf17..f2b22d5 100644
--- a/Test/baseResults/spv.stereoViewRendering.vert.out
+++ b/Test/baseResults/spv.stereoViewRendering.vert.out
@@ -1,6 +1,6 @@
 spv.stereoViewRendering.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.storageBuffer.vert.out b/Test/baseResults/spv.storageBuffer.vert.out
index f9a7161..b8b7e94 100755
--- a/Test/baseResults/spv.storageBuffer.vert.out
+++ b/Test/baseResults/spv.storageBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.storageBuffer.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index 4f56336..b107de2 100755
--- a/Test/baseResults/spv.structAssignment.frag.out
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index 164641b..fb55c71 100755
--- a/Test/baseResults/spv.structDeref.frag.out
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -1,6 +1,6 @@
 spv.structDeref.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 123
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index d9d3133..5672196 100755
--- a/Test/baseResults/spv.structure.frag.out
+++ b/Test/baseResults/spv.structure.frag.out
@@ -1,6 +1,6 @@
 spv.structure.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out
index 7db9e39..7624898 100644
--- a/Test/baseResults/spv.subpass.frag.out
+++ b/Test/baseResults/spv.subpass.frag.out
@@ -1,10 +1,9 @@
 spv.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 67
 
                               Capability Shader
-                              Capability StorageImageMultisample
                               Capability InputAttachment
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index f742756..0a35155 100755
--- a/Test/baseResults/spv.switch.frag.out
+++ b/Test/baseResults/spv.switch.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:139: 'switch' : last case/default label not followed by statements 
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 269
 
                               Capability Shader
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
index 79b4387..b194d27 100755
--- a/Test/baseResults/spv.swizzle.frag.out
+++ b/Test/baseResults/spv.swizzle.frag.out
@@ -1,6 +1,6 @@
 spv.swizzle.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 108
 
                               Capability Shader
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
index 573bd6d..dd910f7 100755
--- a/Test/baseResults/spv.swizzleInversion.frag.out
+++ b/Test/baseResults/spv.swizzleInversion.frag.out
@@ -1,6 +1,6 @@
 spv.swizzleInversion.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index 0e5deeb..e61785c 100644
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -1,6 +1,6 @@
 spv.test.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 55
 
                               Capability Shader
diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
index 623d16b..5f3d41e 100644
--- a/Test/baseResults/spv.test.vert.out
+++ b/Test/baseResults/spv.test.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:5: attribute deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index c2de2ea..99bb381 100755
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:12: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 305
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.sampler.transform.frag.out b/Test/baseResults/spv.texture.sampler.transform.frag.out
index ffa664e..6af2b4f 100644
--- a/Test/baseResults/spv.texture.sampler.transform.frag.out
+++ b/Test/baseResults/spv.texture.sampler.transform.frag.out
@@ -1,6 +1,6 @@
 spv.texture.sampler.transform.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index c361549..c704f9f 100755
--- a/Test/baseResults/spv.texture.vert.out
+++ b/Test/baseResults/spv.texture.vert.out
@@ -1,6 +1,6 @@
 spv.texture.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 150
 
                               Capability Shader
diff --git a/Test/baseResults/spv.textureBuffer.vert.out b/Test/baseResults/spv.textureBuffer.vert.out
index 606e566..2a9432d 100755
--- a/Test/baseResults/spv.textureBuffer.vert.out
+++ b/Test/baseResults/spv.textureBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.textureBuffer.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.textureGatherBiasLod.frag.out b/Test/baseResults/spv.textureGatherBiasLod.frag.out
index 6d0c3e8..3a41668 100644
--- a/Test/baseResults/spv.textureGatherBiasLod.frag.out
+++ b/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -1,6 +1,6 @@
 spv.textureGatherBiasLod.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 298
 
                               Capability Shader
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
index be5f1bf..8726486 100755
--- a/Test/baseResults/spv.types.frag.out
+++ b/Test/baseResults/spv.types.frag.out
@@ -1,6 +1,6 @@
 spv.types.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 260
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index 9ede260..92c4ce7 100755
--- a/Test/baseResults/spv.uint.frag.out
+++ b/Test/baseResults/spv.uint.frag.out
@@ -1,6 +1,6 @@
 spv.uint.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 213
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index c6fb0ff..87aa2f2 100644
--- a/Test/baseResults/spv.uniformArray.frag.out
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -1,6 +1,6 @@
 spv.uniformArray.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index 184c01d..fa682cd 100755
--- a/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -1,6 +1,6 @@
 spv.variableArrayIndex.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 93
 
                               Capability Shader
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index 33eaf2b..22748ac 100755
--- a/Test/baseResults/spv.varyingArray.frag.out
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -1,6 +1,6 @@
 spv.varyingArray.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index c36efd0..701f9d1 100755
--- a/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -1,6 +1,6 @@
 spv.varyingArrayIndirect.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index a8c7dc6..d62455c 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,8 +1,9 @@
 spv.viewportArray2.tesc
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 25
 
+                              Capability Geometry
                               Capability Tessellation
                               Capability MultiViewport
                               Capability ShaderViewportIndexLayerNV
@@ -11,47 +12,47 @@
                               Extension  "SPV_NV_viewport_array2"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 14 16
+                              EntryPoint TessellationControl 4  "main" 14 16 22 24
                               ExecutionMode 4 OutputVertices 4
                               Source GLSL 450
                               SourceExtension  "GL_NV_viewport_array2"
                               Name 4  "main"
                               Name 10  "gl_PerVertex"
-                              MemberName 10(gl_PerVertex) 0  "gl_ViewportIndex"
-                              MemberName 10(gl_PerVertex) 1  "gl_Layer"
-                              MemberName 10(gl_PerVertex) 2  "gl_ViewportMask"
+                              MemberName 10(gl_PerVertex) 0  "gl_ViewportMask"
                               Name 14  "gl_out"
                               Name 16  "gl_InvocationID"
-                              MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportIndex
-                              MemberDecorate 10(gl_PerVertex) 1 BuiltIn Layer
-                              MemberDecorate 10(gl_PerVertex) 1 ViewportRelativeNV
-                              MemberDecorate 10(gl_PerVertex) 2 BuiltIn ViewportMaskNV
+                              Name 22  "gl_ViewportIndex"
+                              Name 24  "gl_Layer"
+                              MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportMaskNV
                               Decorate 10(gl_PerVertex) Block
                               Decorate 16(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 22(gl_ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 24(gl_Layer) BuiltIn Layer
+                              Decorate 24(gl_Layer) ViewportRelativeNV
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
                7:             TypeInt 32 0
                8:      7(int) Constant 2
                9:             TypeArray 6(int) 8
-10(gl_PerVertex):             TypeStruct 6(int) 6(int) 9
+10(gl_PerVertex):             TypeStruct 9
               11:      7(int) Constant 4
               12:             TypeArray 10(gl_PerVertex) 11
               13:             TypePointer Output 12
       14(gl_out):     13(ptr) Variable Output
               15:             TypePointer Input 6(int)
 16(gl_InvocationID):     15(ptr) Variable Input
-              18:      6(int) Constant 2
-              19:      6(int) Constant 0
-              20:      6(int) Constant 1
-              21:             TypePointer Output 6(int)
+              18:      6(int) Constant 0
+              19:      6(int) Constant 1
+              20:             TypePointer Output 6(int)
+22(gl_ViewportIndex):     20(ptr) Variable Output
+              23:      6(int) Constant 2
+    24(gl_Layer):     20(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
               17:      6(int) Load 16(gl_InvocationID)
-              22:     21(ptr) AccessChain 14(gl_out) 17 18 19
-                              Store 22 20
-              23:      6(int) Load 16(gl_InvocationID)
-              24:     21(ptr) AccessChain 14(gl_out) 23 19
-                              Store 24 18
+              21:     20(ptr) AccessChain 14(gl_out) 17 18 18
+                              Store 21 19
+                              Store 22(gl_ViewportIndex) 23
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.viewportArray2.vert.out b/Test/baseResults/spv.viewportArray2.vert.out
index cc52905..b627b46 100644
--- a/Test/baseResults/spv.viewportArray2.vert.out
+++ b/Test/baseResults/spv.viewportArray2.vert.out
@@ -1,6 +1,6 @@
 spv.viewportArray2.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
index 80a6d0a..1fbd69f 100755
--- a/Test/baseResults/spv.voidFunction.frag.out
+++ b/Test/baseResults/spv.voidFunction.frag.out
@@ -1,6 +1,6 @@
 spv.voidFunction.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index 415f3b9..1d343ed 100644
--- a/Test/baseResults/spv.while-continue-break.vert.out
+++ b/Test/baseResults/spv.while-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.while-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 41
 
                               Capability Shader
diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out
index 7e5586b..d956c6c 100755
--- a/Test/baseResults/spv.while-simple.vert.out
+++ b/Test/baseResults/spv.while-simple.vert.out
@@ -1,6 +1,6 @@
 spv.while-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
index 8a54538..e58fb04 100755
--- a/Test/baseResults/spv.whileLoop.frag.out
+++ b/Test/baseResults/spv.whileLoop.frag.out
@@ -1,6 +1,6 @@
 spv.whileLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out
index 0487a4f..0712e07 100755
--- a/Test/baseResults/vulkan.ast.vert.out
+++ b/Test/baseResults/vulkan.ast.vert.out
@@ -258,7 +258,7 @@
 0:?       2 (const int)
 
 // Module Version 10000
-// Generated by (magic number): 80001
+// Generated by (magic number): 80002
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/cppDeepNest.frag b/Test/cppDeepNest.frag
new file mode 100644
index 0000000..51c436e
--- /dev/null
+++ b/Test/cppDeepNest.frag
@@ -0,0 +1,117 @@
+#ifdef O

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#if

+#endif

diff --git a/Test/cppIntMinOverNegativeOne.frag b/Test/cppIntMinOverNegativeOne.frag
new file mode 100644
index 0000000..b7e0a95
--- /dev/null
+++ b/Test/cppIntMinOverNegativeOne.frag
@@ -0,0 +1,6 @@
+#if (-2147483648 / -1) != 0
+#error INT_MIN / -1 should yield 0, something went wrong.
+#endif
+#if (-2147483648 % -1) != 0
+#error INT_MIN % -1 should yield 0, something went wrong.
+#endif
\ No newline at end of file
diff --git a/Test/glsl.entryPointRename.vert b/Test/glsl.entryPointRename.vert
new file mode 100644
index 0000000..7fc6b7a
--- /dev/null
+++ b/Test/glsl.entryPointRename.vert
@@ -0,0 +1,11 @@
+#version 460

+

+void bar()

+{

+    gl_Position = vec4(1);

+}

+

+void main()

+{

+    gl_Position = vec4(1);

+}

diff --git a/Test/glsl.entryPointRename2.vert b/Test/glsl.entryPointRename2.vert
new file mode 100644
index 0000000..0473e9b
--- /dev/null
+++ b/Test/glsl.entryPointRename2.vert
@@ -0,0 +1,6 @@
+#version 460

+

+void bar()

+{

+    gl_Position = vec4(1);

+}

diff --git a/Test/hlsl.array.frag b/Test/hlsl.array.frag
index 1abba89..ff0004f 100644
--- a/Test/hlsl.array.frag
+++ b/Test/hlsl.array.frag
@@ -4,8 +4,15 @@
     float4 m[7];
 } s[11];
 
-float4 PixelShaderFunction(int i, float4 input[3]) : COLOR0
+static float4 C = float4(1,2,3,4);
+float4 a1[1] = { float4(1,2,3,4) };
+float4 a2[2] = { float4(1,2,3,4), float4(5,2,3,4), };
+const float4 c1[1] = { float4(1,2,3,4) };
+static const float4 c2[2] = { C, float4(1,2,3,4), };
+
+float4 PixelShaderFunction(int i : sem1, float4 input[3] : sem2) : SV_TARGET0
 {
-    float4 b[10];
-    return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i];
-}
\ No newline at end of file
+    float4 b[10] = { C, C, C, C, C, C, C, C, C, C };
+    float4 tmp = C + a1[0] + c1[0] + a2[i] + c2[i];
+    return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i] + tmp;
+}
diff --git a/Test/hlsl.attributeC11.frag b/Test/hlsl.attributeC11.frag
new file mode 100644
index 0000000..4fe663a
--- /dev/null
+++ b/Test/hlsl.attributeC11.frag
@@ -0,0 +1,18 @@
+struct S {

+    float2 f;

+};

+

+[[vk::binding(1)]]

+StructuredBuffer<S> buffer1;

+

+[[vk::binding(3, 2)]]

+StructuredBuffer<S> buffer3;

+

+[[vk::input_attachment_index(4)]]

+Texture2D<float4> attach;

+

+[[vk::location(7)]] float4

+main([[vk::location(8)]] float4 input: A) : B

+{

+    return input + attach.Load(float2(0.5));

+}

diff --git a/Test/hlsl.attributeGlobalBuffer.frag b/Test/hlsl.attributeGlobalBuffer.frag
new file mode 100644
index 0000000..a1177da
--- /dev/null
+++ b/Test/hlsl.attributeGlobalBuffer.frag
@@ -0,0 +1,8 @@
+[[vk::global_cbuffer_binding(5, 2)]]

+float4 u1;

+float4 u2;

+

+float4 main() : SV_Target0

+{

+    return u1 + u2;

+}
\ No newline at end of file
diff --git a/Test/hlsl.constantbuffer.frag b/Test/hlsl.constantbuffer.frag
index d7a6ef5..c2b3a00 100644
--- a/Test/hlsl.constantbuffer.frag
+++ b/Test/hlsl.constantbuffer.frag
@@ -21,6 +21,6 @@
     if (cb3[1][2].x)
         return cb1.x + cb2[1].y + c1;
     else
-        return cb3[2][3].y;
+        return cb3[1][3].y;
 }
 
diff --git a/Test/hlsl.flattenOpaqueInit.vert b/Test/hlsl.flattenOpaqueInit.vert
index 75d28a9..bcf39ce 100644
--- a/Test/hlsl.flattenOpaqueInit.vert
+++ b/Test/hlsl.flattenOpaqueInit.vert
@@ -18,5 +18,6 @@
 {

     FxaaTex tex1 = { g_tInputTexture_sampler, g_tInputTexture };

     FxaaTex tex2 = fillOpaque();

-    return lookUp(tex1);

-}
\ No newline at end of file
+    FxaaTex tex3 = tex1;
+    return lookUp(tex3);

+}
diff --git a/Test/hlsl.flattenSubset.frag b/Test/hlsl.flattenSubset.frag
new file mode 100755
index 0000000..c80e093
--- /dev/null
+++ b/Test/hlsl.flattenSubset.frag
@@ -0,0 +1,36 @@
+struct S0

+{

+    int x;

+    int y;

+    SamplerState ss;

+};

+

+struct S1

+{

+    float b;

+    SamplerState samplerState;

+    S0 s0;

+    int a;

+};

+

+struct S2

+{

+    int a1;

+    int a2;

+    int a3;

+    int a4;

+    int a5;

+    S1 resources;

+};

+

+SamplerState samp;

+Texture2D tex;

+

+float4 main(float4 vpos : VPOS) : COLOR0

+{

+    S1 s1;

+    S2 s2;

+    s1.s0.ss = samp;

+    s2.resources = s1;

+    return tex.Sample(s2.resources.s0.ss, float2(0.5));

+}

diff --git a/Test/hlsl.flattenSubset2.frag b/Test/hlsl.flattenSubset2.frag
new file mode 100755
index 0000000..753475d
--- /dev/null
+++ b/Test/hlsl.flattenSubset2.frag
@@ -0,0 +1,24 @@
+struct Nested { float y; Texture2D texNested; };

+struct A { Nested n; float x; };

+struct B { Nested n; Texture2D tex; };

+

+Texture2D someTex;

+

+float4 main(float4 vpos : VPOS) : COLOR0

+{

+    A a1, a2;

+    B b;

+

+    // Assignment of nested structs to nested structs

+    a1.n = a2.n;

+    b .n = a1.n;

+

+    // Assignment of nested struct to standalone

+    Nested n = b.n; 

+

+    // Assignment to nestested struct members

+    a2.n.texNested = someTex;

+    a1.n.y = 1.0;

+

+    return float4(0,0,0,0);

+}

diff --git a/Test/hlsl.hull.4.tesc b/Test/hlsl.hull.4.tesc
new file mode 100644
index 0000000..cd2b094
--- /dev/null
+++ b/Test/hlsl.hull.4.tesc
@@ -0,0 +1,43 @@
+
+// Test mixed InputPatch structure: user and builtin members.  Hull shaders involve extra
+// logic in this case due to patch constant function call synthesis.
+
+// This example tests the main EP and the PCF EP both having an input patch.
+
+struct HS_Main_Output
+{ 
+    float4 m_Position : SV_POSITION ; 
+}; 
+
+struct HS_Output 
+{ 
+    float fTessFactor [ 3 ] : SV_TessFactor ; 
+    float fInsideTessFactor : SV_InsideTessFactor ; 
+}; 
+
+struct HS_Input 
+{ 
+    float4 m_Position : SV_POSITION; 
+    float4 m_Normal   : TEXCOORD2; 
+}; 
+
+HS_Output HS_ConstFunc ( InputPatch < HS_Input , 3 > I ) 
+{ 
+    HS_Output O = (HS_Output)0;
+
+    O.fInsideTessFactor = I [ 0 ].m_Position.w + I [ 0 ].m_Normal.w;
+
+    return O;
+} 
+
+[ domain ( "tri" ) ] 
+[ partitioning ( "fractional_odd" ) ] 
+[ outputtopology ( "triangle_cw" ) ] 
+[ patchconstantfunc ( "HS_ConstFunc" ) ] 
+[ outputcontrolpoints ( 3 ) ] 
+HS_Main_Output main( InputPatch < HS_Input , 3 > I , uint cpid : SV_OutputControlPointID ) 
+{ 
+    HS_Main_Output output = ( HS_Main_Output ) 0 ; 
+    output.m_Position = 0;
+    return output ; 
+}
diff --git a/Test/hlsl.hull.5.tesc b/Test/hlsl.hull.5.tesc
new file mode 100644
index 0000000..c9e511e
--- /dev/null
+++ b/Test/hlsl.hull.5.tesc
@@ -0,0 +1,43 @@
+
+// Test mixed InputPatch structure: user and builtin members.  Hull shaders involve extra
+// logic in this case due to patch constant function call synthesis.
+
+// This example tests the PCF EP having an InputPatch, but the main EP does not.
+
+struct HS_Main_Output
+{ 
+    float4 m_Position : SV_POSITION ; 
+}; 
+
+struct HS_Output 
+{ 
+    float fTessFactor [ 3 ] : SV_TessFactor ; 
+    float fInsideTessFactor : SV_InsideTessFactor ; 
+}; 
+
+struct HS_Input 
+{ 
+    float4 m_Position : SV_POSITION; 
+    float4 m_Normal   : TEXCOORD2; 
+}; 
+
+HS_Output HS_ConstFunc ( InputPatch < HS_Input , 3 > I ) 
+{ 
+    HS_Output O = (HS_Output)0;
+
+    O.fInsideTessFactor = I [ 0 ].m_Position.w + I [ 0 ].m_Normal.w;
+
+    return O;
+} 
+
+[ domain ( "tri" ) ] 
+[ partitioning ( "fractional_odd" ) ] 
+[ outputtopology ( "triangle_cw" ) ] 
+[ patchconstantfunc ( "HS_ConstFunc" ) ] 
+[ outputcontrolpoints ( 3 ) ] 
+HS_Main_Output main( uint cpid : SV_OutputControlPointID ) 
+{ 
+    HS_Main_Output output = ( HS_Main_Output ) 0 ; 
+    output.m_Position = 0;
+    return output ; 
+}
diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag
index 029b156..9343f6d 100644
--- a/Test/hlsl.intrinsics.frag
+++ b/Test/hlsl.intrinsics.frag
@@ -31,6 +31,7 @@
     float r011 = ceil(inF0);
     float r012 = clamp(inF0, inF1, inF2);
     clip(inF0);
+    clip(r005);
     float r014 = cos(inF0);
     float r015 = cosh(inF0);
     int r016 = countbits(7);
@@ -108,6 +109,7 @@
     float2 r011 = ceil(inF0);
     float2 r012 = clamp(inF0, inF1, inF2);
     clip(inF0);
+    clip(inU0);
     float2 r013 = cos(inF0);
     float2 r015 = cosh(inF0);
     int2 r016 = countbits(int2(7,3));
@@ -190,6 +192,7 @@
     float3 r011 = ceil(inF0);
     float3 r012 = clamp(inF0, inF1, inF2);
     clip(inF0);
+    clip(inU0);
     float3 r013 = cos(inF0);
     float3 r014 = cosh(inF0);
     uint3 r015 = countbits(uint3(7,3,5));
@@ -271,6 +274,7 @@
     float4 r011 = ceil(inF0);
     float4 r012 = clamp(inF0, inF1, inF2);
     clip(inF0);
+    clip(inU0);
     float4 r013 = cos(inF0);
     float4 r014 = cosh(inF0);
     uint4 r015 = countbits(uint4(7,3,5,2));
diff --git a/Test/hlsl.localStructuredBuffer.comp b/Test/hlsl.localStructuredBuffer.comp
new file mode 100644
index 0000000..34e06e0
--- /dev/null
+++ b/Test/hlsl.localStructuredBuffer.comp
@@ -0,0 +1,4 @@
+RWStructuredBuffer<uint> srt0;

+void main() {

+    RWStructuredBuffer<uint> srt0Local = srt0;

+}
\ No newline at end of file
diff --git a/Test/hlsl.opaque-type-bug.frag b/Test/hlsl.opaque-type-bug.frag
new file mode 100644
index 0000000..f4ccaea
--- /dev/null
+++ b/Test/hlsl.opaque-type-bug.frag
@@ -0,0 +1,16 @@
+
+Texture2D      MyTexture : register(t0);
+
+//----------------------------------------------------------------------------------------
+void TexFunc(in const Texture2D t2D, out float3 RGB)
+{    
+    RGB = 0;
+}
+
+//-----------------------------------------------------------------------------------
+void main() 
+{
+    float3 final_RGB;
+
+    TexFunc(MyTexture, final_RGB);
+}
diff --git a/Test/hlsl.partialFlattenLocal.vert b/Test/hlsl.partialFlattenLocal.vert
new file mode 100644
index 0000000..9d6cdc9
--- /dev/null
+++ b/Test/hlsl.partialFlattenLocal.vert
@@ -0,0 +1,27 @@
+Texture2D tex;

+

+struct Packed {

+  Texture2D     tex;

+  float3        pos[3];

+  float2        uv[2];

+  float         x;

+  int           n;

+};

+

+float4 main(float4 pos : POSITION) : SV_POSITION

+{

+  Packed packed;

+  packed.tex    = tex;

+  packed.pos[0] = float3(0, 0, 0);

+  packed.uv[0]  = float2(0, 1);

+  packed.x      = 1.0;

+  packed.n      = 3;

+

+  for (int i = 0; i < 1; ++i) {

+    packed.pos[i].xy += packed.uv[i];

+  }

+

+  Packed packed2 = packed;

+

+  return pos + float4(packed2.pos[0], 0);

+}
\ No newline at end of file
diff --git a/Test/hlsl.partialFlattenMixed.vert b/Test/hlsl.partialFlattenMixed.vert
new file mode 100644
index 0000000..3fc9d68
--- /dev/null
+++ b/Test/hlsl.partialFlattenMixed.vert
@@ -0,0 +1,16 @@
+Texture2D tex[2];

+

+struct Packed {

+    int a;

+    Texture2D     membTex[2];

+    int b;

+};

+

+float4 main(float4 pos : POSITION) : SV_POSITION

+{

+    Packed packed;

+

+    packed.membTex = tex;

+

+    return pos;

+}
\ No newline at end of file
diff --git a/Test/hlsl.samplecmp.dualmode.frag b/Test/hlsl.samplecmp.dualmode.frag
new file mode 100644
index 0000000..5b600f3
--- /dev/null
+++ b/Test/hlsl.samplecmp.dualmode.frag
@@ -0,0 +1,14 @@
+SamplerState g_sSamp : register(s0);
+SamplerComparisonState g_sSampCmp : register(s1);
+
+uniform Texture1D <float4> g_tTex : register(t3);
+
+float4 main() : SV_Target0
+{
+    // This texture is used with both shadow modes.  It will need post-compilation
+    // legalization.
+    g_tTex.SampleCmp(g_sSampCmp, 0.1, 0.75);
+    g_tTex.Sample(g_sSamp, 0.1);
+
+    return 0;
+}
diff --git a/Test/hlsl.samplecmp.negative.frag b/Test/hlsl.samplecmp.negative.frag
index cea87bd..8851982 100644
--- a/Test/hlsl.samplecmp.negative.frag
+++ b/Test/hlsl.samplecmp.negative.frag
@@ -1,4 +1,5 @@
 
+Texture2D g_nonShadowTex;
 Texture2D g_shadowTex;
 SamplerState g_shadowSampler;
 SamplerComparisonState g_shadowSamplerComp;
@@ -6,7 +7,7 @@
 float4 main() : SV_Target0
 {
     g_shadowTex.SampleCmp(g_shadowSamplerComp, float2(0,0), 0); // OK
-    g_shadowTex.SampleCmp(g_shadowSampler, float2(0,0), 0);     // ERROR (should be comparison sampler)
+    g_nonShadowTex.SampleCmp(g_shadowSampler, float2(0,0), 0);     // ERROR (should be comparison sampler)
 
     return 0;
 }
diff --git a/Test/hlsl.shift.per-set.frag b/Test/hlsl.shift.per-set.frag
new file mode 100644
index 0000000..9c29f9d
--- /dev/null
+++ b/Test/hlsl.shift.per-set.frag
@@ -0,0 +1,59 @@
+// Test register class offsets for different resource types
+
+SamplerState       s1 : register(s1, space1);
+SamplerComparisonState s2 : register(s2, space2);
+
+Texture1D <float4> t1 : register(t1, space1);
+Texture2D <float4> t2 : register(t2, space1);
+Texture3D <float4> t3 : register(t1, space2);
+
+StructuredBuffer<float4> t4 : register(t1, space3);
+
+ByteAddressBuffer t5 : register(t2, space3);
+Buffer<float4> t6 : register(t3, space3);
+
+RWTexture1D <float4> u1 : register(u1, space1);
+RWTexture2D <float4> u2 : register(u2, space2);
+RWTexture3D <float4> u3 : register(u3, space2);
+
+RWBuffer <float> u4 : register(u4, space1);
+RWByteAddressBuffer u5 : register(u4, space2);
+RWStructuredBuffer<float> u6 : register(u4, space3);
+AppendStructuredBuffer<float> u7 : register(u4, space4);
+ConsumeStructuredBuffer<float> u8 : register(u4, space5);
+
+cbuffer cb : register(b1, space6) {
+    int cb1;
+};
+
+tbuffer tb : register(t7) {
+    int tb1;
+};
+
+float4 main() : SV_Target0
+{
+    t1;
+    t2;
+    t3;
+    t4[0];
+    t5.Load(0);
+    t6;
+
+    s1;
+    s2;
+
+    u1;
+    u2;
+    u3;
+
+    u4[0];
+    u5.Load(0);
+    u6[0];
+    u7;
+    u8;
+
+    cb1;
+    tb1;
+
+    return 0;
+}
diff --git a/Test/hlsl.subpass.frag b/Test/hlsl.subpass.frag
new file mode 100644
index 0000000..20a717f
--- /dev/null
+++ b/Test/hlsl.subpass.frag
@@ -0,0 +1,113 @@
+
+layout(input_attachment_index = 1) SubpassInput<float4> subpass_f4 : register(t1);
+layout(input_attachment_index = 2) SubpassInput<int4>   subpass_i4;
+layout(input_attachment_index = 3) SubpassInput<uint4>  subpass_u4;
+
+layout(input_attachment_index = 4) SubpassInputMS<float4> subpass_ms_f4;
+layout(input_attachment_index = 5) SubpassInputMS<int4>   subpass_ms_i4;
+layout(input_attachment_index = 6) SubpassInputMS<uint4>  subpass_ms_u4;
+
+layout(input_attachment_index = 1) SubpassInput<float3> subpass_f3;
+layout(input_attachment_index = 2) SubpassInput<int3>   subpass_i3;
+layout(input_attachment_index = 3) SubpassInput<uint3>  subpass_u3;
+
+layout(input_attachment_index = 4) SubpassInputMS<float3> subpass_ms_f3;
+layout(input_attachment_index = 5) SubpassInputMS<int3>   subpass_ms_i3;
+layout(input_attachment_index = 6) SubpassInputMS<uint3>  subpass_ms_u3;
+
+layout(input_attachment_index = 1) SubpassInput<float2> subpass_f2;
+layout(input_attachment_index = 2) SubpassInput<int2>   subpass_i2;
+layout(input_attachment_index = 3) SubpassInput<uint2>  subpass_u2;
+
+layout(input_attachment_index = 4) SubpassInputMS<float2> subpass_ms_f2;
+layout(input_attachment_index = 5) SubpassInputMS<int2>   subpass_ms_i2;
+layout(input_attachment_index = 6) SubpassInputMS<uint2>  subpass_ms_u2;
+
+layout(input_attachment_index = 1) SubpassInput<float> subpass_f;
+layout(input_attachment_index = 2) SubpassInput<int>   subpass_i;
+layout(input_attachment_index = 3) SubpassInput<uint>  subpass_u;
+
+layout(input_attachment_index = 4) SubpassInputMS<float> subpass_ms_f;
+layout(input_attachment_index = 5) SubpassInputMS<int>   subpass_ms_i;
+layout(input_attachment_index = 6) SubpassInputMS<uint>  subpass_ms_u;
+
+[[vk::input_attachment_index(7)]] SubpassInput subpass_2;
+
+struct mystruct_f_t
+{
+    float  c0;
+    float2 c1;
+    float  c2;
+};
+
+struct mystruct_i_t
+{
+    int  c0;
+    int2 c1;
+    int  c2;
+};
+
+struct mystruct_u_t
+{
+    uint  c0;
+    uint2 c1;
+    uint  c2;
+};
+
+// TODO: ...
+// layout(input_attachment_index = 7) SubpassInput<mystruct_f_t>    subpass_fs;
+// layout(input_attachment_index = 8) SubpassInputMS<mystruct_f_t>  subpass_ms_fs;
+
+// layout(input_attachment_index = 7) SubpassInput<mystruct_i_t>    subpass_is;
+// layout(input_attachment_index = 8) SubpassInputMS<mystruct_i_t>  subpass_ms_is;
+
+// layout(input_attachment_index = 7) SubpassInput<mystruct_u_t>    subpass_us;
+// layout(input_attachment_index = 8) SubpassInputMS<mystruct_u_t>  subpass_ms_us;
+
+float4 main() : SV_Target0
+{
+    float4 result00 = subpass_f4.SubpassLoad();
+    int4   result01 = subpass_i4.SubpassLoad();
+    uint4  result02 = subpass_u4.SubpassLoad();
+
+    float4 result10 = subpass_ms_f4.SubpassLoad(3);
+    int4   result11 = subpass_ms_i4.SubpassLoad(3);
+    uint4  result12 = subpass_ms_u4.SubpassLoad(3);
+
+    float3 result20 = subpass_f3.SubpassLoad();
+    int3   result21 = subpass_i3.SubpassLoad();
+    uint3  result22 = subpass_u3.SubpassLoad();
+
+    float3 result30 = subpass_ms_f3.SubpassLoad(3);
+    int3   result31 = subpass_ms_i3.SubpassLoad(3);
+    uint3  result32 = subpass_ms_u3.SubpassLoad(3);
+
+    float2 result40 = subpass_f2.SubpassLoad();
+    int2   result41 = subpass_i2.SubpassLoad();
+    uint2  result42 = subpass_u2.SubpassLoad();
+
+    float2 result50 = subpass_ms_f2.SubpassLoad(2);
+    int2   result51 = subpass_ms_i2.SubpassLoad(2);
+    uint2  result52 = subpass_ms_u2.SubpassLoad(2);
+
+    float  result60 = subpass_f.SubpassLoad();
+    int    result61 = subpass_i.SubpassLoad();
+    uint   result62 = subpass_u.SubpassLoad();
+
+    float  result70 = subpass_ms_f.SubpassLoad(2);
+    int    result71 = subpass_ms_i.SubpassLoad(2);
+    uint   result72 = subpass_ms_u.SubpassLoad(2);
+
+    float4 result73 = subpass_2.SubpassLoad();
+
+    // TODO: 
+    // mystruct_f_t result80 = subpass_fs.SubpassLoad();
+    // mystruct_i_t result81 = subpass_is.SubpassLoad();
+    // mystruct_u_t result82 = subpass_us.SubpassLoad();
+
+    // mystruct_f_t result90 = subpass_ms_sf.SubpassLoad(2);
+    // mystruct_i_t result91 = subpass_ms_if.SubpassLoad(2);
+    // mystruct_u_t result92 = subpass_ms_uf.SubpassLoad(2);
+
+    return 0;
+}
diff --git a/Test/implicitInnerAtomicUint.frag b/Test/implicitInnerAtomicUint.frag
new file mode 100644
index 0000000..bb76516
--- /dev/null
+++ b/Test/implicitInnerAtomicUint.frag
@@ -0,0 +1,2 @@
+#version 460
+layout(binding = 0) uniform atomic_uint c[1][];
\ No newline at end of file
diff --git a/Test/invalidSwizzle.vert b/Test/invalidSwizzle.vert
new file mode 100644
index 0000000..799ff87
--- /dev/null
+++ b/Test/invalidSwizzle.vert
@@ -0,0 +1,10 @@
+#version 420
+
+void f();
+uniform sampler2D s;
+
+void main() {
+    vec2 v = s.rr; // Swizzles do not apply to samplers
+    f().xx; // Scalar swizzle does not apply to void
+    f().xy; // Vector swizzle does not apply either
+}
\ No newline at end of file
diff --git a/Test/numeral.frag b/Test/numeral.frag
index cc0862c..39814f4 100644
--- a/Test/numeral.frag
+++ b/Test/numeral.frag
@@ -101,3 +101,6 @@
 int g4 = 4294967296;   // ERROR, too big

 int g5 = 4294967295;

 int g6 = 4294967294;

+float inf1 = -1.#INF;

+float inf2 =  1.#INF;

+float inf3 = +1.#INF;

diff --git a/Test/overlongLiteral.frag b/Test/overlongLiteral.frag
new file mode 100644
index 0000000..c351ed6
--- /dev/null
+++ b/Test/overlongLiteral.frag
@@ -0,0 +1 @@
+0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
diff --git a/Test/remap.invalid-spirv-1.spv b/Test/remap.invalid-spirv-1.spv
new file mode 100644
index 0000000..e5d59d4
--- /dev/null
+++ b/Test/remap.invalid-spirv-1.spv
Binary files differ
diff --git a/Test/remap.invalid-spirv-2.spv b/Test/remap.invalid-spirv-2.spv
new file mode 100644
index 0000000..df8c96d
--- /dev/null
+++ b/Test/remap.invalid-spirv-2.spv
Binary files differ
diff --git a/Test/runtests b/Test/runtests
index f0da75f..8e1135e 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -3,6 +3,7 @@
 TARGETDIR=localResults
 BASEDIR=baseResults
 EXE=../build/install/bin/glslangValidator
+REMAPEXE=../build/install/bin/spirv-remap
 HASERROR=0
 mkdir -p localResults
 
@@ -31,11 +32,11 @@
 echo Running reflection...
 $EXE -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
 diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1
-$EXE -D -e flizv -l -q -C -V hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
+$EXE -D -e flizv -l -q -C -V -Od hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
 diff -b $BASEDIR/hlsl.reflection.vert.out $TARGETDIR/hlsl.reflection.vert.out || HASERROR=1
-$EXE -D -e main -l -q -C -V hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
+$EXE -D -e main -l -q -C -V -Od hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
 diff -b $BASEDIR/hlsl.reflection.binding.frag.out $TARGETDIR/hlsl.reflection.binding.frag.out || HASERROR=1
-$EXE -D -e main -l -q --hlsl-iomap --auto-map-bindings --stb 10 --sbb 20 --ssb 30 --suavb 40 --scb 50 -D -V -e main hlsl.automap.frag > $TARGETDIR/hlsl.automap.frag.out
+$EXE -D -e main -l -q --hlsl-iomap --auto-map-bindings --stb 10 --sbb 20 --ssb 30 --suavb 40 --scb 50 -D -V -e main -Od hlsl.automap.frag > $TARGETDIR/hlsl.automap.frag.out
 diff -b $BASEDIR/hlsl.automap.frag.out $TARGETDIR/hlsl.automap.frag.out || HASERROR=1
 
 #
@@ -55,14 +56,14 @@
 # entry point renaming tests
 #
 echo Running entry-point renaming tests
-$EXE -i -H -V -D -e main_in_spv --ku --source-entrypoint main hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
+$EXE -i -H -V -D -e main_in_spv --ku --source-entrypoint main -Od hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
 diff -b $BASEDIR/hlsl.entry.rename.frag.out $TARGETDIR/hlsl.entry.rename.frag.out || HASERROR=1
 
 #
 # Testing ill-defined uncalled function
 #
 echo Running ill-defined uncalled function
-$EXE -D -e main -H hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
+$EXE -D -e main -H -Od hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
 diff -b $BASEDIR/hlsl.deadFunctionMissingBody.vert.out $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out || HASERROR=1
 
 if [ $HASERROR -eq 0 ]
@@ -87,23 +88,30 @@
 diff -b $BASEDIR/spv.hlslOffsets.vert.out $TARGETDIR/spv.hlslOffsets.vert.out || HASERROR=1
 
 echo Running hlsl offsets
-$EXE -i  --hlsl-offsets -D -e main -H hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hlslOffset.vert.out
+$EXE -i  --hlsl-offsets -D -e main -H -Od hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hlslOffset.vert.out
 diff -b $BASEDIR/hlsl.hlslOffset.vert.out $TARGETDIR/hlsl.hlslOffset.vert.out || HASERROR=1
 
 #
 # Testing --resource-set-binding
 #
 echo Configuring HLSL descriptor set and binding number manually
-$EXE -V -D -e main -H hlsl.multiDescriptorSet.frag --rsb frag t0 0 0 t1 1 0 s0 0 1 s1 1 1 b0 2 0 b1 2 1 b2 2 2 > $TARGETDIR/hlsl.multiDescriptorSet.frag.out
+$EXE -V -D -e main -H -Od hlsl.multiDescriptorSet.frag --rsb frag t0 0 0 t1 1 0 s0 0 1 s1 1 1 b0 2 0 b1 2 1 b2 2 2 > $TARGETDIR/hlsl.multiDescriptorSet.frag.out
 diff -b $BASEDIR/hlsl.multiDescriptorSet.frag.out $TARGETDIR/hlsl.multiDescriptorSet.frag.out || HASERROR=1
 
-$EXE -V -D -e main -H hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb 4 > $TARGETDIR/hlsl.explicitDescriptorSet.frag.out
+$EXE -V -D -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb 4 > $TARGETDIR/hlsl.explicitDescriptorSet.frag.out
 diff -b $BASEDIR/hlsl.explicitDescriptorSet.frag.out $TARGETDIR/hlsl.explicitDescriptorSet.frag.out || HASERROR=1
 
-$EXE -V -D -e main -H hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb frag 3 > $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out
+$EXE -V -D -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb frag 3 > $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out
 diff -b $BASEDIR/hlsl.explicitDescriptorSet-2.frag.out $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out || HASERROR=1
 
 #
+# Testing per-descriptor-set IO map shift
+#
+echo 'Testing per-descriptor-set IO map shift'
+$EXE -e main --hlsl-iomap --ssb 1 10 2 15 --stb 20 --stb 2 25 --suavb 30 --suavb 2 40 --sub 6 50 -i -q -D -V hlsl.shift.per-set.frag > $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
+diff -b $BASEDIR/hlsl.shift.per-set.frag.out $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
+
+#
 # Testing location error
 #
 echo Testing SPV no location
@@ -122,33 +130,35 @@
      -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
 diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1
 $EXE -g -D -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
-     --sep origMain -H spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out
+     --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out
 diff -b $BASEDIR/spv.hlslDebugInfo.frag.out $TARGETDIR/spv.hlslDebugInfo.frag.out || HASERROR=1
 
 #
 # Testing Includer
 #
 echo Testing Includer
-$EXE -D -e main -H ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out
+$EXE -D -e main -H -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out
 diff -b $BASEDIR/hlsl.include.vert.out $TARGETDIR/hlsl.include.vert.out || HASERROR=1
-$EXE -D -e main -H hlsl.includeNegative.vert > $TARGETDIR/hlsl.includeNegative.vert.out
+$EXE -D -e main -H -Od hlsl.includeNegative.vert > $TARGETDIR/hlsl.includeNegative.vert.out
 diff -b $BASEDIR/hlsl.includeNegative.vert.out $TARGETDIR/hlsl.includeNegative.vert.out || HASERROR=1
 $EXE -l -i include.vert > $TARGETDIR/include.vert.out
 diff -b $BASEDIR/include.vert.out $TARGETDIR/include.vert.out || HASERROR=1
-$EXE -D -e main -H -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out
+$EXE -D -e main -H -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out
 diff -b $BASEDIR/hlsl.dashI.vert.out $TARGETDIR/hlsl.dashI.vert.out || HASERROR=1
 
 #
 # Testing -D and -U
 #
+echo "Testing -D and -U"
 $EXE -DUNDEFED -UIN_SHADER -DFOO=200 -i -l -UUNDEFED -DMUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
 diff -b $BASEDIR/glsl.-D-U.frag.out $TARGETDIR/glsl.-D-U.frag.out || HASERROR=1
-$EXE -D -e main -V -i -DUNDEFED -UIN_SHADER -DFOO=200 -UUNDEFED hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
+$EXE -D -e main -V -i -DUNDEFED -UIN_SHADER -DFOO=200 -UUNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
 diff -b $BASEDIR/hlsl.-D-U.frag.out $TARGETDIR/hlsl.-D-U.frag.out || HASERROR=1
 
 #
 # Test --client and --target-env
 #
+echo "Testing --client and --target-env"
 $EXE --client vulkan100      spv.targetVulkan.vert || HASERROR=1
 $EXE --client opengl100      spv.targetOpenGL.vert || HASERROR=1
 $EXE --target-env vulkan1.0  spv.targetVulkan.vert || HASERROR=1
@@ -157,6 +167,26 @@
 $EXE -G100                   spv.targetOpenGL.vert || HASERROR=1
 
 #
+# Testing GLSL entry point rename
+#
+echo "Testing GLSL entry point rename"
+$EXE -H -e foo --source-entrypoint main glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.out
+diff -b $BASEDIR/glsl.entryPointRename.vert.out $TARGETDIR/glsl.entryPointRename.vert.out || HASERROR=1
+$EXE -H -e foo --source-entrypoint bar glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.bad.out
+diff -b $BASEDIR/glsl.entryPointRename.vert.bad.out $TARGETDIR/glsl.entryPointRename.vert.bad.out || HASERROR=1
+$EXE -H -e foo --source-entrypoint main glsl.entryPointRename2.vert > $TARGETDIR/glsl.entryPointRename2.vert.out
+diff -b $BASEDIR/glsl.entryPointRename2.vert.out $TARGETDIR/glsl.entryPointRename2.vert.out || HASERROR=1
+
+#
+# Testing remapper error handling
+#
+echo "Testing remapper error handling"
+$REMAPEXE --do-everything -i remap.invalid-spirv-1.spv -o $TARGETDIR > $TARGETDIR/remap.invalid-spirv-1.out && HASERROR=1
+diff -b $BASEDIR/remap.invalid-spirv-1.out $TARGETDIR/remap.invalid-spirv-1.out || HASERROR=1
+$REMAPEXE --do-everything -i remap.invalid-spirv-2.spv -o $TARGETDIR > $TARGETDIR/remap.invalid-spirv-2.out && HASERROR=1
+diff -b $BASEDIR/remap.invalid-spirv-2.out $TARGETDIR/remap.invalid-spirv-2.out || HASERROR=1
+
+#
 # Final checking
 #
 if [ $HASERROR -eq 0 ]
diff --git a/Test/spv.atomicInt64.comp b/Test/spv.atomicInt64.comp
new file mode 100644
index 0000000..a56c7ec
--- /dev/null
+++ b/Test/spv.atomicInt64.comp
@@ -0,0 +1,79 @@
+#version 450 core

+

+#extension GL_ARB_gpu_shader_int64: enable

+#extension GL_NV_shader_atomic_int64: enable

+

+layout(local_size_x = 16, local_size_y = 16) in;

+

+layout(binding = 0) buffer Buffer

+{

+    int64_t  i64;

+    uint64_t u64;

+} buf;

+

+struct Struct

+{

+    int64_t  i64;

+    uint64_t u64;

+};

+

+shared Struct s;

+

+void main()

+{

+    const int64_t  i64c = -24;

+    const uint64_t u64c = 0xF00000000F; 

+

+    // Test shader storage block

+    int64_t  i64 = 0;

+    uint64_t u64 = 0;

+

+    i64 += atomicMin(buf.i64, i64c);

+    u64 += atomicMin(buf.u64, u64c);

+

+    i64 += atomicMax(buf.i64, i64c);

+    u64 += atomicMax(buf.u64, u64c);

+

+    i64 += atomicAnd(buf.i64, i64c);

+    u64 += atomicAnd(buf.u64, u64c);

+

+    i64 += atomicOr(buf.i64, i64c);

+    u64 += atomicOr(buf.u64, u64c);

+

+    i64 += atomicXor(buf.i64, i64c);

+    u64 += atomicXor(buf.u64, u64c);

+

+    i64 += atomicAdd(buf.i64, i64c);

+    i64 += atomicExchange(buf.i64, i64c);

+    i64 += atomicCompSwap(buf.i64, i64c, i64);

+

+    buf.i64 = i64;

+    buf.u64 = u64;

+

+    // Test shared variable

+    i64 = 0;

+    u64 = 0;

+

+    i64 += atomicMin(s.i64, i64c);

+    u64 += atomicMin(s.u64, u64c);

+

+    i64 += atomicMax(s.i64, i64c);

+    u64 += atomicMax(s.u64, u64c);

+

+    i64 += atomicAnd(s.i64, i64c);

+    u64 += atomicAnd(s.u64, u64c);

+

+    i64 += atomicOr(s.i64, i64c);

+    u64 += atomicOr(s.u64, u64c);

+

+    i64 += atomicXor(s.i64, i64c);

+    u64 += atomicXor(s.u64, u64c);

+

+    i64 += atomicAdd(s.i64, i64c);

+    i64 += atomicExchange(s.i64, i64c);

+    i64 += atomicCompSwap(s.i64, i64c, i64);

+

+    s.i64 = i64;

+    s.u64 = u64;

+}

+

diff --git a/Test/spv.precisionNonESSamp.frag b/Test/spv.precisionNonESSamp.frag
new file mode 100644
index 0000000..8abf839
--- /dev/null
+++ b/Test/spv.precisionNonESSamp.frag
@@ -0,0 +1,24 @@
+#version 450

+

+precision lowp sampler2D;

+precision lowp int;

+precision lowp float;

+

+uniform lowp sampler2D s;

+uniform highp sampler3D t;

+layout(rgba32f) uniform lowp image2D i1;

+layout(rgba32f) uniform highp image2D i2;

+

+layout(location = 0) in lowp vec2 v2;

+layout(location = 1) in lowp vec3 v3;

+layout(location = 3) flat in lowp ivec2 iv2;

+

+layout(location = 0) out lowp vec4 color;

+

+void main()

+{

+    color = texture(s, v2);

+    color = texture(t, v3);

+    lowp vec4 vi1 = imageLoad(i1, iv2);

+    lowp vec4 vi2 = imageLoad(i2, iv2);

+}

diff --git a/Test/spv.register.subpass.frag b/Test/spv.register.subpass.frag
new file mode 100644
index 0000000..281c2f7
--- /dev/null
+++ b/Test/spv.register.subpass.frag
@@ -0,0 +1,15 @@
+
+// Test binding autoassignment and offset for SubpassInput objects
+
+layout(input_attachment_index = 1) SubpassInput<float4> subpass_f4 : register(t1);
+layout(input_attachment_index = 4) SubpassInputMS<float4> subpass_ms_f4;
+[[vk::input_attachment_index(7)]] SubpassInput subpass_2;
+
+float4 main() : SV_Target0
+{
+    float4 result00 = subpass_f4.SubpassLoad();
+    float4 result10 = subpass_ms_f4.SubpassLoad(3);
+    float4 result73 = subpass_2.SubpassLoad();
+
+    return 0;
+}
diff --git a/Test/spv.shaderFragMaskAMD.frag b/Test/spv.shaderFragMaskAMD.frag
new file mode 100644
index 0000000..b9e8ab0
--- /dev/null
+++ b/Test/spv.shaderFragMaskAMD.frag
@@ -0,0 +1,29 @@
+#version 450 core

+

+#extension GL_AMD_shader_fragment_mask: enable

+

+layout(binding = 0) uniform sampler2DMS       s2DMS;

+layout(binding = 1) uniform isampler2DMSArray is2DMSArray;

+

+layout(binding = 2, input_attachment_index = 0) uniform usubpassInputMS usubpassMS;

+

+layout(location = 0) out vec4 fragColor;

+

+void main()

+{

+    vec4 f4 = vec4(0.0);

+

+    uint fragMask = fragmentMaskFetchAMD(s2DMS, ivec2(2, 3));

+    uint fragIndex = (fragMask & 0xF0) >> 4;

+    f4 += fragmentFetchAMD(s2DMS, ivec2(2, 3), 1);

+

+    fragMask = fragmentMaskFetchAMD(is2DMSArray, ivec3(2, 3, 1));

+    fragIndex = (fragMask & 0xF0) >> 4;

+    f4 += fragmentFetchAMD(is2DMSArray, ivec3(2, 3, 1), fragIndex);

+

+    fragMask = fragmentMaskFetchAMD(usubpassMS);

+    fragIndex = (fragMask & 0xF0) >> 4;

+    f4 += fragmentFetchAMD(usubpassMS, fragIndex);

+

+    fragColor = f4;

+}
\ No newline at end of file
diff --git a/Test/spv.stereoViewRendering.tesc b/Test/spv.stereoViewRendering.tesc
index 62fc956..e8cfe00 100644
--- a/Test/spv.stereoViewRendering.tesc
+++ b/Test/spv.stereoViewRendering.tesc
@@ -8,9 +8,10 @@
 out gl_PerVertex {

     int gl_SecondaryViewportMaskNV[2];

     vec4 gl_SecondaryPositionNV;

-    layout (viewport_relative, secondary_view_offset = 1) out highp int gl_Layer;

 } gl_out[4];

 

+layout (viewport_relative, secondary_view_offset = 1) out highp int gl_Layer;

+

 void main()

 {

     gl_out[gl_InvocationID].gl_SecondaryViewportMaskNV[0]            = 1;

diff --git a/Test/spv.viewportArray2.tesc b/Test/spv.viewportArray2.tesc
index f629b43..7fc208a 100644
--- a/Test/spv.viewportArray2.tesc
+++ b/Test/spv.viewportArray2.tesc
@@ -5,12 +5,12 @@
 

 out gl_PerVertex {

     int gl_ViewportMask[2];

-    int gl_ViewportIndex;

-    layout (viewport_relative) out highp int gl_Layer;

 } gl_out[4];

 

+layout (viewport_relative) out highp int gl_Layer;

+

 void main()

 {

-    gl_out[gl_InvocationID].gl_ViewportMask[0]                  = 1;

-    gl_out[gl_InvocationID].gl_ViewportIndex                    = 2;

+    gl_out[gl_InvocationID].gl_ViewportMask[0] = 1;

+    gl_ViewportIndex = 2;

 }

diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 08fb623..0a46a7c 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -198,6 +198,7 @@
     EbvSamplePosition,
     EbvSampleMask,
     EbvHelperInvocation,
+
 #ifdef AMD_EXTENSIONS
     EbvBaryCoordNoPersp,
     EbvBaryCoordNoPerspCentroid,
@@ -334,6 +335,7 @@
     case EbvSamplePosition:       return "SamplePosition";
     case EbvSampleMask:           return "SampleMaskIn";
     case EbvHelperInvocation:     return "HelperInvocation";
+
 #ifdef AMD_EXTENSIONS
     case EbvBaryCoordNoPersp:           return "BaryCoordNoPersp";
     case EbvBaryCoordNoPerspCentroid:   return "BaryCoordNoPerspCentroid";
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index 0820154..6e201e3 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -78,6 +78,10 @@
 }
 #endif
 
+#if defined(_MSC_VER)
+#define strdup _strdup
+#endif
+
 /* windows only pragma */
 #ifdef _MSC_VER
     #pragma warning(disable : 4786) // Don't warn about too long identifiers
@@ -222,6 +226,7 @@
 
 struct TSourceLoc {
     void init() { name = nullptr; string = 0; line = 0; column = 0; }
+    void init(int stringNum) { init(); string = stringNum; }
     // Returns the name if it exists. Otherwise, returns the string number.
     std::string getStringNameOrNum(bool quoteStringName = true) const
     {
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 6149b19..963419a 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -417,8 +417,8 @@
     EOpAtomicExchange,
     EOpAtomicCompSwap,
 
-    EOpAtomicCounterIncrement,
-    EOpAtomicCounterDecrement,
+    EOpAtomicCounterIncrement, // results in pre-increment value
+    EOpAtomicCounterDecrement, // results in post-decrement value
     EOpAtomicCounter,
     EOpAtomicCounterAdd,
     EOpAtomicCounterSubtract,
@@ -653,6 +653,8 @@
     EOpTextureGatherLod,
     EOpTextureGatherLodOffset,
     EOpTextureGatherLodOffsets,
+    EOpFragmentMaskFetch,
+    EOpFragmentFetch,
 #endif
 
     EOpSparseTextureGuardBegin,
@@ -788,6 +790,7 @@
 class TIntermTyped;
 class TIntermMethod;
 class TIntermSymbol;
+class TIntermLoop;
 
 } // end namespace glslang
 
@@ -815,6 +818,7 @@
     virtual       glslang::TIntermMethod*        getAsMethodNode()          { return 0; }
     virtual       glslang::TIntermSymbol*        getAsSymbolNode()          { return 0; }
     virtual       glslang::TIntermBranch*        getAsBranchNode()          { return 0; }
+	virtual       glslang::TIntermLoop*          getAsLoopNode()            { return 0; }
 
     virtual const glslang::TIntermTyped*         getAsTyped()         const { return 0; }
     virtual const glslang::TIntermOperator*      getAsOperator()      const { return 0; }
@@ -827,6 +831,7 @@
     virtual const glslang::TIntermMethod*        getAsMethodNode()    const { return 0; }
     virtual const glslang::TIntermSymbol*        getAsSymbolNode()    const { return 0; }
     virtual const glslang::TIntermBranch*        getAsBranchNode()    const { return 0; }
+	virtual const glslang::TIntermLoop*          getAsLoopNode()      const { return 0; }
     virtual ~TIntermNode() { }
 
 protected:
@@ -870,6 +875,8 @@
     virtual bool isVector() const { return type.isVector(); }
     virtual bool isScalar() const { return type.isScalar(); }
     virtual bool isStruct() const { return type.isStruct(); }
+    virtual bool isFloatingDomain() const { return type.isFloatingDomain(); }
+    virtual bool isIntegerDomain() const { return type.isIntegerDomain(); }
     TString getCompleteString() const { return type.getCompleteString(); }
 
 protected:
@@ -908,6 +915,8 @@
         control(ELoopControlNone)
     { }
 
+	virtual       TIntermLoop* getAsLoopNode() { return this; }
+	virtual const TIntermLoop* getAsLoopNode() const { return this; }
     virtual void traverse(TIntermTraverser*);
     TIntermNode*  getBody() const { return body; }
     TIntermTyped* getTest() const { return test; }
@@ -990,6 +999,10 @@
     int getFlattenSubset() const { return flattenSubset; } // -1 means full object
 #endif
 
+    // This is meant for cases where a node has already been constructed, and
+    // later on, it becomes necessary to switch to a different symbol.
+    virtual void switchId(int newId) { id = newId; }
+
 protected:
     int id;                      // the unique id of the symbol this node represents
 #ifdef ENABLE_HLSL
@@ -1032,6 +1045,9 @@
     bool grad;
     bool subpass;
     bool lodClamp;
+#ifdef AMD_EXTENSIONS
+    bool fragMask;
+#endif
 };
 
 //
@@ -1079,6 +1095,9 @@
         cracked.grad = false;
         cracked.subpass = false;
         cracked.lodClamp = false;
+#ifdef AMD_EXTENSIONS
+        cracked.fragMask = false;
+#endif
 
         switch (op) {
         case EOpImageQuerySize:
@@ -1210,6 +1229,14 @@
         case EOpSparseImageLoadLod:
             cracked.lod = true;
             break;
+        case EOpFragmentMaskFetch:
+            cracked.subpass = sampler.dim == EsdSubpass;
+            cracked.fragMask = true;
+            break;
+        case EOpFragmentFetch:
+            cracked.subpass = sampler.dim == EsdSubpass;
+            cracked.fragMask = true;
+            break;
 #endif
         case EOpSubpassLoad:
         case EOpSubpassLoadMS:
@@ -1270,7 +1297,7 @@
 };
 
 typedef TVector<TIntermNode*> TIntermSequence;
-typedef TVector<int> TQualifierList;
+typedef TVector<TStorageQualifier> TQualifierList;
 //
 // Nodes that operate on an arbitrary sized set of children.
 //
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index e71ec5e..a837efd 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -923,6 +923,32 @@
             "\n");
     }
 
+#ifdef NV_EXTENSIONS
+    if (profile != EEsProfile && version >= 440) {
+        commonBuiltins.append(
+            "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
+            " int64_t atomicMin(coherent volatile inout  int64_t,  int64_t);"
+
+            "uint64_t atomicMax(coherent volatile inout uint64_t, uint64_t);"
+            " int64_t atomicMax(coherent volatile inout  int64_t,  int64_t);"
+
+            "uint64_t atomicAnd(coherent volatile inout uint64_t, uint64_t);"
+            " int64_t atomicAnd(coherent volatile inout  int64_t,  int64_t);"
+
+            "uint64_t atomicOr (coherent volatile inout uint64_t, uint64_t);"
+            " int64_t atomicOr (coherent volatile inout  int64_t,  int64_t);"
+
+            "uint64_t atomicXor(coherent volatile inout uint64_t, uint64_t);"
+            " int64_t atomicXor(coherent volatile inout  int64_t,  int64_t);"
+
+            " int64_t atomicAdd(coherent volatile inout int64_t, int64_t);"
+            " int64_t atomicExchange(coherent volatile inout int64_t, int64_t);"
+            " int64_t atomicCompSwap(coherent volatile inout int64_t, int64_t, int64_t);"
+
+            "\n");
+    }
+#endif
+
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 450)) {
         commonBuiltins.append(
@@ -1324,10 +1350,25 @@
 
     if (profile == EEsProfile) {
         if (spvVersion.spv == 0) {
+            if (version < 300) {
+                commonBuiltins.append(
+                    "vec4 texture2D(samplerExternalOES, vec2 coord);" // GL_OES_EGL_image_external
+                    "vec4 texture2DProj(samplerExternalOES, vec3);"   // GL_OES_EGL_image_external
+                    "vec4 texture2DProj(samplerExternalOES, vec4);"   // GL_OES_EGL_image_external
+                "\n");
+            } else {
+                commonBuiltins.append(
+                    "highp ivec2 textureSize(samplerExternalOES, int lod);"   // GL_OES_EGL_image_external_essl3
+                    "vec4 texture(samplerExternalOES, vec2);"                 // GL_OES_EGL_image_external_essl3
+                    "vec4 texture(samplerExternalOES, vec2, float bias);"     // GL_OES_EGL_image_external_essl3
+                    "vec4 textureProj(samplerExternalOES, vec3);"             // GL_OES_EGL_image_external_essl3
+                    "vec4 textureProj(samplerExternalOES, vec3, float bias);" // GL_OES_EGL_image_external_essl3
+                    "vec4 textureProj(samplerExternalOES, vec4);"             // GL_OES_EGL_image_external_essl3
+                    "vec4 textureProj(samplerExternalOES, vec4, float bias);" // GL_OES_EGL_image_external_essl3
+                    "vec4 texelFetch(samplerExternalOES, ivec2, int lod);"    // GL_OES_EGL_image_external_essl3
+                "\n");
+            }
             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
@@ -2283,7 +2324,7 @@
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
             "float cubeFaceIndexAMD(vec3);"
-            "vec2 cubeFaceCoordAMD(vec3);"
+            "vec2  cubeFaceCoordAMD(vec3);"
             "uint64_t timeAMD();"
 
             "\n");
@@ -2787,6 +2828,29 @@
 
             "\n");
     }
+
+    // GL_AMD_shader_fragment_mask
+    if (profile != EEsProfile && version >= 450) {
+        commonBuiltins.append(
+            "uint fragmentMaskFetchAMD(sampler2DMS,       ivec2);"
+            "uint fragmentMaskFetchAMD(isampler2DMS,      ivec2);"
+            "uint fragmentMaskFetchAMD(usampler2DMS,      ivec2);"
+
+            "uint fragmentMaskFetchAMD(sampler2DMSArray,  ivec3);"
+            "uint fragmentMaskFetchAMD(isampler2DMSArray, ivec3);"
+            "uint fragmentMaskFetchAMD(usampler2DMSArray, ivec3);"
+
+            "vec4  fragmentFetchAMD(sampler2DMS,       ivec2, uint);"
+            "ivec4 fragmentFetchAMD(isampler2DMS,      ivec2, uint);"
+            "uvec4 fragmentFetchAMD(usampler2DMS,      ivec2, uint);"
+
+            "vec4  fragmentFetchAMD(sampler2DMSArray,  ivec3, uint);"
+            "ivec4 fragmentFetchAMD(isampler2DMSArray, ivec3, uint);"
+            "uvec4 fragmentFetchAMD(usampler2DMSArray, ivec3, uint);"
+
+            "\n");
+    }
+
 #endif
 
     //============================================================================
@@ -3126,6 +3190,20 @@
 
             "\n");
     }
+
+    // GL_AMD_shader_fragment_mask
+    if (profile != EEsProfile && version >= 450 && spvVersion.vulkan >= 100) {
+        stageBuiltins[EShLangFragment].append(
+            "uint fragmentMaskFetchAMD(subpassInputMS);"
+            "uint fragmentMaskFetchAMD(isubpassInputMS);"
+            "uint fragmentMaskFetchAMD(usubpassInputMS);"
+
+            "vec4  fragmentFetchAMD(subpassInputMS,  uint);"
+            "ivec4 fragmentFetchAMD(isubpassInputMS, uint);"
+            "uvec4 fragmentFetchAMD(usubpassInputMS, uint);"
+
+            "\n");
+        }
 #endif
 
     //============================================================================
@@ -3425,7 +3503,7 @@
                 "in int gl_DrawIDARB;"
                 );
         }
-        if (version >= 450) {
+        if (version >= 410) {
             stageBuiltins[EShLangVertex].append(
                 "out int gl_ViewportIndex;"
                 "out int gl_Layer;"
@@ -3558,6 +3636,11 @@
             "out int gl_PrimitiveID;"
             "out int gl_Layer;");
 
+        if (version >= 150)
+            stageBuiltins[EShLangGeometry].append(
+            "out int gl_ViewportIndex;"
+            );
+
         if (profile == ECompatibilityProfile && version < 400)
             stageBuiltins[EShLangGeometry].append(
             "out vec4 gl_ClipVertex;"
@@ -3567,11 +3650,6 @@
             stageBuiltins[EShLangGeometry].append(
             "in int gl_InvocationID;"
             );
-        // GL_ARB_viewport_array
-        if (version >= 150)
-            stageBuiltins[EShLangGeometry].append(
-            "out int gl_ViewportIndex;"
-            );
 
 #ifdef NV_EXTENSIONS
         if (version >= 450)
@@ -3648,8 +3726,6 @@
             stageBuiltins[EShLangTessControl].append(
                 "float gl_CullDistance[];"
 #ifdef NV_EXTENSIONS
-                "int  gl_ViewportIndex;"
-                "int  gl_Layer;"
                 "int  gl_ViewportMask[];"             // GL_NV_viewport_array2
                 "vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
                 "int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
@@ -3663,6 +3739,13 @@
             "patch out float gl_TessLevelOuter[4];"
             "patch out float gl_TessLevelInner[2];"
             "\n");
+
+        if (version >= 410)
+            stageBuiltins[EShLangTessControl].append(
+                "out int gl_ViewportIndex;"
+                "out int gl_Layer;"
+                "\n");
+
     } else {
         // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
         // as it depends on the resource sizing of gl_MaxPatchVertices.
@@ -3734,11 +3817,11 @@
             "};"
             "\n");
 
-        if (version >= 450)
+        if (version >= 410)
             stageBuiltins[EShLangTessEvaluation].append(
                 "out int gl_ViewportIndex;"
                 "out int gl_Layer;"
-                );
+                "\n");
 
 #ifdef NV_EXTENSIONS
         if (version >= 450)
@@ -5372,6 +5455,11 @@
             symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader);
             symbolTable.setFunctionExtensions("timeAMD",          1, &E_GL_AMD_gcn_shader);
         }
+
+        if (profile != EEsProfile) {
+            symbolTable.setFunctionExtensions("fragmentMaskFetchAMD", 1, &E_GL_AMD_shader_fragment_mask);
+            symbolTable.setFunctionExtensions("fragmentFetchAMD",     1, &E_GL_AMD_shader_fragment_mask);
+        }
 #endif
 
         // Compatibility variables, vertex only
@@ -5476,7 +5564,7 @@
             symbolTable.setVariableExtensions("gl_ViewportIndex", Num_viewportEXTs, viewportEXTs);
         }
 #else
-        if (language == EShLangVertex || language == EShLangTessEvaluation) {
+        if (language != EShLangGeometry && version >= 410) {
             symbolTable.setVariableExtensions("gl_Layer",         1, &E_GL_ARB_shader_viewport_layer_array);
             symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &E_GL_ARB_shader_viewport_layer_array);
         }
@@ -5499,8 +5587,6 @@
             BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
             BuiltInVariable("gl_in", "gl_PositionPerViewNV",   EbvPositionPerViewNV,   symbolTable);
         }
-        BuiltInVariable("gl_out", "gl_Layer",                   EbvLayer,                   symbolTable);
-        BuiltInVariable("gl_out", "gl_ViewportIndex",           EbvViewportIndex,           symbolTable);
         BuiltInVariable("gl_out", "gl_ViewportMask",            EbvViewportMaskNV,          symbolTable);
         BuiltInVariable("gl_out", "gl_SecondaryPositionNV",     EbvSecondaryPositionNV,     symbolTable);
         BuiltInVariable("gl_out", "gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable);
@@ -6210,6 +6296,9 @@
             symbolTable.relateToOperator("imageLoadLodAMD",                     EOpImageLoadLod);
             symbolTable.relateToOperator("imageStoreLodAMD",                    EOpImageStoreLod);
             symbolTable.relateToOperator("sparseImageLoadLodAMD",               EOpSparseImageLoadLod);
+
+            symbolTable.relateToOperator("fragmentMaskFetchAMD",                EOpFragmentMaskFetch);
+            symbolTable.relateToOperator("fragmentFetchAMD",                    EOpFragmentFetch);
 #endif
         }
         if (profile == EEsProfile) {
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 04a45e0..78e6563 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -3222,4 +3222,20 @@
     root->traverse(&transform);
 }
 
+const char* TIntermediate::getResourceName(TResourceType res)
+{
+    switch (res) {
+    case EResSampler: return "shift-sampler-binding";
+    case EResTexture: return "shift-texture-binding";
+    case EResImage:   return "shift-image-binding";
+    case EResUbo:     return "shift-UBO-binding";
+    case EResSsbo:    return "shift-ssbo-binding";
+    case EResUav:     return "shift-uav-binding";
+    default:
+        assert(0); // internal error: should only be called with valid resource types.
+        return nullptr;
+    }
+}
+
+
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index 44fc0b4..bbc3cac 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -234,6 +234,31 @@
         linkageSymbols.push_back(&symbol);
 }
 
+// Ensure index is in bounds, correct if necessary.
+// Give an error if not.
+void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
+{
+    if (index < 0) {
+        error(loc, "", "[", "index out of range '%d'", index);
+        index = 0;
+    } else if (type.isArray()) {
+        if (type.isExplicitlySizedArray() && index >= type.getOuterArraySize()) {
+            error(loc, "", "[", "array index out of range '%d'", index);
+            index = type.getOuterArraySize() - 1;
+        }
+    } else if (type.isVector()) {
+        if (index >= type.getVectorSize()) {
+            error(loc, "", "[", "vector index out of range '%d'", index);
+            index = type.getVectorSize() - 1;
+        }
+    } else if (type.isMatrix()) {
+        if (index >= type.getMatrixCols()) {
+            error(loc, "", "[", "matrix index out of range '%d'", index);
+            index = type.getMatrixCols() - 1;
+        }
+    }
+}
+
 // Make a shared symbol have a non-shared version that can be edited by the current
 // compile, such that editing its type will not change the shared version and will
 // effect all nodes already sharing it (non-shallow type),
@@ -544,6 +569,10 @@
         firstNewMember = 0;
     }
 
+    // Update with binding and set
+    globalUniformBlock->getWritableType().getQualifier().layoutBinding = globalUniformBinding;
+    globalUniformBlock->getWritableType().getQualifier().layoutSet = globalUniformSet;
+
     // Add the requested member as a member to the global block.
     TType* type = new TType;
     type->shallowCopy(memberType);
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 6decfea..a648b9b 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -49,9 +49,10 @@
 
 TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins,
                              int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
-                             TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) :
+                             TInfoSink& infoSink, bool forwardCompatible, EShMessages messages,
+                             const TString* entryPoint) :
             TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language,
-                              infoSink, forwardCompatible, messages),
+                              infoSink, forwardCompatible, messages, entryPoint),
             inMain(false),
             blockName(nullptr),
             limits(resources.limits),
@@ -88,6 +89,9 @@
 
     if (language == EShLangGeometry)
         globalOutputDefaults.layoutStream = 0;
+
+    if (entryPoint != nullptr && entryPoint->size() > 0 && *entryPoint != "main")
+        infoSink.info.message(EPrefixError, "Source entry point must be \"main\"");
 }
 
 TParseContext::~TParseContext()
@@ -122,11 +126,6 @@
             sampler.set(EbtFloat, Esd2D);
             sampler.external = true;
             defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
-        } else {
-            // Non-ES profile
-            // All default to highp.
-            for (int type = 0; type < maxSamplerIndex; ++type)
-                defaultSamplerPrecision[type] = EpqHigh;
         }
 
         // If we are parsing built-in computational variables/functions, it is meaningful to record
@@ -142,6 +141,13 @@
                 defaultPrecision[EbtUint] = EpqHigh;
                 defaultPrecision[EbtFloat] = EpqHigh;
             }
+
+            if (profile != EEsProfile) {
+                // Non-ES profile
+                // All sampler precisions default to highp.
+                for (int type = 0; type < maxSamplerIndex; ++type)
+                    defaultSamplerPrecision[type] = EpqHigh;
+            }
         }
 
         defaultPrecision[EbtSampler] = EpqLow;
@@ -425,29 +431,6 @@
     return result;
 }
 
-void TParseContext::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
-{
-    if (index < 0) {
-        error(loc, "", "[", "index out of range '%d'", index);
-        index = 0;
-    } else if (type.isArray()) {
-        if (type.isExplicitlySizedArray() && index >= type.getOuterArraySize()) {
-            error(loc, "", "[", "array index out of range '%d'", index);
-            index = type.getOuterArraySize() - 1;
-        }
-    } else if (type.isVector()) {
-        if (index >= type.getVectorSize()) {
-            error(loc, "", "[", "vector index out of range '%d'", index);
-            index = type.getVectorSize() - 1;
-        }
-    } else if (type.isMatrix()) {
-        if (index >= type.getMatrixCols()) {
-            error(loc, "", "[", "matrix index out of range '%d'", index);
-            index = type.getMatrixCols() - 1;
-        }
-    }
-}
-
 // for ES 2.0 (version 100) limitations for almost all index operations except vertex-shader uniforms
 void TParseContext::handleIndexLimits(const TSourceLoc& /*loc*/, TIntermTyped* base, TIntermTyped* index)
 {
@@ -682,7 +665,8 @@
     // leaving swizzles and struct/block dereferences.
 
     TIntermTyped* result = base;
-    if (base->isVector() || base->isScalar()) {
+    if ((base->isVector() || base->isScalar()) &&
+        (base->isFloatingDomain() || base->isIntegerDomain() || base->getBasicType() == EbtBool)) {
         if (base->isScalar()) {
             const char* dotFeature = "scalar swizzle";
             requireProfile(loc, ~EEsProfile, dotFeature);
@@ -1570,6 +1554,23 @@
         break;
     }
 
+#ifdef NV_EXTENSIONS
+    case EOpAtomicAdd:
+    case EOpAtomicMin:
+    case EOpAtomicMax:
+    case EOpAtomicAnd:
+    case EOpAtomicOr:
+    case EOpAtomicXor:
+    case EOpAtomicExchange:
+    case EOpAtomicCompSwap:
+    {
+        if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64)
+            requireExtensions(loc, 1, &E_GL_NV_shader_atomic_int64, fnCandidate.getName().c_str());
+
+        break;
+    }
+#endif
+
     case EOpInterpolateAtCentroid:
     case EOpInterpolateAtSample:
     case EOpInterpolateAtOffset:
@@ -2457,6 +2458,16 @@
 
 void TParseContext::samplerCheck(const TSourceLoc& loc, const TType& type, const TString& identifier, TIntermTyped* /*initializer*/)
 {
+    // Check that the appropriate extension is enabled if external sampler is used.
+    // There are two extensions. The correct one must be used based on GLSL version.
+    if (type.getBasicType() == EbtSampler && type.getSampler().external) {
+        if (version < 300) {
+            requireExtensions(loc, 1, &E_GL_OES_EGL_image_external, "samplerExternalOES");
+        } else {
+            requireExtensions(loc, 1, &E_GL_OES_EGL_image_external_essl3, "samplerExternalOES");
+        }
+    }
+
     if (type.getQualifier().storage == EvqUniform)
         return;
 
@@ -3528,14 +3539,6 @@
             oldType.getQualifier().flat = newType.getQualifier().flat;
             oldType.getQualifier().nopersp = newType.getQualifier().nopersp;
 
-#ifdef NV_EXTENSIONS
-            if (member->type->getFieldName() == "gl_Layer") {
-                if (!newType.getQualifier().layoutViewportRelative && newType.getQualifier().layoutSecondaryViewportRelativeOffset == -2048)
-                    error(loc, "redeclaration only allowed for viewport_relative or secondary_view_offset layout", "redeclaration", member->type->getFieldName().c_str());
-                oldType.getQualifier().layoutViewportRelative = newType.getQualifier().layoutViewportRelative;
-                oldType.getQualifier().layoutSecondaryViewportRelativeOffset = newType.getQualifier().layoutSecondaryViewportRelativeOffset;
-            }
-#endif
             if (oldType.isImplicitlySizedArray() && newType.isExplicitlySizedArray())
                 oldType.changeOuterArraySize(newType.getOuterArraySize());
 
@@ -4458,8 +4461,8 @@
         switch (qualifier.storage) {
         case EvqVaryingIn:
         case EvqVaryingOut:
-            if (type.getBasicType() != EbtBlock || 
-                (!(*type.getStruct())[0].type->getQualifier().hasLocation() && 
+            if (type.getBasicType() != EbtBlock ||
+                (!(*type.getStruct())[0].type->getQualifier().hasLocation() &&
                   (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone))
                 error(loc, "SPIR-V requires location for user input/output", "location", "");
             break;
@@ -4860,7 +4863,7 @@
             // Check for overlap
             int numOffsets = 4;
             if (symbol.getType().isArray()) {
-                if (symbol.getType().isExplicitlySizedArray())
+                if (symbol.getType().isExplicitlySizedArray() && ! symbol.getType().getArraySizes()->isInnerImplicit())
                     numOffsets *= symbol.getType().getCumulativeArraySize();
                 else {
                     // "It is a compile-time error to declare an unsized array of atomic_uint."
@@ -5501,7 +5504,7 @@
 
     bool singleArg;
     if (aggrNode) {
-        if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1)
+        if (aggrNode->getOp() != EOpNull)
             singleArg = true;
         else
             singleArg = false;
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index d04607a..73b9798 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -74,7 +74,8 @@
 public:
     TParseContextBase(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins, int version,
                       EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
-                      TInfoSink& infoSink, bool forwardCompatible, EShMessages messages)
+                      TInfoSink& infoSink, bool forwardCompatible, EShMessages messages,
+                      const TString* entryPoint = nullptr)
           : TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
             scopeMangler("::"),
             symbolTable(symbolTable),
@@ -83,8 +84,13 @@
             contextPragma(true, false),
             parsingBuiltins(parsingBuiltins), scanContext(nullptr), ppContext(nullptr),
             limits(resources.limits),
-            globalUniformBlock(nullptr)
-    { }
+            globalUniformBlock(nullptr),
+            globalUniformBinding(TQualifier::layoutBindingEnd),
+            globalUniformSet(TQualifier::layoutSetEnd)
+    {
+        if (entryPoint != nullptr)
+            sourceEntryPointName = *entryPoint;
+    }
     virtual ~TParseContextBase() { }
 
     virtual void C_DECL   error(const TSourceLoc&, const char* szReason, const char* szToken,
@@ -98,6 +104,8 @@
 
     virtual void setLimits(const TBuiltInResource&) = 0;
 
+    void checkIndex(const TSourceLoc&, const TType&, int& index);
+
     EShLanguage getLanguage() const { return language; }
     void setScanContext(TScanContext* c) { scanContext = c; }
     TScanContext* getScanContext() const { return scanContext; }
@@ -141,6 +149,15 @@
     // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL)
     virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr);
 
+    // Potentially rename shader entry point function
+    void renameShaderFunction(TString*& name) const
+    {
+        // Replace the entry point name given in the shader with the real entry point name,
+        // if there is a substitution.
+        if (name != nullptr && *name == sourceEntryPointName && intermediate.getEntryPointName().size() > 0)
+            name = NewPoolTString(intermediate.getEntryPointName().c_str());
+    }
+
     virtual bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
     virtual void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
 
@@ -173,6 +190,7 @@
     TPpContext* ppContext;
     TBuiltInResource resources;
     TLimits& limits;
+    TString sourceEntryPointName;
 
     // These, if set, will be called when a line, pragma ... is preprocessed.
     // They will be called with any parameters to the original directive.
@@ -192,8 +210,10 @@
                                       TSwizzleSelectors<TVectorSelector>&);
 
     // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL)
-    TVariable* globalUniformBlock;   // the actual block, inserted into the symbol table
-    int firstNewMember;              // the index of the first member not yet inserted into the symbol table
+    TVariable* globalUniformBlock;     // the actual block, inserted into the symbol table
+    unsigned int globalUniformBinding; // the block's binding number
+    unsigned int globalUniformSet;     // the block's set number
+    int firstNewMember;                // the index of the first member not yet inserted into the symbol table
     // override this to set the language-specific name
     virtual const char* getGlobalUniformBlockName() const { return ""; }
     virtual void setUniformBlockDefaults(TType&) const { }
@@ -249,7 +269,8 @@
 class TParseContext : public TParseContextBase {
 public:
     TParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&,
-                  bool forwardCompatible = false, EShMessages messages = EShMsgDefault);
+                  bool forwardCompatible = false, EShMessages messages = EShMsgDefault,
+                  const TString* entryPoint = nullptr);
     virtual ~TParseContext();
 
     bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); };
@@ -268,7 +289,6 @@
     void handlePragma(const TSourceLoc&, const TVector<TString>&) override;
     TIntermTyped* handleVariable(const TSourceLoc&, TSymbol* symbol, const TString* string);
     TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
-    void checkIndex(const TSourceLoc&, const TType&, int& index);
     void handleIndexLimits(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
 
     void makeEditable(TSymbol*&) override;
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index 25122ee..68d1500 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -1152,7 +1152,9 @@
 
     case SAMPLEREXTERNALOES:
         afterType = true;
-        if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external))
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external) ||
+            parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external_essl3))
             return keyword;
         return identifierOrType();
 
diff --git a/glslang/MachineIndependent/Scan.h b/glslang/MachineIndependent/Scan.h
index 9b8f2d4..2c26c2e 100644
--- a/glslang/MachineIndependent/Scan.h
+++ b/glslang/MachineIndependent/Scan.h
@@ -51,25 +51,24 @@
 //
 class TInputScanner {
 public:
-    TInputScanner(int n, const char* const s[], size_t L[], const char* const* names = nullptr, int b = 0, int f = 0, bool single = false) :
+    TInputScanner(int n, const char* const s[], size_t L[], const char* const* names = nullptr,
+                  int b = 0, int f = 0, bool single = false) :
         numSources(n),
-        sources(reinterpret_cast<const unsigned char* const *>(s)), // up to this point, common usage is "char*", but now we need positive 8-bit characters
-        lengths(L), currentSource(0), currentChar(0), stringBias(b), finale(f), singleLogical(single), endOfFileReached(false)
+         // up to this point, common usage is "char*", but now we need positive 8-bit characters
+        sources(reinterpret_cast<const unsigned char* const *>(s)),
+        lengths(L), currentSource(0), currentChar(0), stringBias(b), finale(f), singleLogical(single),
+        endOfFileReached(false)
     {
         loc = new TSourceLoc[numSources];
         for (int i = 0; i < numSources; ++i) {
-            loc[i].init();
+            loc[i].init(i - stringBias);
         }
         if (names != nullptr) {
             for (int i = 0; i < numSources; ++i)
                 loc[i].name = names[i];
         }
-        loc[currentSource].string = -stringBias;
         loc[currentSource].line = 1;
-        loc[currentSource].column = 0;
-        logicalSourceLoc.string = 0;
-        logicalSourceLoc.line = 1;
-        logicalSourceLoc.column = 0;
+        logicalSourceLoc.init(1);
         logicalSourceLoc.name = loc[0].name;
     }
 
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 2a904f4..05d2212 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -91,18 +91,16 @@
                                       int version, EProfile profile, EShSource source,
                                       EShLanguage language, TInfoSink& infoSink,
                                       SpvVersion spvVersion, bool forwardCompatible, EShMessages messages,
-                                      bool parsingBuiltIns, const std::string sourceEntryPointName = "")
+                                      bool parsingBuiltIns, std::string sourceEntryPointName = "")
 {
-#ifndef ENABLE_HLSL
-    (void)sourceEntryPointName; // Unused argument.
-#endif
-
     switch (source) {
-    case EShSourceGlsl:
-        intermediate.setEntryPointName("main");
+    case EShSourceGlsl: {
+        if (sourceEntryPointName.size() == 0)
+            intermediate.setEntryPointName("main");
+        TString entryPoint = sourceEntryPointName.c_str();
         return new TParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
-                                 language, infoSink, forwardCompatible, messages);
-
+                                 language, infoSink, forwardCompatible, messages, &entryPoint);
+    }
 #ifdef ENABLE_HLSL
     case EShSourceHlsl:
         return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
@@ -1663,20 +1661,30 @@
     intermediate->addProcesses(p);
 }
 
+// Set binding base for given resource type
+void TShader::setShiftBinding(TResourceType res, unsigned int base) {
+    intermediate->setShiftBinding(res, base);
+}
+
+// Set binding base for given resource type for a given binding set.
+void TShader::setShiftBindingForSet(TResourceType res, unsigned int set, unsigned int base) {
+    intermediate->setShiftBindingForSet(res, set, base); 
+}
+
 // Set binding base for sampler types
-void TShader::setShiftSamplerBinding(unsigned int base) { intermediate->setShiftSamplerBinding(base); }
+void TShader::setShiftSamplerBinding(unsigned int base) { setShiftBinding(EResSampler, base); }
 // Set binding base for texture types (SRV)
-void TShader::setShiftTextureBinding(unsigned int base) { intermediate->setShiftTextureBinding(base); }
+void TShader::setShiftTextureBinding(unsigned int base) { setShiftBinding(EResTexture, base); }
 // Set binding base for image types
-void TShader::setShiftImageBinding(unsigned int base)   { intermediate->setShiftImageBinding(base); }
+void TShader::setShiftImageBinding(unsigned int base)   { setShiftBinding(EResImage, base); }
 // Set binding base for uniform buffer objects (CBV)
-void TShader::setShiftUboBinding(unsigned int base)     { intermediate->setShiftUboBinding(base); }
+void TShader::setShiftUboBinding(unsigned int base)     { setShiftBinding(EResUbo, base); }
 // Synonym for setShiftUboBinding, to match HLSL language.
-void TShader::setShiftCbufferBinding(unsigned int base) { intermediate->setShiftUboBinding(base); }
+void TShader::setShiftCbufferBinding(unsigned int base) { setShiftBinding(EResUbo, base); }
 // Set binding base for UAV (unordered access view)
-void TShader::setShiftUavBinding(unsigned int base)     { intermediate->setShiftUavBinding(base); }
+void TShader::setShiftUavBinding(unsigned int base)     { setShiftBinding(EResUav, base); }
 // Set binding base for SSBOs
-void TShader::setShiftSsboBinding(unsigned int base)    { intermediate->setShiftSsboBinding(base); }
+void TShader::setShiftSsboBinding(unsigned int base)    { setShiftBinding(EResSsbo, base); }
 // Enables binding automapping using TIoMapper
 void TShader::setAutoMapBindings(bool map)              { intermediate->setAutoMapBindings(map); }
 // Fragile: currently within one stage: simple auto-assignment of location
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 531aa15..b1893b3 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -154,6 +154,7 @@
     extensionBehavior[E_GL_OES_standard_derivatives]         = EBhDisable;
     extensionBehavior[E_GL_EXT_frag_depth]                   = EBhDisable;
     extensionBehavior[E_GL_OES_EGL_image_external]           = EBhDisable;
+    extensionBehavior[E_GL_OES_EGL_image_external_essl3]     = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_texture_lod]           = EBhDisable;
     extensionBehavior[E_GL_EXT_shadow_samplers]              = EBhDisable;
     extensionBehavior[E_GL_ARB_texture_rectangle]            = EBhDisable;
@@ -201,6 +202,7 @@
     extensionBehavior[E_GL_AMD_texture_gather_bias_lod]              = EBhDisable;
     extensionBehavior[E_GL_AMD_gpu_shader_int16]                     = EBhDisable;
     extensionBehavior[E_GL_AMD_shader_image_load_store_lod]          = EBhDisable;
+    extensionBehavior[E_GL_AMD_shader_fragment_mask]                 = EBhDisable;
 #endif
 
 #ifdef NV_EXTENSIONS
@@ -209,6 +211,7 @@
     extensionBehavior[E_GL_NV_viewport_array2]                       = EBhDisable;
     extensionBehavior[E_GL_NV_stereo_view_rendering]                 = EBhDisable;
     extensionBehavior[E_GL_NVX_multiview_per_view_attributes]        = EBhDisable;
+    extensionBehavior[E_GL_NV_shader_atomic_int64]                   = EBhDisable;
 #endif
 
     // AEP
@@ -260,6 +263,7 @@
             "#define GL_OES_standard_derivatives 1\n"
             "#define GL_EXT_frag_depth 1\n"
             "#define GL_OES_EGL_image_external 1\n"
+            "#define GL_OES_EGL_image_external_essl3 1\n"
             "#define GL_EXT_shader_texture_lod 1\n"
             "#define GL_EXT_shadow_samplers 1\n"
 
@@ -333,12 +337,14 @@
             "#define GL_AMD_texture_gather_bias_lod 1\n"
             "#define GL_AMD_gpu_shader_int16 1\n"
             "#define GL_AMD_shader_image_load_store_lod 1\n"
+            "#define GL_AMD_shader_fragment_mask 1\n"
 #endif
 
 #ifdef NV_EXTENSIONS
             "#define GL_NV_sample_mask_override_coverage 1\n"
             "#define GL_NV_geometry_shader_passthrough 1\n"
             "#define GL_NV_viewport_array2 1\n"
+            "#define GL_NV_shader_atomic_int64 1\n"
 #endif
             ;
 
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 78a9b28..bd57103 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -107,6 +107,7 @@
 const char* const E_GL_OES_standard_derivatives         = "GL_OES_standard_derivatives";
 const char* const E_GL_EXT_frag_depth                   = "GL_EXT_frag_depth";
 const char* const E_GL_OES_EGL_image_external           = "GL_OES_EGL_image_external";
+const char* const E_GL_OES_EGL_image_external_essl3     = "GL_OES_EGL_image_external_essl3";
 const char* const E_GL_EXT_shader_texture_lod           = "GL_EXT_shader_texture_lod";
 const char* const E_GL_EXT_shadow_samplers              = "GL_EXT_shadow_samplers";
 
@@ -171,6 +172,7 @@
 const char* const E_GL_AMD_texture_gather_bias_lod              = "GL_AMD_texture_gather_bias_lod";
 const char* const E_GL_AMD_gpu_shader_int16                     = "GL_AMD_gpu_shader_int16";
 const char* const E_GL_AMD_shader_image_load_store_lod          = "GL_AMD_shader_image_load_store_lod";
+const char* const E_GL_AMD_shader_fragment_mask                 = "GL_AMD_shader_fragment_mask";
 #endif
 
 #ifdef NV_EXTENSIONS
@@ -180,6 +182,7 @@
 const char* const E_GL_NV_viewport_array2                       = "GL_NV_viewport_array2";
 const char* const E_GL_NV_stereo_view_rendering                 = "GL_NV_stereo_view_rendering";
 const char* const E_GL_NVX_multiview_per_view_attributes        = "GL_NVX_multiview_per_view_attributes";
+const char* const E_GL_NV_shader_atomic_int64                   = "GL_NV_shader_atomic_int64";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index cd6df7b..a011935 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -860,6 +860,11 @@
         // Add the function as a prototype after parsing it (we do not support recursion)
         TFunction *function;
         TType type($1);
+
+        // Potentially rename shader entry point function.  No-op most of the time.
+        parseContext.renameShaderFunction($2.string);
+
+        // Make the function
         function = new TFunction($2.string, type);
         $$ = function;
     }
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index c6bae9f..fabec4b 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 3.0.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.4"
+#define YYBISON_VERSION "3.0"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -89,11 +89,11 @@
 
 #line 91 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
 
-# ifndef YY_NULLPTR
+# ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#   define YY_NULL nullptr
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULL 0
 #  endif
 # endif
 
@@ -422,7 +422,7 @@
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
+typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
 #line 68 "MachineIndependent/glslang.y" /* yacc.c:355  */
@@ -461,8 +461,6 @@
 
 #line 463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
 };
-
-typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
@@ -490,7 +488,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -547,30 +545,11 @@
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+#  define __attribute__(Spec) /* empty */
 # endif
 #endif
 
@@ -827,42 +806,42 @@
      624,   632,   633,   633,   651,   652,   667,   671,   675,   679,
      684,   688,   692,   696,   700,   704,   708,   715,   718,   729,
      736,   741,   746,   754,   758,   762,   766,   771,   776,   785,
-     785,   796,   800,   807,   814,   817,   824,   832,   852,   870,
-     885,   908,   919,   929,   939,   949,   958,   961,   965,   969,
-     974,   982,   987,   992,   997,  1002,  1011,  1022,  1049,  1058,
-    1065,  1072,  1079,  1091,  1097,  1100,  1107,  1111,  1115,  1123,
-    1132,  1135,  1146,  1149,  1152,  1156,  1160,  1164,  1171,  1175,
-    1187,  1201,  1206,  1212,  1218,  1225,  1231,  1236,  1241,  1246,
-    1254,  1258,  1262,  1266,  1270,  1274,  1280,  1289,  1292,  1300,
-    1304,  1313,  1318,  1326,  1330,  1340,  1344,  1348,  1353,  1360,
-    1364,  1369,  1374,  1379,  1386,  1393,  1397,  1402,  1407,  1412,
-    1418,  1424,  1430,  1438,  1446,  1454,  1459,  1464,  1469,  1474,
-    1479,  1484,  1490,  1496,  1502,  1510,  1518,  1526,  1532,  1538,
-    1544,  1550,  1556,  1562,  1570,  1578,  1586,  1591,  1596,  1601,
-    1606,  1611,  1616,  1621,  1626,  1631,  1636,  1641,  1646,  1652,
-    1658,  1664,  1670,  1676,  1682,  1688,  1694,  1700,  1706,  1712,
-    1718,  1726,  1734,  1742,  1750,  1758,  1766,  1774,  1782,  1790,
-    1798,  1806,  1814,  1819,  1824,  1829,  1834,  1839,  1844,  1849,
-    1854,  1859,  1864,  1869,  1874,  1879,  1884,  1889,  1894,  1899,
-    1904,  1909,  1914,  1919,  1924,  1929,  1934,  1939,  1944,  1949,
-    1954,  1959,  1964,  1969,  1974,  1979,  1984,  1989,  1994,  1999,
-    2004,  2009,  2014,  2019,  2024,  2029,  2034,  2039,  2044,  2049,
-    2054,  2059,  2064,  2069,  2074,  2079,  2084,  2089,  2094,  2099,
-    2104,  2109,  2114,  2119,  2124,  2129,  2134,  2139,  2144,  2149,
-    2154,  2159,  2164,  2169,  2174,  2179,  2184,  2189,  2194,  2199,
-    2204,  2209,  2214,  2219,  2224,  2229,  2234,  2239,  2244,  2249,
-    2254,  2259,  2264,  2269,  2274,  2279,  2284,  2289,  2294,  2299,
-    2304,  2309,  2314,  2319,  2324,  2329,  2334,  2339,  2344,  2349,
-    2354,  2359,  2365,  2371,  2377,  2383,  2389,  2395,  2401,  2406,
-    2422,  2427,  2432,  2440,  2440,  2451,  2451,  2461,  2464,  2477,
-    2495,  2519,  2523,  2529,  2534,  2545,  2548,  2554,  2563,  2566,
-    2572,  2576,  2577,  2583,  2584,  2585,  2586,  2587,  2588,  2589,
-    2593,  2594,  2598,  2594,  2610,  2611,  2615,  2615,  2622,  2622,
-    2636,  2639,  2647,  2655,  2666,  2667,  2671,  2678,  2682,  2690,
-    2694,  2707,  2707,  2727,  2730,  2736,  2748,  2760,  2760,  2775,
-    2775,  2791,  2791,  2812,  2815,  2821,  2824,  2830,  2834,  2841,
-    2846,  2851,  2858,  2861,  2870,  2874,  2883,  2886,  2889,  2897,
-    2897
+     785,   796,   800,   807,   814,   817,   824,   832,   852,   875,
+     890,   913,   924,   934,   944,   954,   963,   966,   970,   974,
+     979,   987,   992,   997,  1002,  1007,  1016,  1027,  1054,  1063,
+    1070,  1077,  1084,  1096,  1102,  1105,  1112,  1116,  1120,  1128,
+    1137,  1140,  1151,  1154,  1157,  1161,  1165,  1169,  1176,  1180,
+    1192,  1206,  1211,  1217,  1223,  1230,  1236,  1241,  1246,  1251,
+    1259,  1263,  1267,  1271,  1275,  1279,  1285,  1294,  1297,  1305,
+    1309,  1318,  1323,  1331,  1335,  1345,  1349,  1353,  1358,  1365,
+    1369,  1374,  1379,  1384,  1391,  1398,  1402,  1407,  1412,  1417,
+    1423,  1429,  1435,  1443,  1451,  1459,  1464,  1469,  1474,  1479,
+    1484,  1489,  1495,  1501,  1507,  1515,  1523,  1531,  1537,  1543,
+    1549,  1555,  1561,  1567,  1575,  1583,  1591,  1596,  1601,  1606,
+    1611,  1616,  1621,  1626,  1631,  1636,  1641,  1646,  1651,  1657,
+    1663,  1669,  1675,  1681,  1687,  1693,  1699,  1705,  1711,  1717,
+    1723,  1731,  1739,  1747,  1755,  1763,  1771,  1779,  1787,  1795,
+    1803,  1811,  1819,  1824,  1829,  1834,  1839,  1844,  1849,  1854,
+    1859,  1864,  1869,  1874,  1879,  1884,  1889,  1894,  1899,  1904,
+    1909,  1914,  1919,  1924,  1929,  1934,  1939,  1944,  1949,  1954,
+    1959,  1964,  1969,  1974,  1979,  1984,  1989,  1994,  1999,  2004,
+    2009,  2014,  2019,  2024,  2029,  2034,  2039,  2044,  2049,  2054,
+    2059,  2064,  2069,  2074,  2079,  2084,  2089,  2094,  2099,  2104,
+    2109,  2114,  2119,  2124,  2129,  2134,  2139,  2144,  2149,  2154,
+    2159,  2164,  2169,  2174,  2179,  2184,  2189,  2194,  2199,  2204,
+    2209,  2214,  2219,  2224,  2229,  2234,  2239,  2244,  2249,  2254,
+    2259,  2264,  2269,  2274,  2279,  2284,  2289,  2294,  2299,  2304,
+    2309,  2314,  2319,  2324,  2329,  2334,  2339,  2344,  2349,  2354,
+    2359,  2364,  2370,  2376,  2382,  2388,  2394,  2400,  2406,  2411,
+    2427,  2432,  2437,  2445,  2445,  2456,  2456,  2466,  2469,  2482,
+    2500,  2524,  2528,  2534,  2539,  2550,  2553,  2559,  2568,  2571,
+    2577,  2581,  2582,  2588,  2589,  2590,  2591,  2592,  2593,  2594,
+    2598,  2599,  2603,  2599,  2615,  2616,  2620,  2620,  2627,  2627,
+    2641,  2644,  2652,  2660,  2671,  2672,  2676,  2683,  2687,  2695,
+    2699,  2712,  2712,  2732,  2735,  2741,  2753,  2765,  2765,  2780,
+    2780,  2796,  2796,  2817,  2820,  2826,  2829,  2835,  2839,  2846,
+    2851,  2856,  2863,  2866,  2875,  2879,  2888,  2891,  2894,  2902,
+    2902
 };
 #endif
 
@@ -962,7 +941,7 @@
   "switch_statement_list", "case_label", "iteration_statement", "$@10",
   "$@11", "$@12", "for_init_statement", "conditionopt",
   "for_rest_statement", "jump_statement", "translation_unit",
-  "external_declaration", "function_definition", "$@13", YY_NULLPTR
+  "external_declaration", "function_definition", "$@13", YY_NULL
 };
 #endif
 
@@ -2959,11 +2938,11 @@
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
+  const char *yyformat = YY_NULL;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -3020,7 +2999,7 @@
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -3361,7 +3340,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 3365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
@@ -3369,7 +3348,7 @@
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
@@ -3377,7 +3356,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 3381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
@@ -3386,7 +3365,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 3390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 6:
@@ -3395,7 +3374,7 @@
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 3399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 7:
@@ -3404,7 +3383,7 @@
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 3408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 8:
@@ -3415,7 +3394,7 @@
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
 #endif
     }
-#line 3419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 9:
@@ -3426,7 +3405,7 @@
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
 #endif
     }
-#line 3430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
@@ -3434,7 +3413,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 3438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
@@ -3443,7 +3422,7 @@
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 3447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 12:
@@ -3454,7 +3433,7 @@
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
 #endif
     }
-#line 3458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 13:
@@ -3462,7 +3441,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 3466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
@@ -3472,7 +3451,7 @@
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 3476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 15:
@@ -3480,7 +3459,7 @@
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 16:
@@ -3488,7 +3467,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
@@ -3496,7 +3475,7 @@
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
@@ -3504,7 +3483,7 @@
     {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 3508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
@@ -3514,7 +3493,7 @@
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
@@ -3524,7 +3503,7 @@
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
@@ -3533,7 +3512,7 @@
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 22:
@@ -3542,7 +3521,7 @@
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 3546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 23:
@@ -3550,7 +3529,7 @@
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 3554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 24:
@@ -3559,7 +3538,7 @@
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
@@ -3568,7 +3547,7 @@
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
@@ -3576,7 +3555,7 @@
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 3580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
@@ -3584,7 +3563,7 @@
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 3588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
@@ -3596,7 +3575,7 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 29:
@@ -3608,7 +3587,7 @@
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 3612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 30:
@@ -3616,7 +3595,7 @@
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 3620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 31:
@@ -3626,7 +3605,7 @@
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 3630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 32:
@@ -3658,7 +3637,7 @@
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 3662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
@@ -3669,7 +3648,7 @@
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 3673 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 34:
@@ -3678,7 +3657,7 @@
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 3682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 35:
@@ -3687,7 +3666,7 @@
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 3691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 36:
@@ -3708,38 +3687,38 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 3712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 37:
 #line 472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 3718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 38:
 #line 473 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 3724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 39:
 #line 474 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 3730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
 #line 475 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 3737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
 #line 481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
@@ -3749,7 +3728,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
@@ -3759,7 +3738,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
@@ -3770,13 +3749,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 45:
 #line 501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 46:
@@ -3786,7 +3765,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 47:
@@ -3796,13 +3775,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 48:
 #line 515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 49:
@@ -3813,7 +3792,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 50:
@@ -3824,13 +3803,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 51:
 #line 531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
@@ -3840,7 +3819,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 53:
@@ -3850,7 +3829,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 54:
@@ -3860,7 +3839,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 55:
@@ -3870,13 +3849,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 56:
 #line 555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 57:
@@ -3889,7 +3868,7 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 58:
@@ -3902,13 +3881,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 59:
 #line 575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 60:
@@ -3919,13 +3898,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 61:
 #line 585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 62:
@@ -3936,13 +3915,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 63:
 #line 595 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 64:
@@ -3953,13 +3932,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 65:
 #line 605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 66:
@@ -3969,13 +3948,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 67:
 #line 614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 68:
@@ -3985,13 +3964,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 69:
 #line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 70:
@@ -4001,13 +3980,13 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 71:
 #line 632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 72:
@@ -4015,7 +3994,7 @@
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 4019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
@@ -4032,13 +4011,13 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 74:
 #line 651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
@@ -4055,7 +4034,7 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 76:
@@ -4064,7 +4043,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 77:
@@ -4073,7 +4052,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 78:
@@ -4082,7 +4061,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 79:
@@ -4092,7 +4071,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 80:
@@ -4101,7 +4080,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 81:
@@ -4110,7 +4089,7 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 82:
@@ -4119,7 +4098,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 4123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4102 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 83:
@@ -4128,7 +4107,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 4132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 84:
@@ -4137,7 +4116,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 4141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 85:
@@ -4146,7 +4125,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 4150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 86:
@@ -4155,7 +4134,7 @@
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 4159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 87:
@@ -4163,7 +4142,7 @@
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 88:
@@ -4176,7 +4155,7 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 89:
@@ -4185,7 +4164,7 @@
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 90:
@@ -4195,7 +4174,7 @@
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 4199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
@@ -4205,7 +4184,7 @@
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 4209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 92:
@@ -4218,7 +4197,7 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 93:
@@ -4227,7 +4206,7 @@
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 94:
@@ -4236,7 +4215,7 @@
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 95:
@@ -4245,7 +4224,7 @@
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 4249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 96:
@@ -4255,7 +4234,7 @@
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 4259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 97:
@@ -4265,7 +4244,7 @@
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 98:
@@ -4276,13 +4255,13 @@
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 4280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 99:
 #line 785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 100:
@@ -4296,7 +4275,7 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 4300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 101:
@@ -4305,7 +4284,7 @@
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 102:
@@ -4314,7 +4293,7 @@
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 103:
@@ -4323,7 +4302,7 @@
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 104:
@@ -4331,7 +4310,7 @@
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 4335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 105:
@@ -4339,7 +4318,7 @@
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 4343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 106:
@@ -4352,7 +4331,7 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 4356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 107:
@@ -4374,7 +4353,7 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 4378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
@@ -4390,14 +4369,19 @@
         // Add the function as a prototype after parsing it (we do not support recursion)
         TFunction *function;
         TType type((yyvsp[-2].interm.type));
+
+        // Potentially rename shader entry point function.  No-op most of the time.
+        parseContext.renameShaderFunction((yyvsp[-1].lex).string);
+
+        // Make the function
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 4397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 870 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 875 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -4413,11 +4397,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 885 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -4435,11 +4419,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4451,11 +4435,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 4455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -4463,11 +4447,11 @@
         parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 4467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4478,11 +4462,11 @@
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 4482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -4490,118 +4474,118 @@
         parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 4494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 4505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 958 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 961 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 4522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 965 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 970 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 4531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 969 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 979 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 4551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 982 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
     }
-#line 4561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 992 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 4571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 992 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 4581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 4591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1007 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 4601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1011 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1016 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -4613,11 +4597,11 @@
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 4617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1022 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1027 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -4642,22 +4626,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 4657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -4665,11 +4649,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1065 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1070 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -4677,11 +4661,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 4681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1072 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
@@ -4689,11 +4673,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 4693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
@@ -4703,84 +4687,84 @@
         (yyval.interm.type).qualifier.explicitInterp = true;
 #endif
     }
-#line 4707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1096 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 4715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1097 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1102 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1100 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 4733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1107 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1112 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 4742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1111 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1116 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1115 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 4761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1123 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 4772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1132 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1135 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1140 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -4789,72 +4773,72 @@
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1146 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1151 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1152 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1156 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1160 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1164 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1171 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 4854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1175 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -4867,11 +4851,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1187 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -4886,43 +4870,43 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1201 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 4900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 4911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1212 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 4922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -4930,52 +4914,52 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 4934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 4945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1231 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 4955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 4965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 4975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1251 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -4984,126 +4968,126 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 4988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 1254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 4997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 1258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 5006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 162:
-#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 5015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 163:
-#line 1266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 5024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1270 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 5033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 5044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 166:
-#line 1280 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1285 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 5055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 167:
-#line 1289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 5063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 168:
-#line 1292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 5073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 5082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayDimCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes, 0);
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 5093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -5112,20 +5096,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 1330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -5133,39 +5117,39 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 1340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 5146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 1344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 1348 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 5165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 178:
-#line 1353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float", parseContext.symbolTable.atBuiltInLevel());
@@ -5173,50 +5157,50 @@
         (yyval.interm.type).basicType = EbtFloat16;
 #endif
     }
-#line 5177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 179:
-#line 1360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 180:
-#line 1364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 5196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 181:
-#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 5206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 182:
-#line 1374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 5216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 183:
-#line 1379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer", parseContext.symbolTable.atBuiltInLevel());
@@ -5224,11 +5208,11 @@
         (yyval.interm.type).basicType = EbtInt16;
 #endif
     }
-#line 5228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 184:
-#line 1386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
@@ -5236,83 +5220,83 @@
         (yyval.interm.type).basicType = EbtUint16;
 #endif
     }
-#line 5240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 185:
-#line 1393 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 5249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 1397 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 187:
 #line 1402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).setVector(2);
     }
-#line 5269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 188:
+  case 187:
 #line 1407 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
+    }
+#line 5253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 188:
+#line 1412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 5279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 189:
-#line 1412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1417 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 5290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 1418 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1423 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 5301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1429 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 5312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 1430 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1435 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5321,11 +5305,11 @@
         (yyval.interm.type).setVector(2);
 #endif
     }
-#line 5325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5334,11 +5318,11 @@
         (yyval.interm.type).setVector(3);
 #endif
     }
-#line 5338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 1446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5347,104 +5331,104 @@
         (yyval.interm.type).setVector(4);
 #endif
     }
-#line 5351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 195:
-#line 1454 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 196:
 #line 1459 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(2);
+    }
+#line 5345 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 196:
+#line 1464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(3);
     }
-#line 5371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 1464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 5381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 1469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 199:
 #line 1474 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 5375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 199:
+#line 1479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 5401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 200:
-#line 1479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1484 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 5411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 1484 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(2);
     }
-#line 5422 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 1490 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 5433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 1496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 5444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 1502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5453,11 +5437,11 @@
         (yyval.interm.type).setVector(2);
 #endif
     }
-#line 5457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 1510 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5466,11 +5450,11 @@
         (yyval.interm.type).setVector(3);
 #endif
     }
-#line 5470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 1518 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5479,77 +5463,77 @@
         (yyval.interm.type).setVector(4);
 #endif
     }
-#line 5483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 1526 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 5494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 1532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1537 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 5505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 1538 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1543 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 5516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 1544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(2);
     }
-#line 5527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 1550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(3);
     }
-#line 5538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 212:
-#line 1556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1561 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(4);
     }
-#line 5549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 213:
-#line 1562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1567 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5558,11 +5542,11 @@
         (yyval.interm.type).setVector(2);
 #endif
     }
-#line 5562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 214:
-#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5571,11 +5555,11 @@
         (yyval.interm.type).setVector(3);
 #endif
     }
-#line 5575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 215:
-#line 1578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1583 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
@@ -5584,263 +5568,263 @@
         (yyval.interm.type).setVector(4);
 #endif
     }
-#line 5588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 216:
-#line 1586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 5598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 217:
 #line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 218:
+  case 217:
 #line 1596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 219:
+  case 218:
 #line 1601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 220:
+  case 219:
 #line 1606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 3);
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 221:
+  case 220:
 #line 1611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 4);
+        (yyval.interm.type).setMatrix(2, 3);
     }
-#line 5648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 222:
+  case 221:
 #line 1616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 2);
+        (yyval.interm.type).setMatrix(2, 4);
     }
-#line 5658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 223:
+  case 222:
 #line 1621 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
+        (yyval.interm.type).setMatrix(3, 2);
     }
-#line 5668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 224:
+  case 223:
 #line 1626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 4);
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 225:
+  case 224:
 #line 1631 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 2);
+        (yyval.interm.type).setMatrix(3, 4);
     }
-#line 5688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 226:
+  case 225:
 #line 1636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 5672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 226:
+#line 1641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 1641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 228:
-#line 1646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 229:
-#line 1652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1657 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 230:
-#line 1658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 231:
-#line 1664 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1669 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 5752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 232:
-#line 1670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1675 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 5763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 233:
-#line 1676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1681 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 234:
-#line 1682 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1687 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 5785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 235:
-#line 1688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 5796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 236:
-#line 1694 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 5807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 237:
-#line 1700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1705 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 238:
-#line 1706 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 5829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 239:
-#line 1712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1717 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 5840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 240:
-#line 1718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5849,11 +5833,11 @@
         (yyval.interm.type).setMatrix(2, 2);
 #endif
     }
-#line 5853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 241:
-#line 1726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1731 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5862,11 +5846,11 @@
         (yyval.interm.type).setMatrix(3, 3);
 #endif
     }
-#line 5866 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 242:
-#line 1734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1739 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5875,11 +5859,11 @@
         (yyval.interm.type).setMatrix(4, 4);
 #endif
     }
-#line 5879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 243:
-#line 1742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5888,11 +5872,11 @@
         (yyval.interm.type).setMatrix(2, 2);
 #endif
     }
-#line 5892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 244:
-#line 1750 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5901,11 +5885,11 @@
         (yyval.interm.type).setMatrix(2, 3);
 #endif
     }
-#line 5905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 1758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5914,11 +5898,11 @@
         (yyval.interm.type).setMatrix(2, 4);
 #endif
     }
-#line 5918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 1766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1771 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5927,11 +5911,11 @@
         (yyval.interm.type).setMatrix(3, 2);
 #endif
     }
-#line 5931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 1774 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1779 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5940,11 +5924,11 @@
         (yyval.interm.type).setMatrix(3, 3);
 #endif
     }
-#line 5944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 1782 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1787 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5953,11 +5937,11 @@
         (yyval.interm.type).setMatrix(3, 4);
 #endif
     }
-#line 5957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 1790 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5966,11 +5950,11 @@
         (yyval.interm.type).setMatrix(4, 2);
 #endif
     }
-#line 5970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 250:
-#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5979,11 +5963,11 @@
         (yyval.interm.type).setMatrix(4, 3);
 #endif
     }
-#line 5983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 251:
-#line 1806 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
@@ -5992,1188 +5976,1188 @@
         (yyval.interm.type).setMatrix(4, 4);
 #endif
     }
-#line 5996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 1814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 6006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 6016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 6026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 6036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 6046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 6056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 1844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 6066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 6076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 6086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 261:
-#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 6096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 262:
-#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1869 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 6106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 263:
-#line 1869 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1874 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 6116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 264:
-#line 1874 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 6126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 1879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 6136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 6146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 267:
-#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 6156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 268:
-#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 6166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 269:
-#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1904 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 1904 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1909 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 1909 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 6206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 273:
-#line 1919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 6226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 275:
-#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 6236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 1934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 6246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 1939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 6256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 6266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 1949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 6276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 6286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 6296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 1964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1969 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 6306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 1969 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 6316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1979 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 6326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 1979 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 6336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 6346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 6356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 1994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 6366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 1999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 6376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 6386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 2009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 6396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 6406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 6416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 2024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 6426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 295:
-#line 2029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 6436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 296:
-#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2039 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 6446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 297:
-#line 2039 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 6456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 6466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 6476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 300:
-#line 2054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
     }
-#line 6486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 301:
-#line 2059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 6496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 302:
-#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 303:
-#line 2069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 6516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 304:
-#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 6526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 305:
-#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 6536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 306:
-#line 2084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2089 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 6546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 2089 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
     }
-#line 6556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 308:
-#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 6566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 309:
-#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 6576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 310:
-#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 6586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 311:
-#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 6596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 312:
-#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 6606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 313:
-#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 6616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 314:
-#line 2124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2129 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
     }
-#line 6626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 315:
-#line 2129 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 6636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 316:
-#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 6646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 317:
-#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 6656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 318:
-#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 6666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 319:
-#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 6676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 320:
-#line 2154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 6686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 321:
-#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 6696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 322:
-#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 6706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 323:
-#line 2169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 6716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 324:
-#line 2174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 6726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 325:
-#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2184 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 6736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 326:
-#line 2184 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2189 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 6746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 327:
-#line 2189 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 6756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 328:
-#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 6766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 329:
-#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 6776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 330:
-#line 2204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2209 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 6786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 331:
-#line 2209 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 6796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 332:
-#line 2214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 6806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 333:
-#line 2219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 6816 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 334:
-#line 2224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 6826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 335:
-#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 6836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 336:
-#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2239 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 6846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 337:
-#line 2239 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2244 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 6856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 338:
-#line 2244 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 6866 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 339:
-#line 2249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 6876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 340:
-#line 2254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 6886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 341:
-#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2264 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 6896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 342:
-#line 2264 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 6906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 343:
-#line 2269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 6916 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 344:
-#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 6926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 345:
-#line 2279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 6936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 346:
-#line 2284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 6946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 347:
-#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 6956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 348:
-#line 2294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 6966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 349:
-#line 2299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 6976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 350:
-#line 2304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 6986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 351:
-#line 2309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 6996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 352:
-#line 2314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 7006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 353:
-#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 7016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 354:
-#line 2324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 7026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 355:
-#line 2329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 7036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 356:
-#line 2334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 7046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 357:
-#line 2339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 7056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 358:
-#line 2344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 7066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 359:
-#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 7076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 360:
-#line 2354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 7086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 361:
-#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 7097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 362:
-#line 2365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 7108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 363:
-#line 2371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2376 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 7119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 364:
-#line 2377 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2382 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 7130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 365:
-#line 2383 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 7141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 366:
-#line 2389 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 7152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 367:
-#line 2395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 7163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 368:
-#line 2401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2406 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 7173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 369:
-#line 2406 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -7187,47 +7171,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 7191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 370:
-#line 2422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 7201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 371:
-#line 2427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 7211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 372:
-#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 373:
-#line 2440 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 7227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 374:
-#line 2440 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -7239,17 +7223,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 7243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 375:
-#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 7249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 376:
-#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -7257,19 +7241,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 7261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 377:
-#line 2461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 7269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 378:
-#line 2464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -7280,11 +7264,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 7284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 379:
-#line 2477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -7303,11 +7287,11 @@
             (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
         }
     }
-#line 7307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 380:
-#line 2495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier);
         if ((yyvsp[-2].interm.type).arraySizes) {
@@ -7329,38 +7313,38 @@
             (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
         }
     }
-#line 7333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 381:
-#line 2519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2524 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 7342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 382:
-#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 7350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 383:
-#line 2529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 7360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 384:
-#line 2534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes, 0);
 
@@ -7369,219 +7353,219 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[0].interm).arraySizes);
     }
-#line 7373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 385:
-#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 386:
-#line 2548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
-#line 7392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 387:
-#line 2554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 7403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 388:
-#line 2563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 7411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 389:
-#line 2566 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 7419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 390:
-#line 2572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 391:
-#line 2576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 392:
-#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 393:
-#line 2583 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 394:
-#line 2584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 395:
-#line 2585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 396:
-#line 2586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 397:
-#line 2587 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 398:
-#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 399:
-#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 400:
-#line 2593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 7485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 401:
-#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 7494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 402:
-#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 7503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 403:
-#line 2602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 7513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 404:
-#line 2610 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 405:
-#line 2611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 406:
-#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 407:
-#line 2618 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 408:
-#line 2622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 409:
-#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 410:
-#line 2636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 7571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 411:
-#line 2639 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 7581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 412:
-#line 2647 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
@@ -7590,11 +7574,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 7594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 413:
-#line 2655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -7603,59 +7587,59 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 7607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 414:
-#line 2666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 7613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 415:
-#line 2667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 7619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 416:
-#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
         (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
     }
-#line 7628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 417:
-#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 7637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 418:
-#line 2682 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2687 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 419:
-#line 2690 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2695 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 7655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 420:
-#line 2694 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -7666,11 +7650,11 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 7670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 421:
-#line 2707 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -7679,11 +7663,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 7683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 422:
-#line 2715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
@@ -7693,27 +7677,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 423:
-#line 2727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 7705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 424:
-#line 2730 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2735 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 425:
-#line 2736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -7726,11 +7710,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 7730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 426:
-#line 2748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -7740,11 +7724,11 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 7744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 427:
-#line 2760 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -7753,11 +7737,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 428:
-#line 2768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@@ -7765,21 +7749,21 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 429:
-#line 2775 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 430:
-#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -7791,22 +7775,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 431:
-#line 2791 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 432:
-#line 2797 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -7819,81 +7803,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 433:
-#line 2812 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
+#line 7815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 434:
+#line 2820 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 7823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 435:
+#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
 #line 7831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2815 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 436:
+#line 2829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+        (yyval.interm.intermTypedNode) = 0;
     }
 #line 7839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 7847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 436:
-#line 2824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = 0;
-    }
-#line 7855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
   case 437:
-#line 2830 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2835 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 438:
-#line 2834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 439:
-#line 2841 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
     }
-#line 7883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 440:
-#line 2846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2851 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
     }
-#line 7893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 441:
-#line 2851 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -7901,83 +7885,83 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 7905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 442:
-#line 2858 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 7913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 443:
-#line 2861 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 7922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 444:
-#line 2870 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2875 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 445:
-#line 2874 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) != nullptr) {
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
             parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
         }
     }
-#line 7942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 446:
-#line 2883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 447:
-#line 2886 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2891 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 448:
-#line 2889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         (yyval.interm.intermNode) = nullptr;
     }
-#line 7968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 449:
-#line 2897 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
         (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
     }
-#line 7977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 450:
-#line 2901 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2906 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -7993,11 +7977,11 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 7997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 8001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -8225,5 +8209,5 @@
 #endif
   return yyresult;
 }
-#line 2918 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index b8e78d6..b2e0063 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 3.0.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -345,7 +345,7 @@
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
+typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
 #line 68 "MachineIndependent/glslang.y" /* yacc.c:1909  */
@@ -384,8 +384,6 @@
 
 #line 386 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
 };
-
-typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 30240fc..7e15392 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -196,6 +196,7 @@
     case EOpLogicalOr:  out.debug << "logical-or";   break;
     case EOpLogicalXor: out.debug << "logical-xor"; break;
     case EOpLogicalAnd: out.debug << "logical-and"; break;
+
     default: out.debug << "<unknown op>";
     }
 
@@ -431,10 +432,13 @@
     case EOpMaxInvocationsExclusiveScanNonUniform:  out.debug << "maxInvocationsExclusiveScanNonUniform";   break;
     case EOpAddInvocationsExclusiveScanNonUniform:  out.debug << "addInvocationsExclusiveScanNonUniform";   break;
 
-    case EOpMbcnt:                      out.debug << "mbcnt";                       break;
+    case EOpMbcnt:                  out.debug << "mbcnt";                       break;
 
-    case EOpCubeFaceIndex:          out.debug << "cubeFaceIndex";         break;
-    case EOpCubeFaceCoord:          out.debug << "cubeFaceCoord";         break;
+    case EOpCubeFaceIndex:          out.debug << "cubeFaceIndex";               break;
+    case EOpCubeFaceCoord:          out.debug << "cubeFaceCoord";               break;
+
+    case EOpFragmentMaskFetch:      out.debug << "fragmentMaskFetchAMD";        break;
+    case EOpFragmentFetch:          out.debug << "fragmentFetchAMD";            break;
 
     case EOpConvBoolToFloat16:      out.debug << "Convert bool to float16";     break;
     case EOpConvIntToFloat16:       out.debug << "Convert int to float16";      break;
@@ -488,6 +492,9 @@
     case EOpConvUint16ToUint64:     out.debug << "Convert uint16 to uint64";    break;
 #endif
 
+    case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
+    case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
+
     default: out.debug.message(EPrefixError, "Bad unary op");
     }
 
@@ -788,6 +795,9 @@
     case EOpWorkgroupMemoryBarrier:           out.debug << "WorkgroupMemoryBarrier";           break;
     case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break;
 
+    case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
+    case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
+
     default: out.debug.message(EPrefixError, "Bad aggregation op");
     }
 
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 1758d00..a7d9d91 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -351,16 +351,21 @@
 // Base class for shared TIoMapResolver services, used by several derivations.
 struct TDefaultIoResolverBase : public glslang::TIoMapResolver
 {
-    int baseSamplerBinding;
-    int baseTextureBinding;
-    int baseImageBinding;
-    int baseUboBinding;
-    int baseSsboBinding;
-    int baseUavBinding;
-    std::vector<std::string> baseResourceSetBinding;
-    bool doAutoBindingMapping;
-    bool doAutoLocationMapping;
-    int nextUniformLocation;
+    TDefaultIoResolverBase(const TIntermediate &intermediate) :
+        intermediate(intermediate),
+        nextUniformLocation(0)
+    { }
+
+    int getBaseBinding(TResourceType res, unsigned int set) const {
+        return selectBaseBinding(intermediate.getShiftBinding(res), 
+                                 intermediate.getShiftBindingForSet(res, set));
+    }
+
+    const std::vector<std::string>& getResourceSetBinding() const { return intermediate.getResourceSetBinding(); }
+
+    bool doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); }
+    bool doAutoLocationMapping() const { return intermediate.getAutoMapLocations(); }
+
     typedef std::vector<int> TSlotSet;
     typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
     TSlotSetMap slots;
@@ -411,15 +416,15 @@
             return type.getQualifier().layoutSet;
 
         // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN)
-        if (baseResourceSetBinding.size() == 1)
-            return atoi(baseResourceSetBinding[0].c_str());
+        if (getResourceSetBinding().size() == 1)
+            return atoi(getResourceSetBinding()[0].c_str());
 
         return 0;
     }
     int resolveUniformLocation(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
     {
         // kick out of not doing this
-        if (!doAutoLocationMapping)
+        if (!doAutoLocationMapping())
             return -1;
 
         // no locations added if already present, a built-in variable, a block, or an opaque
@@ -444,7 +449,7 @@
     int resolveInOutLocation(EShLanguage /*stage*/, const char* /*name*/, const TType& type, bool /*is_live*/) override
     {
         // kick out of not doing this
-        if (!doAutoLocationMapping)
+        if (!doAutoLocationMapping())
             return -1;
 
         // no locations added if already present, or a built-in variable
@@ -485,6 +490,14 @@
     void endResolve(EShLanguage) override {}
 
 protected:
+    const TIntermediate &intermediate;
+    int nextUniformLocation;
+
+    // Return descriptor set specific base if there is one, and the generic base otherwise.
+    int selectBaseBinding(int base, int descriptorSetBase) const {
+        return descriptorSetBase != -1 ? descriptorSetBase : base;
+    }
+
     static int getLayoutSet(const glslang::TType& type) {
         if (type.getQualifier().hasSet())
             return type.getQualifier().layoutSet;
@@ -497,7 +510,8 @@
     }
 
     static bool isTextureType(const glslang::TType& type) {
-        return type.getBasicType() == glslang::EbtSampler && type.getSampler().isTexture();
+        return (type.getBasicType() == glslang::EbtSampler && 
+                (type.getSampler().isTexture() || type.getSampler().isSubpass()));
     }
 
     static bool isUboType(const glslang::TType& type) {
@@ -517,6 +531,8 @@
  */
 struct TDefaultIoResolver : public TDefaultIoResolverBase
 {
+    TDefaultIoResolver(const TIntermediate &intermediate) : TDefaultIoResolverBase(intermediate) { }
+
     bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& /*type*/, bool /*is_live*/) override
     {
         return true;
@@ -528,37 +544,37 @@
 
         if (type.getQualifier().hasBinding()) {
             if (isImageType(type))
-                return reserveSlot(set, baseImageBinding + type.getQualifier().layoutBinding);
+                return reserveSlot(set, getBaseBinding(EResImage, set) + type.getQualifier().layoutBinding);
 
             if (isTextureType(type))
-                return reserveSlot(set, baseTextureBinding + type.getQualifier().layoutBinding);
+                return reserveSlot(set, getBaseBinding(EResTexture, set) + type.getQualifier().layoutBinding);
 
             if (isSsboType(type))
-                return reserveSlot(set, baseSsboBinding + type.getQualifier().layoutBinding);
+                return reserveSlot(set, getBaseBinding(EResSsbo, set) + type.getQualifier().layoutBinding);
 
             if (isSamplerType(type))
-                return reserveSlot(set, baseSamplerBinding + type.getQualifier().layoutBinding);
+                return reserveSlot(set, getBaseBinding(EResSampler, set) + type.getQualifier().layoutBinding);
 
             if (isUboType(type))
-                return reserveSlot(set, baseUboBinding + type.getQualifier().layoutBinding);
-        } else if (is_live && doAutoBindingMapping) {
+                return reserveSlot(set, getBaseBinding(EResUbo, set) + type.getQualifier().layoutBinding);
+        } else if (is_live && doAutoBindingMapping()) {
             // find free slot, the caller did make sure it passes all vars with binding
             // first and now all are passed that do not have a binding and needs one
 
             if (isImageType(type))
-                return getFreeSlot(set, baseImageBinding);
+                return getFreeSlot(set, getBaseBinding(EResImage, set));
 
             if (isTextureType(type))
-                return getFreeSlot(set, baseTextureBinding);
+                return getFreeSlot(set, getBaseBinding(EResTexture, set));
 
             if (isSsboType(type))
-                return getFreeSlot(set, baseSsboBinding);
+                return getFreeSlot(set, getBaseBinding(EResSsbo, set));
 
             if (isSamplerType(type))
-                return getFreeSlot(set, baseSamplerBinding);
+                return getFreeSlot(set, getBaseBinding(EResSampler, set));
 
             if (isUboType(type))
-                return getFreeSlot(set, baseUboBinding);
+                return getFreeSlot(set, getBaseBinding(EResUbo, set));
         }
 
         return -1;
@@ -619,6 +635,8 @@
  ********************************************************************************/
 struct TDefaultHlslIoResolver : public TDefaultIoResolverBase
 {
+    TDefaultHlslIoResolver(const TIntermediate &intermediate) : TDefaultIoResolverBase(intermediate) { }
+
     bool validateBinding(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& /*type*/, bool /*is_live*/) override
     {
         return true;
@@ -630,31 +648,31 @@
 
         if (type.getQualifier().hasBinding()) {
             if (isUavType(type))
-                return reserveSlot(set, baseUavBinding + type.getQualifier().layoutBinding);
+                return reserveSlot(set, getBaseBinding(EResUav, set) + type.getQualifier().layoutBinding);
 
             if (isSrvType(type))
-                return reserveSlot(set, baseTextureBinding + type.getQualifier().layoutBinding);
+                return reserveSlot(set, getBaseBinding(EResTexture, set) + type.getQualifier().layoutBinding);
 
             if (isSamplerType(type))
-                return reserveSlot(set, baseSamplerBinding + type.getQualifier().layoutBinding);
+                return reserveSlot(set, getBaseBinding(EResSampler, set) + type.getQualifier().layoutBinding);
 
             if (isUboType(type))
-                return reserveSlot(set, baseUboBinding + type.getQualifier().layoutBinding);
-        } else if (is_live && doAutoBindingMapping) {
+                return reserveSlot(set, getBaseBinding(EResUbo, set) + type.getQualifier().layoutBinding);
+        } else if (is_live && doAutoBindingMapping()) {
             // find free slot, the caller did make sure it passes all vars with binding
             // first and now all are passed that do not have a binding and needs one
 
             if (isUavType(type))
-                return getFreeSlot(set, baseUavBinding);
+                return getFreeSlot(set, getBaseBinding(EResUav, set));
 
             if (isSrvType(type))
-                return getFreeSlot(set, baseTextureBinding);
+                return getFreeSlot(set, getBaseBinding(EResTexture, set));
 
             if (isSamplerType(type))
-                return getFreeSlot(set, baseSamplerBinding);
+                return getFreeSlot(set, getBaseBinding(EResSampler, set));
 
             if (isUboType(type))
-                return getFreeSlot(set, baseUboBinding);
+                return getFreeSlot(set, getBaseBinding(EResUbo, set));
         }
 
         return -1;
@@ -683,17 +701,17 @@
 // Returns false if the input is too malformed to do this.
 bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSink &infoSink, TIoMapResolver *resolver)
 {
-    // Trivial return if there is nothing to do.
-    if (intermediate.getShiftSamplerBinding() == 0 &&
-        intermediate.getShiftTextureBinding() == 0 &&
-        intermediate.getShiftImageBinding() == 0 &&
-        intermediate.getShiftUboBinding() == 0 &&
-        intermediate.getShiftSsboBinding() == 0 &&
-        intermediate.getShiftUavBinding() == 0 &&
-        intermediate.getResourceSetBinding().empty() &&
-        intermediate.getAutoMapBindings() == false &&
-        intermediate.getAutoMapLocations() == false &&
-        resolver == nullptr)
+    bool somethingToDo = !intermediate.getResourceSetBinding().empty() ||
+        intermediate.getAutoMapBindings() ||
+        intermediate.getAutoMapLocations();
+
+    for (int res = 0; res < EResCount; ++res) {
+        somethingToDo = somethingToDo ||
+            (intermediate.getShiftBinding(TResourceType(res)) != 0) ||
+            intermediate.hasShiftBindingForSet(TResourceType(res));
+    }
+
+    if (!somethingToDo && resolver == nullptr)
         return true;
 
     if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive())
@@ -704,30 +722,15 @@
         return false;
 
     // if no resolver is provided, use the default resolver with the given shifts and auto map settings
-    TDefaultIoResolver defaultResolver;
-    TDefaultHlslIoResolver defaultHlslResolver;
+    TDefaultIoResolver defaultResolver(intermediate);
+    TDefaultHlslIoResolver defaultHlslResolver(intermediate);
 
     if (resolver == nullptr) {
-        TDefaultIoResolverBase* resolverBase;
-
         // TODO: use a passed in IO mapper for this
         if (intermediate.usingHlslIoMapping())
-            resolverBase = &defaultHlslResolver;
+            resolver = &defaultHlslResolver;
         else
-            resolverBase = &defaultResolver;
-
-        resolverBase->baseSamplerBinding = intermediate.getShiftSamplerBinding();
-        resolverBase->baseTextureBinding = intermediate.getShiftTextureBinding();
-        resolverBase->baseImageBinding = intermediate.getShiftImageBinding();
-        resolverBase->baseUboBinding = intermediate.getShiftUboBinding();
-        resolverBase->baseSsboBinding = intermediate.getShiftSsboBinding();
-        resolverBase->baseUavBinding = intermediate.getShiftUavBinding();
-        resolverBase->baseResourceSetBinding = intermediate.getResourceSetBinding();
-        resolverBase->doAutoBindingMapping = intermediate.getAutoMapBindings();
-        resolverBase->doAutoLocationMapping = intermediate.getAutoMapLocations();
-        resolverBase->nextUniformLocation = 0;
-
-        resolver = resolverBase;
+            resolver = &defaultResolver;
     }
 
     TVarLiveMap inVarMap, outVarMap, uniformVarMap;
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 9f6e3da..8495395 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -42,6 +42,7 @@
 
 #include <algorithm>
 #include <set>
+#include <array>
 
 class TInfoSink;
 
@@ -221,12 +222,6 @@
         layoutOverrideCoverage(false),
         geoPassthroughEXT(false),
 #endif
-        shiftSamplerBinding(0),
-        shiftTextureBinding(0),
-        shiftImageBinding(0),
-        shiftUboBinding(0),
-        shiftSsboBinding(0),
-        shiftUavBinding(0),
         autoMapBindings(false),
         autoMapLocations(false),
         flattenUniformArrays(false),
@@ -234,7 +229,8 @@
         hlslOffsets(false),
         useStorageBuffer(false),
         hlslIoMapping(false),
-        textureSamplerTransformMode(EShTexSampTransKeep)
+        textureSamplerTransformMode(EShTexSampTransKeep),
+        needToLegalize(false)
     {
         localSize[0] = 1;
         localSize[1] = 1;
@@ -243,6 +239,8 @@
         localSizeSpecId[1] = TQualifier::layoutNotSet;
         localSizeSpecId[2] = TQualifier::layoutNotSet;
         xfbBuffers.resize(TQualifier::layoutXfbBufferEnd);
+
+        shiftBinding.fill(0);
     }
     void setLimits(const TBuiltInResource& r) { resources = r; }
 
@@ -262,42 +260,39 @@
     const std::string& getEntryPointName() const { return entryPointName; }
     const std::string& getEntryPointMangledName() const { return entryPointMangledName; }
 
-    void setShiftSamplerBinding(unsigned int shift)
+    void setShiftBinding(TResourceType res, unsigned int shift)
     {
-        shiftSamplerBinding = shift;
-        processes.addIfNonZero("shift-sampler-binding", shift);
+        shiftBinding[res] = shift;
+
+        const char* name = getResourceName(res);
+        if (name != nullptr)
+            processes.addIfNonZero(name, shift);
     }
-    unsigned int getShiftSamplerBinding() const { return shiftSamplerBinding; }
-    void setShiftTextureBinding(unsigned int shift)
+
+    unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; }
+
+    void setShiftBindingForSet(TResourceType res, unsigned int set, unsigned int shift)
     {
-        shiftTextureBinding = shift;
-        processes.addIfNonZero("shift-texture-binding", shift);
+        if (shift == 0) // ignore if there's no shift: it's a no-op.
+            return;
+
+        shiftBindingForSet[res][set] = shift;
+
+        const char* name = getResourceName(res);
+        if (name != nullptr) {
+            processes.addProcess(name);
+            processes.addArgument(set);
+            processes.addArgument(shift);
+        }
     }
-    unsigned int getShiftTextureBinding() const { return shiftTextureBinding; }
-    void setShiftImageBinding(unsigned int shift)
+
+    int getShiftBindingForSet(TResourceType res, unsigned int set) const
     {
-        shiftImageBinding = shift;
-        processes.addIfNonZero("shift-image-binding", shift);
+        const auto shift = shiftBindingForSet[res].find(set);
+        return shift == shiftBindingForSet[res].end() ? -1 : shift->second;
     }
-    unsigned int getShiftImageBinding() const { return shiftImageBinding; }
-    void setShiftUboBinding(unsigned int shift)
-    {
-        shiftUboBinding = shift;
-        processes.addIfNonZero("shift-UBO-binding", shift);
-    }
-    unsigned int getShiftUboBinding() const { return shiftUboBinding; }
-    void setShiftSsboBinding(unsigned int shift)
-    {
-        shiftSsboBinding = shift;
-        processes.addIfNonZero("shift-ssbo-binding", shift);
-    }
-    unsigned int getShiftSsboBinding() const { return shiftSsboBinding; }
-    void setShiftUavBinding(unsigned int shift)
-    {
-        shiftUavBinding = shift;
-        processes.addIfNonZero("shift-uav-binding", shift);
-    }
-    unsigned int getShiftUavBinding() const { return shiftUavBinding; }
+    bool hasShiftBindingForSet(TResourceType res) const { return !shiftBindingForSet[res].empty(); }
+
     void setResourceSetBinding(const std::vector<std::string>& shift)
     {
         resourceSetBinding = shift;
@@ -610,6 +605,9 @@
     void addProcessArgument(const std::string& arg) { processes.addArgument(arg); }
     const std::vector<std::string>& getProcesses() const { return processes.getProcesses(); }
 
+    void setNeedsLegalization() { needToLegalize = true; }
+    bool needsLegalization() const { return needToLegalize; }
+
     const char* const implicitThisName;
 
 protected:
@@ -634,6 +632,7 @@
     void pushSelector(TIntermSequence&, const TMatrixSelector&, const TSourceLoc&);
     bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
     void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
+    static const char* getResourceName(TResourceType);
 
     const EShLanguage language;  // stage, known at construction time
     EShSource source;            // source language, known a bit later
@@ -674,12 +673,12 @@
     bool geoPassthroughEXT;
 #endif
 
-    unsigned int shiftSamplerBinding;
-    unsigned int shiftTextureBinding;
-    unsigned int shiftImageBinding;
-    unsigned int shiftUboBinding;
-    unsigned int shiftSsboBinding;
-    unsigned int shiftUavBinding;
+    // Base shift values
+    std::array<unsigned int, EResCount> shiftBinding;
+
+    // Per-descriptor-set shift values
+    std::array<std::map<int, int>, EResCount>  shiftBindingForSet;
+
     std::vector<std::string> resourceSetBinding;
     bool autoMapBindings;
     bool autoMapLocations;
@@ -708,6 +707,8 @@
     // for OpModuleProcessed, or equivalent
     TProcesses processes;
 
+    bool needToLegalize;
+
 private:
     void operator=(TIntermediate&); // prevent assignments
 };
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index ecda34c..aeb42a0 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -84,6 +84,7 @@
 #include <cstdlib>
 #include <cstring>
 #include <cctype>
+#include <climits>
 
 #include "PpContext.h"
 #include "PpTokens.h"
@@ -241,15 +242,20 @@
         int nextAtom = atomStrings.getAtom(ppToken->name);
         if (nextAtom == PpAtomIf || nextAtom == PpAtomIfdef || nextAtom == PpAtomIfndef) {
             depth++;
-            ifdepth++;
-            elsetracker++;
+            if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) {
+                parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if/#ifdef/#ifndef", "");
+                return EndOfInput;
+            } else {
+                ifdepth++;
+                elsetracker++;
+            }
         } else if (nextAtom == PpAtomEndif) {
             token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken));
             elseSeen[elsetracker] = false;
             --elsetracker;
             if (depth == 0) {
                 // found the #endif we are looking for
-                if (ifdepth)
+                if (ifdepth > 0)
                     --ifdepth;
                 break;
             }
@@ -266,7 +272,7 @@
                     parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
                 /* we decrement ifdepth here, because CPPif will increment
                 * it and we really want to leave it alone */
-                if (ifdepth) {
+                if (ifdepth > 0) {
                     --ifdepth;
                     elseSeen[elsetracker] = false;
                     --elsetracker;
@@ -345,8 +351,8 @@
     int op_add(int a, int b) { return a + b; }
     int op_sub(int a, int b) { return a - b; }
     int op_mul(int a, int b) { return a * b; }
-    int op_div(int a, int b) { return a / b; }
-    int op_mod(int a, int b) { return a % b; }
+    int op_div(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a / b; }
+    int op_mod(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a % b; }
     int op_pos(int a) { return a; }
     int op_neg(int a) { return -a; }
     int op_cmpl(int a) { return ~a; }
@@ -536,11 +542,12 @@
 int TPpContext::CPPif(TPpToken* ppToken)
 {
     int token = scanToken(ppToken);
-    elsetracker++;
-    ifdepth++;
-    if (ifdepth > maxIfNesting) {
+    if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) {
         parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if", "");
-        return 0;
+        return EndOfInput;
+    } else {
+        elsetracker++;
+        ifdepth++;
     }
     int res = 0;
     bool err = false;
@@ -556,11 +563,14 @@
 int TPpContext::CPPifdef(int defined, TPpToken* ppToken)
 {
     int token = scanToken(ppToken);
-    if (++ifdepth > maxIfNesting) {
+    if (ifdepth > maxIfNesting || elsetracker > maxIfNesting) {
         parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#ifdef", "");
-        return 0;
+        return EndOfInput;
+    } else {
+        elsetracker++;
+        ifdepth++;
     }
-    elsetracker++;
+
     if (token != PpAtomIdentifier) {
         if (defined)
             parseContext.ppError(ppToken->loc, "must be followed by macro name", "#ifdef", "");
@@ -886,16 +896,16 @@
             token = CPPdefine(ppToken);
             break;
         case PpAtomElse:
-            if (elsetracker[elseSeen])
+            if (elseSeen[elsetracker])
                 parseContext.ppError(ppToken->loc, "#else after #else", "#else", "");
-            elsetracker[elseSeen] = true;
-            if (! ifdepth)
+            elseSeen[elsetracker] = true;
+            if (ifdepth == 0)
                 parseContext.ppError(ppToken->loc, "mismatched statements", "#else", "");
             token = extraTokenCheck(PpAtomElse, ppToken, scanToken(ppToken));
             token = CPPelse(0, ppToken);
             break;
         case PpAtomElif:
-            if (! ifdepth)
+            if (ifdepth == 0)
                 parseContext.ppError(ppToken->loc, "mismatched statements", "#elif", "");
             if (elseSeen[elsetracker])
                 parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
@@ -906,7 +916,7 @@
             token = CPPelse(0, ppToken);
             break;
         case PpAtomEndif:
-            if (! ifdepth)
+            if (ifdepth == 0)
                 parseContext.ppError(ppToken->loc, "mismatched statements", "#endif", "");
             else {
                 elseSeen[elsetracker] = false;
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h
index de48e27..854bbba 100644
--- a/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -309,7 +309,7 @@
     bool endOfReplacementList() { return inputStack.empty() || inputStack.back()->endOfReplacementList(); }
     bool isMacroInput() { return inputStack.size() > 0 && inputStack.back()->isMacroInput(); }
 
-    static const int maxIfNesting = 64;
+    static const int maxIfNesting = 65;
 
     int ifdepth;                  // current #if-#else-#endif nesting in the cpp.c file (pre-processor)
     bool elseSeen[maxIfNesting];  // Keep a track of whether an else has been seen at a particular depth
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index fa01549..b58bbee 100644
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -128,7 +128,7 @@
         ch = getChar();
 
         // 1.#INF or -1.#INF
-        if (ch == '#') {
+        if (parseContext.intermediate.getSource() == EShSourceHlsl && ch == '#') {
             if ((len <  2) ||
                 (len == 2 && ppToken->name[0] != '1') ||
                 (len == 3 && ppToken->name[1] != '1' && !(ppToken->name[0] == '-' || ppToken->name[0] == '+')) ||
@@ -420,7 +420,7 @@
 
                     ival = 0;
                     do {
-                        if (ival <= 0x0fffffffu || (enableInt64 && ival <= 0x0fffffffffffffffull)) {
+                        if (len < MaxTokenLength && (ival <= 0x0fffffffu || (enableInt64 && ival <= 0x0fffffffffffffffull))) {
                             ppToken->name[len++] = (char)ch;
                             if (ch >= '0' && ch <= '9') {
                                 ii = ch - '0';
@@ -433,7 +433,10 @@
                             ival = (ival << 4) | ii;
                         } else {
                             if (! AlreadyComplained) {
-                                pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
+                                if(len < MaxTokenLength)
+                                    pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
+                                else
+                                    pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too long", "", "");
                                 AlreadyComplained = 1;
                             }
                             ival = 0xffffffffffffffffull;
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index b36e384..f0990ad 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -324,6 +324,17 @@
 // Call once per process to tear down everything
 void FinalizeProcess();
 
+// Resource type for IO resolver
+enum TResourceType {
+    EResSampler,
+    EResTexture,
+    EResImage,
+    EResUbo,
+    EResSsbo,
+    EResUav,
+    EResCount
+};
+
 // Make one TShader per shader that you will link into a program.  Then provide
 // the shader through setStrings() or setStringsWithLengths(), then call parse(),
 // then query the info logs.
@@ -347,13 +358,17 @@
     void setEntryPoint(const char* entryPoint);
     void setSourceEntryPoint(const char* sourceEntryPointName);
     void addProcesses(const std::vector<std::string>&);
-    void setShiftSamplerBinding(unsigned int base);
-    void setShiftTextureBinding(unsigned int base);
-    void setShiftImageBinding(unsigned int base);
-    void setShiftUboBinding(unsigned int base);
-    void setShiftUavBinding(unsigned int base);
-    void setShiftCbufferBinding(unsigned int base); // synonym for setShiftUboBinding
-    void setShiftSsboBinding(unsigned int base);
+
+    // IO resolver binding data: see comments in ShaderLang.cpp
+    void setShiftBinding(TResourceType res, unsigned int base);
+    void setShiftSamplerBinding(unsigned int base);  // DEPRECATED: use setShiftBinding
+    void setShiftTextureBinding(unsigned int base);  // DEPRECATED: use setShiftBinding
+    void setShiftImageBinding(unsigned int base);    // DEPRECATED: use setShiftBinding
+    void setShiftUboBinding(unsigned int base);      // DEPRECATED: use setShiftBinding
+    void setShiftUavBinding(unsigned int base);      // DEPRECATED: use setShiftBinding
+    void setShiftCbufferBinding(unsigned int base);  // synonym for setShiftUboBinding
+    void setShiftSsboBinding(unsigned int base);     // DEPRECATED: use setShiftBinding
+    void setShiftBindingForSet(TResourceType res, unsigned int set, unsigned int base);
     void setResourceSetBinding(const std::vector<std::string>& base);
     void setAutoMapBindings(bool map);
     void setAutoMapLocations(bool map);
@@ -493,8 +508,8 @@
 
     const char* getInfoLog();
     const char* getInfoDebugLog();
-
     EShLanguage getStage() const { return stage; }
+    TIntermediate* getIntermediate() const { return intermediate; }
 
 protected:
     TPoolAllocator* pool;
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index ed6a13e..14545d1 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -62,6 +62,7 @@
         "versionsErrors.frag",
         "versionsErrors.vert",
         "100.frag",
+        "100samplerExternal.frag",
         "120.vert",
         "120.frag",
         "130.vert",
@@ -77,10 +78,12 @@
         "matrixError.vert",
         "cppSimple.vert",
         "cppIndent.vert",
+        "cppIntMinOverNegativeOne.frag",
         "cppNest.vert",
         "cppBad.vert",
         "cppBad2.vert",
         "cppComplexExpr.vert",
+        "cppDeepNest.frag",
         "badChars.frag",
         "pointCoord.frag",
         "array.frag",
@@ -93,6 +96,7 @@
         "300layout.frag",
         "300operations.frag",
         "300block.frag",
+        "300samplerExternal.frag",
         "310.comp",
         "310.vert",
         "310.geom",
@@ -155,6 +159,7 @@
         "460.vert",
         "dce.frag",
         "atomic_uint.frag",
+        "implicitInnerAtomicUint.frag",
         "aggOps.frag",
         "always-discard.frag",
         "always-discard2.frag",
@@ -179,12 +184,14 @@
         "matrix2.frag",
         "newTexture.frag",
         "Operations.frag",
+        "overlongLiteral.frag",
         "prepost.frag",
         "simpleFunctionCall.frag",
         "structAssignment.frag",
         "structDeref.frag",
         "structure.frag",
         "swizzle.frag",
+        "invalidSwizzle.vert",
         "syntaxError.frag",
         "test.frag",
         "texture.frag",
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 4079d83..9d97fdf 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -59,9 +59,10 @@
 
 using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslLegalizeTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 
-// Compiling HLSL to SPIR-V under Vulkan semantics. Expected to successfully
-// generate both AST and SPIR-V.
+// Compiling HLSL to pre-legalized SPIR-V under Vulkan semantics. Expected
+// to successfully generate both AST and SPIR-V.
 TEST_P(HlslCompileTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
@@ -76,6 +77,16 @@
                                            Target::BothASTAndSpv, GetParam().entryPoint);
 }
 
+// Compiling HLSL to legal SPIR-V under Vulkan semantics. Expected to
+// successfully generate SPIR-V.
+TEST_P(HlslLegalizeTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+                            Source::HLSL, Semantics::Vulkan,
+                            Target::Spv, GetParam().entryPoint,
+                            "/baseLegalResults/", false);
+}
+
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
     ToSpirv, HlslCompileTest,
@@ -88,6 +99,8 @@
         {"hlsl.assoc.frag", "PixelShaderFunction"},
         {"hlsl.attribute.frag", "PixelShaderFunction"},
         {"hlsl.attribute.expression.comp", "main"},
+        {"hlsl.attributeC11.frag", "main"},
+        {"hlsl.attributeGlobalBuffer.frag", "main"},
         {"hlsl.basic.comp", "main"},
         {"hlsl.basic.geom", "main"},
         {"hlsl.boolConv.vert", "main"},
@@ -141,6 +154,8 @@
         {"hlsl.flattenOpaque.frag", "main"},
         {"hlsl.flattenOpaqueInit.vert", "main"},
         {"hlsl.flattenOpaqueInitMix.vert", "main"},
+        {"hlsl.flattenSubset.frag", "main"},
+        {"hlsl.flattenSubset2.frag", "main"},
         {"hlsl.forLoop.frag", "PixelShaderFunction"},
         {"hlsl.gather.array.dx10.frag", "main"},
         {"hlsl.gather.basic.dx10.frag", "main"},
@@ -164,6 +179,8 @@
         {"hlsl.hull.1.tesc", "main"},
         {"hlsl.hull.2.tesc", "main"},
         {"hlsl.hull.3.tesc", "main"},
+        {"hlsl.hull.4.tesc", "main"},
+        {"hlsl.hull.5.tesc", "main"},
         {"hlsl.hull.void.tesc", "main"},
         {"hlsl.hull.ctrlpt-1.tesc", "main"},
         {"hlsl.hull.ctrlpt-2.tesc", "main"},
@@ -203,6 +220,7 @@
         {"hlsl.load.rwtexture.array.dx10.frag", "main"},
         {"hlsl.load.offset.dx10.frag", "main"},
         {"hlsl.load.offsetarray.dx10.frag", "main"},
+        {"hlsl.localStructuredBuffer.comp", "main"},
         {"hlsl.logical.binary.frag", "main"},
         {"hlsl.logical.binary.vec.frag", "main"},
         {"hlsl.logicalConvert.frag", "main"},
@@ -226,9 +244,11 @@
         {"hlsl.numericsuffixes.frag", "main"},
         {"hlsl.numthreads.comp", "main_aux1"},
         {"hlsl.overload.frag", "PixelShaderFunction"},
+        {"hlsl.opaque-type-bug.frag", "main"},
         {"hlsl.params.default.frag", "main"},
         {"hlsl.params.default.negative.frag", "main"},
         {"hlsl.partialInit.frag", "PixelShaderFunction"},
+        {"hlsl.partialFlattenLocal.vert", "main"},
         {"hlsl.pp.vert", "main"},
         {"hlsl.pp.line.frag", "main"},
         {"hlsl.precise.frag", "main"},
@@ -252,6 +272,7 @@
         {"hlsl.samplebias.offsetarray.dx10.frag", "main"},
         {"hlsl.samplecmp.array.dx10.frag", "main"},
         {"hlsl.samplecmp.basic.dx10.frag", "main"},
+        {"hlsl.samplecmp.dualmode.frag", "main"},
         {"hlsl.samplecmp.offset.dx10.frag", "main"},
         {"hlsl.samplecmp.offsetarray.dx10.frag", "main"},
         {"hlsl.samplecmp.negative.frag", "main"},
@@ -303,6 +324,7 @@
         {"hlsl.structin.vert", "main"},
         {"hlsl.structIoFourWay.frag", "main"},
         {"hlsl.structStructName.frag", "main"},
+        {"hlsl.subpass.frag", "main"},
         {"hlsl.synthesizeInput.frag", "main"},
         {"hlsl.texture.struct.frag", "main"},
         {"hlsl.texture.subvec4.frag", "main"},
@@ -347,10 +369,27 @@
     ToSpirv, HlslCompileAndFlattenTest,
     ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
         {"hlsl.array.flatten.frag", "main"},
+        {"hlsl.partialFlattenMixed.vert", "main"},
     }),
     FileNameAsCustomTestSuffix
 );
-
 // clang-format on
+
+#ifdef ENABLE_OPT
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+    ToSpirv, HlslLegalizeTest,
+    ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+        {"hlsl.aliasOpaque.frag", "main"},
+        {"hlsl.flattenOpaque.frag", "main"},
+        {"hlsl.flattenOpaqueInit.vert", "main"},
+        {"hlsl.flattenOpaqueInitMix.vert", "main"},
+        {"hlsl.flattenSubset.frag", "main"}
+    }),
+    FileNameAsCustomTestSuffix
+);
+// clang-format on
+#endif
+
 }  // anonymous namespace
 }  // namespace glslangtest
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index ef2ef34..9e1f068 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -277,6 +277,7 @@
         "spv.Operations.frag",
         "spv.paramMemory.frag",
         "spv.precision.frag",
+        "spv.precisionNonESSamp.frag",
         "spv.prepost.frag",
         "spv.qualifiers.vert",
         "spv.sampleMaskOverrideCoverage.frag",
@@ -334,6 +335,7 @@
         { "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false },
         { "spv.register.noautoassign.frag", "main_ep", 5, 10, 0, 15, 30, false, false },
         { "spv.register.autoassign-2.frag", "main", 5, 10, 0, 15, 30, true, true },
+        { "spv.register.subpass.frag", "main", 0, 20, 0, 0, 0, true, true },
         { "spv.buffer.autoassign.frag", "main", 5, 10, 0, 15, 30, true, true },
         { "spv.ssbo.autoassign.frag", "main", 5, 10, 0, 15, 30, true, true },
         { "spv.ssboAlias.frag", "main", 0, 0, 0, 0, 83, true, false },
@@ -409,7 +411,8 @@
         "spv.imageLoadStoreLod.frag",
         "spv.int16.frag",
         "spv.shaderBallotAMD.comp",
-        "spv.textureGatherBiasLod.frag"
+        "spv.shaderFragMaskAMD.frag",
+        "spv.textureGatherBiasLod.frag",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -427,6 +430,7 @@
     "spv.stereoViewRendering.tesc",
     "spv.multiviewPerViewAttributes.vert",
     "spv.multiviewPerViewAttributes.tesc",
+    "spv.atomicInt64.comp",
 })),
 FileNameAsCustomTestSuffix
 );
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index a503b5f..2dac99b 100644
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -198,7 +198,8 @@
             const std::string shaderName, const std::string& code,
             const std::string& entryPointName, EShMessages controls,
             bool flattenUniformArrays = false,
-            EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep)
+            EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep,
+            bool disableOptimizer = true)
     {
         const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
 
@@ -217,8 +218,10 @@
 
         if (success && (controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary;
+            glslang::SpvOptions options;
+            options.disableOptimizer = disableOptimizer;
             glslang::GlslangToSpv(*program.getIntermediate(kind),
-                                  spirv_binary, &logger);
+                                  spirv_binary, &logger, &options);
 
             std::ostringstream disassembly_stream;
             spv::Parameterize();
@@ -381,18 +384,20 @@
                                  Source source,
                                  Semantics semantics,
                                  Target target,
-                                 const std::string& entryPointName="")
+                                 const std::string& entryPointName="",
+                                 const std::string& baseDir="/baseResults/",
+                                 const bool disableOptimizer = true)
     {
         const std::string inputFname = testDir + "/" + testName;
         const std::string expectedOutputFname =
-            testDir + "/baseResults/" + testName + ".out";
+            testDir + baseDir + testName + ".out";
         std::string input, expectedOutput;
 
         tryLoadFile(inputFname, "input", &input);
         tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, false, EShTexSampTransKeep, disableOptimizer);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
diff --git a/hlsl/hlslAttributes.cpp b/hlsl/hlslAttributes.cpp
index 14f7a7b..fccf6c1 100644
--- a/hlsl/hlslAttributes.cpp
+++ b/hlsl/hlslAttributes.cpp
@@ -36,15 +36,34 @@
 #include "hlslAttributes.h"
 #include <cstdlib>
 #include <cctype>
+#include <algorithm>
 
 namespace glslang {
     // Map the given string to an attribute enum from TAttributeType,
     // or EatNone if invalid.
-    TAttributeType TAttributeMap::attributeFromName(const TString& name)
+    TAttributeType TAttributeMap::attributeFromName(const TString& nameSpace, const TString& name)
     {
         // These are case insensitive.
         TString lowername(name);
         std::transform(lowername.begin(), lowername.end(), lowername.begin(), ::tolower);
+        TString lowernameSpace(nameSpace);
+        std::transform(lowernameSpace.begin(), lowernameSpace.end(), lowernameSpace.begin(), ::tolower);
+
+        // handle names within a namespace
+
+        if (lowernameSpace == "vk") {
+            if (lowername == "input_attachment_index")
+                return EatInputAttachment;
+            else if (lowername == "location")
+                return EatLocation;
+            else if (lowername == "binding")
+                return EatBinding;
+            else if (lowername == "global_cbuffer_binding")
+                return EatGlobalBinding;
+        } else if (lowernameSpace.size() > 0)
+            return EatNone;
+
+        // handle names with no namespace
 
         if (lowername == "allow_uav_condition")
             return EatAllow_uav_condition;
@@ -88,12 +107,12 @@
 
     // Look up entry, inserting if it's not there, and if name is a valid attribute name
     // as known by attributeFromName.
-    TAttributeType TAttributeMap::setAttribute(const TString* name, TIntermAggregate* value)
+    TAttributeType TAttributeMap::setAttribute(const TString& nameSpace, const TString* name, TIntermAggregate* value)
     {
         if (name == nullptr)
             return EatNone;
 
-        const TAttributeType attr = attributeFromName(*name);
+        const TAttributeType attr = attributeFromName(nameSpace, *name);
 
         if (attr != EatNone)
             attributes[attr] = value;
@@ -115,4 +134,51 @@
         return attributes.find(attr) != attributes.end();
     }
 
+    // extract integers out of attribute arguments stored in attribute aggregate
+    bool TAttributeMap::getInt(TAttributeType attr, int& value, int argNum) const 
+    {
+        const TConstUnion* intConst = getConstUnion(attr, EbtInt, argNum);
+
+        if (intConst == nullptr)
+            return false;
+
+        value = intConst->getIConst();
+        return true;
+    };
+
+    // extract strings out of attribute arguments stored in attribute aggregate.
+    // convert to lower case if converToLower is true (for case-insensitive compare convenience)
+    bool TAttributeMap::getString(TAttributeType attr, TString& value, int argNum, bool convertToLower) const 
+    {
+        const TConstUnion* stringConst = getConstUnion(attr, EbtString, argNum);
+
+        if (stringConst == nullptr)
+            return false;
+
+        value = *stringConst->getSConst();
+
+        // Convenience.
+        if (convertToLower)
+            std::transform(value.begin(), value.end(), value.begin(), ::tolower);
+
+        return true;
+    };
+
+    // Helper to get attribute const union.  Returns nullptr on failure.
+    const TConstUnion* TAttributeMap::getConstUnion(TAttributeType attr, TBasicType basicType, int argNum) const
+    {
+        const TIntermAggregate* attrAgg = (*this)[attr];
+        if (attrAgg == nullptr)
+            return nullptr;
+
+        if (argNum >= int(attrAgg->getSequence().size()))
+            return nullptr;
+
+        const TConstUnion* constVal = &attrAgg->getSequence()[argNum]->getAsConstantUnion()->getConstArray()[0];
+        if (constVal == nullptr || constVal->getType() != basicType)
+            return nullptr;
+        
+        return constVal;
+    }
+
 } // end namespace glslang
diff --git a/hlsl/hlslAttributes.h b/hlsl/hlslAttributes.h
index b32a53c..1fdb4ba 100644
--- a/hlsl/hlslAttributes.h
+++ b/hlsl/hlslAttributes.h
@@ -63,6 +63,10 @@
         EatPatchSize,
         EatUnroll,
         EatLoop,
+        EatBinding,
+        EatGlobalBinding,
+        EatLocation,
+        EatInputAttachment
     };
 }
 
@@ -82,7 +86,7 @@
     public:
         // Search for and potentially add the attribute into the map.  Return the
         // attribute type enum for it, if found, else EatNone.
-        TAttributeType setAttribute(const TString* name, TIntermAggregate* value);
+        TAttributeType setAttribute(const TString& nameSpace, const TString* name, TIntermAggregate* value);
 
         // Const lookup: search for (but do not modify) the attribute in the map.
         const TIntermAggregate* operator[](TAttributeType) const;
@@ -90,9 +94,18 @@
         // True if entry exists in map (even if value is nullptr)
         bool contains(TAttributeType) const;
 
+        // Obtain attribute as integer
+        bool getInt(TAttributeType attr, int& value, int argNum = 0) const;
+
+        // Obtain attribute as string, with optional to-lower transform
+        bool getString(TAttributeType attr, TString& value, int argNum = 0, bool convertToLower = true) const;
+
     protected:
+        // Helper to get attribute const union
+        const TConstUnion* getConstUnion(TAttributeType attr, TBasicType, int argNum) const;
+
         // Find an attribute enum given its name.
-        static TAttributeType attributeFromName(const TString&);
+        static TAttributeType attributeFromName(const TString& nameSpace, const TString& name);
 
         std::unordered_map<TAttributeType, TIntermAggregate*> attributes;
     };
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 2f687c5..515922e 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -295,13 +295,16 @@
 }
 
 // declaration
+//      : attributes attributed_declaration
+//      | NAMESPACE IDENTIFIER LEFT_BRACE declaration_list RIGHT_BRACE
+//
+// attributed_declaration
 //      : sampler_declaration_dx9 post_decls SEMICOLON
 //      | fully_specified_type                           // for cbuffer/tbuffer
 //      | fully_specified_type declarator_list SEMICOLON // for non cbuffer/tbuffer
 //      | fully_specified_type identifier function_parameters post_decls compound_statement  // function definition
 //      | fully_specified_type identifier sampler_state post_decls compound_statement        // sampler definition
 //      | typedef declaration
-//      | NAMESPACE IDENTIFIER LEFT_BRACE declaration_list RIGHT_BRACE
 //
 // declarator_list
 //      : declarator COMMA declarator COMMA declarator...  // zero or more declarators
@@ -376,6 +379,8 @@
     if (! acceptFullySpecifiedType(declaredType, nodeList))
         return false;
 
+    parseContext.transferTypeAttributes(declarator.attributes, declaredType);
+
     // cbuffer and tbuffer end with the closing '}'.
     // No semicolon is included.
     if (forbidDeclarators)
@@ -387,7 +392,7 @@
     HlslToken idToken;
     TIntermAggregate* initializers = nullptr;
     while (acceptIdentifier(idToken)) {
-        const TString *fullName = idToken.string;
+        TString *fullName = idToken.string;
         if (parseContext.symbolTable.atGlobalLevel())
             parseContext.getFullNamespaceName(fullName);
         if (peekTokenClass(EHTokLeftParen)) {
@@ -1083,6 +1088,69 @@
     return true;
 }
 
+// subpass input type
+//      : SUBPASSINPUT
+//      | SUBPASSINPUT VECTOR LEFT_ANGLE template_type RIGHT_ANGLE
+//      | SUBPASSINPUTMS
+//      | SUBPASSINPUTMS VECTOR LEFT_ANGLE template_type RIGHT_ANGLE
+bool HlslGrammar::acceptSubpassInputType(TType& type)
+{
+    // read subpass type
+    const EHlslTokenClass subpassInputType = peek();
+
+    bool multisample;
+
+    switch (subpassInputType) {
+    case EHTokSubpassInput:   multisample = false; break;
+    case EHTokSubpassInputMS: multisample = true;  break;
+    default:
+        return false;  // not a subpass input declaration
+    }
+
+    advanceToken();  // consume the sampler type keyword
+
+    TType subpassType(EbtFloat, EvqUniform, 4); // default type is float4
+
+    if (acceptTokenClass(EHTokLeftAngle)) {
+        if (! acceptType(subpassType)) {
+            expected("scalar or vector type");
+            return false;
+        }
+
+        const TBasicType basicRetType = subpassType.getBasicType() ;
+
+        switch (basicRetType) {
+        case EbtFloat:
+        case EbtUint:
+        case EbtInt:
+        case EbtStruct:
+            break;
+        default:
+            unimplemented("basic type in subpass input");
+            return false;
+        }
+
+        if (! acceptTokenClass(EHTokRightAngle)) {
+            expected("right angle bracket");
+            return false;
+        }
+    }
+
+    const TBasicType subpassBasicType = subpassType.isStruct() ? (*subpassType.getStruct())[0].type->getBasicType()
+        : subpassType.getBasicType();
+
+    TSampler sampler;
+    sampler.setSubpass(subpassBasicType, multisample);
+
+    // Remember the declared return type.  Function returns false on error.
+    if (!parseContext.setTextureReturnType(sampler, subpassType, token.loc))
+        return false;
+
+    type.shallowCopy(TType(sampler, EvqUniform));
+
+    return true;
+}
+
 // sampler_type
 //      : SAMPLER
 //      | SAMPLER1D
@@ -1352,6 +1420,11 @@
         return acceptSamplerType(type);
         break;
 
+    case EHTokSubpassInput:           // fall through
+    case EHTokSubpassInputMS:         // ...
+        return acceptSubpassInputType(type);
+        break;
+
     case EHTokBuffer:                 // fall through
     case EHTokTexture1d:              // ...
     case EHTokTexture1darray:         // ...
@@ -2263,12 +2336,12 @@
 //
 // Expects type to have EvqGlobal for a static member and
 // EvqTemporary for non-static member.
-bool HlslGrammar::acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType& type, const TString& memberName,
+bool HlslGrammar::acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType& type, TString& memberName,
                                                  TFunctionDeclarator& declarator)
 {
     bool accepted = false;
 
-    const TString* functionName = &memberName;
+    TString* functionName = &memberName;
     parseContext.getFullNamespaceName(functionName);
     declarator.function = new TFunction(functionName, type);
     if (type.getQualifier().storage == EvqTemporary)
@@ -2353,6 +2426,9 @@
         node = parseContext.handleFunctionCall(token.loc, constructor, node);
     }
 
+    if (node == nullptr)
+        return false;
+
     // If this is simply a constant, we can use it directly.
     if (node->getAsConstantUnion())
         return true;
@@ -2371,16 +2447,25 @@
 }
 
 // parameter_declaration
+//      : attributes attributed_declaration
+//
+// attributed_declaration
 //      : fully_specified_type post_decls [ = default_parameter_declaration ]
 //      | fully_specified_type identifier array_specifier post_decls [ = default_parameter_declaration ]
 //
 bool HlslGrammar::acceptParameterDeclaration(TFunction& function)
 {
+    // attributes
+    TAttributeMap attributes;
+    acceptAttributes(attributes);
+
     // fully_specified_type
     TType* type = new TType;
     if (! acceptFullySpecifiedType(*type))
         return false;
 
+    parseContext.transferTypeAttributes(attributes, *type);
+
     // identifier
     HlslToken idToken;
     acceptIdentifier(idToken);
@@ -2780,7 +2865,7 @@
                 parseContext.handleFunctionArgument(constructorFunction, arguments, node);
                 node = parseContext.handleFunctionCall(loc, constructorFunction, arguments);
 
-                return true;
+                return node != nullptr;
             } else {
                 // This could be a parenthesized constructor, ala (int(3)), and we just accepted
                 // the '(int' part.  We must back up twice.
@@ -2990,7 +3075,7 @@
         // hook it up
         node = parseContext.handleFunctionCall(arguments->getLoc(), constructorFunction, arguments);
 
-        return true;
+        return node != nullptr;
     }
 
     return false;
@@ -3038,7 +3123,7 @@
     // call
     node = parseContext.handleFunctionCall(loc, function, arguments);
 
-    return true;
+    return node != nullptr;
 }
 
 // arguments
@@ -3256,7 +3341,15 @@
 }
 
 // attributes
-//      : list of zero or more of:  LEFT_BRACKET attribute RIGHT_BRACKET
+//      : [zero or more:] bracketed-attribute
+//
+// bracketed-attribute:
+//      : LEFT_BRACKET scoped-attribute RIGHT_BRACKET
+//      : LEFT_BRACKET LEFT_BRACKET scoped-attribute RIGHT_BRACKET RIGHT_BRACKET
+//
+// scoped-attribute:
+//      : attribute
+//      | namespace COLON COLON attribute
 //
 // attribute:
 //      : UNROLL
@@ -3283,18 +3376,33 @@
     // numthreads, which is used to set the CS local size.
     // TODO: subset to correct set?  Pass on?
     do {
-        HlslToken idToken;
+        HlslToken attributeToken;
 
         // LEFT_BRACKET?
         if (! acceptTokenClass(EHTokLeftBracket))
             return;
+        // another LEFT_BRACKET?
+        bool doubleBrackets = false;
+        if (acceptTokenClass(EHTokLeftBracket))
+            doubleBrackets = true;
 
-        // attribute
-        if (acceptIdentifier(idToken)) {
-            // 'idToken.string' is the attribute
-        } else if (! peekTokenClass(EHTokRightBracket)) {
-            expected("identifier");
-            advanceToken();
+        // attribute? (could be namespace; will adjust later)
+        if (!acceptIdentifier(attributeToken)) {
+            if (!peekTokenClass(EHTokRightBracket)) {
+                expected("namespace or attribute identifier");
+                advanceToken();
+            }
+        }
+
+        TString nameSpace;
+        if (acceptTokenClass(EHTokColonColon)) {
+            // namespace COLON COLON
+            nameSpace = *attributeToken.string;
+            // attribute
+            if (!acceptIdentifier(attributeToken)) {
+                expected("attribute identifier");
+                return;
+            }
         }
 
         TIntermAggregate* expressions = nullptr;
@@ -3327,10 +3435,15 @@
             expected("]");
             return;
         }
+        // another RIGHT_BRACKET?
+        if (doubleBrackets && !acceptTokenClass(EHTokRightBracket)) {
+            expected("]]");
+            return;
+        }
 
         // Add any values we found into the attribute map.  This accepts
         // (and ignores) values not mapping to a known TAttributeType;
-        attributes.setAttribute(idToken.string, expressions);
+        attributes.setAttribute(nameSpace, attributeToken.string, expressions);
     } while (true);
 }
 
diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h
index ded8e96..f0adfa0 100755
--- a/hlsl/hlslGrammar.h
+++ b/hlsl/hlslGrammar.h
@@ -87,11 +87,12 @@
         bool acceptAnnotations(TQualifier&);
         bool acceptSamplerType(TType&);
         bool acceptTextureType(TType&);
+        bool acceptSubpassInputType(TType&);
         bool acceptStructBufferType(TType&);
         bool acceptConstantBufferType(TType&);
         bool acceptStruct(TType&, TIntermNode*& nodeList);
         bool acceptStructDeclarationList(TTypeList*&, TIntermNode*& nodeList, TVector<TFunctionDeclarator>&);
-        bool acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType&, const TString& memberName,
+        bool acceptMemberFunctionDefinition(TIntermNode*& nodeList, const TType&, TString& memberName,
                                             TFunctionDeclarator&);
         bool acceptFunctionParameters(TFunction&);
         bool acceptParameterDeclaration(TFunction&);
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 346a117..01b9cc3 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -58,11 +58,10 @@
                                    const TString sourceEntryPointName,
                                    bool forwardCompatible, EShMessages messages) :
     TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink,
-                      forwardCompatible, messages),
+                      forwardCompatible, messages, &sourceEntryPointName),
     annotationNestingLevel(0),
     inputPatch(nullptr),
     nextInLocation(0), nextOutLocation(0),
-    sourceEntryPointName(sourceEntryPointName),
     entryPointFunction(nullptr),
     entryPointFunctionBody(nullptr),
     gsStreamOutput(nullptr),
@@ -167,11 +166,6 @@
     if (lhsAsAggregate != nullptr && lhsAsAggregate->getOp() == EOpImageLoad)
         return true;
 
-    // If it's a syntactic write to a sampler, we will use that to establish
-    // a compile-time alias.
-    if (node->getAsTyped()->getBasicType() == EbtSampler)
-        return true;
-
     return false;
 }
 
@@ -240,6 +234,13 @@
         }
     }
 
+    // We tolerate samplers as l-values, even though they are nominally
+    // illegal, because we expect a later optimization to eliminate them.
+    if (node->getType().getBasicType() == EbtSampler) {
+        intermediate.setNeedsLegalization();
+        return false;
+    }
+
     // Let the base class check errors
     return TParseContextBase::lValueErrorCheck(loc, op, node);
 }
@@ -275,10 +276,6 @@
 
     // *** If we get here, we're going to apply some conversion to an l-value.
 
-    // Spin off sampler aliasing
-    if (node->getAsTyped()->getBasicType() == EbtSampler)
-        return handleSamplerLvalue(loc, op, node);
-
     // Helper to create a load.
     const auto makeLoad = [&](TIntermSymbol* rhsTmp, TIntermTyped* object, TIntermTyped* coord, const TType& derefType) {
         TIntermAggregate* loadOp = new TIntermAggregate(EOpImageLoad);
@@ -525,58 +522,6 @@
     return node;
 }
 
-// Deal with sampler aliasing: turning assignments into aliases
-// Return a placeholder node for higher-level code that think assignments must
-// generate code.
-TIntermTyped* HlslParseContext::handleSamplerLvalue(const TSourceLoc& loc, const char* op, TIntermTyped*& node)
-{
-    // Can only alias an assignment:  "s1 = s2"
-    TIntermBinary* binary = node->getAsBinaryNode();
-    if (binary == nullptr || node->getAsOperator()->getOp() != EOpAssign ||
-        binary->getLeft()->getAsSymbolNode() == nullptr ||
-        binary->getRight()->getAsSymbolNode() == nullptr) {
-        error(loc, "can't modify sampler", op, "");
-        return node;
-    }
-
-    if (controlFlowNestingLevel > 0)
-        warn(loc, "sampler or image aliased under control flow; consumption must be in same path", op, "");
-
-    TIntermTyped* set = setOpaqueLvalue(binary->getLeft(), binary->getRight());
-    if (set == nullptr)
-        warn(loc, "could not create alias for sampler", op, "");
-    else
-        node = set;
-
-    return node;
-}
-
-// Do an opaque assignment that needs to turn into an alias.
-// Return nullptr if it can't be done, otherwise return a placeholder
-// node for higher-level code that think assignments must generate code.
-TIntermTyped* HlslParseContext::setOpaqueLvalue(TIntermTyped* leftTyped, TIntermTyped* rightTyped)
-{
-    // Best is if we are aliasing a flattened struct member "S.s1 = s2",
-    // in which case we want to update the flattening information with the alias,
-    // making everything else work seamlessly.
-    TIntermSymbol* left = leftTyped->getAsSymbolNode();
-    TIntermSymbol* right = rightTyped->getAsSymbolNode();
-    for (auto fit = flattenMap.begin(); fit != flattenMap.end(); ++fit) {
-        for (auto mit = fit->second.members.begin(); mit != fit->second.members.end(); ++mit) {
-            if ((*mit)->getUniqueId() == left->getId()) {
-                // found it: update with alias to the existing variable, and don't emit any code
-                (*mit) = new TVariable(&right->getName(), right->getType());
-                (*mit)->setUniqueId(right->getId());
-                // replace node (rest of compiler expects either an error or code to generate)
-                // with pointless access
-                return right;
-            }
-        }
-    }
-
-    return nullptr;
-}
-
 void HlslParseContext::handlePragma(const TSourceLoc& loc, const TVector<TString>& tokens)
 {
     if (pragmaCallback)
@@ -860,10 +805,8 @@
 
     bool flattened = false;
     int indexValue = 0;
-    if (index->getQualifier().storage == EvqConst) {
+    if (index->getQualifier().isFrontEndConstant())
         indexValue = index->getAsConstantUnion()->getConstArray()[0].getIConst();
-        checkIndex(loc, base->getType(), indexValue);
-    }
 
     variableCheck(base);
     if (! base->isArray() && ! base->isMatrix() && ! base->isVector()) {
@@ -872,9 +815,11 @@
                   base->getAsSymbolNode()->getName().c_str(), "");
         else
             error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", "");
-    } else if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst)
+    } else if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst) {
+        // both base and index are front-end constants
+        checkIndex(loc, base->getType(), indexValue);
         return intermediate.foldDereference(base, indexValue, loc);
-    else {
+    } else {
         // at least one of base and index is variable...
 
         if (base->getAsSymbolNode() && wasFlattened(base)) {
@@ -884,9 +829,11 @@
             result = flattenAccess(base, indexValue);
             flattened = (result != base);
         } else {
-            if (index->getQualifier().storage == EvqConst) {
+            if (index->getQualifier().isFrontEndConstant()) {
                 if (base->getType().isImplicitlySizedArray())
                     updateImplicitArraySize(loc, base, indexValue);
+                else
+                    checkIndex(loc, base->getType(), indexValue);
                 result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
             } else {
                 result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
@@ -915,11 +862,6 @@
     return result;
 }
 
-void HlslParseContext::checkIndex(const TSourceLoc& /*loc*/, const TType& /*type*/, int& /*index*/)
-{
-    // HLSL todo: any rules for index fixups?
-}
-
 // Handle seeing a binary node with a math operation.
 TIntermTyped* HlslParseContext::handleBinaryMath(const TSourceLoc& loc, const char* str, TOperator op,
                                                  TIntermTyped* left, TIntermTyped* right)
@@ -1204,13 +1146,22 @@
     return type;
 }
 
-// Is this a uniform array or structure which should be flattened?
-bool HlslParseContext::shouldFlatten(const TType& type) const
+// Is this an aggregate that should be flattened?
+// Can be applied to intermediate levels of type in a hierarchy.
+// Some things like flattening uniform arrays are only about the top level
+// of the aggregate, triggered on 'topLevel'.
+bool HlslParseContext::shouldFlatten(const TType& type, TStorageQualifier qualifier, bool topLevel) const
 {
-    const TStorageQualifier qualifier = type.getQualifier().storage;
-
-    return (qualifier == EvqUniform && type.isArray() && intermediate.getFlattenUniformArrays()) ||
-           (type.isStruct() && type.containsOpaque());
+    switch (qualifier) {
+    case EvqVaryingIn:
+    case EvqVaryingOut:
+        return type.isStruct() || type.isArray();
+    case EvqUniform:
+        return (type.isArray() && intermediate.getFlattenUniformArrays() && topLevel) ||
+               (type.isStruct() && type.containsOpaque());
+    default:
+        return type.isStruct() && type.containsOpaque();
+    };
 }
 
 // Top level variable flattening: construct data
@@ -1281,7 +1232,7 @@
                                          const TQualifier& outerQualifier,
                                          const TArraySizes* builtInArraySizes)
 {
-    if (isFinalFlattening(type)) {
+    if (!shouldFlatten(type, outerQualifier.storage, false)) {
         // This is as far as we flatten.  Insert the variable.
         TVariable* memberVariable = makeInternalVariable(memberName, type);
         mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier());
@@ -1405,11 +1356,13 @@
 {
     const TType dereferencedType(base->getType(), member);  // dereferenced type
     const TIntermSymbol& symbolNode = *base->getAsSymbolNode();
-    TIntermTyped* flattened = flattenAccess(symbolNode.getId(), member, dereferencedType, symbolNode.getFlattenSubset());
+    TIntermTyped* flattened = flattenAccess(symbolNode.getId(), member, base->getQualifier().storage,
+                                            dereferencedType, symbolNode.getFlattenSubset());
 
     return flattened ? flattened : base;
 }
-TIntermTyped* HlslParseContext::flattenAccess(int uniqueId, int member, const TType& dereferencedType, int subset)
+TIntermTyped* HlslParseContext::flattenAccess(int uniqueId, int member, TStorageQualifier outerStorage,
+    const TType& dereferencedType, int subset)
 {
     const auto flattenData = flattenMap.find(uniqueId);
 
@@ -1420,7 +1373,7 @@
     int newSubset = flattenData->second.offsets[subset >= 0 ? subset + member : member];
 
     TIntermSymbol* subsetSymbol;
-    if (isFinalFlattening(dereferencedType)) {
+    if (!shouldFlatten(dereferencedType, outerStorage, false)) {
         // Finished flattening: create symbol for variable
         member = flattenData->second.offsets[newSubset];
         const TVariable* memberVariable = flattenData->second.members[member];
@@ -1437,6 +1390,44 @@
     return subsetSymbol;
 }
 
+// For finding where the first leaf is in a subtree of a multi-level aggregate
+// that is just getting a subset assigned. Follows the same logic as flattenAccess,
+// but logically going down the "left-most" tree branch each step of the way.
+//
+// Returns the offset into the first leaf of the subset.
+int HlslParseContext::findSubtreeOffset(const TIntermNode& node) const
+{
+    const TIntermSymbol* sym = node.getAsSymbolNode();
+    if (sym == nullptr)
+        return 0;
+    if (!sym->isArray() && !sym->isStruct())
+        return 0;
+    int subset = sym->getFlattenSubset();
+    if (subset == -1)
+        return 0;
+
+    // Getting this far means a partial aggregate is identified by the flatten subset.
+    // Find the first leaf of the subset.
+
+    const auto flattenData = flattenMap.find(sym->getId());
+    if (flattenData == flattenMap.end())
+        return 0;
+
+    return findSubtreeOffset(sym->getType(), subset, flattenData->second.offsets);
+
+    do {
+        subset = flattenData->second.offsets[subset];
+    } while (true);
+}
+// Recursively do the desent
+int HlslParseContext::findSubtreeOffset(const TType& type, int subset, const TVector<int>& offsets) const
+{
+    if (!type.isArray() && !type.isStruct())
+        return offsets[subset];
+    TType derefType(type, 0);
+    return findSubtreeOffset(derefType, offsets[subset], offsets);
+};
+
 // Find and return the split IO TVariable for id, or nullptr if none.
 TVariable* HlslParseContext::getSplitNonIoVar(int id) const
 {
@@ -1690,7 +1681,7 @@
                 error(loc, "redefinition", variable->getName().c_str(), "");
 
             // Add parameters to the AST list.
-            if (shouldFlatten(variable->getType())) {
+            if (shouldFlatten(variable->getType(), variable->getType().getQualifier().storage, true)) {
                 // Expand the AST parameter nodes (but not the name mangling or symbol table view)
                 // for structures that need to be flattened.
                 flatten(*variable, false);
@@ -1698,7 +1689,8 @@
                 for (int mem = 0; mem < (int)structure->size(); ++mem) {
                     paramNodes = intermediate.growAggregate(paramNodes,
                                                             flattenAccess(variable->getUniqueId(), mem,
-                                                            *(*structure)[mem].type),
+                                                                          variable->getType().getQualifier().storage,
+                                                                          *(*structure)[mem].type),
                                                             loc);
                 }
             } else {
@@ -1724,7 +1716,6 @@
     return paramNodes;
 }
 
-
 // Handle all [attrib] attribute for the shader entry point
 void HlslParseContext::handleEntryPointAttributes(const TSourceLoc& loc, const TAttributeMap& attributes)
 {
@@ -1738,36 +1729,33 @@
     }
 
     // MaxVertexCount
-    const TIntermAggregate* maxVertexCount = attributes[EatMaxVertexCount];
-    if (maxVertexCount != nullptr) {
-        if (! intermediate.setVertices(maxVertexCount->getSequence()[0]->getAsConstantUnion()->
-                                       getConstArray()[0].getIConst())) {
-            error(loc, "cannot change previously set maxvertexcount attribute", "", "");
+    if (attributes.contains(EatMaxVertexCount)) {
+        int maxVertexCount;
+
+        if (! attributes.getInt(EatMaxVertexCount, maxVertexCount)) {
+            error(loc, "invalid maxvertexcount", "", "");
+        } else {
+            if (! intermediate.setVertices(maxVertexCount))
+                error(loc, "cannot change previously set maxvertexcount attribute", "", "");
         }
     }
 
     // Handle [patchconstantfunction("...")]
-    const TIntermAggregate* pcfAttr = attributes[EatPatchConstantFunc]; 
-    if (pcfAttr != nullptr) {
-        const TConstUnion& pcfName = pcfAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
-
-        if (pcfName.getType() != EbtString) {
+    if (attributes.contains(EatPatchConstantFunc)) {
+        TString pcfName;
+        if (! attributes.getString(EatPatchConstantFunc, pcfName, 0, false)) {
             error(loc, "invalid patch constant function", "", "");
         } else {
-            patchConstantFunctionName = *pcfName.getSConst();
+            patchConstantFunctionName = pcfName;
         }
     }
 
     // Handle [domain("...")]
-    const TIntermAggregate* domainAttr = attributes[EatDomain]; 
-    if (domainAttr != nullptr) {
-        const TConstUnion& domainType = domainAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
-        if (domainType.getType() != EbtString) {
+    if (attributes.contains(EatDomain)) {
+        TString domainStr;
+        if (! attributes.getString(EatDomain, domainStr)) {
             error(loc, "invalid domain", "", "");
         } else {
-            TString domainStr = *domainType.getSConst();
-            std::transform(domainStr.begin(), domainStr.end(), domainStr.begin(), ::tolower);
-
             TLayoutGeometry domain = ElgNone;
 
             if (domainStr == "tri") {
@@ -1791,15 +1779,11 @@
     }
 
     // Handle [outputtopology("...")]
-    const TIntermAggregate* topologyAttr = attributes[EatOutputTopology];
-    if (topologyAttr != nullptr) {
-        const TConstUnion& topoType = topologyAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
-        if (topoType.getType() != EbtString) {
+    if (attributes.contains(EatOutputTopology)) {
+        TString topologyStr;
+        if (! attributes.getString(EatOutputTopology, topologyStr)) {
             error(loc, "invalid outputtopology", "", "");
         } else {
-            TString topologyStr = *topoType.getSConst();
-            std::transform(topologyStr.begin(), topologyStr.end(), topologyStr.begin(), ::tolower);
-
             TVertexOrder vertexOrder = EvoNone;
             TLayoutGeometry primitive = ElgNone;
 
@@ -1829,15 +1813,11 @@
     }
 
     // Handle [partitioning("...")]
-    const TIntermAggregate* partitionAttr = attributes[EatPartitioning]; 
-    if (partitionAttr != nullptr) {
-        const TConstUnion& partType = partitionAttr->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
-        if (partType.getType() != EbtString) {
+    if (attributes.contains(EatPartitioning)) {
+        TString partitionStr;
+        if (! attributes.getString(EatPartitioning, partitionStr)) {
             error(loc, "invalid partitioning", "", "");
         } else {
-            TString partitionStr = *partType.getSConst();
-            std::transform(partitionStr.begin(), partitionStr.end(), partitionStr.begin(), ::tolower);
-
             TVertexSpacing partitioning = EvsNone;
                 
             if (partitionStr == "integer") {
@@ -1858,14 +1838,11 @@
     }
 
     // Handle [outputcontrolpoints("...")]
-    const TIntermAggregate* outputControlPoints = attributes[EatOutputControlPoints]; 
-    if (outputControlPoints != nullptr) {
-        const TConstUnion& ctrlPointConst =
-            outputControlPoints->getSequence()[0]->getAsConstantUnion()->getConstArray()[0];
-        if (ctrlPointConst.getType() != EbtInt) {
+    if (attributes.contains(EatOutputControlPoints)) {
+        int ctrlPoints;
+        if (! attributes.getInt(EatOutputControlPoints, ctrlPoints)) {
             error(loc, "invalid outputcontrolpoints", "", "");
         } else {
-            const int ctrlPoints = ctrlPointConst.getIConst();
             if (! intermediate.setVertices(ctrlPoints)) {
                 error(loc, "cannot change previously set outputcontrolpoints attribute", "", "");
             }
@@ -1873,6 +1850,38 @@
     }
 }
 
+// Update the given type with any type-like attribute information in the
+// attributes.
+void HlslParseContext::transferTypeAttributes(const TAttributeMap& attributes, TType& type)
+{
+    // location
+    int value;
+    if (attributes.getInt(EatLocation, value))
+        type.getQualifier().layoutLocation = value;
+
+    // binding
+    if (attributes.getInt(EatBinding, value)) {
+        type.getQualifier().layoutBinding = value;
+        type.getQualifier().layoutSet = 0;
+    }
+
+    // set
+    if (attributes.getInt(EatBinding, value, 1))
+        type.getQualifier().layoutSet = value;
+
+    // global cbuffer binding
+    if (attributes.getInt(EatGlobalBinding, value))
+        globalUniformBinding = value;
+
+    // global cbuffer binding
+    if (attributes.getInt(EatGlobalBinding, value, 1))
+        globalUniformSet = value;
+
+    // input attachment
+    if (attributes.getInt(EatInputAttachment, value))
+        type.getQualifier().layoutAttachment = value;
+}
+
 //
 // Do all special handling for the entry point, including wrapping
 // the shader's entry point with the official entry point that will call it.
@@ -1942,7 +1951,7 @@
             if (variable.getType().getQualifier().isArrayedIo(language)) {
                 if (variable.getType().containsBuiltIn())
                     split(variable);
-            } else
+            } else if (shouldFlatten(variable.getType(), EvqVaryingIn /* not assigned yet, but close enough */, true))
                 flatten(variable, false /* don't track linkage here, it will be tracked in assignToInterface() */);
         }
         // TODO: flatten arrays too
@@ -2000,6 +2009,11 @@
         TParameter& param = userFunction[i];
         argVars.push_back(makeInternalVariable(*param.name, *param.type));
         argVars.back()->getWritableType().getQualifier().makeTemporary();
+
+        // Track the input patch, which is the only non-builtin supported by hull shader PCF.
+        if (param.getDeclaredBuiltIn() == EbvInputPatch)
+            inputPatch = argVars.back();
+
         TIntermSymbol* arg = intermediate.addSymbol(*argVars.back());
         handleFunctionArgument(&callee, callingArgs, arg);
         if (param.type->getQualifier().isParamInput()) {
@@ -2040,7 +2054,10 @@
 
             TIntermTyped* element = intermediate.addIndex(EOpIndexIndirect, intermediate.addSymbol(*entryPointOutput),
                                                           invocationIdSym, loc);
-            element->setType(callReturn->getType());
+
+            // Set the type of the array element being dereferenced
+            const TType derefElementType(entryPointOutput->getType(), 0);
+            element->setType(derefElementType);
 
             returnAssign = handleAssign(loc, EOpAssign, element, callReturn);
         } else {
@@ -2216,9 +2233,6 @@
             synthesizeEditedInput(paramType);
             TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingIn);
             inputs.push_back(argAsGlobal);
-
-            if (function[i].getDeclaredBuiltIn() == EbvInputPatch)
-                inputPatch = argAsGlobal;
         }
         if (paramType.getQualifier().isParamOutput()) {
             TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingOut);
@@ -2512,41 +2526,6 @@
     return assignList;
 }
 
-// For a declaration with an initializer, where the initialized symbol is flattened,
-// and possibly contains opaque values, such that the initializer should never exist
-// as emitted code, because even creating the initializer would write opaques.
-//
-// If possible, decompose this into individual member-wise assignments, which themselves
-// are expected to then not exist for opaque types, because they will turn into aliases.
-//
-// Return a node that contains the non-aliased assignments that must continue to exist.
-TIntermTyped* HlslParseContext::executeFlattenedInitializer(const TSourceLoc& loc, TIntermSymbol* symbol,
-                                                            TIntermAggregate& initializer)
-{
-    // We need individual RHS initializers per member to do this
-    const TTypeList* typeList = symbol->getType().getStruct();
-    if (typeList == nullptr || initializer.getSequence().size() != typeList->size()) {
-        warn(loc, "cannot do member-wise aliasing for opaque members with this initializer", "=", "");
-        return handleAssign(loc, EOpAssign, symbol, &initializer);
-    }
-
-    TIntermAggregate* initList = nullptr;
-    // synthesize an access to each member, and then an assignment to it
-    for (int member = 0; member < (int)typeList->size(); ++member) {
-        TIntermTyped* memberInitializer = initializer.getSequence()[member]->getAsTyped();
-        TIntermTyped* flattenedMember = flattenAccess(symbol, member);
-        if (flattenedMember->getType().containsOpaque())
-            setOpaqueLvalue(flattenedMember, memberInitializer);
-        else
-            initList = intermediate.growAggregate(initList, handleAssign(loc, EOpAssign, flattenedMember,
-                                                  memberInitializer));
-    }
-
-    if (initList)
-        initList->setOperator(EOpSequence);
-    return initList;
-}
-
 // Some simple source assignments need to be flattened to a sequence
 // of AST assignments. Catch these and flatten, otherwise, pass through
 // to intermediate.addAssign().
@@ -2559,17 +2538,32 @@
     if (left == nullptr || right == nullptr)
         return nullptr;
 
+    // writing to opaques will require fixing transforms
+    if (left->getType().containsOpaque())
+        intermediate.setNeedsLegalization();
+
     if (left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle)
         return handleAssignToMatrixSwizzle(loc, op, left, right);
 
-    const bool isSplitLeft    = wasSplit(left);
-    const bool isSplitRight   = wasSplit(right);
+    // Return true if the given node is an index operation into a split variable.
+    const auto indexesSplit = [this](const TIntermTyped* node) -> bool {
+        const TIntermBinary* binaryNode = node->getAsBinaryNode();
+
+        if (binaryNode == nullptr)
+            return false;
+
+        return (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect) && 
+               wasSplit(binaryNode->getLeft());
+    };
+
+    const bool isSplitLeft    = wasSplit(left) || indexesSplit(left);
+    const bool isSplitRight   = wasSplit(right) || indexesSplit(right);
 
     const bool isFlattenLeft  = wasFlattened(left);
     const bool isFlattenRight = wasFlattened(right);
 
-    // OK to do a single assign if both are split, or both are unsplit.  But if one is and the other
-    // isn't, we fall back to a member-wise copy.
+    // OK to do a single assign if neither side is split or flattened.  Otherwise, 
+    // fall through to a member-wise copy.
     if (!isFlattenLeft && !isFlattenRight && !isSplitLeft && !isSplitRight) {
         // Clip and cull distance requires more processing.  See comment above assignClipCullDistance.
         if (isClipOrCullDistance(left->getType()) || isClipOrCullDistance(right->getType())) {
@@ -2631,30 +2625,29 @@
         }
     }
 
-    int memberIdx = 0;
-
     // When dealing with split arrayed structures of built-ins, the arrayness is moved to the extracted built-in
     // variables, which is awkward when copying between split and unsplit structures.  This variable tracks
     // array indirections so they can be percolated from outer structs to inner variables.
     std::vector <int> arrayElement;
 
-    // We track the outer-most aggregate, so that we can use its storage class later.
-    const TIntermTyped* outerLeft  = left;
-    const TIntermTyped* outerRight = right;
+    TStorageQualifier leftStorage = left->getType().getQualifier().storage;
+    TStorageQualifier rightStorage = right->getType().getQualifier().storage;
 
-    const auto getMember = [&](bool isLeft, TIntermTyped* node, int member, TIntermTyped* splitNode, int splitMember)
+    int leftOffset = findSubtreeOffset(*left);
+    int rightOffset = findSubtreeOffset(*right);
+
+    const auto getMember = [&](bool isLeft, const TType& type, int member, TIntermTyped* splitNode, int splitMember,
+                               bool flattened)
                            -> TIntermTyped * {
-        const bool flattened = isLeft ? isFlattenLeft : isFlattenRight;
         const bool split     = isLeft ? isSplitLeft   : isSplitRight;
 
         TIntermTyped* subTree;
-        const TType derefType(node->getType(), member);
+        const TType derefType(type, member);
         const TVariable* builtInVar = nullptr;
         if ((flattened || split) && derefType.isBuiltIn()) {
-            const TIntermTyped* outer = isLeft ? outerLeft : outerRight;
             auto splitPair = splitBuiltIns.find(HlslParseContext::tInterstageIoData(
                                                    derefType.getQualifier().builtIn,
-                                                   outer->getType().getQualifier().storage));
+                                                   isLeft ? leftStorage : rightStorage));
             if (splitPair != splitBuiltIns.end())
                 builtInVar = splitPair->second;
         }
@@ -2670,13 +2663,15 @@
                                                 intermediate.addConstantUnion(arrayElement.back(), loc), loc);
                 subTree->setType(splitDerefType);
             }
-        } else if (flattened && isFinalFlattening(derefType)) {
-            const TVector<TVariable*>& flatVariables = isLeft ? *leftVariables : *rightVariables;
-            subTree = intermediate.addSymbol(*flatVariables[memberIdx++]);
+        } else if (flattened && !shouldFlatten(derefType, isLeft ? leftStorage : rightStorage, false)) {
+            if (isLeft)
+                subTree = intermediate.addSymbol(*(*leftVariables)[leftOffset++]);
+            else
+                subTree = intermediate.addSymbol(*(*rightVariables)[rightOffset++]);
         } else {
             // Index operator if it's an aggregate, else EOpNull
-            const TOperator accessOp = node->getType().isArray()  ? EOpIndexDirect
-                                     : node->getType().isStruct() ? EOpIndexDirectStruct
+            const TOperator accessOp = type.isArray()  ? EOpIndexDirect
+                                     : type.isStruct() ? EOpIndexDirectStruct
                                      : EOpNull;
             if (accessOp == EOpNull) {
                 subTree = splitNode;
@@ -2699,16 +2694,24 @@
 
     // Cannot use auto here, because this is recursive, and auto can't work out the type without seeing the
     // whole thing.  So, we'll resort to an explicit type via std::function.
-    const std::function<void(TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight)>
-    traverse = [&](TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight) -> void {
+    const std::function<void(TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight,
+                             bool topLevel)>
+    traverse = [&](TIntermTyped* left, TIntermTyped* right, TIntermTyped* splitLeft, TIntermTyped* splitRight,
+                   bool topLevel) -> void {
         // If we get here, we are assigning to or from a whole array or struct that must be
         // flattened, so have to do member-by-member assignment:
 
-        if (left->getType().isArray() || right->getType().isArray()) {
+        bool shouldFlattenSubsetLeft = isFlattenLeft && shouldFlatten(left->getType(), leftStorage, topLevel);
+        bool shouldFlattenSubsetRight = isFlattenRight && shouldFlatten(right->getType(), rightStorage, topLevel);
+
+        if ((left->getType().isArray() || right->getType().isArray()) &&
+              (shouldFlattenSubsetLeft  || isSplitLeft ||
+               shouldFlattenSubsetRight || isSplitRight)) {
             const int elementsL = left->getType().isArray()  ? left->getType().getOuterArraySize()  : 1;
             const int elementsR = right->getType().isArray() ? right->getType().getOuterArraySize() : 1;
 
-            // The arrays may not be the same size, e.g, if the size has been forced for EbvTessLevelInner or Outer.
+            // The arrays might not be the same size,
+            // e.g., if the size has been forced for EbvTessLevelInner/Outer.
             const int elementsToCopy = std::min(elementsL, elementsR);
 
             // array case
@@ -2716,19 +2719,24 @@
                 arrayElement.push_back(element);
 
                 // Add a new AST symbol node if we have a temp variable holding a complex RHS.
-                TIntermTyped* subLeft  = getMember(true,  left,  element, left, element);
-                TIntermTyped* subRight = getMember(false, right, element, right, element);
+                TIntermTyped* subLeft  = getMember(true,  left->getType(),  element, left, element,
+                                                   shouldFlattenSubsetLeft);
+                TIntermTyped* subRight = getMember(false, right->getType(), element, right, element,
+                                                   shouldFlattenSubsetRight);
 
-                TIntermTyped* subSplitLeft =  isSplitLeft  ? getMember(true,  left,  element, splitLeft, element)
+                TIntermTyped* subSplitLeft =  isSplitLeft  ? getMember(true,  left->getType(),  element, splitLeft,
+                                                                       element, shouldFlattenSubsetLeft)
                                                            : subLeft;
-                TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right, element, splitRight, element)
+                TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right->getType(), element, splitRight,
+                                                                       element, shouldFlattenSubsetRight)
                                                            : subRight;
 
-                traverse(subLeft, subRight, subSplitLeft, subSplitRight);
+                traverse(subLeft, subRight, subSplitLeft, subSplitRight, false);
 
                 arrayElement.pop_back();
             }
-        } else if (left->getType().isStruct()) {
+        } else if (left->getType().isStruct() && (shouldFlattenSubsetLeft  || isSplitLeft ||
+                                                  shouldFlattenSubsetRight || isSplitRight)) {
             // struct case
             const auto& membersL = *left->getType().getStruct();
             const auto& membersR = *right->getType().getStruct();
@@ -2746,13 +2754,17 @@
                 const TType& typeL = *membersL[member].type;
                 const TType& typeR = *membersR[member].type;
 
-                TIntermTyped* subLeft  = getMember(true,  left, member, left, member);
-                TIntermTyped* subRight = getMember(false, right, member, right, member);
+                TIntermTyped* subLeft  = getMember(true,  left->getType(), member, left, member,
+                                                   shouldFlattenSubsetLeft);
+                TIntermTyped* subRight = getMember(false, right->getType(), member, right, member,
+                                                   shouldFlattenSubsetRight);
 
                 // If there is no splitting, use the same values to avoid inefficiency.
-                TIntermTyped* subSplitLeft =  isSplitLeft  ? getMember(true,  left,  member, splitLeft, memberL)
+                TIntermTyped* subSplitLeft =  isSplitLeft  ? getMember(true,  left->getType(),  member, splitLeft,
+                                                                       memberL, shouldFlattenSubsetLeft)
                                                            : subLeft;
-                TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right, member, splitRight, memberR)
+                TIntermTyped* subSplitRight = isSplitRight ? getMember(false, right->getType(), member, splitRight,
+                                                                       memberR, shouldFlattenSubsetRight)
                                                            : subRight;
 
                 if (isClipOrCullDistance(subSplitLeft->getType()) || isClipOrCullDistance(subSplitRight->getType())) {
@@ -2771,9 +2783,8 @@
 
                     assignList = intermediate.growAggregate(assignList, clipCullAssign, loc);
 
-                } else if (!isFlattenLeft && !isFlattenRight &&
-                           !typeL.containsBuiltIn() &&
-                           !typeR.containsBuiltIn()) {
+                } else if (!shouldFlattenSubsetLeft && !shouldFlattenSubsetRight &&
+                           !typeL.containsBuiltIn() && !typeR.containsBuiltIn()) {
                     // If this is the final flattening (no nested types below to flatten)
                     // we'll copy the member, else recurse into the type hierarchy.
                     // However, if splitting the struct, that means we can copy a whole
@@ -2786,7 +2797,7 @@
                                                             intermediate.addAssign(op, subSplitLeft, subSplitRight, loc),
                                                             loc);
                 } else {
-                    traverse(subLeft, subRight, subSplitLeft, subSplitRight);
+                    traverse(subLeft, subRight, subSplitLeft, subSplitRight, false);
                 }
 
                 memberL += (typeL.isBuiltIn() ? 0 : 1);
@@ -2804,14 +2815,31 @@
 
     // If either left or right was a split structure, we must read or write it, but still have to
     // parallel-recurse through the unsplit structure to identify the built-in IO vars.
-    if (isSplitLeft)
-        splitLeft = intermediate.addSymbol(*getSplitNonIoVar(left->getAsSymbolNode()->getId()), loc);
+    // The left can be either a symbol, or an index into a symbol (e.g, array reference)
+    if (isSplitLeft) {
+        if (indexesSplit(left)) {
+            // Index case: Refer to the indexed symbol, if the left is an index operator.
+            const TIntermSymbol* symNode = left->getAsBinaryNode()->getLeft()->getAsSymbolNode();
+
+            TIntermTyped* splitLeftNonIo = intermediate.addSymbol(*getSplitNonIoVar(symNode->getId()), loc);
+
+            splitLeft = intermediate.addIndex(left->getAsBinaryNode()->getOp(), splitLeftNonIo,
+                                              left->getAsBinaryNode()->getRight(), loc);
+
+            const TType derefType(splitLeftNonIo->getType(), 0);
+            splitLeft->setType(derefType);
+        } else {
+            // Symbol case: otherwise, if not indexed, we have the symbol directly.
+            const TIntermSymbol* symNode = left->getAsSymbolNode();
+            splitLeft = intermediate.addSymbol(*getSplitNonIoVar(symNode->getId()), loc);
+        }
+    }
 
     if (isSplitRight)
         splitRight = intermediate.addSymbol(*getSplitNonIoVar(right->getAsSymbolNode()->getId()), loc);
 
     // This makes the whole assignment, recursing through subtypes as needed.
-    traverse(left, right, splitLeft, splitRight);
+    traverse(left, right, splitLeft, splitRight, true);
 
     assert(assignList != nullptr);
     assignList->setOperator(EOpSequence);
@@ -2915,7 +2943,66 @@
 
     TSampler samplerType = argTex->getType().getSampler();
     samplerType.combined = true;
-    samplerType.shadow   = argSampler->getType().getSampler().shadow;
+
+    // TODO:
+    // This block exists until the spec no longer requires shadow modes on texture objects.
+    // It can be deleted after that, along with the shadowTextureVariant member.
+    {
+        const bool shadowMode = argSampler->getType().getSampler().shadow;
+
+        TIntermSymbol* texSymbol = argTex->getAsSymbolNode();
+
+        if (texSymbol == nullptr)
+            texSymbol = argTex->getAsBinaryNode()->getLeft()->getAsSymbolNode();
+
+        if (texSymbol == nullptr) {
+            error(loc, "unable to find texture symbol", "", "");
+            return nullptr;
+        }
+
+        // This forces the texture's shadow state to be the sampler's
+        // shadow state.  This depends on downstream optimization to
+        // DCE one variant in [shadow, nonshadow] if both are present,
+        // or the SPIR-V module would be invalid.
+        int newId = texSymbol->getId();
+
+        // Check to see if this texture has been given a shadow mode already.
+        // If so, look up the one we already have.
+        const auto textureShadowEntry = textureShadowVariant.find(texSymbol->getId());
+
+        if (textureShadowEntry != textureShadowVariant.end())
+            newId = textureShadowEntry->second->get(shadowMode);
+        else
+            textureShadowVariant[texSymbol->getId()] = new tShadowTextureSymbols;
+
+        // Sometimes we have to create another symbol (if this texture has been seen before,
+        // and we haven't created the form for this shadow mode).
+        if (newId == -1) {
+            TType texType;
+            texType.shallowCopy(argTex->getType());
+            texType.getSampler().shadow = shadowMode;  // set appropriate shadow mode.
+            globalQualifierFix(loc, texType.getQualifier());
+
+            TVariable* newTexture = makeInternalVariable(texSymbol->getName(), texType);
+
+            trackLinkage(*newTexture);
+
+            newId = newTexture->getUniqueId();
+        }
+
+        assert(newId != -1);
+
+        if (textureShadowVariant.find(newId) == textureShadowVariant.end())
+            textureShadowVariant[newId] = textureShadowVariant[texSymbol->getId()];
+
+        textureShadowVariant[newId]->set(shadowMode, newId);
+
+        // Remember this shadow mode in the texture and the merged type.
+        argTex->getWritableType().getSampler().shadow = shadowMode;
+        samplerType.shadow = shadowMode;
+
+        texSymbol->switchId(newId);
+    }
 
     txcombine->setType(TType(samplerType, EvqTemporary));
     txcombine->setLoc(loc);
@@ -4203,6 +4290,25 @@
             break;
         }
 
+    case EOpSubpassLoad:
+        {
+            const TIntermTyped* argSubpass = 
+                argAggregate ? argAggregate->getSequence()[0]->getAsTyped() :
+                arguments->getAsTyped();
+
+            const TSampler& sampler = argSubpass->getType().getSampler();
+
+            // subpass load: the multisample form is overloaded.  Here, we convert that to
+            // the EOpSubpassLoadMS opcode.
+            if (argAggregate != nullptr && argAggregate->getSequence().size() > 1)
+                node->getAsOperator()->setOp(EOpSubpassLoadMS);
+
+            node = convertReturn(node, sampler);
+
+            break;
+        }
+        
+
     default:
         break; // most pass through unchanged
     }
@@ -4432,14 +4538,21 @@
                     std::max(arg0->getType().getMatrixRows(), 1);
 
                 TConstUnion zero;
-                zero.setDConst(0.0);
+                if (arg0->getType().isIntegerDomain())
+                    zero.setDConst(0);
+                else
+                    zero.setDConst(0.0);
                 TConstUnionArray zeros(constComponentCount, zero);
 
                 less->getSequence().push_back(intermediate.addConstantUnion(zeros, arg0->getType(), loc, true));
 
                 compareNode = intermediate.addBuiltInFunctionCall(loc, EOpAny, true, less, TType(EbtBool));
             } else {
-                TIntermTyped* zero = intermediate.addConstantUnion(0, type0, loc, true);
+                TIntermTyped* zero;
+                if (arg0->getType().isIntegerDomain())
+                    zero = intermediate.addConstantUnion(0, loc, true);
+                else
+                    zero = intermediate.addConstantUnion(0.0, type0, loc, true);
                 compareNode = handleBinaryMath(loc, "clip", EOpLessThan, arg0, zero);
             }
 
@@ -4882,8 +4995,10 @@
             // It's a constructor, of type 'type'.
             //
             result = handleConstructor(loc, arguments, type);
-            if (result == nullptr)
+            if (result == nullptr) {
                 error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), "");
+                return nullptr;
+            }
         }
     } else {
         //
@@ -5010,7 +5125,8 @@
                         // add buffer and counter buffer argument qualifier
                         qualifierList.push_back(qual);
                         qualifierList.push_back(qual);
-                    } else if (shouldFlatten(*(*fnCandidate)[i].type)) {
+                    } else if (shouldFlatten(*(*fnCandidate)[i].type, (*fnCandidate)[i].type->getQualifier().storage,
+                                             true)) {
                         // add structure member expansion
                         for (int memb = 0; memb < (int)(*fnCandidate)[i].type->getStruct()->size(); ++memb)
                             qualifierList.push_back(qual);
@@ -5099,7 +5215,7 @@
             if (wasFlattened(arg)) {
                 // If both formal and calling arg are to be flattened, leave that to argument
                 // expansion, not conversion.
-                if (!shouldFlatten(*function[param].type)) {
+                if (!shouldFlatten(*function[param].type, function[param].type->getQualifier().storage, true)) {
                     // Will make a two-level subtree.
                     // The deepest will copy member-by-member to build the structure to pass.
                     // The level above that will be a two-operand EOpComma sequence that follows the copy by the
@@ -5176,7 +5292,7 @@
                                         aggregate->getSequence()[param + functionParamNumberOffset]->getAsTyped() :
                                         arguments->getAsTyped());
 
-        if (wasFlattened(arg) && shouldFlatten(*function[param].type)) {
+        if (wasFlattened(arg) && shouldFlatten(*function[param].type, function[param].type->getQualifier().storage, true)) {
             // Need to pass the structure members instead of the structure.
             TVector<TIntermTyped*> memberArgs;
             for (int memb = 0; memb < (int)arg->getType().getStruct()->size(); ++memb)
@@ -7359,7 +7475,7 @@
 
     inheritGlobalDefaults(type.getQualifier());
 
-    const bool flattenVar = shouldFlatten(type);
+    const bool flattenVar = shouldFlatten(type, type.getQualifier().storage, true);
 
     // correct IO in the type
     switch (type.getQualifier().storage) {
@@ -7408,7 +7524,7 @@
         error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
         return nullptr;
     }
-    return executeInitializer(loc, initializer, variable, flattenVar);
+    return executeInitializer(loc, initializer, variable);
 }
 
 // Pick up global defaults from the provide global defaults into dst.
@@ -7476,8 +7592,7 @@
 // Returning nullptr just means there is no code to execute to handle the
 // initializer, which will, for example, be the case for constant initializers.
 //
-TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyped* initializer, TVariable* variable,
-                                                  bool flattened)
+TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyped* initializer, TVariable* variable)
 {
     //
     // Identifier must be of type constant, a global, or a temporary, and
@@ -7557,20 +7672,10 @@
         // normal assigning of a value to a variable...
         specializationCheck(loc, initializer->getType(), "initializer");
         TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc);
-
-        // If we are flattening, it could be due to setting opaques, which must be handled
-        // as aliases, and the 'initializer' node cannot actually be emitted, because it
-        // itself stores the result of the constructor, and we can't store to opaques.
-        // handleAssign() will emit the initializer.
-        TIntermNode* initNode = nullptr;
-        if (flattened && intermSymbol->getType().containsOpaque())
-            return executeFlattenedInitializer(loc, intermSymbol, *initializer->getAsAggregate());
-        else {
-            initNode = handleAssign(loc, EOpAssign, intermSymbol, initializer);
-            if (initNode == nullptr)
-                assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString());
-            return initNode;
-        }
+        TIntermNode* initNode = handleAssign(loc, EOpAssign, intermSymbol, initializer);
+        if (initNode == nullptr)
+            assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString());
+        return initNode;
     }
 
     return nullptr;
@@ -7648,6 +7753,14 @@
 
         return addConstructor(loc, initList, arrayType);
     } else if (type.isStruct()) {
+        // do we have implicit assignments to opaques?
+        for (size_t i = initList->getSequence().size(); i < type.getStruct()->size(); ++i) {
+            if ((*type.getStruct())[i].type->containsOpaque()) {
+                error(loc, "cannot implicitly initialize opaque members", "initializer list", "");
+                return nullptr;
+            }
+        }
+
         // lengthen list to be long enough
         lengthenList(loc, initList->getSequence(), static_cast<int>(type.getStruct()->size()), scalarInit);
 
@@ -7778,12 +7891,13 @@
 //
 TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermTyped* node, const TType& type)
 {
+    TIntermAggregate* aggrNode = node->getAsAggregate();
     TOperator op = intermediate.mapTypeToConstructorOp(type);
 
     // Combined texture-sampler constructors are completely semantic checked
     // in constructorTextureSamplerError()
     if (op == EOpConstructTextureSampler)
-        return intermediate.setAggregateOperator(node->getAsAggregate(), op, type, loc);
+        return intermediate.setAggregateOperator(aggrNode, op, type, loc);
 
     TTypeList::const_iterator memberTypes;
     if (op == EOpConstructStruct)
@@ -7797,9 +7911,8 @@
         elementType.shallowCopy(type);
 
     bool singleArg;
-    TIntermAggregate* aggrNode = node->getAsAggregate();
     if (aggrNode != nullptr) {
-        if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1)
+        if (aggrNode->getOp() != EOpNull)
             singleArg = true;
         else
             singleArg = false;
@@ -7815,7 +7928,7 @@
             newNode = convertArray(node, type);
 
         // If structure constructor or array constructor is being called
-        // for only one parameter inside the structure, we need to call constructAggregate function once.
+        // for only one parameter inside the aggregate, we need to call constructAggregate function once.
         else if (type.isArray())
             newNode = constructAggregate(node, elementType, 1, node->getLoc());
         else if (op == EOpConstructStruct)
@@ -7839,7 +7952,7 @@
     //
     // Handle list of arguments.
     //
-    TIntermSequence &sequenceVector = aggrNode->getSequence();    // Stores the information about the parameter to the constructor
+    TIntermSequence& sequenceVector = aggrNode->getSequence();    // Stores the information about the parameter to the constructor
     // if the structure constructor contains more than one parameter, then construct
     // each parameter
 
@@ -8230,8 +8343,9 @@
         return;
     }
 
-    // Save it in the AST for linker use.
-    trackLinkage(variable);
+	// Save it in the AST for linker use.
+    if (symbolTable.atGlobalLevel())
+        trackLinkage(variable);
 }
 
 //
@@ -8710,7 +8824,7 @@
 
 // Use the class/struct nesting string to create a global name for
 // a member of a class/struct.
-void HlslParseContext::getFullNamespaceName(const TString*& name) const
+void HlslParseContext::getFullNamespaceName(TString*& name) const
 {
     if (currentTypePrefix.size() == 0)
         return;
@@ -8726,15 +8840,6 @@
     name.append(scopeMangler);
 }
 
-// Potentially rename shader entry point function
-void HlslParseContext::renameShaderFunction(const TString*& name) const
-{
-    // Replace the entry point name given in the shader with the real entry point name,
-    // if there is a substitution.
-    if (name != nullptr && *name == sourceEntryPointName)
-        name = NewPoolTString(intermediate.getEntryPointName().c_str());
-}
-
 // Return true if this has uniform-interface like decorations.
 bool HlslParseContext::hasUniform(const TQualifier& qualifier) const
 {
@@ -8960,6 +9065,12 @@
         return false;
     }
 
+    // TODO: Subpass doesn't handle struct returns, due to some oddities with fn overloading.
+    if (sampler.isSubpass()) {
+        error(loc, "Unimplemented: structure template type in subpass input", "", "");
+        return false;
+    }
+
     TTypeList* members = retType.getWritableStruct();
 
     // Check for too many or not enough structure members.
@@ -9045,19 +9156,12 @@
     return intermediate.addSymbol(*it->second->getAsVariable());
 }
 
-// Finalization step: Add patch constant function invocation
-void HlslParseContext::addPatchConstantInvocation()
+// Find the patch constant function (issues error, returns nullptr if not found)
+const TFunction* HlslParseContext::findPatchConstantFunction(const TSourceLoc& loc)
 {
-    TSourceLoc loc;
-    loc.init();
-
-    // If there's no patch constant function, or we're not a HS, do nothing.
-    if (patchConstantFunctionName.empty() || language != EShLangTessControl)
-        return;
-
     if (symbolTable.isFunctionNameVariable(patchConstantFunctionName)) {
         error(loc, "can't use variable in patch constant function", patchConstantFunctionName.c_str(), "");
-        return;
+        return nullptr;
     }
 
     const TString mangledName = patchConstantFunctionName + "(";
@@ -9071,7 +9175,7 @@
     // allow any disambiguation of overloads.
     if (candidateList.empty()) {
         error(loc, "patch constant function not found", patchConstantFunctionName.c_str(), "");
-        return;
+        return nullptr;
     }
 
     // Based on directed experiments, it appears that if there are overloaded patchconstantfunctions,
@@ -9079,9 +9183,22 @@
     // out if there is more than one candidate.
     if (candidateList.size() > 1) {
         error(loc, "ambiguous patch constant function", patchConstantFunctionName.c_str(), "");
-        return;
+        return nullptr;
     }
 
+    return candidateList[0];
+}
+
+// Finalization step: Add patch constant function invocation
+void HlslParseContext::addPatchConstantInvocation()
+{
+    TSourceLoc loc;
+    loc.init();
+
+    // If there's no patch constant function, or we're not a HS, do nothing.
+    if (patchConstantFunctionName.empty() || language != EShLangTessControl)
+        return;
+
     // Look for built-in variables in a function's parameter list.
     const auto findBuiltIns = [&](const TFunction& function, std::set<tInterstageIoData>& builtIns) {
         for (int p=0; p<function.getParamCount(); ++p) {
@@ -9118,7 +9235,7 @@
         }
     };
 
-    const auto isOutputPatch = [this](TFunction& patchConstantFunction, int param) {
+    const auto isOutputPatch = [](TFunction& patchConstantFunction, int param) {
         const TType& type = *patchConstantFunction[param].type;
         const TBuiltInVariable biType = patchConstantFunction[param].getDeclaredBuiltIn();
 
@@ -9146,7 +9263,13 @@
     // 
     // 5/5B. Call the PCF inside an if test for (invocation id == 0).
 
-    TFunction& patchConstantFunction = const_cast<TFunction&>(*candidateList[0]);
+    TFunction* patchConstantFunctionPtr = const_cast<TFunction*>(findPatchConstantFunction(loc));
+
+    if (patchConstantFunctionPtr == nullptr)
+        return;
+
+    TFunction& patchConstantFunction = *patchConstantFunctionPtr;
+
     const int pcfParamCount = patchConstantFunction.getParamCount();
     TIntermSymbol* invocationIdSym = findTessLinkageSymbol(EbvInvocationId);
     TIntermSequence& epBodySeq = entryPointFunctionBody->getAsAggregate()->getSequence();
@@ -9227,10 +9350,9 @@
 
     // ================ Step 1B: Argument synthesis ================
     // Create pcfArguments for synthesis of patchconstantfunction invocation
-    // TODO: handle struct or array inputs
     {
         for (int p=0; p<pcfParamCount; ++p) {
-            TIntermSymbol* inputArg = nullptr;
+            TIntermTyped* inputArg = nullptr;
 
             if (p == outPatchParam) {
                 if (perCtrlPtVar == nullptr) {
@@ -9244,6 +9366,11 @@
                 // find which built-in it is
                 const TBuiltInVariable biType = patchConstantFunction[p].getDeclaredBuiltIn();
                 
+                if (biType == EbvInputPatch && inputPatch == nullptr) {
+                    error(loc, "unimplemented: PCF input patch without entry point input patch parameter", "", "");
+                    return;
+                }
+
                 inputArg = findTessLinkageSymbol(biType);
 
                 if (inputArg == nullptr) {
@@ -9427,6 +9554,26 @@
     linkageSymbols.erase(endIt, linkageSymbols.end());
 }
 
+// Finalization step: patch texture shadow modes to match samplers they were combined with
+void HlslParseContext::fixTextureShadowModes()
+{
+    for (auto symbol = linkageSymbols.begin(); symbol != linkageSymbols.end(); ++symbol) {
+        TSampler& sampler = (*symbol)->getWritableType().getSampler();
+
+        if (sampler.isTexture()) {
+            const auto shadowMode = textureShadowVariant.find((*symbol)->getUniqueId());
+            if (shadowMode != textureShadowVariant.end()) {
+
+                if (shadowMode->second->overloaded())
+                    // Texture needs legalization if it's been seen with both shadow and non-shadow modes.
+                    intermediate.setNeedsLegalization();
+
+                sampler.shadow = shadowMode->second->isShadowId((*symbol)->getUniqueId());
+            }
+        }
+    }
+}
+
 // post-processing
 void HlslParseContext::finish()
 {
@@ -9438,6 +9585,12 @@
 
     removeUnusedStructBufferCounters();
     addPatchConstantInvocation();
+    fixTextureShadowModes();
+
+    // Communicate out (esp. for command line) that we formed AST that will make
+    // illegal AST SPIR-V and it needs transforms to legalize it.
+    if (intermediate.needsLegalization())
+        infoSink.info << "WARNING: AST will form illegal SPIR-V; need to transform to legalize";
 
     TParseContextBase::finish();
 }
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
index a276d6e..c1752f1 100755
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -73,7 +73,6 @@
     TIntermTyped* handleVariable(const TSourceLoc&, const TString* string);
     TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
     TIntermTyped* handleBracketOperator(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index);
-    void checkIndex(const TSourceLoc&, const TType&, int& index);
 
     TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* handleUnaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* childNode);
@@ -84,12 +83,12 @@
     TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&, const TAttributeMap&, TIntermNode*& entryPointTree);
     TIntermNode* transformEntryPoint(const TSourceLoc&, TFunction&, const TAttributeMap&);
     void handleEntryPointAttributes(const TSourceLoc&, const TAttributeMap&);
+    void transferTypeAttributes(const TAttributeMap&, TType&);
     void handleFunctionBody(const TSourceLoc&, TFunction&, TIntermNode* functionBody, TIntermNode*& node);
     void remapEntryPointIO(TFunction& function, TVariable*& returnValue, TVector<TVariable*>& inputs, TVector<TVariable*>& outputs);
     void remapNonEntryPointIO(TFunction& function);
     TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*);
     void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg);
-    TIntermTyped* executeFlattenedInitializer(const TSourceLoc&, TIntermSymbol*, TIntermAggregate&);
     TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* handleAssignToMatrixSwizzle(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermTyped*);
@@ -182,18 +181,17 @@
 
     void pushNamespace(const TString& name);
     void popNamespace();
-    void getFullNamespaceName(const TString*&) const;
+    void getFullNamespaceName(TString*&) const;
     void addScopeMangler(TString&);
 
     void pushSwitchSequence(TIntermSequence* sequence) { switchSequenceStack.push_back(sequence); }
     void popSwitchSequence() { switchSequenceStack.pop_back(); }
 
-    virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr) override;
+    virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName,
+        TTypeList* typeList = nullptr) override;
 
     // Apply L-value conversions.  E.g, turning a write to a RWTexture into an ImageStore.
     TIntermTyped* handleLvalue(const TSourceLoc&, const char* op, TIntermTyped*& node);
-    TIntermTyped* handleSamplerLvalue(const TSourceLoc&, const char* op, TIntermTyped*& node);
-    TIntermTyped* setOpaqueLvalue(TIntermTyped* left, TIntermTyped* right);
     bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override;
 
     TLayoutFormat getLayoutFromTxType(const TSourceLoc&, const TType&);
@@ -207,9 +205,6 @@
     // Determine loop control from attributes
     TLoopControl handleLoopControl(const TAttributeMap& attributes) const;
 
-    // Potentially rename shader entry point function
-    void renameShaderFunction(const TString*& name) const;
-
     // Share struct buffer deep types
     void shareStructBufferType(TType&);
 
@@ -240,7 +235,7 @@
     TIntermSymbol* makeInternalVariableNode(const TSourceLoc&, const char* name, const TType&) const;
     TVariable* declareNonArray(const TSourceLoc&, const TString& identifier, const TType&, bool track);
     void declareArray(const TSourceLoc&, const TString& identifier, const TType&, TSymbol*&, bool track);
-    TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable, bool flattened);
+    TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer, TIntermTyped* scalarInit);
     bool isScalarConstructor(const TIntermNode*);
     TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage);
@@ -250,13 +245,14 @@
 
     // Array and struct flattening
     TIntermTyped* flattenAccess(TIntermTyped* base, int member);
-    TIntermTyped* flattenAccess(int uniqueId, int member, const TType&, int subset = -1);
-    bool shouldFlatten(const TType&) const;
+    TIntermTyped* flattenAccess(int uniqueId, int member, TStorageQualifier outerStorage, const TType&, int subset = -1);
+    int findSubtreeOffset(const TIntermNode&) const;
+    int findSubtreeOffset(const TType&, int subset, const TVector<int>& offsets) const;
+    bool shouldFlatten(const TType&, TStorageQualifier, bool topLevel) const;
     bool wasFlattened(const TIntermTyped* node) const;
     bool wasFlattened(int id) const { return flattenMap.find(id) != flattenMap.end(); }
     int  addFlattenedMember(const TVariable&, const TType&, TFlattenData&, const TString& name, bool linkage,
                             const TQualifier& outerQualifier, const TArraySizes* builtInArraySizes);
-    bool isFinalFlattening(const TType& type) const { return !(type.isStruct() || type.isArray()); }
 
     // Structure splitting (splits interstage built-in types into its own struct)
     void split(const TVariable&);
@@ -266,6 +262,7 @@
     bool wasSplit(int id) const { return splitNonIoVars.find(id) != splitNonIoVars.end(); }
     TVariable* getSplitNonIoVar(int id) const;
     void addPatchConstantInvocation();
+    void fixTextureShadowModes();
     TIntermTyped* makeIntegerIndex(TIntermTyped*);
 
     void fixBuiltInIoType(TType&);
@@ -319,6 +316,9 @@
     static bool isClipOrCullDistance(const TQualifier& qual) { return isClipOrCullDistance(qual.builtIn); }
     static bool isClipOrCullDistance(const TType& type) { return isClipOrCullDistance(type.getQualifier()); }
 
+    // Find the patch constant function (issues error, returns nullptr if not found)
+    const TFunction* findPatchConstantFunction(const TSourceLoc& loc);
+
     // Pass through to base class after remembering built-in mappings.
     using TParseContextBase::trackLinkage;
     void trackLinkage(TSymbol& variable) override;
@@ -418,12 +418,12 @@
     };
 
     TMap<tInterstageIoData, TVariable*> splitBuiltIns; // split built-ins, indexed by built-in type.
-    TVariable* inputPatch;
+    TVariable* inputPatch; // input patch is special for PCF: it's the only non-builtin PCF input,
+                           // and is handled as a pseudo-builtin.
 
     unsigned int nextInLocation;
     unsigned int nextOutLocation;
 
-    TString    sourceEntryPointName;
     TFunction* entryPointFunction;
     TIntermNode* entryPointFunctionBody;
 
@@ -456,6 +456,30 @@
     };
 
     TVector<tMipsOperatorData> mipsOperatorMipArg;
+
+    // A texture object may be used with shadow and non-shadow samplers, but both may not be
+    // alive post-DCE in the same shader.  We do not know at compilation time which are alive: that's
+    // only known post-DCE.  If a texture is used both ways, we create two textures, and
+    // leave the elimiation of one to the optimizer.  This maps the shader variant to
+    // the shadow variant.
+    //
+    // This can be removed if and when the texture shadow code in
+    // HlslParseContext::handleSamplerTextureCombine is removed.
+    struct tShadowTextureSymbols {
+        tShadowTextureSymbols() { symId.fill(-1); }
+
+        void set(bool shadow, int id) { symId[int(shadow)] = id; }
+        int get(bool shadow) const { return symId[int(shadow)]; }
+
+        // True if this texture has been seen with both shadow and non-shadow modes
+        bool overloaded() const { return symId[0] != -1 && symId[1] != -1; }
+        bool isShadowId(int id) const { return symId[1] == id; }
+
+    private:
+        std::array<int, 2> symId;
+    };
+
+    TMap<int, tShadowTextureSymbols*> textureShadowVariant;
 };
 
 // This is the prefix we use for built-in methods to avoid namespace collisions with
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index db67c39..bae9e6e 100755
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -68,14 +68,21 @@
     }
 }
 
-bool IsSamplerType(const char argType) { return argType == 'S' || argType == 's'; }
-bool IsArrayed(const char argOrder)    { return argOrder == '@' || argOrder == '&' || argOrder == '#'; }
-bool IsTextureMS(const char argOrder)  { return argOrder == '$' || argOrder == '&'; }
-bool IsBuffer(const char argOrder)     { return argOrder == '*' || argOrder == '~'; }
-bool IsImage(const char argOrder)      { return argOrder == '!' || argOrder == '#' || argOrder == '~'; }
+// arg order queries
+bool IsSamplerType(const char argType)     { return argType == 'S' || argType == 's'; }
+bool IsArrayed(const char argOrder)        { return argOrder == '@' || argOrder == '&' || argOrder == '#'; }
+bool IsTextureNonMS(const char argOrder)   { return argOrder == '%'; }
+bool IsSubpassInput(const char argOrder)   { return argOrder == '[' || argOrder == ']'; }
+bool IsArrayedTexture(const char argOrder) { return argOrder == '@'; }
+bool IsTextureMS(const char argOrder)      { return argOrder == '$' || argOrder == '&'; }
+bool IsMS(const char argOrder)             { return IsTextureMS(argOrder) || argOrder == ']'; }
+bool IsBuffer(const char argOrder)         { return argOrder == '*' || argOrder == '~'; }
+bool IsImage(const char argOrder)          { return argOrder == '!' || argOrder == '#' || argOrder == '~'; }
+
 bool IsTextureType(const char argOrder)
 {
-    return argOrder == '%' || argOrder == '@' || IsTextureMS(argOrder) || IsBuffer(argOrder) | IsImage(argOrder);
+    return IsTextureNonMS(argOrder) || IsArrayedTexture(argOrder) ||
+           IsTextureMS(argOrder) || IsBuffer(argOrder) || IsImage(argOrder);
 }
 
 // Reject certain combinations that are illegal sample methods.  For example,
@@ -222,15 +229,16 @@
     const bool isTexture   = IsTextureType(argOrder[0]);
     const bool isArrayed   = IsArrayed(argOrder[0]);
     const bool isSampler   = IsSamplerType(argType[0]);
-    const bool isMS        = IsTextureMS(argOrder[0]);
+    const bool isMS        = IsMS(argOrder[0]);
     const bool isBuffer    = IsBuffer(argOrder[0]);
     const bool isImage     = IsImage(argOrder[0]);
+    const bool isSubpass   = IsSubpassInput(argOrder[0]);
 
     char type  = *argType;
 
     if (isTranspose) {  // Take transpose of matrix dimensions
         std::swap(dim0, dim1);
-    } else if (isTexture) {
+    } else if (isTexture || isSubpass) {
         if (type == 'F')       // map base type to texture of that type.
             type = 'T';        // e.g, int -> itexture, uint -> utexture, etc.
         else if (type == 'I')
@@ -255,16 +263,23 @@
         case 'S': s += "sampler";                             break;
         case 's': s += "SamplerComparisonState";              break;
         case 'T': s += ((isBuffer && isImage) ? "RWBuffer" :
+                        isSubpass ? "SubpassInput" :
                         isBuffer ? "Buffer" :
                         isImage  ? "RWTexture" : "Texture");  break;
         case 'i': s += ((isBuffer && isImage) ? "RWBuffer" :
+                        isSubpass ? "SubpassInput" :
                         isBuffer ? "Buffer" :
                         isImage ? "RWTexture" : "Texture");   break;
         case 'u': s += ((isBuffer && isImage) ? "RWBuffer" :
+                        isSubpass ? "SubpassInput" :
                         isBuffer ? "Buffer" :
                         isImage ? "RWTexture" : "Texture");   break;
         default:  s += "UNKNOWN_TYPE";                        break;
         }
+
+        if (isSubpass && isMS)
+            s += "MS";
+
     } else {
         switch (type) {
         case '-': s += "void"; break;
@@ -282,6 +297,7 @@
                 s += type;
 
             s += ((isImage && isBuffer) ? "imageBuffer"   :
+                  isSubpass             ? "subpassInput" :
                   isImage               ? "image"         :
                   isBuffer              ? "samplerBuffer" :
                   "texture");
@@ -296,6 +312,9 @@
     if (fixedVecSize != 0)
         dim0 = dim1 = fixedVecSize;
 
+    const char dim0Char = ('0' + char(dim0));
+    const char dim1Char = ('0' + char(dim1));
+
     // Add sampler dimensions
     if (isSampler || isTexture) {
         if ((order == 'V' || isTexture) && !isBuffer) {
@@ -320,12 +339,12 @@
         case '-': break;  // no dimensions for voids
         case 'S': break;  // no dimensions on scalars
         case 'V':
-            s += ('0' + char(dim0));
+            s += dim0Char;
             break;
         case 'M':
-            s += ('0' + char(dim0));
+            s += dim0Char;
             s += 'x';
-            s += ('0' + char(dim1));
+            s += dim1Char;
             break;
         default:
             break;
@@ -339,9 +358,9 @@
     // For HLSL, append return type for texture types
     if (UseHlslTypes) {
         switch (type) {
-        case 'i': s += "<int4>";   break;
-        case 'u': s += "<uint4>";  break;
-        case 'T': s += "<float4>"; break;
+        case 'i': s += "<int";   s += dim0Char; s += ">"; break;
+        case 'u': s += "<uint";  s += dim0Char; s += ">"; break;
+        case 'T': s += "<float"; s += dim0Char; s += ">"; break;
         default: break;
         }
     }
@@ -414,7 +433,7 @@
         const char* nthArgOrder(NthArg(argOrder, arg));
         if (nthArgOrder == nullptr)
             break;
-        else if (*nthArgOrder == 'V')
+        else if (*nthArgOrder == 'V' || IsSubpassInput(*nthArgOrder))
             dim0Max = 4;
         else if (*nthArgOrder == 'M')
             dim0Max = dim1Max = 4;
@@ -537,6 +556,7 @@
     // '!' as first letter of order creates image object
     // '#' as first letter of order creates arrayed image object
     // '~' as first letter of order creates an image buffer object
+    // '[' / ']' as first letter of order creates a SubpassInput/SubpassInputMS object
 
     static const struct {
         const char*   name;      // intrinsic name
@@ -547,8 +567,8 @@
         unsigned int  stage;     // stage mask
         bool          method;    // true if it's a method.
     } hlslIntrinsics[] = {
-        // name                               retOrd   retType    argOrder          argType   stage mask
-        // -----------------------------------------------------------------------------------------------
+        // name                               retOrd   retType    argOrder          argType          stage mask     method
+        // ----------------------------------------------------------------------------------------------------------------
         { "abort",                            nullptr, nullptr,   "-",              "-",             EShLangAll,    false },
         { "abs",                              nullptr, nullptr,   "SVM",            "DFUI",          EShLangAll,    false },
         { "acos",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
@@ -567,7 +587,7 @@
         { "ceil",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
         { "CheckAccessFullyMapped",           "S",     "B" ,      "S",              "U",             EShLangPSCS,   false },
         { "clamp",                            nullptr, nullptr,   "SVM,,",          "FUI,,",         EShLangAll,    false },
-        { "clip",                             "-",     "-",       "SVM",            "F",             EShLangPS,     false },
+        { "clip",                             "-",     "-",       "SVM",            "FUI",           EShLangPS,     false },
         { "cos",                              nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
         { "cosh",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
         { "countbits",                        nullptr, nullptr,   "SV",             "UI",            EShLangAll,    false },
@@ -882,6 +902,10 @@
         { "DecrementCounter",                 nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
         { "Consume",                          nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
 
+        // Methods for subpass input objects
+        { "SubpassLoad",                      "V4",    nullptr,   "[",              "FIU",            EShLangPS,    true },
+        { "SubpassLoad",                      "V4",    nullptr,   "],S",            "FIU,I",          EShLangPS,    true },
+
         // Mark end of list, since we want to avoid a range-based for, as some compilers don't handle it yet.
         { nullptr,                            nullptr, nullptr,   nullptr,      nullptr,  0, false },
     };
@@ -1219,6 +1243,10 @@
     // GS methods
     symbolTable.relateToOperator(BUILTIN_PREFIX "Append",                      EOpMethodAppend);
     symbolTable.relateToOperator(BUILTIN_PREFIX "RestartStrip",                EOpMethodRestartStrip);
+
+    // Subpass input methods
+    symbolTable.relateToOperator(BUILTIN_PREFIX "SubpassLoad",                 EOpSubpassLoad);
+    symbolTable.relateToOperator(BUILTIN_PREFIX "SubpassLoadMS",               EOpSubpassLoadMS);
 }
 
 //
diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp
index 392efeb..c16fdfa 100755
--- a/hlsl/hlslScanContext.cpp
+++ b/hlsl/hlslScanContext.cpp
@@ -336,6 +336,8 @@
     (*KeywordMap)["RWTexture2DArray"] =        EHTokRWTexture2darray;
     (*KeywordMap)["RWTexture3D"] =             EHTokRWTexture3d;
     (*KeywordMap)["RWBuffer"] =                EHTokRWBuffer;
+    (*KeywordMap)["SubpassInput"] =            EHTokSubpassInput;
+    (*KeywordMap)["SubpassInputMS"] =          EHTokSubpassInputMS;
 
     (*KeywordMap)["AppendStructuredBuffer"] =  EHTokAppendStructuredBuffer;
     (*KeywordMap)["ByteAddressBuffer"] =       EHTokByteAddressBuffer;
@@ -827,6 +829,8 @@
     case EHTokRWByteAddressBuffer:
     case EHTokRWStructuredBuffer:
     case EHTokStructuredBuffer:
+    case EHTokSubpassInput:
+    case EHTokSubpassInputMS:
         return keyword;
 
     // variable, user type, ...
diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h
index 15de63a..1c827bf 100755
--- a/hlsl/hlslTokens.h
+++ b/hlsl/hlslTokens.h
@@ -273,6 +273,8 @@
     EHTokRWTexture2darray,
     EHTokRWTexture3d,
     EHTokRWBuffer,
+    EHTokSubpassInput,
+    EHTokSubpassInputMS,
 
     // Structure buffer variants
     EHTokAppendStructuredBuffer,
diff --git a/known_good.json b/known_good.json
new file mode 100644
index 0000000..87cc63d
--- /dev/null
+++ b/known_good.json
@@ -0,0 +1,18 @@
+{
+  "commits" : [
+    {
+      "name" : "spirv-tools",
+      "site" : "github",
+      "subrepo" : "KhronosGroup/SPIRV-Tools",
+      "subdir" : "External/spirv-tools",
+      "commit" : "5834719fc17d4735fce0102738b87b70255cfd5f"
+    },
+    {
+      "name" : "spirv-tools/external/spirv-headers",
+      "site" : "github",
+      "subrepo" : "KhronosGroup/SPIRV-Headers",
+      "subdir" : "External/spirv-tools/external/spirv-headers",
+      "commit" : "061097878467b8e040fbf153a837d844ef9f9f96"
+    }
+  ]
+}
diff --git a/update_glslang_sources.py b/update_glslang_sources.py
new file mode 100755
index 0000000..b2988f9
--- /dev/null
+++ b/update_glslang_sources.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python
+
+# Copyright 2017 The Glslang Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Get source files for Glslang and its dependencies from public repositories.
+"""
+
+from __future__ import print_function
+
+import argparse
+import json
+import distutils.dir_util
+import os.path
+import subprocess
+import sys
+
+KNOWN_GOOD_FILE = 'known_good.json'
+
+# Maps a site name to its hostname.
+SITE_TO_HOST = { 'github' : 'github.com' }
+
+VERBOSE = True
+
+
+def command_output(cmd, directory, fail_ok=False):
+    """Runs a command in a directory and returns its standard output stream.
+
+    Captures the standard error stream.
+
+    Raises a RuntimeError if the command fails to launch or otherwise fails.
+    """
+    if VERBOSE:
+        print('In {d}: {cmd}'.format(d=directory, cmd=cmd))
+    p = subprocess.Popen(cmd,
+                         cwd=directory,
+                         stdout=subprocess.PIPE)
+    (stdout, _) = p.communicate()
+    if p.returncode != 0 and not fail_ok:
+        raise RuntimeError('Failed to run {} in {}'.format(cmd, directory))
+    if VERBOSE:
+        print(stdout)
+    return stdout
+
+
+def command_retval(cmd, directory):
+    """Runs a command in a directory and returns its return value.
+
+    Captures the standard error stream.
+    """
+    p = subprocess.Popen(cmd,
+                         cwd=directory,
+                         stdout=subprocess.PIPE)
+    (stdout, _) = p.communicate()
+    return p.returncode
+
+
+class GoodCommit(object):
+    """Represents a good commit for a repository."""
+
+    def __init__(self, json):
+        """Initializes this good commit object.
+
+        Args:
+        'json':  A fully populated JSON object describing the commit.
+        """
+        self._json = json
+        self.name = json['name']
+        self.site = json['site']
+        self.subrepo = json['subrepo']
+        self.subdir = json['subdir'] if ('subdir' in json) else '.'
+        self.commit = json['commit']
+
+    def GetUrl(self, style='https'):
+        """Returns the URL for the repository."""
+        host = SITE_TO_HOST[self.site]
+        sep = '/' if (style is 'https') else ':'
+        return '{style}://{host}{sep}{subrepo}'.format(
+                    style=style,
+                    host=host,
+                    sep=sep,
+                    subrepo=self.subrepo)
+
+    def AddRemote(self):
+        """Add the remote 'known-good' if it does not exist."""
+        print('Ignore "fatal" errors for missing known-good remote:')
+        if command_retval(['git', 'remote', 'show', 'known-good'], self.subdir) != 0:
+            command_output(['git', 'remote', 'add', 'known-good', self.GetUrl()], self.subdir)
+
+    def HasCommit(self):
+        """Check if the repository contains the known-good commit."""
+        return 0 == subprocess.call(['git', 'rev-parse', '--verify', '--quiet',
+                                     self.commit + "^{commit}"],
+                                    cwd=self.subdir)
+
+    def Clone(self):
+        distutils.dir_util.mkpath(self.subdir)
+        command_output(['git', 'clone', self.GetUrl(), '.'], self.subdir)
+
+    def Fetch(self):
+        command_output(['git', 'fetch', 'known-good'], self.subdir)
+
+    def Checkout(self):
+        if not os.path.exists(os.path.join(self.subdir,'.git')):
+            self.Clone()
+        self.AddRemote()
+        if not self.HasCommit():
+            self.Fetch()
+        command_output(['git', 'checkout', self.commit], self.subdir)
+
+
+def GetGoodCommits():
+    """Returns the latest list of GoodCommit objects."""
+    with open(KNOWN_GOOD_FILE) as known_good:
+        return [GoodCommit(c) for c in json.loads(known_good.read())['commits']]
+
+
+def main():
+    parser = argparse.ArgumentParser(description='Get Glslang source dependencies at a known-good commit')
+    parser.add_argument('--dir', dest='dir', default='.',
+                        help="Set target directory for Glslang source root. Default is \'.\'.")
+
+    args = parser.parse_args()
+
+    commits = GetGoodCommits()
+
+    distutils.dir_util.mkpath(args.dir)
+    print('Change directory to {d}'.format(d=args.dir))
+    os.chdir(args.dir)
+
+    # Create the subdirectories in sorted order so that parent git repositories
+    # are created first.
+    for c in sorted(commits, cmp=lambda x,y: cmp(x.subdir, y.subdir)):
+        print('Get {n}\n'.format(n=c.name))
+        c.Checkout()
+    sys.exit(0)
+
+
+if __name__ == '__main__':
+    main()